Repository: GetStream/Winds Branch: master Commit: 23c0e6d44cf5 Files: 445 Total size: 7.5 MB Directory structure: gitextract_ss1x8z9z/ ├── .eslintrc.js ├── .gitattributes ├── .github/ │ ├── ISSUE_TEMPLATE.md │ ├── PULL_REQUEST_TEMPLATE.md │ └── stale.yml ├── .gitignore ├── .prettierrc ├── .travis.yml ├── Dockerfile ├── LICENSE ├── README.md ├── RSS.md ├── STYLE.md ├── api/ │ ├── Dockerfile │ ├── build.sh │ ├── config.yaml │ ├── docker-compose.yml │ ├── ecosystem.dev.config.js │ ├── now.json │ ├── package.json │ ├── scripts/ │ │ ├── docker-build.sh │ │ ├── docker-compose-aws.sh │ │ ├── docker-compose.sh │ │ └── make-build.sh │ ├── setup-tests.js │ ├── src/ │ │ ├── .babelrc │ │ ├── .prettierignore │ │ ├── asyncTasks.js │ │ ├── commands/ │ │ │ ├── _debug-feed.js │ │ │ ├── cleanup-follows.js │ │ │ ├── denormalize-follows.js │ │ │ ├── denormalize-pins.js │ │ │ ├── email.js │ │ │ ├── load-featured-feeds.js │ │ │ ├── rescrape-favicon.js │ │ │ ├── rescrape-og.js │ │ │ ├── reset-parsing-state.js │ │ │ ├── resync-follows.js │ │ │ ├── winds-article.js │ │ │ ├── winds-discover.js │ │ │ ├── winds-merge.js │ │ │ ├── winds-og.js │ │ │ ├── winds-podcast.js │ │ │ ├── winds-rebuild-search.js │ │ │ ├── winds-rehash.js │ │ │ ├── winds-rss.js │ │ │ ├── winds-truncate-rss-feed.js │ │ │ └── winds.js │ │ ├── config/ │ │ │ ├── dev.js │ │ │ ├── index.js │ │ │ ├── prod.js │ │ │ └── test.js │ │ ├── controllers/ │ │ │ ├── alias.js │ │ │ ├── article.js │ │ │ ├── auth.js │ │ │ ├── default.js │ │ │ ├── email.js │ │ │ ├── episode.js │ │ │ ├── featured.js │ │ │ ├── feed.js │ │ │ ├── folder.js │ │ │ ├── follow.js │ │ │ ├── health.js │ │ │ ├── listen.js │ │ │ ├── note.js │ │ │ ├── opml.js │ │ │ ├── pin.js │ │ │ ├── playlist.js │ │ │ ├── podcast.js │ │ │ ├── rss.js │ │ │ ├── tag.js │ │ │ └── user.js │ │ ├── fixtures/ │ │ │ └── featured.json │ │ ├── loadenv.js │ │ ├── models/ │ │ │ ├── alias.js │ │ │ ├── article.js │ │ │ ├── content.js │ │ │ ├── enclosure.js │ │ │ ├── episode.js │ │ │ ├── folder.js │ │ │ ├── follow.js │ │ │ ├── listen.js │ │ │ ├── note.js │ │ │ ├── pin.js │ │ │ ├── playlist.js │ │ │ ├── podcast.js │ │ │ ├── rss.js │ │ │ ├── tag.js │ │ │ └── user.js │ │ ├── parsers/ │ │ │ ├── content.js │ │ │ ├── detect-language.js │ │ │ ├── detect-type.js │ │ │ ├── discovery.js │ │ │ ├── feed.js │ │ │ └── og.js │ │ ├── routes/ │ │ │ ├── alias.js │ │ │ ├── article.js │ │ │ ├── auth.js │ │ │ ├── email.js │ │ │ ├── episode.js │ │ │ ├── featured.js │ │ │ ├── folder.js │ │ │ ├── follow.js │ │ │ ├── health.js │ │ │ ├── index.js │ │ │ ├── listen.js │ │ │ ├── note.js │ │ │ ├── opml.js │ │ │ ├── pin.js │ │ │ ├── playlist.js │ │ │ ├── podcast.js │ │ │ ├── rss.js │ │ │ ├── tag.js │ │ │ └── user.js │ │ ├── server.js │ │ ├── utils/ │ │ │ ├── analytics.js │ │ │ ├── basicAuth.js │ │ │ ├── blockedURLs.js │ │ │ ├── collections.js │ │ │ ├── controllers.js │ │ │ ├── db/ │ │ │ │ └── index.js │ │ │ ├── email/ │ │ │ │ ├── context.js │ │ │ │ ├── send.js │ │ │ │ └── templates/ │ │ │ │ ├── daily.ejs │ │ │ │ ├── followee.ejs │ │ │ │ ├── password.ejs │ │ │ │ ├── weekly.ejs │ │ │ │ └── welcome.ejs │ │ │ ├── errors.js │ │ │ ├── logger/ │ │ │ │ ├── index.js │ │ │ │ └── sentry.js │ │ │ ├── merge.js │ │ │ ├── personalization/ │ │ │ │ └── index.js │ │ │ ├── queue.js │ │ │ ├── random.js │ │ │ ├── rate-limiter.js │ │ │ ├── sanitize.js │ │ │ ├── search/ │ │ │ │ └── index.js │ │ │ ├── social.js │ │ │ ├── statsd.js │ │ │ ├── stream.js │ │ │ ├── upsert.js │ │ │ ├── urls.js │ │ │ ├── validation.js │ │ │ └── watchdog.js │ │ └── workers/ │ │ ├── conductor.js │ │ ├── og.js │ │ ├── podcast.js │ │ ├── rss.js │ │ ├── social.js │ │ ├── stream.js │ │ ├── winds-hackernews.js │ │ └── winds-queue-state-monitor.js │ ├── test/ │ │ ├── controllers/ │ │ │ ├── alias.js │ │ │ ├── article.js │ │ │ ├── auth.js │ │ │ ├── episode.js │ │ │ ├── featured.js │ │ │ ├── feed.js │ │ │ ├── folder.js │ │ │ ├── follow.js │ │ │ ├── health.js │ │ │ ├── listen.js │ │ │ ├── note.js │ │ │ ├── opml.js │ │ │ ├── pin.js │ │ │ ├── playlist.js │ │ │ ├── podcast.js │ │ │ ├── rss.js │ │ │ ├── tag.js │ │ │ └── user.js │ │ ├── data/ │ │ │ ├── 404.opml │ │ │ ├── discovery/ │ │ │ │ ├── case.html │ │ │ │ ├── fail.xml │ │ │ │ ├── index.html │ │ │ │ ├── nofavicon.html │ │ │ │ ├── nourl.xml │ │ │ │ └── rss.xml │ │ │ ├── feed/ │ │ │ │ ├── 90.cx │ │ │ │ ├── a16z │ │ │ │ ├── api.prprpr.me │ │ │ │ ├── apublica.org │ │ │ │ ├── audiworld.com │ │ │ │ ├── boingboing │ │ │ │ ├── bookshadow.com │ │ │ │ ├── dingxiaoyun555.blog.163.com │ │ │ │ ├── django │ │ │ │ ├── douban.com │ │ │ │ ├── empty │ │ │ │ ├── geektopia.es │ │ │ │ ├── habr │ │ │ │ ├── hackernews │ │ │ │ ├── hackernoon-daily-dev │ │ │ │ ├── kaiak.tw │ │ │ │ ├── kottke │ │ │ │ ├── lemonde │ │ │ │ ├── lobsters │ │ │ │ ├── lowendbox.com │ │ │ │ ├── malformed-hackernews │ │ │ │ ├── maxwell-land-surveying.com │ │ │ │ ├── medium-technology │ │ │ │ ├── perezhilton │ │ │ │ ├── reddit-r-programming │ │ │ │ ├── rss.cnki.net │ │ │ │ ├── ruby-on-rails │ │ │ │ ├── seattle.craigslist.org │ │ │ │ ├── shanzhuoboshi.com │ │ │ │ ├── sospc.name │ │ │ │ ├── straitstimes.com │ │ │ │ ├── strava │ │ │ │ ├── stream │ │ │ │ ├── techcrunch │ │ │ │ ├── tejiendoelmundo.wordpress.com │ │ │ │ ├── thewildeternal.com │ │ │ │ ├── tmz │ │ │ │ ├── torrentedigital.com │ │ │ │ ├── totoyao.wordpress.com │ │ │ │ ├── treehugger-latest │ │ │ │ ├── ttt.tt │ │ │ │ ├── xda-developers.com │ │ │ │ └── zhukun.net │ │ │ ├── not-a-url.opml │ │ │ ├── og/ │ │ │ │ ├── bildblog.html │ │ │ │ ├── google.html │ │ │ │ ├── kotaku.html │ │ │ │ ├── techcrunch.html │ │ │ │ ├── techcrunch_broken.html │ │ │ │ └── techcrunch_instagram.html │ │ │ ├── podcast-feed/ │ │ │ │ ├── a16z │ │ │ │ ├── atlantamonster │ │ │ │ ├── buffering-the-vampire-slayer │ │ │ │ ├── design-details │ │ │ │ ├── giant-bombcast │ │ │ │ ├── making-obama │ │ │ │ ├── nancy │ │ │ │ ├── serial │ │ │ │ ├── still-processing │ │ │ │ └── thehabitat │ │ │ └── test.xml │ │ ├── fixtures/ │ │ │ ├── aliases.json │ │ │ ├── articles.json │ │ │ ├── featured.json │ │ │ ├── folders.json │ │ │ ├── follows.json │ │ │ ├── initial-data.json │ │ │ ├── liked-shares.json │ │ │ ├── listens.json │ │ │ ├── merge-data.json │ │ │ ├── notes.json │ │ │ ├── opml.json │ │ │ ├── pins.json │ │ │ ├── playlists.json │ │ │ ├── tags.json │ │ │ ├── unstable-guid.json │ │ │ ├── user.json │ │ │ └── user_model.json │ │ ├── models/ │ │ │ └── user.js │ │ ├── parsers/ │ │ │ ├── content.js │ │ │ ├── discovery.js │ │ │ ├── feed.js │ │ │ ├── language.js │ │ │ └── og.js │ │ ├── server.js │ │ ├── utilities/ │ │ │ ├── collections.js │ │ │ ├── email.js │ │ │ ├── merge.js │ │ │ ├── random.js │ │ │ ├── rate-limiter.js │ │ │ ├── social.js │ │ │ ├── upsert.js │ │ │ ├── url.js │ │ │ └── validation.js │ │ ├── utils.js │ │ └── workers/ │ │ ├── conductor.js │ │ ├── og.js │ │ ├── podcast.js │ │ ├── rss.js │ │ ├── social.js │ │ └── stream.js │ └── test-entry.js ├── app/ │ ├── electron-builder.yaml │ ├── package.json │ ├── public/ │ │ ├── actions.js │ │ ├── electron.js │ │ ├── entitlements.mac.plist │ │ ├── entitlements.mas.plist │ │ ├── favicons/ │ │ │ └── icon.icns │ │ ├── index.html │ │ ├── info.plist │ │ ├── manifest.json │ │ └── preload.js │ ├── src/ │ │ ├── App.js │ │ ├── AppRouter.js │ │ ├── AuthedRoute.js │ │ ├── UnauthedRoute.js │ │ ├── api/ │ │ │ ├── folderAPI.js │ │ │ ├── index.js │ │ │ ├── noteAPI.js │ │ │ └── tagAPI.js │ │ ├── components/ │ │ │ ├── AddOPMLModal.js │ │ │ ├── AddPodcastModal.js │ │ │ ├── AddRSSModal.js │ │ │ ├── AliasModal.js │ │ │ ├── AllArticlesList.js │ │ │ ├── AllEpisodesList.js │ │ │ ├── ArticleListItem.js │ │ │ ├── Avatar/ │ │ │ │ └── index.js │ │ │ ├── BookmarkPanel.js │ │ │ ├── Drawer.js │ │ │ ├── EpisodeListItem.js │ │ │ ├── FeaturedItems.js │ │ │ ├── FeedHeader.js │ │ │ ├── FeedListItem.js │ │ │ ├── Folder/ │ │ │ │ ├── DeleteModal.js │ │ │ │ ├── FeedToFolderModal.js │ │ │ │ ├── Folder.js │ │ │ │ ├── FolderFeeds.js │ │ │ │ ├── FolderPanel.js │ │ │ │ ├── FolderPopover.js │ │ │ │ ├── IntroFolders.js │ │ │ │ ├── NewFolderModal.js │ │ │ │ ├── RenameModal.js │ │ │ │ └── SearchFeed.js │ │ │ ├── Header.js │ │ │ ├── HtmlRender.js │ │ │ ├── Loader.js │ │ │ ├── MediaCard.js │ │ │ ├── Notes/ │ │ │ │ ├── HighlightMenu.js │ │ │ │ ├── NoteInput.js │ │ │ │ └── RecentNotesPanel.js │ │ │ ├── Panel.js │ │ │ ├── Player.js │ │ │ ├── PodcastEpisode.js │ │ │ ├── PodcastEpisodesView.js │ │ │ ├── PodcastPanels/ │ │ │ │ ├── PodcastList.js │ │ │ │ ├── RecentEpisodesPanel.js │ │ │ │ ├── SuggestedPodcasts.js │ │ │ │ └── index.js │ │ │ ├── RSSArticle.js │ │ │ ├── RSSArticleList.js │ │ │ ├── RSSPanels/ │ │ │ │ ├── RecentArticlesPanel.js │ │ │ │ ├── RssFeedList.js │ │ │ │ ├── SuggestedFeeds.js │ │ │ │ └── index.js │ │ │ ├── SearchBar.js │ │ │ ├── SimpleProgressBar.js │ │ │ ├── Tabs.js │ │ │ ├── Tag/ │ │ │ │ ├── DeleteModal.js │ │ │ │ ├── RenameModal.js │ │ │ │ ├── Tag.js │ │ │ │ ├── TagFeeds.js │ │ │ │ ├── TagPanel.js │ │ │ │ └── TagView.js │ │ │ ├── TimeAgo/ │ │ │ │ └── index.js │ │ │ └── UserProfileSettingsDrawer.js │ │ ├── config.js │ │ ├── index.js │ │ ├── reducers.js │ │ ├── serviceWorker.js │ │ ├── static-data/ │ │ │ └── onboarding-topics.js │ │ ├── styles/ │ │ │ ├── base/ │ │ │ │ ├── _colors.scss │ │ │ │ ├── _normalize.scss │ │ │ │ ├── _typography.scss │ │ │ │ └── _vars.scss │ │ │ ├── components/ │ │ │ │ ├── _click-catcher.scss │ │ │ │ ├── _columns.scss │ │ │ │ ├── _comment-input-box.scss │ │ │ │ ├── _comment-section.scss │ │ │ │ ├── _content.scss │ │ │ │ ├── _episode-info-popover.scss │ │ │ │ ├── _feed-header.scss │ │ │ │ ├── _feed-list-item.scss │ │ │ │ ├── _follow-popover.scss │ │ │ │ ├── _github.scss │ │ │ │ ├── _hero-card.scss │ │ │ │ ├── _item-info.scss │ │ │ │ ├── _list.scss │ │ │ │ ├── _loader.scss │ │ │ │ ├── _media-card.scss │ │ │ │ ├── _panel-element.scss │ │ │ │ ├── _playlist-card.scss │ │ │ │ ├── _popover-panel.scss │ │ │ │ ├── _shows-grid.scss │ │ │ │ ├── _simple-progress-bar.scss │ │ │ │ └── _tiny-list.scss │ │ │ ├── elements/ │ │ │ │ ├── _buttons.scss │ │ │ │ ├── _drawer.scss │ │ │ │ ├── _forms.scss │ │ │ │ ├── _modals.scss │ │ │ │ ├── _popovers.scss │ │ │ │ └── _tabs.scss │ │ │ ├── framework/ │ │ │ │ ├── _app.scss │ │ │ │ ├── _player.scss │ │ │ │ ├── auth-views/ │ │ │ │ │ ├── _create.scss │ │ │ │ │ ├── _forgot-password.scss │ │ │ │ │ ├── _login.scss │ │ │ │ │ ├── _reset-password.scss │ │ │ │ │ └── _shared.scss │ │ │ │ └── dashboard/ │ │ │ │ └── _header.scss │ │ │ ├── global.scss │ │ │ ├── modules/ │ │ │ │ ├── _activity-feed.scss │ │ │ │ ├── _add-content.scss │ │ │ │ ├── _download.scss │ │ │ │ ├── _featured-items-section.scss │ │ │ │ ├── _follow-suggestions.scss │ │ │ │ ├── _my-playlists.scss │ │ │ │ ├── _notification-feed.scss │ │ │ │ ├── _podcast-suggestions.scss │ │ │ │ ├── _reshare-modal.scss │ │ │ │ ├── _rss-panels.scss │ │ │ │ ├── _search-results.scss │ │ │ │ ├── _share.scss │ │ │ │ ├── _social-icons.scss │ │ │ │ └── _user-settings-drawer.scss │ │ │ └── views/ │ │ │ ├── _404.scss │ │ │ ├── _admin.scss │ │ │ ├── _dashboard.scss │ │ │ ├── _folder.scss │ │ │ ├── _grid.scss │ │ │ ├── _note.scss │ │ │ ├── _onboarding.scss │ │ │ ├── _playlist.scss │ │ │ ├── _podcast.scss │ │ │ ├── _profile.scss │ │ │ └── _rss.scss │ │ ├── util/ │ │ │ ├── feeds.js │ │ │ ├── fetch/ │ │ │ │ └── index.js │ │ │ ├── getFeedActivities.js │ │ │ ├── getPlaceholderImageURL.js │ │ │ ├── pins.js │ │ │ └── social.js │ │ └── views/ │ │ ├── 404View.js │ │ ├── AdminView.js │ │ ├── Dashboard.js │ │ ├── FoldersView.js │ │ ├── PodcastsView.js │ │ ├── RSSFeedsView.js │ │ └── auth-views/ │ │ ├── Create.js │ │ ├── ForgotPassword.js │ │ ├── Login.js │ │ ├── ResetPassword.js │ │ └── index.js │ └── stylelint.config.js ├── process_dev.json └── scripts/ └── docker-cleanup.sh ================================================ FILE CONTENTS ================================================ ================================================ FILE: .eslintrc.js ================================================ module.exports = { env: { 'browser': true, 'es6': true, 'node': true, 'shared-node-browser': true, 'mocha': true, }, extends: ['eslint:recommended', 'plugin:react/recommended'], parser: 'babel-eslint', parserOptions: { ecmaFeatures: { experimentalObjectRestSpread: true, jsx: true, }, sourceType: 'module', }, plugins: ['react'], rules: { 'indent': ['error', 'tab'], 'linebreak-style': ['error', 'unix'], 'jsx-quotes': ['error', 'prefer-double'], 'quotes': ['error', 'single'], 'semi': ['error', 'always'], 'comma-dangle': ['error', 'always-multiline'], 'no-case-declarations': 'off', 'react/jsx-sort-props': 'error', 'eqeqeq': 'warn', 'quote-props': ['warn', 'consistent-as-needed'], 'react/no-deprecated': 'off', 'no-console': 0, 'keyword-spacing': ['error'] }, }; ================================================ FILE: .gitattributes ================================================ * linguist-vendored *.js linguist-vendored=false ================================================ FILE: .github/ISSUE_TEMPLATE.md ================================================ ### Prerequisites * [ ] Put an X between the brackets on this line if you have done all of the following: * Checked that your issue isn't already filed: https://github.com/GetStream/Winds/issues ### Description [Description of the issue] ### Steps to Reproduce 1. [First Step] 2. [Second Step] 3. [and so on...] **Expected behavior:** [What you expect to happen] **Actual behavior:** [What actually happens] **Reproduces how often:** [What percentage of the time does it reproduce?] ### Versions You can get this information from the manu. Winds > About Winds. ### Additional Information Any additional information, configuration or data that might be necessary to reproduce the issue. ================================================ FILE: .github/PULL_REQUEST_TEMPLATE.md ================================================ ### Requirements * Filling out the template is required. Any pull request that does not include enough information to be reviewed in a timely manner may be closed at the maintainers' discretion. * All new code requires tests to ensure against regressions ### Description of the Change ### Alternate Designs ### Why Should This Be in Core? ### Benefits ### Possible Drawbacks ### Applicable Issues ================================================ FILE: .github/stale.yml ================================================ # Number of days of inactivity before an issue becomes stale daysUntilStale: 30 # Number of days of inactivity before a stale issue is closed daysUntilClose: 7 # Issues with these labels will never be considered stale exemptLabels: - pinned - security # Label to use when marking an issue as stale staleLabel: wontfix # Comment to post when marking an issue as stale. Set to `false` to disable markComment: > This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. # Comment to post when closing a stale issue. Set to `false` to disable closeComment: true ================================================ FILE: .gitignore ================================================ # Logs logs *.log npm-debug.log* yarn-debug.log* yarn-error.log* # Runtime data pids *.pid *.seed *.pid.lock # Directory for instrumented libs generated by jscoverage/JSCover lib-cov # Coverage directory used by tools like istanbul coverage # Coverage report for codecov coverage.lcov .pyc __pycache__/ # nyc test coverage .nyc_output # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) .grunt # Bower dependency directory (https://bower.io/) bower_components # node-waf configuration .lock-wscript # Compiled binary addons (http://nodejs.org/api/addons.html) build/Release # Dependency directories node_modules/ jspm_packages/ # Typescript v1 declaration files typings/ # Optional npm cache directory .npm # Optional eslint cache .eslintcache # Optional REPL history .node_repl_history # Output of 'npm pack' *.tgz # Yarn Integrity file .yarn-integrity # dotenv environment variables file .env .env.* # System .DS_Store # Electron Build #app-update.yml #dev-app-update.yml # Sass support src/**/*.css app/src/styles/global.css # API & Worker Production Builds api/dist workers/dist # App Production Builds app/dist app/build app/assets/private-key.p12 # Fabric fabfile.py fabfile.pyc # Redis dump.rdb # local mongo mongo-db # Deployment Configurations deploy.sh process_prod.json embedded.provisionprofile sign.js *.p12 app/latest.html #IDE .vscode ================================================ FILE: .prettierrc ================================================ { "useTabs": true, "printWidth": 90, "tabWidth": 4, "singleQuote": true, "trailingComma": "all", "jsxBracketSameLine": false, "parser": "babel", "semi": true, "arrowParens": "always" } ================================================ FILE: .travis.yml ================================================ dist: xenial language: node_js node_js: - "14" services: - redis - mongodb cache: yarn install: - "cd api && yarn install" script: - "yarn run test" after_success: - "yarn run coverage" ================================================ FILE: Dockerfile ================================================ # Use the latest version of Node FROM mhart/alpine-node:latest # Update dependency cache RUN apk update && apk upgrade # install dependencies RUN apk add --no-cache make gcc g++ python git # Install PM2 globally RUN yarn global add pm2 # Create app directory WORKDIR /usr/src/winds # Copy app source code COPY . . # Expose port 8080 EXPOSE 8080 # Run process via pm2 CMD ["pm2-runtime", "start", "process_prod.json"] ================================================ FILE: LICENSE ================================================ Copyright 2018 Stream.io Inc All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the author nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ================================================ FILE: README.md ================================================ > 🛑 **Notice**: This repository is no longer maintained; No further Issues or Pull Requests will be considered or approved. # Winds - A Beautiful Open Source RSS & Podcast App Powered by GetStream.io [![Slack Community](https://img.shields.io/badge/Slack%20Community-Get%20Invite-green.svg)](https://communityinviter.com/apps/winds-community-hq/winds-2-0) [![Build Status](https://travis-ci.org/GetStream/Winds.svg?branch=master)](https://travis-ci.org/GetStream/Winds) [![codecov](https://codecov.io/gh/GetStream/Winds/branch/master/graph/badge.svg)](https://codecov.io/gh/GetStream/Winds) [![Open Source](https://img.shields.io/badge/Open%20Source-100%25-green.svg)](https://shields.io/) [![Maintenance](https://img.shields.io/badge/Maintained%3F-Yes-green.svg)](https://github.com/GetStream/winds/graphs/commit-activity) [![Built With](https://img.shields.io/badge/Built%20With-❤️%20in%20Boulder,%20CO-green.svg)](httpds://shields.io/) [![StackShare](https://img.shields.io/badge/Tech-Stack-0690fa.svg?style=flat)](https://stackshare.io/stream/winds) ## Description Winds is a beautiful open-source RSS and Podcast app created using React & Redux on the frontend and Express.js on the backend. Use the free hosted version or run it on your own server and customize it as you see fit. Contributions in form of pull requests are always appreciated. Activity Feeds & Discovery in Winds are powered by [Stream](https://getstream.io/get_started/), the app leverages [Algolia](https://algolia.com?ref=stream) for search, [AWS](https://aws.amazon.com/) for hosting, [MongoDB Atlas](http://mbsy.co/mongodb/228644) for a hosted database (DBaaS), and [SendGrid](https://sendgrid.com/) for email. All of these services have a free tier. ## Getting Started To get started with Winds, please download [the latest release](https://s3.amazonaws.com/winds-2.0-releases/latest.html) ## Featured RSS & Podcasts Have a popular RSS or Podcast and want to be featured? Reach out to winds@getstream.io. We reply to every message. # Features at a Glance Winds is packed full of awesome features behind a beautiful user interface and user experience. Here's a quick look at what the project has to offer: ## Beautiful UI ![Winds UI](https://i.imgur.com/W1fpowV.png) ## RSS & Podcast Recommendations ![Winds RSS & Podcast Recommendations](https://i.imgur.com/AlVgDTg.png) ## Integrated Search ![Winds Search](https://i.imgur.com/zaWtNfV.png) ## Podcast Player ![Winds Podcast Player](https://i.imgur.com/th247rA.png) ## RSS Reader ![Winds RSS Reader](https://i.imgur.com/D3wt7W3.png) ## TOCd * [Roadmap](#roadmap) * [Powered By](#powered-by) * [Stream](#stream) * [Algolia](#algolia) * [MongoDB](#mongodb) * [SendGrid](https://sendgrid.com) * [AWS](https://aws.amazon.com/) * [Tutorials](#tutorials) * [Download](#download) * [Contributing to Winds](#contributing-to-winds) * [Support](#support) * [Maintenance & Contributions](#maintenance-and-contributions) ## Roadmap Help us improve Winds and/or vote on the [Roadmap for 2.1](https://github.com/GetStream/Winds/issues/191) * [ ] Search detail screen * [ ] Playlist support (partially implemented) * [ ] Team support (share an activity feed with colleagues or friends to discover and collaborate) * [ ] Mobile application powered by React Native ## Powered By 1. [Express](https://expressjs.com?ref=winds) 2. [React](https://reactjs.org?ref=winds) & [Redux](https://redux.js.org?ref=winds) 3. [Algolia](https://www.algolia.com?ref=winds) 4. [MongoDB Atlas](http://mbsy.co/mongodb/228644) 5. [SendGrid](https://sendgrid.com?ref=winds) 6. [Bull](https://github.com/OptimalBits/bull?ref=winds) 7. [Mercury](https://mercury.postlight.com?ref=winds) 8. [Stream](https://getstream.io?ref=winds) 9. [Sentry](https://sentry.io/?ref=winds) 10. [AWS](https://aws.amazon.com/?ref=winds) **The full stack can be found on [StackShare.io](https://stackshare.io/stream/winds).** ### Stream [Stream](https://getstream.io/?ref=winds) is an API for building activity feeds. For Winds the follow suggestions and the list of articles from the feeds you follow is powered by Stream. Stream accounts are free for up to 3 million feed updates and handle personalization (machine learning) for up to 100 users. ### Algolia [Algolia](https://algolia.com?ref=winds) is used for lightning fast and relevant search. We use their [JavaScript search client](https://www.npmjs.com/package/algoliasearch?ref=winds) to easily setup the Winds search implementation. Algolia, accounts are free up to 10k records and 100k operations. ### MongoDB [MongoDB Atlas](http://mbsy.co/mongodb/228644) provides a Database as a Service, and serves as the backend datastore for Winds. ## Tutorials & Blog Posts The following tutorials will not only help you start contributing to Winds, but also provide inspiration for your next app. **Note:** We're actively working on this portion of the README. To stay up to date with the latest information, please signup for the hosted version at [https://getstream.io/winds](https://getstream.io/winds). 1. [Implementing search with Algolia](https://hackernoon.com/integrating-algolia-search-in-winds-a-beautiful-rss-podcast-application-f231e49cdab5) 2. [Stream and Winds](https://getstream.io/blog/the-engine-that-powers-winds/) 3. [Running PM2 & Node.js in Production Environments](https://hackernoon.com/running-pm2-node-js-in-production-environments-13e703fc108a) 4. [Creating a RESTful API design with Express.js](https://hackernoon.com/building-a-node-js-powered-api-with-express-mongoose-mongodb-19b14fd4b51e) 5. [Takeaways on Building a React Based App with Electron](https://medium.com/@nparsons08/publishing-a-react-based-app-with-electron-and-nodejs-f5ec44169366) 6. [The Winds Stack](https://stackshare.io/stream/how-stream-built-a-modern-rss-reader-with-javascript) 7. [Building Touch Bar Support for macOS in Electron with React](https://hackernoon.com/winds-2-1-building-touch-bar-support-for-macos-in-electron-with-react-e10adb811c91) 8. [Testing Node.js in 2018](https://hackernoon.com/testing-node-js-in-2018-10a04dd77391) 9. [Simple Steps to Optimize Your App Performance with MongoDB, Redis, and Node.js](https://hackernoon.com/simple-steps-to-optimize-your-app-performance-5700d8b58f58) 10. [Getting Started with Winds & Open Source](https://hackernoon.com/winds-an-in-depth-tutorial-on-making-your-first-contribution-to-open-source-software-ebf259f21db2) 11. [Deploying the Winds App to Amazon S3 and CloudFront](https://getstream.io/blog/deploying-the-winds-app-to-amazon-s3-and-cloudfront/) 12. [Deploying the Winds API to AWS ECS with Docker Compose](https://getstream.io/blog/deploying-the-winds-api-to-aws-ecs-with-docker-compose/) ## Download To download Winds, visit [https://getstream.io/winds/](https://getstream.io/winds/). ## Contributing to Winds ### TL;DR Commands: * `brew install redis mongodb` * `brew services start mongodb` * `brew services start redis` * `cd Winds` * `cd api && yarn` * `cd ../app && yarn` Sign up for both Stream and Algolia, and create the following `.env` file in the `app` directory, replacing the keys where indicated: ``` DATABASE_URI=mongodb://localhost/WINDS_DEV CACHE_URI=redis://localhost:6379 JWT_SECRET=YOUR_JWT_SECRET API_PORT=8080 REACT_APP_API_ENDPOINT=http://localhost:8080 STREAM_API_BASE_URL=https://windspersonalization.getstream.io/personalization/v1.0 STREAM_APP_ID=YOUR_STREAM_APP_ID REACT_APP_STREAM_APP_ID=YOUR_STREAM_APP_ID REACT_APP_STREAM_API_KEY=YOUR_STREAM_API_KEY REACT_APP_STREAM_ANALYTICS=YOUR_STREAM_ANALYTICS_TOKEN STREAM_API_KEY=YOUR_STREAM_API_KEY STREAM_API_SECRET=YOUR_STREAM_API_SECRET REACT_APP_ALGOLIA_APP_ID=YOUR_ALGOLIA_APP_ID REACT_APP_ALGOLIA_SEARCH_KEY=YOUR_ALGOLIA_SEARCH_ONLY_API_KEY ALGOLIA_WRITE_KEY=YOUR_ALGOLIA_ADMIN_API_KEY ``` > Note: If you are running the test suite, you will need to have a test version of the `.env` file inside of the `api/test` directory. Then run: * `pm2 start process_dev.json` * `cd app && yarn start` ### Clone the Repo ```bash git clone git@github.com:GetStream/Winds.git ``` ### Install dependencies The following instructions are geared towards Mac users who can use `brew` ([Homebrew](https://brew.sh/)) to install most dependencies. Ubuntu users can use `apt`, and Windows users will have to install directly from the dependency's site. Non-debian-based Linux users will probably be able to figure it out on their own :) * `cd Winds/app` * `yarn` * `cd ../api` * `yarn` ### Start MongoDB Locally Winds uses MongoDB as the main datastore - it contains all users, rss feeds, podcasts, episodes, articles, and shares. If you're on a Mac, you can install MongoDB through [Homebrew](https://brew.sh/) by running: ``` brew install mongodb ``` _(You can also install MongoDB from the [official MongoDB site](https://www.mongodb.com/download-center).)_ You can also run MongoDB in the background by running: ``` brew services start mongodb ``` ### Start Redis Locally At Stream, we use Redis as an in-memory storage for the Winds podcast processing and RSS processing workers. It contains a list of podcasts and RSS feeds, which the workers pick up and process using the `bull` messaging system. If you're on a Mac, you can install Redis through [Homebrew](https://brew.sh/) by running: ``` brew install redis ``` _(You can also install Redis from the [official Redis site](https://redis.io/download).)_ Then, start Redis by running: ``` redis-server ``` ...which creates (by default) a `dump.rdb` file in your current directory and stores a cached version of the database in that location. You can also run Redis in the background by running: ``` brew services start redis ``` ### Loading Test Data For testing purposes, you will want to use the test data located [here](https://s3.amazonaws.com/winds-hosted/static/export/WINDS.zip). Use [`mongoimport`](https://docs.mongodb.com/manual/reference/program/mongoimport/) or [`mongorestore`](https://docs.mongodb.com/manual/reference/program/mongorestore/) to import the data. There are two username and password combinations for testing: **Username**: `admin@admin.com`
**Password**: `admin`

**Username**: `test@test.com`
**Password**: `test` You will need to run the `FLUSHALL` command in Redis to ensure that the new content is picked up. > Note: This will override any local data that you may have. Please be cautious! Also, this will not create Stream follows – please follow feeds manually to generate them. ### Stream #### Sign up and Create a Stream App To contribute to Winds, sign up for [Stream](https://getstream.io/get_started?ref=winds) to utilize the activity and timeline feeds. _(Reminder: Stream is free for applications with less than 3,000,000 updates per month.)_ * [Sign up for Stream here](https://getstream.io/get_started?ref=winds) * Create a new Stream app * Find the App ID, API Key, and API Secret for your new Stream app #### Add your Stream App ID, API Key, and API Secret to your `.env` Append the Stream App ID, API Key, and API secret to your `.env` file: ``` STREAM_APP_ID=YOUR_STREAM_APP_ID STREAM_API_KEY=YOUR_STREAM_API_KEY STREAM_API_SECRET=YOUR_STREAM_API_SECRET ``` #### Create Your Stream Feed Groups Once you've signed in, create "feed groups" for your Stream app. A "feed group" defines a certain type of feed within your application. Use the "Add Feed Group" button to create the following feeds: | Feed Group Name | Feed Group Type | | --------------- | --------------- | | `podcast` | flat | | `rss` | flat | | `user` | flat | | `timeline` | flat | | `folder` | flat | | `user_episode` | flat | | `user_article` | flat | It's fine to enable "Realtime Notifications" for each of these feed groups, though we won't be using those yet. ### Algolia #### Sign up for Algolia and Create an Algolia App and Index In addition to Stream, you also need to sign up for [Algolia](https://www.algolia.com/users/sign_up?ref=winds), to contribute to Winds, for the search functionality. _(Algolia is free for applications with up to 10k records.)_ * [Sign up for Algolia here](https://www.algolia.com/users/sign_up?ref=winds) * From the [Applications page](https://www.algolia.com/manage/applications), click "New Application" and create a new Algolia application. (We recommend something similar to `my-winds-app`) * (Select the datacenter that's closest to you.) * From the application page, select "Indices" and click "Add New Index". (We recommend something similar to `winds-main-index`) #### Add Your Algolia Application Id, Search-Only Api Key and Admin Api Key to Your `.env` File From your app, click the "API Keys" button on the left to find your app ID and API keys. Append your Algolia application ID, search-only API Key and Admin API Key to your `.env` file to look like this: ``` REACT_APP_ALGOLIA_APP_ID=YOUR_ALGOLIA_APP_ID REACT_APP_ALGOLIA_SEARCH_KEY=YOUR_ALGOLIA_SEARCH_ONLY_API_KEY ALGOLIA_WRITE_KEY=YOUR_ALGOLIA_ADMIN_API_KEY ``` ### Start Backend Services From the root directory, run: ``` pm2 start process_dev.json ``` To see logging information for all processes, run: ``` pm2 logs ``` ### Start Frontend Electron / Web App Server ``` cd app && yarn start ``` ### Running tests Winds API server uses: * [Mocha](https://mochajs.org) as testing framework * [Chai](https://chaijs.org) as assertion library * [Sinon](https://sinonjs.org) as mocking library * [nock](https://github.com/node-nock/nock) as HTTP mocking library * [mock-require](https://github.com/boblauer/mock-require) as module mocking library Tests are located in [`api/test` folder](https://github.com/GetStream/Winds/tree/master/api/test). File structure is intentionally mirroring files in `api/src` to simplify matching tests to tested code. To run tests: ``` cd api && yarn run test ``` To run tests with extended stack traces (useful when debugging async issues): ``` cd api && yarn run test_deep ``` #### Adding new tests Add your code to a file in `api/test` folder (preferably mirroring existing file from `api/src` folder). Refer to [Mocha documentation](https://mochajs.org/#getting-started) for examples of using BDD-like DSL for writing tests. Modules are mocked in [`api/test-entry.js`](https://github.com/GetStream/Winds/blob/master/api/test-entry.js#L21L27) as mocks have to be installed before any modules are loaded. Fixtures are loaded via [`loadFixture`](https://github.com/GetStream/Winds/blob/master/api/test/utils.js#L59L101) function from [`api/test/fixtures` folder](https://github.com/GetStream/Winds/tree/master/api/test/fixtures) Various utility functions are provided in [`api/test/util.js`](https://github.com/GetStream/Winds/blob/master/api/test/utils.js) (See other tests for examples of usage). ### Building a Production Version Build a production version of Winds by running from root directory: ``` ./api/build.sh ``` This creates production-ready JS files in api/dist. To run the production JS files: ``` pm2 start process_prod.json ``` OR **Prepare the build for Docker**: `cd api && cd scripts && ./make-build.sh` **Build the Docker container (API & all workers)**: `cd ../ && docker-compose up` The commands above will prepare and start the API (and all workers). The frontend will still need to be started manually. ## Debugging RSS & Podcast Issues Unfortunately there is no unified standard for RSS. Go to the `api` directory and run `yarn link` to make these commands available: ``` winds rss https://techcrunch.com/feed/ ``` **Podcasts**: ``` winds podcast https://www.npr.org/rss/podcast.php\?id\=510289 ``` **Open Graph scraping**: ``` winds og http://www.planetary.org/multimedia/planetary-radio/show/2018/0509-amy-mainzer-neowise.html ``` **RSS Discovery**: ``` winds discover mashable.com ``` **Article parsing (w/ Mercury)**: ``` winds article https://alexiskold.net/2018/04/12/meet-12-startups-from-techstars-nyc-winter-2018-program/ ``` Pull requests for improved RSS compatibility are much appreciated. Most of the parsing codebase is located in `api/src/parsers/`. ## Support All support is handled via [GitHub Issues](https://github.com/getstream/winds/issues). If you're unfamiliar with creating an Issue on GitHub, please follow [these instructions](https://help.github.com/articles/creating-an-issue/). ## Maintenance and Contributions Thank you to all of the maintainers and contributors who've helped Winds become what it is today and help it stay up and running every day. We couldn't do it without you! ### Special Shoutouts To: * [Hackernoon](https://hackernoon.com/) * [Product Hunt](https://www.producthunt.com/) * [StackShare](https://stackshare.io/stream/how-stream-built-a-modern-rss-reader-with-javascript) ### Primary Maintainers * [Nick Parsons](https://github.com/nparsons08) * [Amin Mahboubi](https://github.com/mahboubii) * [Thierry Schellenbach](https://github.com/tschellenbach) * [Josh Tilton](https://github.com/tilton) ### Contributors * [Tommaso Barbugli](https://github.com/tbarbugli) * [Ken Hoff](https://github.com/kenhoff) * [Dwight Gunning](https://github.com/dwightgunning) * [Matt Gauger](https://github.com/mathias) * [Max Klyga](https://github.com/nekuromento) * [Zhomart Mukhamejanov](https://github.com/Zhomart) * [Julian Xhokaxhiu](https://github.com/julianxhokaxhiu) * [Jonathon Belotti](https://github.com/thundergolfer) * [The Gitter Badger](https://github.com/gitter-badger) * [Meriadec Pillet](https://github.com/meriadec) * [Alex Sinnott](https://github.com/sifex) * [Lawal Sauban](https://github.com/sauban) ## Revive RSS RSS is an amazing open standard. It is probably the most pleasant way to stay up to date with the sites and podcasts you care about. Our reasons for contributing to Winds are explained in the blogpost [Winds 2.0 It's time to Revive RSS](https://getstream.io/blog/winds-2-0-its-time-to-revive-rss/). In this section we will list other open source and commercial projects that are having an impact on Reviving RSS: * [Miniflux](https://github.com/miniflux/miniflux) * [TwitRSSMe](https://twitrss.me/) * [Feedly](https://feedly.com/) * [NewsBlur](https://newsblur.com/) * [Feedity](https://feedity.com/) * [SaveRSS](https://mg.guelker.eu/saverss/) ## We are hiring! We've recently closed a [$38 million Series B funding round](https://techcrunch.com/2021/03/04/stream-raises-38m-as-its-chat-and-activity-feed-apis-power-communications-for-1b-users/) and we keep actively growing. Our APIs are used by more than a billion end-users, and you'll have a chance to make a huge impact on the product within a team of the strongest engineers all over the world. Check out our current openings and apply via [Stream's website](https://getstream.io/team/#jobs). ================================================ FILE: RSS.md ================================================ ## Post Uniqueness ## Post uniqueness in an RSS feed can be determined by 4 different methods: - The guid property on the post (not always present) - The link property on the post (not always present and sometimes uses the site url) - The url of the first enclosure (common amongst podcasts) - A hash of the title, link, description and enclosures Note that the guid shouldn't change. The link, url and hash can change when the post is updated though. So using the first approach is preferable. While not available in the RSS feed you could also consider the - Canonical URL on the page ## RSS feed Uniqueness ## Determining the uniqueness for an RSS feed is harder. There are a few different options - A normalized version of the feed url - The feed url specified in the RSS doc Neither of those approaches work as most RSS feeds are available under many different urls. - A hash based on the last 10 article hashes ## Discovery ## The standard discovery library picks up the link rel tag in the html. Many sites have dropped support for this tag though. We could add special cases for - YouTube - Wordpress blogs As it's easy to determine the feed location ## How Winds handles uniqueness ## For every feed Winds will evaluate which one of these fields are unique: ['guid', 'link', 'enclosure[0].url', 'hash'] Note that the hash is computed before any enrichment is done on the feed content. After that it stores the unique value in `article.fingerprint` in the format `guid:123` or `hash:123` etc. After selecting the best algorithm it will use a batch select and update to update the feed articles. The uniqueness of the last 20 articles is used to compute a hash for the RSS feed. We use this information to occasionally merge RSS feeds. After merging the alternative URLs are stored to prevent people from submitting the same feed under a different url. ================================================ FILE: STYLE.md ================================================ The style rules for Winds are defined in: * .prettierrc * .eslintrc To cleanup your code run `yarn prettier` in the api directory If you're using atom be sure to install prettier-atom and make sure it finds our prettierrc config file ================================================ FILE: api/Dockerfile ================================================ # Use the latest version of Node FROM mhart/alpine-node:latest # Update dependency cache RUN apk update && apk upgrade # install dependencies RUN apk add --no-cache make gcc g++ python git # Install PM2 globally RUN yarn global add pm2 # Create app directory WORKDIR /usr/src/api # Copy package.json for build COPY package.json ./ # Copy app source code COPY . . # Expose port 8080 EXPOSE 8080 # Run process via pm2 CMD ["pm2-runtime", "start", "process_prod.json"] ================================================ FILE: api/build.sh ================================================ #!/bin/bash cd api # Remove the existing build directory and create a fresh one rm -rf dist && mkdir -p dist/{utils,email/templates} # Transpile ES6 to JavaScript npx babel src --out-dir dist --ignore node_modules # Copy build files to fresh /dist directory cp package.json dist/package.json # Copy email files to fresh /dist directory cp -R src/utils/email/templates dist/utils/email # Install node modules via yarn cd dist && yarn install --production --modules-folder node_modules ================================================ FILE: api/config.yaml ================================================ apiVersion: v1 kind: Service metadata: name: api annotations: cloud.google.com/load-balancer-type: "Internal" labels: app: api spec: type: LoadBalancer ports: - port: 443 protocol: TCP selector: api: api ================================================ FILE: api/docker-compose.yml ================================================ version: '3.7' services: api: build: context: . dockerfile: Dockerfile volumes: - '/opt/data:/opt/data' ports: - '8080:8080' depends_on: - cache - database links: - cache - database networks: - backend logging: driver: json-file options: max-size: 100MB max-file: '3' environment: NODE_ENV: production DOCKER: 'true' PRODUCT_URL: 'https://getstream.io/winds' PRODUCT_NAME: Winds PRODUCT_AUTHOR: Stream DATABASE_URI: 'mongodb://database/WINDS' CACHE_URI: 'redis://cache:6379' JWT_SECRET: INSERT_JWT_SECRET_HERE API_PORT: 8080 STREAM_API_BASE_URL: 'https://windspersonalization.getstream.io/personalization/v1.0' STREAM_APP_ID: INSERT_STREAM_API_ID_HERE STREAM_API_KEY: INSERT_STREAM_API_KEY_HERE STREAM_API_SECRET: INSERT_STREAM_API_SECRET_HERE ALGOLIA_WRITE_KEY: INSERT_ALGOLIA_WRITE_KEY_HERE cache: image: 'redis:alpine' ports: - '6379:6379' networks: - backend restart: always logging: driver: json-file options: max-size: 100MB max-file: '3' database: image: mongo ports: - '27017:27017' networks: - backend logging: driver: json-file options: max-size: 100MB max-file: '3' networks: backend: null ================================================ FILE: api/ecosystem.dev.config.js ================================================ module.exports = { apps: [ { name: 'api', interpreter: 'babel-node', script: 'src/server.js', watch: true, ignore_watch: ['.git', 'node_modules'], }, { name: 'conductor', interpreter: 'babel-node', script: 'src/workers/conductor.js', watch: true, ignore_watch: ['.git', 'node_modules'], }, { name: 'stream', interpreter: 'babel-node', script: 'src/workers/stream.js', watch: true, ignore_watch: ['.git', 'node_modules'], }, { name: 'rss', interpreter: 'babel-node', script: 'src/workers/rss.js', watch: true, ignore_watch: ['.git', 'node_modules'], }, { name: 'podcast', interpreter: 'babel-node', script: 'src/workers/podcast.js', watch: true, ignore_watch: ['.git', 'node_modules'], }, { name: 'og', interpreter: 'babel-node', script: 'src/workers/og.js', watch: true, ignore_watch: ['.git', 'node_modules'], }, ], }; ================================================ FILE: api/now.json ================================================ { "type": "docker", "features": { "cloud": "v2" } } ================================================ FILE: api/package.json ================================================ { "name": "api", "description": "https://getstream.io/winds", "license": "BSD-3-Clause", "scripts": { "preinstall": "yarn global add pm2", "start": "cd dist && node server.js", "build": "babel ./src --out-dir ./dist", "watch": "nodemon start", "dev": "pm2 start ecosystem.dev.config.js && pm2 log", "prettier": "prettier --config ../.prettierrc --write \"src/**/*.js\"", "test": "NODE_ENV=test node --max-old-space-size=16384 --optimize-for-size node_modules/nyc/bin/nyc.js node_modules/mocha/bin/_mocha --timeout 15000 --require test-entry.js \"test/**/*.js\"", "coverage": "NODE_ENV=test node_modules/nyc/bin/nyc.js report --reporter=text-lcov > coverage.lcov && node_modules/codecov/bin/codecov", "test_deep": "NODE_ENV=test node --max-old-space-size=16384 --optimize-for-size --stack_trace_limit=200 -r trace -r clarify node_modules/mocha/bin/_mocha --timeout 45000 --require test-entry.js \"test/**/*.js\"" }, "bin": { "winds": "src/commands/winds.js" }, "nyc": { "sourceMap": false, "instrument": false }, "author": "Winds Team ", "keywords": [ "Winds", "RSS", "RSS Reader", "Podcast", "Podcast Player" ], "engines": { "node": ">=13" }, "dependencies": { "@postlight/mercury-parser": "^2.2.0", "@sendgrid/mail": "^7.1.1", "algoliasearch": "^4.2.0", "body-parser": "^1.19.0", "bull": "^3.20.0", "bull-arena": "^3.7.0", "compression": "^1.7.4", "cors": "^2.8.5", "deep-object-diff": "^1.1.0", "dotenv": "^8.2.0", "ejs": "^3.1.3", "entities": "^1.1.2", "express": "^4.17.1", "express-basic-auth": "^1.2.0", "express-jwt": "^5.3.3", "express-rate-limit": "^5.1.3", "favicon": "^0.0.2", "feedparser": "^2.2.10", "franc-min": "^5.0.0", "getstream": "^4.5.1", "gravatar": "^1.8.0", "htmlparser2": "^4.1.0", "inflate-auto": "^1.0.0", "ioredis": "^4.19.4", "joi": "^13.7.0", "jsonwebtoken": "^8.5.1", "moment": "^2.26.0", "mongoose": "^5.9.15", "mongoose-autopopulate": "^0.12.2", "mongoose-bcrypt": "^1.8.0", "mongoose-string-query": "^0.2.7", "mongoose-timestamp": "^0.6.0", "multer": "^1.4.2", "node-opml-parser": "^1.0.0", "node-statsd": "^0.1.1", "normalize-url": "^5.0.0", "opml-generator": "^1.1.1", "progress": "^2.0.3", "raven": "^2.6.4", "request": "^2.88.2", "request-promise-native": "^1.0.8", "rss-finder": "^2.1.3", "sanitize-html": "^1.24.0", "stream-analytics": "^2.8.0", "strip": "^3.0.0", "uuid": "^8.1.0", "validator": "^11.1.0", "winston": "^3.2.1", "winston-transport": "^4.3.0", "yargs": "^15.3.1", "zlib": "^1.0.5" }, "devDependencies": { "@babel/cli": "^7.8.4", "@babel/core": "^7.9.6", "@babel/node": "^7.8.7", "@babel/preset-env": "^7.9.6", "@babel/register": "^7.9.0", "babel-plugin-istanbul": "^6.0.0", "babel-plugin-shebang": "^1.0.0", "chai": "^4.2.0", "chai-http": "^4.3.0", "clarify": "^2.1.0", "codecov": "^3.7.0", "flatted": "^2.0.2", "mocha": "^7.2.0", "mock-require": "^3.0.3", "nock": "^10.0.6", "nodemon": "^2.0.4", "nyc": "^15.0.1", "prettier": "^2.0.5", "redis": "^2.8.0", "sinon": "^7.3.2", "trace": "^3.1.1" } } ================================================ FILE: api/scripts/docker-build.sh ================================================ #!/bin/bash # Build the Docker image docker build -t winds-api . # List all Docker images docker images # Run the Docker image docker run -p 8080:8080 -d winds-api ================================================ FILE: api/scripts/docker-compose-aws.sh ================================================ #!/bin/bash # Build with Docker Compose docker-compose -f ../docker-compose-aws.yml up ================================================ FILE: api/scripts/docker-compose.sh ================================================ #!/bin/bash # Build with Docker Compose docker-compose -f ../docker-compose.yml up ================================================ FILE: api/scripts/make-build.sh ================================================ #!/bin/bash # Remove the existing build directory and create a fresh one rm -rf ../dist && mkdir ../dist # Transpile ES6 to JavaScript npx babel ../src --out-dir ../dist --ignore node_modules # Copy build files to fresh /dist directory cp ../src/package.json ../dist/package.json # Copy build files to fresh /dist directory cp process_prod.json ../dist/process_prod.json # Copy email files to fresh /dist directory cp -R ../src/utils/email/templates ../dist/utils/email # Install node modules via yarn cd ../dist && yarn install --production --modules-folder node_modules ================================================ FILE: api/setup-tests.js ================================================ import fs from 'fs'; import path from 'path'; import Mocha from 'mocha'; import chai from 'chai'; import chaiHttp from 'chai-http'; import { stringify } from 'flatted/cjs'; import config from './src/config'; import api from './src/server'; import logger from './src/utils/logger'; import { dropDBs } from './test/utils'; api.use((err, req, res, next) => { if (err) { logger.error(err.stack); if (err.request) { logger.error(`REQUEST = ${stringify(err.request)}`); } if (err.response) { logger.error(`RESPONSE = ${stringify(err.response)}`); } } next(err, req, res); }); chai.use(chaiHttp); function wrapMocha(onPrepare, onUnprepare) { // Monkey-patch run method const run = Mocha.prototype.run; //XXX: using function syntax instead of fat-arrow syntax // to avoid implicit binding of 'this' Mocha.prototype.run = function(done) { const self = this; onPrepare() .then(() => { //XXX: ditto run.call(self, function() { if (typeof onUnprepare === 'function') { onUnprepare.apply(this, arguments); } done.apply(this, arguments); }); }) .catch(err => { if (err instanceof Error) { console.error(err.stack); } process.exit(1); }); }; } wrapMocha( async () => { if (!config.database.uri) throw new Error('Missing MongoDB connection string. Check config'); if (!config.cache.uri) throw new Error('Missing Redis connection string. Check config'); if ( !config.database.uri.includes('localhost') && !config.database.uri.includes('127.0.0.1') ) throw new Error( 'MongoDB connection string contains non-local address. For safety reasons test suite can only connect to local databases. Check config', ); if ( !config.cache.uri.includes('localhost') && !config.cache.uri.includes('127.0.0.1') ) throw new Error( 'Redis connection string contains non-local address. For safety reasons test suite can only connect to local databases. Check config', ); //XXX: drop all data before running tests await dropDBs(); fs.readdirSync(path.join(__dirname, 'src', 'routes')).forEach(file => { if (file.endsWith('.js')) { require(`./src/routes/${file}`)(api); } }); }, failures => { //XXX: it seems Travis-ci is having trouble with process wrap-up procedures so lets // allocate more time before shutting down const timeout = process.env.TRAVIS ? 10000 : 1500; logger.info(`Terminating in ${timeout / 1000} seconds`); //XXX: don't care about open connections setTimeout(() => process.exit(failures ? 1 : 0), timeout); }, ); ================================================ FILE: api/src/.babelrc ================================================ { "plugins": [ "shebang"], "presets": [["@babel/preset-env", { "targets": { "node": "current" } }]] } ================================================ FILE: api/src/.prettierignore ================================================ config/index.js ================================================ FILE: api/src/asyncTasks.js ================================================ import config from './config'; import logger from './utils/logger'; import Queue from 'bull'; import { getStatsDClient } from './utils/statsd'; export const rssQueue = new Queue('rss', config.cache.uri, { settings: { lockDuration: 90000, stalledInterval: 75000, maxStalledCount: 2, }, }); export const podcastQueue = new Queue('podcast', config.cache.uri, { settings: { lockDuration: 90000, stalledInterval: 75000, maxStalledCount: 2, }, }); export const streamQueue = new Queue('stream', config.cache.uri, { limiter: { max: 12000, duration: 3600000 }, // 12k per hour }); export const ogQueue = new Queue('og', config.cache.uri, { settings: { lockDuration: 60000, stalledInterval: 50000, maxStalledCount: 2, }, }); export const socialQueue = new Queue('social', config.cache.uri); function makeMetricKey(queue, event) { return ['winds', 'bull', queue.name, event].join('.'); } async function trackQueueSize(statsd, queue) { let queueStatus = await queue.getJobCounts(); statsd.gauge(makeMetricKey(queue, 'waiting'), queueStatus.waiting); statsd.gauge(makeMetricKey(queue, 'active'), queueStatus.active); } function AddQueueTracking(queue) { var statsd = getStatsDClient(); queue.on('error', function (err) { statsd.increment(makeMetricKey(queue, 'error')); logger.warn( `Queue ${queue.name} encountered an unexpected error: ${err.message}`, ); }); queue.on('active', function (job, jobPromise) { statsd.increment(makeMetricKey(queue, 'active')); }); queue.on('completed', function (job, result) { statsd.timing(makeMetricKey(queue, 'elapsed'), new Date() - job.timestamp); statsd.increment(makeMetricKey(queue, 'completed')); }); queue.on('stalled', function (job) { statsd.increment(makeMetricKey(queue, 'stalled')); logger.warn(`Queue ${queue.name} job stalled: '${JSON.stringify(job)}'`); }); queue.on('failed', function (job, err) { statsd.increment(makeMetricKey(queue, 'failed')); logger.warn( `Queue ${queue.name} failed to process job '${JSON.stringify(job)}': ${ err.message }`, ); }); queue.on('paused', function () { statsd.increment(makeMetricKey(queue, 'paused')); }); queue.on('resumed', function (job) { statsd.increment(makeMetricKey(queue, 'resumed')); }); setInterval(trackQueueSize, 30000, statsd, queue); } const currentEnvironment = process.env.NODE_ENV || 'development'; if (currentEnvironment !== 'test') { AddQueueTracking(rssQueue); AddQueueTracking(ogQueue); AddQueueTracking(podcastQueue); AddQueueTracking(streamQueue); AddQueueTracking(socialQueue); } export const RssQueueAdd = rssQueue.add.bind(rssQueue); export const OgQueueAdd = ogQueue.add.bind(ogQueue); export const PodcastQueueAdd = podcastQueue.add.bind(podcastQueue); export const StreamQueueAdd = podcastQueue.add.bind(streamQueue); export const SocialQueueAdd = podcastQueue.add.bind(socialQueue); export function ProcessRssQueue() { getStatsDClient().increment(makeMetricKey(rssQueue, 'started')); return rssQueue.process(...arguments); } export function ProcessOgQueue() { getStatsDClient().increment(makeMetricKey(ogQueue, 'started')); return ogQueue.process(...arguments); } export function ProcessPodcastQueue() { getStatsDClient().increment(makeMetricKey(podcastQueue, 'started')); return podcastQueue.process(...arguments); } export function ProcessStreamQueue() { getStatsDClient().increment(makeMetricKey(streamQueue, 'started')); return streamQueue.process(...arguments); } export function ProcessSocialQueue() { getStatsDClient().increment(makeMetricKey(socialQueue, 'started')); return socialQueue.process(...arguments); } export function ShutDownRssQueue() { getStatsDClient().increment(makeMetricKey(rssQueue, 'stopped')); return socialQueue.close(...arguments); } export function ShutDownPodcastQueue() { getStatsDClient().increment(makeMetricKey(podcastQueue, 'stopped')); return socialQueue.close(...arguments); } export function ShutDownOgQueue() { getStatsDClient().increment(makeMetricKey(ogQueue, 'stopped')); return socialQueue.close(...arguments); } export function ShutDownSocialQueue() { getStatsDClient().increment(makeMetricKey(socialQueue, 'stopped')); return socialQueue.close(...arguments); } export function ShutDownStreamQueue() { getStatsDClient().increment(makeMetricKey(streamQueue, 'stopped')); return socialQueue.close(...arguments); } ================================================ FILE: api/src/commands/_debug-feed.js ================================================ import program from 'commander'; import '../loadenv'; import '../utils/db'; import { ParseFeed, ParsePodcast } from '../parsers/feed'; import chalk from 'chalk'; import logger from '../utils/logger'; import Podcast from '../models/podcast'; import RSS from '../models/rss'; import { RssQueueAdd, PodcastQueueAdd } from '../asyncTasks'; import normalize from 'normalize-url'; // do stuff export async function debugFeed(feedType, feedUrls) { // This is a small helper tool to quickly help debug issues with podcasts or RSS feeds logger.info(`Starting the ${feedType} Debugger \\0/`); logger.info( 'Please report issues with RSS feeds here https://github.com/getstream/winds', ); logger.info('Note that pull requests are much appreciated!'); logger.info(`Handling ${feedUrls.length} urls`); for (let target of feedUrls) { logger.info(`Looking up the first ${program.limit} articles from ${target}`); async function validate(response) { // validate the podcast or RSS feed logger.info('========== Validating Publication =========='); logger.info(`Title: ${response.title}`); logger.info(`Link: ${response.link}`); if (response.image && response.image.og) { logger.info(chalk.green('Image found :)')); logger.info(`Image: ${response.image.og}`); } else { logger.info(chalk.red('Image missing :(')); } logger.info('========== Validating episodes/articles now =========='); // validate the articles or episodes let articles = response.articles ? response.articles : response.episodes; let selectedArticles = articles.slice(0, program.limit); logger.info(`Found ${articles.length} articles showing ${program.limit}`); if (selectedArticles.length) { for (let article of selectedArticles) { logger.info('======================================'); logger.info(chalk.green(`Title: ${article.title}`)); logger.info(`URL: ${article.url}`); logger.info(`Description: ${article.description}`); logger.info(`Publication Date: ${article.publicationDate}`); if (article.commentUrl) { logger.info(`Comments: ${article.commentUrl}`); } if (article.content) { logger.info(`Content: ${article.content}`); } // for RSS we rely on OG scraping, for podcasts the images are already in the feed if (article.images && article.images.og) { logger.info(chalk.green('Image found :)')); logger.info(`Image: ${article.images.og}`); } else { logger.info(chalk.red('Image missing :(')); } if (article.enclosures && article.enclosures.length) { logger.info(`found ${article.enclosures.length} enclosures`); for (let enclosure of article.enclosures) { logger.info(JSON.stringify(enclosure)); } } if (feedType === 'podcast') { if (article.enclosure) { logger.info(chalk.green('Enclosure found :)')); logger.info(article.enclosure); } else { logger.info(chalk.red('Missing enclosure :(')); } } } } else { logger.info(chalk.red("Didn't find any articles or episodes.")); } let schema = feedType === 'rss' ? RSS : Podcast; let lookup = { $or: [{ feedUrl: target }, { feedUrl: normalize(target) }] }; if (program.task) { logger.info('trying to create a task on the bull queue'); let instance = await schema.findOne(lookup); schema .findOne(lookup) .catch((err) => { console.log('failed', err); }) .then((instance) => { let queuePromise; if (!instance) { logger.info('failed to find publication'); return; } if (feedType == 'rss') { queuePromise = RssQueueAdd( { rss: instance._id, url: instance.feedUrl, }, { priority: 1, removeOnComplete: true, removeOnFail: true, }, ); } else { queuePromise = PodcastQueueAdd( { podcast: instance._id, url: instance.feedUrl, }, { priority: 1, removeOnComplete: true, removeOnFail: true, }, ); } queuePromise .then(() => { if (feedType === 'rss') { logger.info( `Scheduled RSS feed to the queue for parsing ${target} with id ${instance._id}`, ); } else { logger.info( `Scheduled Podcast to the queue for parsing ${target}`, ); } }) .catch((err) => { logger.error('Failed to schedule task on og queue'); }); }); } } if (feedType === 'rss') { let feedContent = await ParseFeed(target, 2); validate(feedContent); } else { let podcastContent = await ParsePodcast(target, 2); validate(podcastContent); } logger.info('Note that upgrading feedparser can sometimes improve parsing.'); } } ================================================ FILE: api/src/commands/cleanup-follows.js ================================================ import '../loadenv'; import '../utils/db'; import program from 'commander'; import logger from '../utils/logger'; import Podcast from '../models/podcast'; import Article from '../models/article'; import Episode from '../models/episode'; import Follow from '../models/follow'; import { FollowSchema } from '../models/follow'; import RSS from '../models/rss'; import User from '../models/user'; import asyncTasks from '../asyncTasks'; program.parse(process.argv); async function main() { logger.info(`time to update those follow counts, \\0/`); // get the follow counts let counts = await Follow.aggregate([ { $group: { _id: { rss: '$rss', podcast: '$podcast', user: '$user', }, count: { $sum: 1 }, }, }, { $match: { count: { $gte: 2 }, }, }, ]); // group by the number of followers and the type for fast updates let grouped = {}; for (let c of counts) { let lookup = c._id; let debug = JSON.stringify(lookup); if (Object.keys(lookup).length != 2) { throw Error(`OH no you dont, broken lookup: ${debug}`); } let versions = await Follow.find(lookup); // remove everything except the first result if (versions.length > 1) { let removing = versions.length - 1; logger.info(`removing ${removing} instances for query ${debug}`); for (let v of versions.slice(1)) { logger.info(`removing ${v._id}`); await v.remove(); } } } logger.info(`finished cleaning up, applying unqiue index now`); await FollowSchema.index({ user: 1, rss: 1, podcast: 1 }, { unique: true }); logger.info(`done :)`); } main() .then((result) => { logger.info('completed it all, we should now have a unique contraint'); }) .catch((err) => { logger.info(`failed with err ${err}`, { err }); }); ================================================ FILE: api/src/commands/denormalize-follows.js ================================================ import '../loadenv'; import '../utils/db'; import program from 'commander'; import logger from '../utils/logger'; import Podcast from '../models/podcast'; import Article from '../models/article'; import Episode from '../models/episode'; import Follow from '../models/follow'; import RSS from '../models/rss'; import asyncTasks from '../asyncTasks'; program.parse(process.argv); async function main() { logger.info(`time to update those follow counts, \\0/`); // get the follow counts let counts = await Follow.aggregate([ { $group: { _id: { rss: '$rss', podcast: '$podcast', }, followers: { $sum: 1 }, }, }, ]); // group by the number of followers and the type for fast updates let grouped = {}; for (let c of counts) { c.type = c._id.rss ? 'rss' : 'podcast'; c.publicationID = c._id[c.type]; let key = [c.followers, c.type]; if (key in grouped) { grouped[key].push(c); } else { grouped[key] = [c]; } } // update time for (let group of Object.values(grouped)) { let publicationIDs = group.map((c) => { return c.publicationID; }); let schema = group[0].type == 'rss' ? RSS : Podcast; let followerCount = group[0].followers; logger.info( `Starting update of ${publicationIDs.length} publications of type ${group[0].type} to count ${followerCount}`, ); let result = await schema.update( { $and: [ { _id: { $in: publicationIDs } }, { followerCount: { $ne: followerCount } }, ], }, { followerCount: followerCount, }, { multi: true }, ); logger.info(`Updated ${result.nModified} out of ${publicationIDs.length}`); } // set everyone else to 0 for (let schema of [RSS, Podcast]) { let result = await schema.update( { followerCount: { $exists: false } }, { followerCount: 0, }, { multi: true }, ); logger.info(`Updated ${result.nModified} with no values to 0`); } } main() .then((result) => { logger.info('completed it all, open the test page to see queue status'); }) .catch((err) => { logger.info(`failed with err ${err}`, { err }); }); ================================================ FILE: api/src/commands/denormalize-pins.js ================================================ import '../loadenv'; import '../utils/db'; import program from 'commander'; import logger from '../utils/logger'; import Podcast from '../models/podcast'; import Article from '../models/article'; import Episode from '../models/episode'; import Follow from '../models/follow'; import RSS from '../models/rss'; import Pin from '../models/pin'; import User from '../models/user'; import asyncTasks from '../asyncTasks'; program.parse(process.argv); async function main() { logger.info(`time to denormalize those pin urls, \\0/`); // denormalize the pin urls let pins = await Pin.find({}); let counts = { denormalized: 0, normalized: 0, missing: 0, brokenref: 0 }; for (let p of pins) { let url = (p.article && p.article.url) || (p.episode && p.episode.url); if (!p.url && p.user) { if (url) { p.url = url; await p.save(); counts.denormalized += 1; } else { if (p._id) { await Pin.deleteOne({ _id: p._id }); } counts.brokenref += 1; } } logger.info(`pin url ${p.url} is now denormalized`); } // restore the relation for pins where we miss a matching schema pins = await Pin.find({}).lean(); for (let p of pins) { let type = p.article ? 'rss' : 'podcast'; let postType = type == 'rss' ? 'article' : 'episode'; let schema = type == 'rss' ? Article : Episode; let postID = p.article || p.episode; let instance = await schema.findOne({ _id: postID }); if (!instance && p.url) { logger.info(`restoring relation for pin with url ${p.url}`); let newInstance = await schema.findOne({ url: p.url }).lean(); if (newInstance) { let data = {}; data[postType] = newInstance._id; let result = await Pin.updateOne({ _id: p._id }, data); logger.info( `found a new instance for ${p._id}: ${p.url} with id ${newInstance._id}`, ); counts.normalized += 1; } else { if (p._id) { await Pin.deleteOne({ _id: p._id }); } logger.info(`couldnt find a new instance :(`); counts.missing += 1; } } } let c = JSON.stringify(counts); logger.info(`completed, counts are ${c}`); } main() .then((result) => { logger.info('completed it all, open the test page to see queue status'); }) .catch((err) => { logger.info(`failed with err ${err}`, { err }); }); ================================================ FILE: api/src/commands/email.js ================================================ import '../loadenv'; import '../utils/db'; import program from 'commander'; import logger from '../utils/logger'; import Podcast from '../models/podcast'; import Article from '../models/article'; import Episode from '../models/episode'; import Follow from '../models/follow'; import RSS from '../models/rss'; import Pin from '../models/pin'; import User from '../models/user'; import { SendWeeklyEmail, CreateWeeklyEmail } from '../utils/email/send'; import { weeklyContextGlobal, weeklyContextUser } from '../utils/email/context'; import asyncTasks from '../asyncTasks'; import config from '../config'; import jwt from 'jsonwebtoken'; import axios from 'axios'; import * as personalization from '../utils/personalization'; program.option('--send', 'Actually send the email').parse(process.argv); async function main() { logger.info(`time to send article recommendations, \\0/`); // prep the data we need for everyone let globalContext = await weeklyContextGlobal(); let users = await User.find({}); let enabledUsers = users.filter((u) => { return u.weeklyEmail || u.admin; }); logger.info(`going to email ${enabledUsers.length} users`); for (const u of enabledUsers) { let userContext = await weeklyContextUser(u); let context = Object.assign({}, userContext, globalContext); let obj = CreateWeeklyEmail(context); logger.info(`email ${obj.html}`); if (program.send) { logger.info(`sending email, yee to user ${u.email}`); SendWeeklyEmail(context); } } } main() .then((result) => { logger.info('all done sending emails'); }) .catch((err) => { logger.info(`failed with err ${err}`, { err }); }); ================================================ FILE: api/src/commands/load-featured-feeds.js ================================================ import '../loadenv'; import program from 'commander'; import logger from '../utils/logger'; import fs from 'fs'; import async from 'async'; import rssFinder from 'rss-finder'; import normalizeUrl from 'normalize-url'; import podcastFinder from 'rss-finder'; import { ParsePodcast } from '../parsers'; import strip from 'strip'; import Podcast from '../models/podcast'; import RSS from '../models/rss'; import moment from 'moment'; import '../utils/db'; import entities from 'entities'; import path from 'path'; import search from '../utils/search'; import asyncTasks from '../asyncTasks'; const version = '0.0.1'; program .version(version) .option('--type ', 'The type: episode, podcast or article') .option('--url ', 'The url to try and scrape') .option('--task', 'Create a task on bull or not') .parse(process.argv); process.on('unhandledRejection', (err) => { console.error(err); process.exit(1); }); // TODO: refactor all code used in this command function main() { // This is a small helper tool to quickly help debug issues with podcasts or RSS feeds logger.info('Starting to load the featured feeds'); var featured = JSON.parse( fs.readFileSync(path.join('..', 'fixtures', 'featured.json'), 'utf8'), ); async.mapLimit( featured.rss, 10, (featuredRSS, loopCb) => { logger.info(`Now Handling RSS Feed ${featuredRSS.name}`); rssFinder(normalizeUrl(featuredRSS.feedUrl)) .catch(function (err) { logger.warn( `RSS Finder broke ${featuredRSS.feedUrl} with err ${err}`, ); loopCb(); return; }) .then((feeds) => { if (!feeds.feedUrls.length) { logger.warn( `We couldn't find any feeds for that RSS feed URL :( ${featuredRSS.feedUrl}`, ); return loopCb(); } async.mapLimit( feeds.feedUrls, feeds.feedUrls.length, (feed, cb) => { let feedTitle = feed.title; if (feedTitle.toLowerCase() === 'rss') { feedTitle = feeds.site.title; } var promise = RSS.findOneAndUpdate( { feedUrl: feed.url }, { interest: featuredRSS.category, categories: 'RSS', description: ( entities.decodeHTML(feed.title) || '' ).substring(0, 240), featured: false, feedUrl: feed.url, images: { favicon: feeds.site.favicon, }, lastScraped: moment().format(), title: featuredRSS.name, url: feeds.site.url, valid: true, }, { new: true, rawResult: true, upsert: true, }, ); promise .then((rss) => { if (rss.lastErrorObject.updatedExisting) { cb(null, rss.value); } else { search(rss.value.searchDocument()) .then(() => { return asyncTasks.RssQueueAdd( { rss: rss.value._id, url: rss.value.feedUrl, }, { priority: 1, removeOnComplete: true, removeOnFail: true, }, ); }) .then(() => { cb(null, rss.value); }) .catch((err) => { cb(err); }); } }) .catch((err) => { logger.warn('broken', err); cb(err); }); }, (err, results) => { if (err) { logger.warn('really broken', err); return loopCb(); } loopCb(); }, ); }); }, function () { logger.info('Finished with Feeds'); }, ); async.mapLimit( featured.podcasts, 10, (featuredPodcast, loopCb) => { logger.info(`Now Handling Podcast ${featuredPodcast.name}`); podcastFinder(normalizeUrl(featuredPodcast.feedUrl)) .catch((err) => { logger.error(`podcastFinder broke ${featuredPodcast.feedUrl}`); loopCb(); }) .then((feeds) => { if (!feeds || !feeds.feedUrls.length) { logger.error(`no feeds found for ${featuredPodcast.feedUrl}`); return loopCb(); } async.mapLimit( feeds.feedUrls, feeds.feedUrls.length, (feed, cb) => { // Get more metadata ParsePodcast(feed.url, function (err, podcastContents) { let title, url, images, description; if (podcastContents) { title = strip(podcastContents.title) || strip(feed.title); url = podcastContents.link || feeds.site.url; images = { favicon: feeds.site.favicon, og: podcastContents.image, }; description = podcastContents.description; } else { title = strip(feed.title); url = feeds.site.url; images = { favicon: feeds.site.favicon }; description = ''; } Podcast.findOneAndUpdate( { feedUrl: feed.url }, { interest: featuredPodcast.category, categories: 'podcast', description: (description || '').substring( 0, 240, ), featured: false, feedUrl: feed.url, images: images, lastScraped: new Date(0), title: featuredPodcast.name, url: normalizeUrl(url), valid: true, }, { new: true, rawResult: true, upsert: true, }, ) .then((podcast) => { if (podcast.lastErrorObject.updatedExisting) { cb(null, podcast.value); } else { search(podcast.value.searchDocument()) .then(() => { return asyncTasks.PodcastQueueAdd( { podcast: podcast.value._id, url: podcast.value.feedUrl, }, { priority: 1, removeOnComplete: true, removeOnFail: true, }, ); }) .then(() => { logger.info( `api is scheduling ${podcast.value.url} for og scraping`, ); if (!podcast.value.images.og) { asyncTasks .OgQueueAdd( { url: podcast.value.url, type: 'podcast', }, { removeOnComplete: true, removeOnFail: true, }, ) .then(() => { cb(null, podcast.value); }); } else { cb(null, podcast.value); } }) .catch((err) => { cb(err); }); } }) .catch((err) => { logger.error( `Podcast parsing broke for ${feed.url}`, ); cb(err); }); }); }, (err, results) => { if (err) { logger.error(`broken stuff with error ${err}`); loopCb(); return; } loopCb(); }, ); }); }, function () { logger.info('finished with podcasts'); }, ); } main(); ================================================ FILE: api/src/commands/rescrape-favicon.js ================================================ import '../loadenv'; import '../utils/db'; import program from 'commander'; import logger from '../utils/logger'; import Podcast from '../models/podcast'; import RSS from '../models/rss'; import { discoverRSS } from '../parsers/discovery'; import { isURL } from '../utils/validation'; program .option('--all', 'Rescrape articles for which we already have a favicon image') .option('-c, --concurrency ', 'The number of concurrent scraping updates', 100) .option('--publication ', 'ID of the publication to scrape') .parse(process.argv); async function rescrapeFavicon(publicationType, instance) { const schema = publicationType == 'rss' ? RSS : Podcast; if (!isURL(instance.url)) { return; } try { let foundRSS = await discoverRSS(instance.url); if (foundRSS && foundRSS.site && foundRSS.site.favicon) { let site = foundRSS.site; const images = instance.images || {}; let updated; if (images.favicon != site.favicon) { images.favicon = site.favicon; updated = await schema.update({ _id: instance._id }, { images }); } logger.info(`updated ${instance._id} to url ${site.favicon}`); return updated; } } catch (err) { logger.warn( `rescraping failed with error for url ${instance.url} with instance id ${instance._id}`, ); } } async function main() { let schemas = { rss: RSS, podcast: Podcast }; logger.info(`program.all is set to ${program.all}`); let counts = { hasimage: 0, fixed: 0, notfound: 0 }; let lookup = { url: { $nin: [null, ''] } }; if (program.publication) { lookup['_id'] = program.publication; } else if (!program.all) { lookup['images.favicon'] = { $in: [null, ''] }; } let chunkSize = parseInt(program.concurrency, 10); for (const [contentType, schema] of Object.entries(schemas)) { let total = await schema.count(lookup); let completed = 0; logger.info( `Found ${total} for ${contentType}, processing in chunks of ${chunkSize}`, ); for (let i = 0, j = total; i < j; i += chunkSize) { let chunk = await schema .find(lookup) .sort({ followerCount: -1 }) .skip(i) .limit(chunkSize) .lean(); completed = completed + chunkSize; let promises = []; for (const instance of chunk) { let missingImage = !instance.images || !instance.images.favicon; if (missingImage || program.all) { let promise = rescrapeFavicon(contentType, instance); promises.push(promise); } else { counts.hasimage += 1; } } let results = await Promise.all(promises); for (const r of results) { if (r) { counts.fixed += 1; } else { counts.notfound += 1; } } console.log('completed', completed); } console.log('counts', counts); logger.info(`Completed for type ${contentType}`); } } main() .then((result) => { logger.info('completed it all'); }) .catch((err) => { logger.warn(`failed with err ${err}`); }); ================================================ FILE: api/src/commands/rescrape-og.js ================================================ import '../utils/db'; import program from 'commander'; import Podcast from '../models/podcast'; import Article from '../models/article'; import Episode from '../models/episode'; import RSS from '../models/rss'; import { OgQueueAdd } from '../asyncTasks'; program .option('--all', 'Rescrape articles for which we already have an og image') .parse(process.argv); function partitionBy(collection, selector) { if (!collection.length) { return []; } const partitions = [[collection[0]]]; let currentPartition = 0; let lastElement = selector(collection[0]); for (let i = 1; i < collection.length; ++i) { const element = selector(collection[i]); if (element !== lastElement) { partitions.push([]); ++currentPartition; } partitions[currentPartition].push(collection[i]); lastElement = element; } return partitions; } async function main() { const schemas = { podcast: Podcast, rss: RSS, episode: Episode, article: Article }; const fieldMap = { article: 'url', episode: 'link', podcast: 'url', rss: 'url' }; const feedIdMap = { episode: 'podcast', article: 'rss', rss: '_id', podcast: '_id' }; const feedFieldMap = { episode: 'podcast', article: 'rss', rss: 'rss', podcast: 'podcast', }; console.log(`program.all is set to ${program.all}`); for (const [contentType, schema] of Object.entries(schemas)) { const total = await schema.count({}); const chunkSize = 1000; const field = fieldMap[contentType]; const feedField = feedFieldMap[contentType]; const feedIdField = feedIdMap[contentType]; console.log(`Found ${total} for ${contentType} with url field ${field}\n`); let completed = 0; for (let i = 0, j = total; i < j; i += chunkSize) { const chunk = await schema .find() .sort(feedIdField) .skip(i) .limit(chunkSize) .lean(); completed += chunkSize; const instances = chunk.filter((instance) => { const missingImage = !instance.images || !instance.images.og; return (missingImage || program.all) && instance[field]; }); const partitions = partitionBy(instances, (i) => i[feedIdField]); const promises = partitions.map((partition) => { return OgQueueAdd( { type: contentType, [feedField]: partition[0][feedIdField], urls: partition.map((i) => i[field]), update: true, }, { removeOnComplete: true, removeOnFail: true }, ); }); await Promise.all(promises); const progress = Math.floor((100 * i) / j); console.log(`\rprogress ${progress}%: ${i}/${j}`); } console.log(`Completed for type ${contentType} with field ${field}`); } } main() .then((result) => { console.log('completed it all, open the test page to see queue status'); process.exit(0); }) .catch((err) => { console.log(`failed: ${err.stack}`); process.exit(1); }); ================================================ FILE: api/src/commands/reset-parsing-state.js ================================================ import '../loadenv'; import RSS from '../models/rss'; import Podcast from '../models/podcast'; import '../utils/db'; import logger from '../utils/logger'; logger.info('Starting the RSS reset'); // simple script to reset isParsing state on Podcast and RSS feeds async function main() { logger.info('Updating RSS feeds now'); let rssResponse = await RSS.update( {}, { 'queueState.isParsing': false }, { multi: true }, ); logger.info(`Updated isParsing to false for ${rssResponse.nModified} RSS feeds`); logger.info('Updating Podcast feeds now'); let podcastResponse = await Podcast.update( {}, { 'queueState.isParsing': false }, { multi: true }, ); logger.info( `Updated isParsing to false for ${podcastResponse.nModified} Podcast feeds`, ); } main() .then(() => { logger.info('Finished reset for podcast and rss feeds'); }) .catch((err) => { logger.error(`Something went wrong with the reset ${err}`); }); ================================================ FILE: api/src/commands/resync-follows.js ================================================ import '../loadenv'; import '../utils/db'; import program from 'commander'; import logger from '../utils/logger'; import Follow from '../models/follow'; import { FollowSchema } from '../models/follow'; import asyncTasks from '../asyncTasks'; import stream from 'getstream'; import config from '../config'; const streamClient = stream.connect(config.stream.apiKey, config.stream.apiSecret); program.parse(process.argv); async function main() { logger.info(`time to resync those follows, \\0/`); let followCount = await Follow.count({}); let chunkSize = 500; for (let i = 0, j = followCount; i < j; i += chunkSize) { let follows = await Follow.find({}).skip(i).limit(chunkSize).lean(); logger.info(`found ${follows.length} follows`); let feedRelations = []; for (let f of follows) { let feedGroup = f.rss ? 'user_article' : 'user_episode'; let type = f.rss ? 'rss' : 'podcast'; let publicationID = f.rss || f.podcast; // sync to stream feedRelations.push({ source: `timeline:${f.user}`, target: `${type}:${publicationID}`, }); feedRelations.push({ source: `${feedGroup}:${f.user}`, target: `${type}:${publicationID}`, }); } logger.info(`pushed ${feedRelations.length} follows to Stream`); logger.info(`completed ${i} out of ${followCount}`); let response = await streamClient.followMany(feedRelations); } logger.info(`completed all loops`); } main() .then((result) => { logger.info('completed it all, we should now have a unique contraint'); }) .catch((err) => { logger.info(`failed with err ${err}`, { err }); }); ================================================ FILE: api/src/commands/winds-article.js ================================================ import '../loadenv'; import '../utils/db'; import program from 'commander'; import chalk from 'chalk'; import logger from '../utils/logger'; const version = '0.0.1'; import normalize from 'normalize-url'; import { ParseArticle } from '../parsers/article'; program.version(version).parse(process.argv); let articleUrls = program.args; async function main() { logger.info('Starting the article parsing debugger \\0/'); for (let url of articleUrls) { let scraped = await ParseArticle(url); logger.info(Object.keys(scraped.data)); logger.info(`excerpt: ${scraped.data.excerpt}`); } } main() .then(() => { console.info('done'); process.exit(0); }) .catch((err) => { console.info(`failed with err ${err}`); process.exit(1); }); ================================================ FILE: api/src/commands/winds-discover.js ================================================ import '../loadenv'; import '../utils/db'; import program from 'commander'; import chalk from 'chalk'; import logger from '../utils/logger'; const version = '0.0.1'; import normalize from 'normalize-url'; import asyncTasks from '../asyncTasks'; import { ParseArticle } from '../parsers/article'; import { discoverRSS } from '../parsers/discovery'; program.version(version).parse(process.argv); let pageUrls = program.args; async function main() { logger.info('Starting the article parsing debugger \\0/'); for (let url of pageUrls) { let foundRSS = await discoverRSS(normalize(url)); if (!foundRSS.feedUrls.length) { logger.info('no RSS found'); return; } let site = foundRSS.site; logger.info(`Site Information`); logger.info(`Title: ${site.title}, URL: ${site.url}, Favicon: ${site.favicon}`); logger.info(`Favicon ${foundRSS.site.favicon}`); logger.info(`RSS feeds found: ${foundRSS.feedUrls.length}`); for (let found of foundRSS.feedUrls) { logger.info(`Title: ${found.title} URL: ${found.url}`); } } } main() .then(() => { console.info('done'); process.exit(0); }) .catch((err) => { console.info(`failed with err ${err}`); process.exit(1); }); ================================================ FILE: api/src/commands/winds-merge.js ================================================ import mongoose from 'mongoose'; import ProgressBar from 'progress'; import db from '../utils/db'; import { upsertCollections } from '../utils/collections'; import RSS from '../models/rss'; import Podcast from '../models/podcast'; import Article from '../models/article'; import Episode from '../models/episode'; function sleep(time) { return new Promise((resolve) => setTimeout(resolve, time)); } process.on('unhandledRejection', (error) => console.error(error.message)); const feedModels = { rss: { feed: RSS, content: Article }, podcast: { feed: Podcast, content: Episode }, }; function estimateSize(content) { let size = 2; // {} for (const [key, value] of Object.entries(content)) { size += Buffer.byteLength(String(key), 'utf8'); size += Buffer.byteLength(String(value), 'utf8'); size += 2; // :, } return size; } async function main() { await db; for (const type of ['rss', 'podcast']) { const model = feedModels[type]; console.log(`synchronising ${type} content`); const contentModelName = model.content.collection.collectionName; const feedCount = await model.feed.countDocuments(); const bar = new ProgressBar( '[:current / :total] :bar [:percent | :rate records per second]', { total: feedCount }, ); let lastFeedId = mongoose.Types.ObjectId('000000000000000000000000'); let feedsSynced = false; while (!feedsSynced) { try { const feedCursor = model.feed.collection .find({ _id: { $gte: lastFeedId }, }) .sort({ _id: 1, }) .batchSize(32); while (await feedCursor.hasNext()) { const feed = await feedCursor.next(); const allowedLanguage = [null, undefined, '', 'eng'].includes( feed.language, ); if (!allowedLanguage) { bar.tick(); continue; } let lastId = mongoose.Types.ObjectId('000000000000000000000000'); let articlesSynced = false; while (!articlesSynced) { try { const cursor = model.content.collection .find({ _id: { $gte: lastId }, [type]: feed._id, }) .sort({ publicationDate: 1, _id: 1, }) .limit(1000) .batchSize(1000); const articleCount = await model.content.countDocuments({ [type]: feed._id, }); let upserts = []; let content = []; let currentSize = 0; let mostRecentPublicationDate; const chunkSize = 1000; const sizeLimit = 100 * 1024; // less then 128Kb to leave some space for external data while (await cursor.hasNext()) { const source = await cursor.next(); mostRecentPublicationDate = source.publicationDate; const item = { id: source._id, title: source.title, likes: source.likes, socialScore: source.socialScore, description: (source.description || '').substring( 0, 240, ), publicationDate: source.publicationDate, [type]: source[type], }; //XXX: we overestimate object size by 5-10% const size = estimateSize(item); const batchIsFull = content.length == chunkSize; const batchTooBig = currentSize + size > sizeLimit; if (batchIsFull || batchTooBig) { upserts.push( upsertCollections(contentModelName, content), ); content = []; currentSize = 0; } if (upserts.length && upserts.length % 128 === 0) { await Promise.all([ ...upserts, // sleep(800) ]); upserts = []; } currentSize += size; content.push(item); lastId = item.id; } await Promise.all([ ...upserts, upsertCollections(contentModelName, content), upsertCollections(type, [ { id: feed._id, title: feed.title, language: feed.language, description: (feed.description || '').substring( 0, 240, ), articleCount: content.length, mostRecentPublicationDate, }, ]), // sleep(800) ]); bar.tick(); articlesSynced = true; } catch (err) { console.error( `\n\terror processing content: ${err.message}\nresuming from ${lastId}`, ); } } lastFeedId = feed._id; } console.log(`${type} synchronised\n`); feedsSynced = true; } catch (err) { console.error( `\n\terror processing feed: ${err.message}\nresuming from ${lastFeedId}`, ); } } } } main() .then(() => { console.log('\ndone'); process.exit(0); }) .catch((err) => { console.error(`\nfailed with err ${err.stack}`); process.exit(1); }); ================================================ FILE: api/src/commands/winds-og.js ================================================ import '../loadenv'; import '../utils/db'; import program from 'commander'; import chalk from 'chalk'; import logger from '../utils/logger'; const version = '0.0.1'; import normalize from 'normalize-url'; import { OgQueueAdd } from '../asyncTasks'; import { ParseOG, IsValidOGUrl } from '../parsers/og'; program .version(version) .option('--type ', 'The type: episode, podcast or article') .option('--task', 'Create a task on bull or not') .parse(process.argv); let ogUrls = program.args; async function main() { // This is a small helper tool to quickly help debug issues with podcasts or RSS feeds logger.info('Starting the OG queue Debugger \\0/'); for (let ogUrl of ogUrls) { let isValid = await IsValidOGUrl(ogUrl); if (!isValid) { logger.warn(`invalid URL ${ogUrl}`); continue; } let normalizedUrl = normalize(ogUrl); if (!normalizedUrl) { logger.warn(`no normalized URL for '${ogUrl}'`); continue; } logger.info(`Looking for og images at ${normalizedUrl} for type ${program.type}`); let ogImage = await ParseOG(normalizedUrl); if (!ogImage) { logger.info( chalk.red(`OG scraping didn't find an image for ${normalizedUrl}`), ); } else { logger.info(chalk.green(`Image found for ${normalizedUrl}: ${ogImage}`)); } if (program.task) { logger.info('creating a task on the bull queue'); let res = await OgQueueAdd( { url: normalizedUrl, type: program.type, update: true, }, { removeOnComplete: true, removeOnFail: true, }, ); } } } main() .then(() => { console.info('done'); process.exit(0); }) .catch((err) => { console.info(`failed with err ${err}`); process.exit(1); }); ================================================ FILE: api/src/commands/winds-podcast.js ================================================ import program from 'commander'; import '../loadenv'; import '../utils/db'; import { debugFeed } from './_debug-feed'; program .option('-t, --task', 'create a task') .option('-l, --limit ', 'The number of articles to parse', 2) .action((feedUrl, cmd) => { debugFeed('podcast', [feedUrl]); }) .parse(process.argv); ================================================ FILE: api/src/commands/winds-rebuild-search.js ================================================ import '../loadenv'; import '../utils/db'; import logger from '../utils/logger'; import Podcast from '../models/podcast'; import RSS from '../models/rss'; import { indexMany } from '../utils/search'; async function main() { logger.info('Reindexing all Podcasts to Algolia'); await loadModel(Podcast); logger.info('Reindexing all RSS feeds to Algolia'); await loadModel(RSS); } async function loadModel(Model) { const batchSize = 200; let indexed = 0; let accumulatedDocs = []; // XXX: enter Mongoose genius: { timeout: true } means disabling cursor timeouts await Model.find({ followerCount: { $gte: 1 } }, {}, { timeout: true }) .cursor() .eachAsync(async (d) => { accumulatedDocs.push(d.searchDocument()); if (accumulatedDocs.length >= batchSize) { await indexMany(accumulatedDocs); indexed += accumulatedDocs.length; process.stdout.clearLine(); process.stdout.cursorTo(0); process.stdout.write(`Indexed: ${indexed}`); accumulatedDocs = []; } }); if (accumulatedDocs.length >= 0) { await indexMany(accumulatedDocs); indexed += accumulatedDocs.length; process.stdout.clearLine(); process.stdout.cursorTo(0); process.stdout.write(`Indexed: ${indexed}`); accumulatedDocs = []; } process.stdout.write('\n'); } main() .then(() => { console.info('done'); process.exit(0); }) .catch((err) => { console.info(`failed with err ${err}`); process.exit(1); }); ================================================ FILE: api/src/commands/winds-rehash.js ================================================ import '../loadenv'; import '../utils/db'; import logger from '../utils/logger'; import Article from '../models/article'; import RSS from '../models/rss'; async function main() { logger.info('Re-hasing all articles'); await rehashModel(Article); } async function rehashModel(Model) { let indexed = 0; let promises = []; let batchSize = 100; await Model.find({}, { rss: 0 }, { timeout: true }) .cursor() .eachAsync(async (d) => { d.computeContentHash(); promises.push(d.save()); indexed += 1; process.stdout.clearLine(); process.stdout.cursorTo(0); process.stdout.write(`Indexed: ${indexed}`); if (promises.length > batchSize) { await Promise.all(promises); promises = []; } }); process.stdout.write('\n'); } main() .then(() => { console.info('done'); process.exit(0); }) .catch((err) => { console.info(`failed with err ${err}`); process.exit(1); }); ================================================ FILE: api/src/commands/winds-rss.js ================================================ import program from 'commander'; import '../loadenv'; import '../utils/db'; import { debugFeed } from './_debug-feed'; program .option('-t, --task', 'create a task') .option('-l, --limit ', 'The number of articles to parse', 2) .action((feedUrl, cmd) => { debugFeed('rss', [feedUrl]); }) .parse(process.argv); ================================================ FILE: api/src/commands/winds-truncate-rss-feed.js ================================================ import '../loadenv'; import '../utils/db'; import RSS from '../models/rss'; import Article from '../models/article'; import program from 'commander'; program.parse(process.argv); let args = program.args; async function main() { let rss = await RSS.findById(args[0]).exec(); await Article.deleteMany({ rss: rss._id }, {}, { timeout: true }).exec(); } main() .then(() => { console.info('done'); process.exit(0); }) .catch((err) => { console.info(`failed with err ${err}`); process.exit(1); }); ================================================ FILE: api/src/commands/winds.js ================================================ #!/usr/bin/env babel-node import program from 'commander'; import logger from '../utils/logger'; let version; if (process.env.DOCKER) { version = { version: 'DOCKER' }; } else { version = require('../../../app/package.json'); } program .version(version) .command('og ', 'Debug OG') .command('rss', 'Debug RSS feeds') .command('podcast', 'Debug Podcasts') .command('article', 'Debug Article Parsing') .command('discover', 'Debug RSS discovery') .command('rebuild-search', 'Rebuild search') .command('rehash', 'Rehash articles and episodes') .command('truncate-rss-feed ', 'Truncate articles for one RSS feed') .parse(process.argv); function main() { logger.info('Winds CLI, Have fun!'); } main(); ================================================ FILE: api/src/config/dev.js ================================================ module.exports = { url: 'https://winds.getstream.io', logger: { level: process.env.LOGGER_LEVEL || 'info' }, email: { backend: 'not-sendgrid', sender: { support: { email: 'not.a.real.email@getstream.io' } }, }, }; ================================================ FILE: api/src/config/index.js ================================================ import dotenv from 'dotenv'; import path from 'path'; const configs = { development: { config: 'dev' }, production: { config: 'prod' }, test: { config: 'test', env: path.resolve(__dirname, '..', '..', 'test', '.env'), }, }; const currentEnvironment = process.env.NODE_ENV || 'development'; const defaultPath = path.resolve(__dirname, '..', '..', '..', 'app', '.env'); const envPath = configs[currentEnvironment].env || defaultPath; console.log(`Loading .env from '${envPath}'`); dotenv.config({ path: envPath }); const _default = { product: { url: process.env.PRODUCT_URL, name: process.env.PRODUCT_NAME, author: process.env.PRODUCT_AUTHOR, }, server: { port: process.env.API_PORT, }, jwt: { secret: process.env.JWT_SECRET, }, database: { uri: process.env.DATABASE_URI, }, cache: { uri: process.env.CACHE_URI, }, algolia: { appId: process.env.REACT_APP_ALGOLIA_APP_ID, writeKey: process.env.ALGOLIA_WRITE_KEY, index: process.env.ALGOLIA_INDEX, }, logger: { level: process.env.LOGGER_LEVEL || 'warn', host: process.env.LOGGER_HOST, port: process.env.LOGGER_PORT, }, sentry: { dsn: process.env.SENTRY_DSN, }, url: process.env.BASE_URL, email: { backend: 'sendgrid', sender: { default: { name: process.env.EMAIL_SENDER_DEFAULT_NAME, email: process.env.EMAIL_SENDER_DEFAULT_EMAIL, }, support: { name: process.env.EMAIL_SENDER_SUPPORT_NAME, email: process.env.EMAIL_SENDER_SUPPORT_EMAIL, }, }, sendgrid: { secret: process.env.EMAIL_SENDGRID_SECRET, }, }, stream: { appId: process.env.STREAM_APP_ID, apiKey: process.env.STREAM_API_KEY, apiSecret: process.env.STREAM_API_SECRET, baseUrl: process.env.STREAM_API_BASE_URL, pro: process.env.STREAM_PLAN === 'pro', }, analyticsDisabled: process.env.ANALYTICS_DISABLED || false, statsd: { host: process.env.STATSD_HOST || 'localhost', port: process.env.STATSD_PORT || 8125, prefix: process.env.STATSD_PREFIX || '', }, newrelic: false, social: { reddit: { username: process.env.REDDIT_USERNAME, password: process.env.REDDIT_PASSWORD, key: process.env.REDDIT_APP_ID, secret: process.env.REDDIT_APP_SECRET, }, }, }; const config = require(`./${configs[currentEnvironment].config}`); module.exports = Object.assign({ env: currentEnvironment }, _default, config); ================================================ FILE: api/src/config/prod.js ================================================ module.exports = {}; ================================================ FILE: api/src/config/test.js ================================================ module.exports = { database: { uri: 'mongodb://localhost:27017/test', }, cache: { uri: 'redis://localhost:6379/10', }, email: { backend: 'dummy', sender: { default: { name: process.env.EMAIL_SENDER_DEFAULT_NAME, email: process.env.EMAIL_SENDER_DEFAULT_EMAIL, }, support: { name: process.env.EMAIL_SENDER_SUPPORT_NAME, email: process.env.EMAIL_SENDER_SUPPORT_EMAIL, }, }, sendgrid: { secret: process.env.EMAIL_SENDGRID_SECRET, }, }, analyticsDisabled: true, url: 'https://winds.gestream.io', }; ================================================ FILE: api/src/controllers/alias.js ================================================ import mongoose from 'mongoose'; import Alias from '../models/alias'; import Rss from '../models/rss'; import Podcast from '../models/podcast'; exports.list = async (req, res) => { const query = req.query || {}; if (query.type === 'rss' || query.type === 'podcast') { let obj = {}; obj[query.type] = { $exists: true }; obj['user'] = req.user.sub; return res.json(await Alias.find(obj).sort({ _id: -1 })); } res.json(await Alias.find({ user: req.user.sub })); }; exports.get = async (req, res) => { const aliasId = req.params.aliasId; if (!mongoose.Types.ObjectId.isValid(aliasId)) return res.status(400).json({ error: `Resource aliasId (${aliasId}) is an invalid ObjectId.`, }); const alias = await Alias.findOne({ _id: aliasId, user: req.user.sub }); if (!alias) return res.status(404).json({ error: 'Resource does not exist.' }); res.json(alias); }; exports.post = async (req, res) => { const data = Object.assign({}, req.body, { user: req.user.sub }); const isRss = data.hasOwnProperty('rss'); const isPodcast = data.hasOwnProperty('podcast'); if (!(isRss || isPodcast)) return res.status(422).json({ error: 'Invalid request.' }); if (isRss && isPodcast) return res.status(422).json({ error: 'Invalid request.' }); if (!data.hasOwnProperty('alias')) return res.status(422).json({ error: 'Missing required fields.' }); const exists = isRss ? await Rss.findById(data.rss) : await Podcast.findById(data.podcast); if (!exists) return res.status(422).json({ error: "Resource doesn't exists." }); const feedID = isRss ? { rss: data.rss } : { podcast: data.podcast }; if (!!(await Alias.findOne({ user: data.user, ...feedID }))) { res.json( await Alias.findOneAndUpdate( { user: data.user, ...feedID }, { alias: data.alias }, { new: true }, ), ); } else { const alias = await Alias.create(data); res.json(await Alias.findOne({ _id: alias._id })); } }; exports.put = async (req, res) => { const aliasId = req.params.aliasId; const newAlias = req.body.alias; if (!newAlias) return res.status(422).json({ error: 'Missing required fields.' }); if (!mongoose.Types.ObjectId.isValid(aliasId)) return res.status(400).json({ error: `Resource aliasId (${aliasId}) is an invalid ObjectId.`, }); const alias = await Alias.findById(aliasId); if (!alias) return res.status(404).json({ error: 'Resource does not exist.' }); if (alias.user._id != req.User.id) return res.sendStatus(403); res.json(await Alias.findByIdAndUpdate(aliasId, { alias: newAlias }, { new: true })); }; exports.delete = async (req, res) => { const alias = await Alias.findOne({ _id: req.params.aliasId, user: req.user.sub }); if (!alias) return res.status(404).json({ error: 'Resource does not exist.' }); await alias.remove(); res.sendStatus(204); }; ================================================ FILE: api/src/controllers/article.js ================================================ import mongoose from 'mongoose'; import Article from '../models/article'; import { getArticleRecommendations } from '../utils/personalization'; import { trackEngagement } from '../utils/analytics'; exports.list = async (req, res) => { const query = req.query || {}; let articles = []; if (query.type === 'recommended') { articles = await getArticleRecommendations(req.User._id.toString()); } else { if (query.rss && !mongoose.Types.ObjectId.isValid(query.rss)) { return res.status(400).json({ error: `Invalid RSS id ${query.rss}` }); } articles = await Article.apiQuery(req.query); } res.json(articles.filter((a) => a.valid)); }; exports.get = async (req, res) => { let articleId = req.params.articleId; if (!mongoose.Types.ObjectId.isValid(articleId)) { return res .status(400) .json({ error: `Resource articleId (${articleId}) is an invalid ObjectId.` }); } let article = await Article.findById(articleId); if (!article) { return res.status(404).json({ error: 'Resource not found.' }); } if (req.query && req.query.type === 'parsed') { let parsed; try { parsed = await article.getParsedArticle(); } catch (err) { return res.status(400).json({ error: 'Failed to parse the article.' }); } if (!parsed) { return res.status(400).json({ error: 'Failed to parse the article.' }); } await trackEngagement(req.User, { label: 'open_article', content: { foreign_id: `article:${articleId}` }, }); return res.json(parsed); } res.json(article); }; ================================================ FILE: api/src/controllers/auth.js ================================================ import { v4 as uuidv4 } from 'uuid'; import validator from 'validator'; import User from '../models/user'; import RSS from '../models/rss'; import Podcast from '../models/podcast'; import Follow from '../models/follow'; import config from '../config'; let packageInfo; if (process.env.DOCKER) { packageInfo = { version: 'DOCKER' }; } else { packageInfo = require('../../../app/package.json'); } import Redis from 'ioredis'; const cache = new Redis(config.cache.uri); import { SendPasswordResetEmail, SendWelcomeEmail } from '../utils/email/send'; async function getInterestMap() { const cacheKey = `interests:v${packageInfo.version.replace(/\./g, ':')}`; let str = await cache.get(cacheKey); let interestMap = JSON.parse(str); if (!interestMap) { interestMap = {}; const rss = await RSS.findFeatured(); const podcast = await Podcast.findFeatured(); for (let p of [...rss, ...podcast]) { let k = p.interest || 'featured'; let d = p.toObject(); d.type = p.constructor.modelName == 'RSS' ? 'rss' : 'podcast'; if (!(k in interestMap)) { interestMap[k] = []; } interestMap[k].push(d); } let cached = await cache.set( cacheKey, JSON.stringify(interestMap), 'EX', 60 * 30, ); } return interestMap; } exports.signup = async (req, res) => { const data = Object.assign({}, { interests: [] }, req.body); if (!data.name || !data.email || !data.username || !data.password) { return res.status(400).json({ error: 'Missing required fields.' }); } if (data.email && !validator.isEmail(data.email)) { return res.status(400).json({ error: 'Invalid or malformed email address.' }); } const regex = /^[\w-]+$/; if (data.username && !regex.test(data.username)) { return res.status(400).json({ error: 'Usernames must be alphanumeric but can only contain _, . or -.', }); } data.username = data.username.trim(); data.email = data.email.trim(); const exists = await User.findOne({ $or: [{ email: data.email }, { username: data.username }], }); if (exists) { return res.status(409).json({ error: 'A resource already exists with that username or email.', }); } const whitelist = Object.assign( {}, ...['name', 'email', 'username', 'password', 'interests'].map((key) => ({ [key]: data[key], })), ); const user = await User.create(whitelist); let interestMap = await getInterestMap(); let interestFollow = interestMap['featured'] || []; for (let i of data.interests) { let publications = interestMap[i]; if (publications) { interestFollow.push(...publications); } } let followCommands = interestFollow.map((interest) => { return { type: interest.type, publicationID: interest._id, userID: user._id.toString(), }; }); await Promise.all([ Follow.getOrCreateMany(followCommands), SendWelcomeEmail({ email: user.email }), ]); res.json(user.serializeAuthenticatedUser()); }; exports.login = async (req, res) => { const data = req.body || {}; if (!data.email || !data.password) { return res.status(400).json({ error: 'Missing required fields.' }); } const email = data.email.toLowerCase().trim(); const user = await User.findOne({ email: email }); if (!user) { return res.status(404).json({ error: 'Resource does not exist.' }); } if (!(await user.verifyPassword(data.password))) { return res.status(403).json({ error: 'Invalid username or password.' }); } res.status(200).send(user.serializeAuthenticatedUser()); }; exports.forgotPassword = async (req, res) => { const opts = { new: true }; const recoveryCode = uuidv4(); let email = req.body.email.toLowerCase(); const user = await User.findOneAndUpdate( { email: email }, { recoveryCode: recoveryCode }, opts, ); if (!user) { return res.status(404).json({ error: 'Resource could not be found.' }); } await SendPasswordResetEmail({ email: user.email, recoveryCode: user.recoveryCode }); res.sendStatus(200); }; exports.resetPassword = async (req, res) => { const user = await User.findOneAndUpdate( { email: req.body.email.toLowerCase(), recoveryCode: req.body.recoveryCode }, { password: req.body.password }, { new: true }, ); if (!user) { return res.status(404).json({ error: 'Resource could not be found.' }); } res.status(200).send(user.serializeAuthenticatedUser()); }; ================================================ FILE: api/src/controllers/default.js ================================================ exports.get = (req, res) => { res.status(200).send('pong'); }; exports.post = (req, res) => { res.status(200).send('pong'); }; ================================================ FILE: api/src/controllers/email.js ================================================ import mongoose from 'mongoose'; import User from '../models/user'; import { dailyContextGlobal, dailyContextUser, weeklyContextGlobal, weeklyContextUser, } from '../utils/email/context'; import { CreateDailyEmail, CreateWeeklyEmail, SendEmail } from '../utils/email/send'; exports.list = async (req, res) => { res.json(['daily', 'weekly']); }; async function createEmail(type, user) { const create = { daily: CreateDailyEmail, weekly: CreateWeeklyEmail }; const context = { // storing as lambda to defer evaluation daily: () => [dailyContextGlobal(), dailyContextUser(user)], weekly: () => [weeklyContextGlobal(), weeklyContextUser(user)], }; const emailContext = await Promise.all(context[type]()); return create[type](Object.assign({}, ...emailContext)); } exports.get = async (req, res) => { if (!['daily', 'weekly'].includes(req.params.emailName)) { return res.status(401); } const userId = req.query.user; if (!mongoose.Types.ObjectId.isValid(userId)) { return res.status(400).json({ error: `Invalid user id ${userId}.` }); } const user = await User.findOne({ _id: userId, admin: true }); if (!user) { return res.status(404); } const email = await createEmail(req.params.emailName, user); return res.type('html').send(email.html); }; exports.post = async (req, res) => { if (!['daily', 'weekly'].includes(req.params.emailName)) { return res.status(401); } const userId = req.query.user; if (!mongoose.Types.ObjectId.isValid(userId)) { return res.status(400).json({ error: `Invalid user id ${userId}.` }); } const user = await User.findOne({ _id: userId, admin: true }); if (!user) { return res.status(404); } const email = await createEmail(req.params.emailName, user); const result = await SendEmail(email); return res.status(200).json(result); }; ================================================ FILE: api/src/controllers/episode.js ================================================ import Episode from '../models/episode'; import { getEpisodeRecommendations } from '../utils/personalization'; import { trackEngagement } from '../utils/analytics'; import mongoose from 'mongoose'; exports.list = async (req, res) => { const query = req.query || {}; let episodes = []; if (query.type === 'recommended') { episodes = await getEpisodeRecommendations(req.User._id.toString()); } else { if (query.podcast && !mongoose.Types.ObjectId.isValid(query.podcast)) { return res.status(400).json({ error: `Invalid Podcast id ${query.podcast}` }); } episodes = await Episode.apiQuery(req.query); } res.json(episodes); }; exports.get = async (req, res) => { const episodeId = req.params.episodeId; if (episodeId === 'undefined') { return res.status(404).json({ error: 'Missing required field episodeId.' }); } if (!mongoose.Types.ObjectId.isValid(episodeId)) { return res .status(400) .json({ error: `Resource episodeId (${episodeId}) is an invalid ObjectId.` }); } let episode = await Episode.findById(episodeId); if (!episode) { return res.status(404).json({ error: 'Episode could not be found.' }); } if (req.query && req.query.type === 'parsed') { try { const parsed = await episode.getParsedEpisode(); if (!parsed) { return res.status(400).json({ error: 'Failed to parse the episode.' }); } await trackEngagement(req.User, { label: 'open_episode', content: { foreign_id: `episode:${episodeId}` }, }); return res.json(parsed); } catch (err) { return res.status(400).json({ error: 'Failed to parse the episode.' }); } } res.json(episode); }; ================================================ FILE: api/src/controllers/featured.js ================================================ import RSS from '../models/rss'; import Podcast from '../models/podcast'; import config from '../config'; let packageInfo; if (process.env.DOCKER) { packageInfo = { version: 'DOCKER' }; } else { packageInfo = require('../../../app/package.json'); } import Redis from 'ioredis'; const cache = new Redis(config.cache.uri); exports.list = async (req, res) => { const cacheKey = `featured:v${packageInfo.version.replace(/\./g, ':')}`; let str = await cache.get(cacheKey); let data = JSON.parse(str); if (!data) { data = []; const rss = await RSS.find({ featured: true }); rss.map((doc) => { let r = doc.toObject(); r.type = 'rss'; data.push(r); }); const podcasts = await Podcast.find({ featured: true }); podcasts.map((doc) => { let p = doc.toObject(); p.type = 'podcast'; data.push(p); }); await cache.set(cacheKey, JSON.stringify(data), 'EX', 60 * 30); } let shuffled = data .map((a) => [Math.random(), a]) .sort((a, b) => a[0] - b[0]) .map((a) => a[1]); res.json(shuffled); }; ================================================ FILE: api/src/controllers/feed.js ================================================ import Article from '../models/article'; import Episode from '../models/episode'; import config from '../config'; import logger from '../utils/logger'; import { getStreamClient } from '../utils/stream'; async function getContentFeed(req, res, type, model) { const limit = req.query.per_page || 10; const offset = req.query.page * limit || 0; const response = await getStreamClient() .feed(`user_${type}`, req.params.userId) .get({ limit, offset }); let articleIDs = response.results.map((r) => { return r.foreign_id.split(':')[1]; }); let articles = await model.find({ _id: { $in: articleIDs } }); let articleLookup = {}; for (let a of articles) { articleLookup[a._id] = a; } let sortedArticles = []; for (let r of response.results) { let articleID = r.foreign_id.split(':')[1]; let article = articleLookup[articleID]; if (!article) { logger.error( `Failed to load article ${articleID} specified in feed user_${type}:${req.params.userId}`, ); continue; } sortedArticles.push(article); } res.json(sortedArticles); } exports.get = async (req, res, _) => { const params = req.params || {}; const query = req.query || {}; if (req.User.id != params.userId) { return res.status(404).send('Invalid user id'); } switch (query.type) { case 'article': return getContentFeed(req, res, 'article', Article); case 'episode': return getContentFeed(req, res, 'episode', Episode); } res.status(400).send( 'Request must include "type" of user, timeline, article or episode', ); }; ================================================ FILE: api/src/controllers/folder.js ================================================ import mongoose from 'mongoose'; import config from '../config'; import { getStreamClient } from '../utils/stream'; import Folder from '../models/folder'; import Rss from '../models/rss'; import Podcast from '../models/podcast'; import Article from '../models/article'; import Episode from '../models/episode'; exports.list = async (req, res) => { res.json(await Folder.find({ user: req.user.sub })); }; exports.feed = async (req, res) => { const folderId = req.params.folderId; const limit = req.query.per_page || 10; const offset = req.query.page * limit || 0; /* Custom ranking in Stream Pro plan // Should be defined in Stream dashboard */ const ranking = config.stream.pro ? { ranking: req.query.sort_by === 'oldest' ? 'time_oldest' : '' } : {}; const folder = await Folder.findById(req.params.folderId); if (!folder) return res.status(404).json({ error: 'Resource does not exist.' }); if (folder.user._id != req.user.sub) return res.sendStatus(403); const response = await getStreamClient() .feed('folder', folderId) .get({ limit, offset, ...ranking }); const streamFeeds = response.results.map((r) => { const split = r.foreign_id.split(':'); return { type: split[0], id: split[1] }; }); const articleIds = streamFeeds.filter((f) => f.type === 'articles').map((f) => f.id); const espisodeIds = streamFeeds.filter((f) => f.type === 'episodes').map((f) => f.id); const articles = await Article.find({ _id: { $in: articleIds } }); const episodes = await Episode.find({ _id: { $in: espisodeIds } }); const feedLookup = [...articles, ...episodes].reduce((result, feed) => { result[feed._id] = feed; return result; }, {}); let feeds = []; for (const f of streamFeeds) { let feed = feedLookup[f.id]; if (!feed) { logger.error(`Failed to load ${f.type}:${f.id} in folder:${folderId}`); continue; } feeds.push(feed); } return res.json(feeds); }; exports.get = async (req, res) => { const folder = await Folder.findById(req.params.folderId); if (!folder) return res.status(404).json({ error: 'Resource does not exist.' }); if (folder.user._id != req.user.sub) return res.sendStatus(403); res.json(folder); }; exports.post = async (req, res) => { const data = { user: req.user.sub, name: req.body.name || undefined, rss: req.body.rss || [], podcast: req.body.podcast || [], }; if (!data.name) return res.status(422).json({ error: 'Missing required field' }); if (!(await checkRssPodcast(data.rss, data.podcast))) return res.status(422).json({ error: 'Some wrong feed Id provided' }); if ( (data.rss.length && (await Folder.find({ user: data.user, rss: { $in: data.rss } })).length) || (data.podcast.length && (await Folder.find({ user: data.user, podcast: { $in: data.podcast } })) .length) ) { return res.status(422).json({ error: 'Feed already has a folder' }); } const folder = await Folder.create(data); await streamFollowMany(folder); res.json(await Folder.findById(folder._id)); }; exports.put = async (req, res) => { const folderId = req.params.folderId; const removeFeed = req.body.action === 'remove'; const name = req.body.name; const rss = req.body.rss; const podcast = req.body.podcast; const user = req.user.sub; const folder = await Folder.findById(folderId); if (!(name || rss || podcast)) return res.status(422).json({ error: 'You have to put {name||rss||podcast}' }); if (!folder) return res.status(404).json({ error: 'Resource does not exist.' }); if (folder.user._id != user) return res.sendStatus(403); if ((rss || podcast) && !(await checkRssPodcast([rss], [podcast]))) return res.status(404).json({ error: 'Wrong feed Id provided' }); if (removeFeed) { await streamUnfollow(folderId, rss ? 'rss' : 'podcast', rss ? rss : podcast); const data = rss ? { $pull: { rss } } : { $pull: { podcast } }; const removed = await Folder.findByIdAndUpdate(folderId, data, { new: true }); return res.json(removed); } let data = {}; if (rss) { const prevFolder = await Folder.findOne({ user, rss }); if (prevFolder) { await Folder.findByIdAndUpdate(prevFolder._id, { $pull: { rss } }); await streamUnfollow(prevFolder._id, 'rss', rss); } await streamFollow(folderId, 'rss', rss); data = { ...data, $push: { rss } }; } else if (podcast) { const prevFolder = await Folder.findOne({ user, podcast }); if (prevFolder) { await Folder.findByIdAndUpdate(prevFolder._id, { $pull: { podcast } }); await streamUnfollow(prevFolder._id, 'podcast', podcast); } await streamFollow(folderId, 'podcast', podcast); data = { ...data, $push: { podcast } }; } if (name) data = { name }; const updatedFolder = await Folder.findByIdAndUpdate(folderId, data, { new: true }); res.json(updatedFolder); }; exports.delete = async (req, res) => { const folder = await Folder.findById(req.params.folderId); if (!folder) return res.status(404).json({ error: 'Resource does not exist.' }); if (folder.user._id != req.user.sub) return res.sendStatus(403); await streamUnfollowMany(folder); await folder.remove(); res.sendStatus(204); }; async function checkRssPodcast(rssIDs, podcastIDs) { if (!rssIDs[0]) rssIDs = []; if (!podcastIDs[0]) podcastIDs = []; if (rssIDs.length) { const rss = await Rss.find({ _id: { $in: rssIDs.map((_id) => mongoose.Types.ObjectId(_id)) }, }); if (rss.length != rssIDs.length) return false; } if (podcastIDs.length) { const podcast = await Podcast.find({ _id: { $in: podcastIDs.map((_id) => mongoose.Types.ObjectId(_id)) }, }); if (podcast.length != podcastIDs.length) return false; } return true; } async function streamFollow(folderId, type, feedId) { const feed = getStreamClient().feed('folder', folderId); return await feed.follow(type, feedId); } async function streamUnfollow(folderId, type, feedId) { const feed = getStreamClient().feed('folder', folderId); return await feed.unfollow(type, feedId); } async function streamFollowMany(folder) { const feedRels = generateRels(folder); if (feedRels.length > 0) await getStreamClient().followMany(feedRels); } async function streamUnfollowMany(folder) { const feedRels = generateRels(folder); if (feedRels.length > 0) await getStreamClient().unfollowMany(feedRels); } function generateRels(folder) { const rssRel = folder.rss.map((r) => ({ source: `folder:${folder._id}`, target: `rss:${r._id}`, })); const podcastRel = folder.podcast.map((p) => ({ source: `folder:${folder._id}`, target: `podcast:${p._id}`, })); return [...rssRel, ...podcastRel]; } ================================================ FILE: api/src/controllers/follow.js ================================================ import stream from 'getstream'; import async from 'async'; import mongoose from 'mongoose'; import Follow from '../models/follow'; import User from '../models/user'; import Podcast from '../models/podcast'; import RSS from '../models/rss'; import config from '../config'; import { getStreamClient } from '../utils/stream'; exports.list = async (req, res) => { const lookup = { user: req.user.sub }; if (req.query.type === 'rss') { lookup['rss'] = { $exists: true }; } else if (req.query.type === 'podcast') { lookup['podcast'] = { $exists: true }; } else if (req.query.rss) { lookup['rss'] = req.query.rss; } else if (req.query.podcast) { lookup['podcast'] = req.query.podcast; } else { throw new Error('Invalid parameter passed to follow list endpoint.'); } const follows = await Follow.find(lookup); return res.json(follows); }; exports.post = async (req, res) => { const query = req.query || {}; const user = req.user.sub; let follow; if (!query.type || (!query.podcast && !query.rss)) { return res.status(422).send('Missing required type query parameter.'); } if (query.type === 'podcast') { if (!mongoose.Types.ObjectId.isValid(query.podcast)) { return res.status(400).json({ error: `Parameter podcast (${query.podcast}) is an invalid ObjectId.`, }); } let podcast = await Podcast.findById(query.podcast); if (!podcast) { return res.status(404).json({ error: 'Resource not found.' }); } follow = await Follow.getOrCreate('podcast', user, query.podcast); } else if (query.type === 'rss') { if (!mongoose.Types.ObjectId.isValid(query.rss)) { return res.status(400).json({ error: `Parameter rss (${query.rss}) is an invalid ObjectId.`, }); } let rss = await RSS.findById(query.rss); if (!rss) { return res.status(404).json({ error: 'Resource not found.' }); } follow = await Follow.getOrCreate('rss', user, query.rss); } else { return res.status(400).json({ error: 'Missing required parameter.' }); } return res.json(follow); }; exports.delete = async (req, res) => { const query = req.query || {}; const lookup = { user: req.user.sub }; if (query.rss) { lookup['rss'] = query.rss; } else if (query.podcast) { lookup['podcast'] = query.podcast; } else { return res .send(400) .json({ error: 'Invalid parameter passed to delete method.' }); } const follow = await Follow.findOne(lookup); if (follow) { await follow.removeFromStream(); await follow.remove(); } return res.status(204).send(); }; ================================================ FILE: api/src/controllers/health.js ================================================ import Article from '../models/article'; import Episode from '../models/episode'; import RSS from '../models/rss'; import Podcast from '../models/podcast'; import moment from 'moment'; import config from '../config'; import { Throw } from '../utils/errors'; import Queue from 'bull'; import Arena from 'bull-arena'; import logger from '../utils/logger'; let version; if (process.env.DOCKER) { version = 'DOCKER'; } else { version = require('../../../app/package.json').version; } const rssQueue = new Queue('rss', config.cache.uri); const ogQueue = new Queue('og', config.cache.uri); const podcastQueue = new Queue('podcast', config.cache.uri); const socialQueue = new Queue('socail', config.cache.uri); const streamQueue = new Queue('stream', config.cache.uri); const tooOld = 3 * 60 * 60 * 1000; const queues = { 'RSS Queue': rssQueue, 'OG Queue': ogQueue, 'Podcast Queue': podcastQueue, 'Social Score Queue': socialQueue, 'Personalisation-sync Queue': streamQueue, }; const queueTTL = 24 * 60 * 60 * 1000; // 1 day const queueCompletedCleanup = async (queue) => { await queue.clean(queueTTL, 'completed'); // cleans all jobs that completed over 1 day ago. }; const queueFailedCleanup = async (queue) => { await queue.clean(queueTTL, 'failed'); // clean all jobs that failed over 1 day ago }; queueCompletedCleanup(rssQueue); queueCompletedCleanup(ogQueue); queueCompletedCleanup(podcastQueue); queueCompletedCleanup(socialQueue); queueCompletedCleanup(streamQueue); queueFailedCleanup(rssQueue); queueFailedCleanup(ogQueue); queueFailedCleanup(podcastQueue); queueFailedCleanup(socialQueue); queueFailedCleanup(streamQueue); exports.health = async (req, res) => { res.status(200).send({ version, healthy: '100%' }); }; exports.status = async (req, res) => { const output = { version, code: 200, rss: {}, podcast: {} }; const latestArticle = await Article.findOne().sort({ _id: -1 }); const latestEpisode = await Episode.findOne().sort({ _id: -1 }); const now = new Date(); output.now = now; if (latestArticle) { output.mostRecentArticle = moment(latestArticle.createdAt).fromNow(); if (now - latestArticle.createdAt > tooOld) { output.code = 500; output.error = 'The most recent article is too old.'; } } else { output.mostRecentArticle = -1; } if (latestEpisode) { output.mostRecentEpisode = moment(latestEpisode.createdAt).fromNow(); if (now - latestEpisode.createdAt > tooOld) { output.code = 500; output.error = 'The most recent episode is too old.'; } } else { output.mostRecentEpisode = -1; } output.rss.parsing = await RSS.count({ 'queueState.isParsing': true }); output.rss.og = await RSS.count({ 'queueState.isUpdatingOG': true }); output.rss.stream = await RSS.count({ 'queueState.isSynchronizingWithStream': true }); output.rss.social = await RSS.count({ 'queueState.isFetchingSocialScore': true }); output.podcast.parsing = await Podcast.count({ 'queueState.isParsing': true }); output.podcast.og = await Podcast.count({ 'queueState.isUpdatingOG': true }); output.podcast.stream = await Podcast.count({ 'queueState.isSynchronizingWithStream': true, }); if (output.rss.parsing > 2000) { output.code = 500; output.error = `There are too many RSS feeds currently parsing ${output.rssCurrentlyParsing}`; } if (output.podcast.parsing > 500) { output.code = 500; output.error = `There are too many Podcast feeds currently parsing ${output.podcastCurrentlyParsing}`; } res.status(output.code).json(output); }; exports.queue = async (req, res) => { let output = { version, code: 200 }; for (const [key, queue] of Object.entries(queues)) { let queueStatus = await queue.getJobCounts(); output[key] = queueStatus; if (queueStatus.waiting > 2500) { output.code = 500; output.error = `Queue ${key} has more than 2500 items waiting to be processed: ${queueStatus.waiting} are waiting`; } } res.status(output.code).send(output); }; exports.sentryThrow = async (req, res) => { Throw(); }; exports.sentryLog = async (req, res) => { try { Throw(); } catch (err) { logger.error('this is a test error', { err, tags: { env: 'testing' }, extra: { additional: 'data', is: 'awesome' }, }); } try { Throw(); } catch (err) { logger.error({ err }); } logger.error('0'); logger.error('1'); res.status(200).send('{}'); }; exports.bullArena = Arena( { Bull: Queue, queues: [ { type: 'bull', hostId: 'local', name: 'rss', url: config.cache.uri, }, { type: 'bull', hostId: 'local', name: 'podcast', url: config.cache.uri, }, { type: 'bull', hostId: 'local', name: 'og', url: config.cache.uri, }, { type: 'bull', hostId: 'local', name: 'social', url: config.cache.uri, }, { type: 'bull', hostId: 'local', name: 'stream', url: config.cache.uri, }, ], }, { disableListen: true }, ); ================================================ FILE: api/src/controllers/listen.js ================================================ import Listen from '../models/listen'; import User from '../models/user'; import { trackEngagement } from '../utils/analytics'; import config from '../config'; exports.list = async (req, res) => { if (req.query.user && req.query.user != req.User.id) { return res.sendStatus(403); } const listens = await Listen.find({ user: req.query.user, episode: req.query.episode, }); res.json(listens); }; exports.post = async (req, res) => { const data = Object.assign({}, req.body, { user: req.user.sub }); const { _id, id, ...cleanedData } = data; const listen = await Listen.findOneAndUpdate( { user: cleanedData.user, episode: cleanedData.episode }, { $set: cleanedData }, { new: true, upsert: true }, ); const duration = data.duration; if (Math.floor(duration / 15) % 4 == 0) { const foreign_id = `episode:${data.episode}`; await trackEngagement(req.User, { label: 'listen_progress', content: { foreign_id: foreign_id }, }); } res.json(listen); }; ================================================ FILE: api/src/controllers/note.js ================================================ import Note from '../models/note'; exports.list = async (req, res) => { res.json(await Note.find({ user: req.user.sub }).sort({ updatedAt: -1 })); }; exports.get = async (req, res) => { const note = await Note.findById(req.params.noteId); if (!note) return res.status(404).json({ error: 'Resource does not exist.' }); if (note.user._id != req.user.sub) return res.sendStatus(403); res.json(note); }; exports.post = async (req, res) => { const data = { user: req.user.sub, article: req.body.article, episode: req.body.episode, start: req.body.start, end: req.body.end, text: req.body.text || '', }; if (data.start == undefined || data.end == undefined) return res.status(422).json({ error: 'missing start|end offset' }); if (!data.article && !data.episode) return res.status(422).json({ error: 'missing article||episode id' }); if (data.article && data.episode) return res.status(422).json({ error: 'both article||episode id' }); const overlaps = await Note.find({ user: data.user, article: data.article, episode: data.episode, $nor: [{ end: { $lte: data.start } }, { start: { $gte: data.end } }], }) .sort({ start: 1 }) .lean(); const mergedNotes = overlaps.map((n) => n._id); if (overlaps.length) { for (const note of overlaps) { if (note.start < data.start) data.start = note.start; if (note.end > data.end) data.end = note.end; if (note.text) data.text = data.text + '\n' + note.text; } await Note.deleteMany({ _id: { $in: mergedNotes } }); } const note = await Note.create(data); const noteJson = (await Note.findById(note._id)).toJSON(); res.json({ ...noteJson, mergedNotes }); }; exports.put = async (req, res) => { const noteId = req.params.noteId; const note = await Note.findById(noteId).lean(); if (!note) return res.status(404).json({ error: 'Resource does not exist.' }); if (note.user._id != req.user.sub) return res.sendStatus(403); const start = req.body.start || note.start; const end = req.body.end || note.end; const text = req.body.text || note.text || ''; res.json(await Note.findByIdAndUpdate(noteId, { start, end, text }, { new: true })); }; exports.delete = async (req, res) => { const note = await Note.findById(req.params.noteId); if (!note) return res.status(404).json({ error: 'Resource does not exist.' }); if (note.user._id != req.user.sub) return res.sendStatus(403); await note.remove(); res.sendStatus(204); }; ================================================ FILE: api/src/controllers/opml.js ================================================ import opmlParser from 'node-opml-parser'; import opmlGenerator from 'opml-generator'; import moment from 'moment'; import entities from 'entities'; import normalizeUrl from 'normalize-url'; import stream from 'getstream'; import util from 'util'; import RSS from '../models/rss'; import Podcast from '../models/podcast'; import Follow from '../models/follow'; import User from '../models/user'; import config from '../config'; import { isBlockedURLs } from '../utils/blockedURLs'; import * as rateLimit from '../utils/rate-limiter'; import { RssQueueAdd, PodcastQueueAdd } from '../asyncTasks'; import { IsPodcastURL } from '../parsers/detect-type'; import search from '../utils/search'; import { isURL } from '../utils/validation'; exports.get = async (req, res) => { let follows = await Follow.find({ user: req.user.sub }); let user = await User.find({ _id: req.user.sub }); if (!user) { return res.status(404).json({ error: 'User does not exist.' }); } let header = { dateCreated: moment().toISOString(), ownerName: user.name, title: `Subscriptions in Winds - Powered by ${config.product.author}`, }; let outlines = follows.map((follow) => { let feed = follow.rss ? follow.rss : follow.podcast; let feedType = follow.rss ? 'rss' : 'podcast'; let obj = { htmlUrl: feed.url, title: feed.title, type: feedType, xmlUrl: feed.feedUrl, }; return obj; }); let opml = opmlGenerator(header, outlines); res.set({ 'Content-Disposition': 'attachment; filename=export.opml;', 'Content-Type': 'application/xml', }); res.end(opml); }; function partitionBy(collection, selector) { if (!collection.length) { return []; } const partitions = [[collection[0]]]; let currentPartition = 0; let lastElement = selector(collection[0]); for (let i = 1; i < collection.length; ++i) { const element = selector(collection[i]); if (element !== lastElement) { partitions.push([]); ++currentPartition; } partitions[currentPartition].push(collection[i]); lastElement = element; } return partitions; } async function identifyFeedType(feed) { let schema; let publicationType; let isPodcast; if (!feed.valid) { throw new Error(`Invalid feedUrl ${feed.feedUrl}`); } try { isPodcast = await IsPodcastURL(feed.feedUrl); } catch (_) { throw new Error(`Error opening ${feed.feedUrl}`); } if (isPodcast) { schema = Podcast; publicationType = 'podcast'; } else { schema = RSS; publicationType = 'rss'; } const feedUrl = normalizeUrl(feed.feedUrl); if (!isURL(feedUrl)) { throw new Error(`Invalid URL for OPML import ${feedUrl}`); } return { feed, schema, publicationType, url: feedUrl }; } async function getOrCreateManyPublications(feeds) { if (!feeds.length) { return []; } const feedUrls = feeds.map((p) => p.url); const instances = await feeds[0].schema.find({ feedUrl: { $in: feedUrls } }); const existingFeedUrls = new Set(instances.map((i) => i.feedUrl)); const newPublications = feeds.filter((p) => !existingFeedUrls.has(p.url)); if (!newPublications.length) { return instances; } const newInstanceData = newPublications.map((p) => { const title = entities.decodeHTML(p.feed.title) || ''; return { categories: p.publicationType, description: title.substring(0, 240), favicon: p.feed.favicon, feedUrl: p.url, lastScraped: moment().subtract(12, 'hours'), public: true, publicationDate: moment().toISOString(), title, url: p.feed.url, }; }); const newInstances = await feeds[0].schema.insertMany(newInstanceData); const queue = feeds[0].publicationType.toLowerCase() == 'rss' ? RssQueueAdd : PodcastQueueAdd; const queueData = newInstances.map((i) => ({ [i.categories]: i._id, url: i.feedUrl, })); const enqueues = queueData.map((d) => queue(d, { priority: 1, removeOnComplete: true, removeOnFail: true }), ); const indexing = newInstances.map((i) => search(i.searchDocument())); await Promise.all(enqueues.concat(indexing)); return instances.concat(newInstances); } exports.post = async (req, res) => { const upload = Buffer.from(req.file.buffer).toString('utf8'); if (!upload) { return res.status(422).json({ error: 'Invalid OPML upload.' }); } let feeds; try { feeds = await util.promisify(opmlParser)(upload); } catch (e) { return res.status(422).json({ error: 'Invalid OPML upload.' }); } for (const feed of feeds) { feed.valid = true; if (isURL(feed.feedUrl)) { feed.feedUrl = normalizeUrl(feed.feedUrl).trim(); } else { feed.valid = false; } if (isURL(feed.url)) { feed.url = normalizeUrl(feed.url); } feed.favicon = ''; if (feeds.site && feeds.site.favicon) { feed.favicon = feeds.site.favicon; } } const feedIdentities = await Promise.all( feeds.map(async (f) => { try { if (isBlockedURLs(feeds.feedUrl)) { return { feedUrl: f.feedUrl, error: "this feed can't be added" }; } return { result: await identifyFeedType(f) }; } catch (err) { return { feedUrl: f.feedUrl, error: err.message }; } }), ); const failedFeeds = feedIdentities.filter((f) => !!f.error); const feedSchemas = feedIdentities.filter((f) => !f.error).map((f) => f.result); feedSchemas.sort((lhs, rhs) => lhs.publicationType.localeCompare(rhs.publicationType), ); //XXX: process podcasts first, then rss to allow bulk operations const partitions = partitionBy(feedSchemas, (p) => p.schema); let publications = []; const chunkSize = 1000; for (const feeds of partitions) { for (let offset = 0; offset < feeds.length; offset += chunkSize) { const limit = offset + chunkSize; const chunk = feeds.slice(offset, limit); publications = publications.concat(await getOrCreateManyPublications(chunk)); } } let follows = []; for (let offset = 0; offset < publications.length; offset += chunkSize) { const limit = offset + chunkSize; const chunk = publications.slice(offset, limit); await rateLimit.tick(req.user.sub); const followInstructions = chunk.map((p) => ({ type: p.categories.toLowerCase(), userID: req.user.sub, publicationID: p._id, })); const newFollows = await Follow.getOrCreateMany(followInstructions); follows = follows.concat( newFollows.map((f, i) => ({ feedUrl: chunk[i].url, follow: f })), ); } const errors = failedFeeds.map((f) => ({ ...f, follow: {} })); return res.json(follows.concat(errors)); }; ================================================ FILE: api/src/controllers/pin.js ================================================ import mongoose from 'mongoose'; import Pin from '../models/pin'; import config from '../config'; import { trackEngagement } from '../utils/analytics'; import { getStreamClient } from '../utils/stream'; exports.list = async (req, res) => { const query = req.query || {}; if (query.type === 'episode' || query.type === 'article') { let obj = {}; obj[query.type] = { $exists: true }; obj['user'] = req.user.sub; // can only list pins for the return res.json(await Pin.find(obj).sort({ _id: -1 })); } res.json(await Pin.apiQuery(req.query)); }; exports.get = async (req, res) => { if (!mongoose.Types.ObjectId.isValid(req.params.pinId)) { return res.status(400).json({ error: `Resource pinId (${req.params.pinId}) is an invalid ObjectId.`, }); } let pin = await Pin.findById(req.params.pinId); if (!pin) { return res.status(404).json({ error: 'Resource does not exist.' }); } res.json(pin); }; exports.post = async (req, res) => { const data = Object.assign({}, req.body, { user: req.user.sub }); let type; if (data.hasOwnProperty('article')) { type = 'article'; } else if (data.hasOwnProperty('episode')) { type = 'episode'; } else { return res.status(422).json({ error: 'Missing required fields.', }); } const obj = { user: data.user, [type]: data[type] }; if (!!(await Pin.findOne(obj))) { return res.status(409).json({ error: 'Resource already exists.' }); } const pin = await Pin.create(data); await getStreamClient() .feed('user', pin.user) .addActivity({ actor: pin.user, verb: 'pin', object: pin._id, foreign_id: `pins:${pin._id}`, time: pin.createdAt, }); const label = pin.article ? 'pin_article' : 'pin_episode'; const foreignId = pin.article ? `article:${pin.article}` : `episode:${pin.episode}`; await trackEngagement(req.User, { label: label, content: { foreign_id: foreignId }, }); res.json(await Pin.findOne({ _id: pin._id })); }; exports.delete = async (req, res) => { const exists = await Pin.findOne({ _id: req.params.pinId, user: req.user.sub }); if (!exists) { return res.status(404).json({ error: 'Resource does not exist.' }); } await Pin.remove({ _id: req.params.pinId }); res.sendStatus(204); }; ================================================ FILE: api/src/controllers/playlist.js ================================================ import Playlist from '../models/playlist'; import config from '../config'; import search from '../utils/search'; async function listFilter(req, res) { const playlists = await Playlist.apiQuery(req.query); res.json(playlists); } exports.list = async (req, res, _) => { const query = req.query || {}; if (query.user && query.user != req.User.id) { return res.sendStatus(403); } await listFilter(req, res); }; exports.get = async (req, res, _) => { if (req.params.playlistId == 'undefined') { return res.sendStatus(404); } const playlist = await Playlist.findById(req.params.playlistId); if (!playlist) { return res.sendStatus(404); } if (playlist.user._id != req.User.id) { return res.sendStatus(403); } res.json(playlist); }; exports.post = async (req, res, _) => { const data = Object.assign({}, req.body, { user: req.user.sub }); let playlist; playlist = await Playlist.create(data); playlist = await Playlist.findById(playlist._id); await search({ _id: playlist._id, episodes: playlist.episodes, name: playlist.name, type: 'playlist', user: playlist.user, }); res.json(playlist); }; exports.put = async (req, res, _) => { const playlist = await Playlist.findById(req.params.playlistId); if (!playlist) { return res.sendStatus(404); } if (playlist.user._id != req.User.id) { return res.sendStatus(403); } await Playlist.update({ _id: req.params.playlistId }, req.body, { new: true }); res.json(await Playlist.findOne({ _id: req.params.playlistId })); }; exports.delete = async (req, res, _) => { const playlist = await Playlist.findById(req.params.playlistId); if (!playlist) { return res.sendStatus(404); } if (playlist.user._id != req.User.id) { return res.sendStatus(403); } await Playlist.remove({ _id: req.params.playlistId }); res.sendStatus(204); }; ================================================ FILE: api/src/controllers/podcast.js ================================================ import mongoose from 'mongoose'; import normalizeUrl from 'normalize-url'; import Podcast from '../models/podcast'; import { isURL } from '../utils/validation'; import { isBlockedURLs } from '../utils/blockedURLs'; import { discoverRSS } from '../parsers/discovery'; import { getPodcastRecommendations } from '../utils/personalization'; import { ParsePodcast } from '../parsers/feed'; import strip from 'strip'; import search from '../utils/search'; import { PodcastQueueAdd, OgQueueAdd } from '../asyncTasks'; exports.list = async (req, res) => { let query = req.query || {}; let podcasts; if (query.type === 'recommended') { podcasts = await getPodcastRecommendations(req.User._id.toString(), 7); } else { podcasts = await Podcast.apiQuery(req.query); } res.json(podcasts); }; exports.get = async (req, res) => { const podcastId = req.params.podcastId; if (!mongoose.Types.ObjectId.isValid(podcastId)) { return res .status(422) .json({ error: `Podcast ID ${podcastId} is an invalid ObjectId.` }); } let podcast = await Podcast.findById(podcastId).exec(); if (!podcast) { return res.status(404).json({ error: `Resource not found.` }); } res.json(podcast.serialize()); }; exports.post = async (req, res) => { const data = Object.assign(req.body, { user: req.user.sub }) || {}; // todo refactor this check for validating partial urls like google.com let url; try { url = normalizeUrl(data.feedUrl); } catch (e) { return res.status(400).json({ error: 'Please provide a valid podcast URL.' }); } if (!data.feedUrl || !isURL(url)) { return res.status(400).json({ error: 'Please provide a valid podcast URL.' }); } if (isBlockedURLs(data.feedUrl)) { return res.status(400).json({ error: 'This podcast can not be added.' }); } let foundPodcasts = await discoverRSS(normalizeUrl(data.feedUrl)); if (!foundPodcasts.feedUrls.length) { return res.status(404).json({ error: `Can't find any podcasts.` }); } let insertedPodcasts = []; let podcasts = []; for (let feed of foundPodcasts.feedUrls.slice(0, 10)) { let podcastContent = await ParsePodcast(feed.url, 1); let title, url, images, description; if (podcastContent) { title = strip(podcastContent.title) || strip(feed.title); url = podcastContent.link || foundPodcasts.site.url; images = { favicon: foundPodcasts.site.favicon, og: podcastContent.image, }; description = podcastContent.description; } else { title = strip(feed.title); url = foundPodcasts.site.url; images = { favicon: foundPodcasts.site.favicon }; description = ''; } let feedUrl = normalizeUrl(feed.url); if (!isURL(feedUrl)) { continue; } let podcast; podcast = await Podcast.findOne({ feedUrl: feedUrl }); if (!podcast || (podcast && !podcast.featured)) { let response = await Podcast.findOneAndUpdate( { feedUrl: feedUrl }, { categories: 'podcast', description: (description || '').substring(0, 240), feedUrl: feedUrl, images: images, lastScraped: new Date(0), title: title, url: normalizeUrl(url), valid: true, }, { new: true, rawResult: true, upsert: true, }, ); podcast = response.value; if (response.lastErrorObject.upserted) { insertedPodcasts.push(podcast); } } podcasts.push(podcast); } let promises = []; insertedPodcasts.map((p) => { let scrapingPromise = PodcastQueueAdd( { podcast: p._id, url: p.feedUrl, }, { priority: 1, removeOnComplete: true, removeOnFail: true, }, ); promises.push(scrapingPromise); if (!p.images.og && p.link) { promises.push( OgQueueAdd( { url: p.link, podcast: p._id, type: 'podcast', }, { removeOnComplete: true, removeOnFail: true, }, ), ); } promises.push(search(p.searchDocument())); }); await Promise.all(promises); res.status(200).json( podcasts.map((p) => { return p.serialize(); }), ); }; exports.put = async (req, res) => { const podcastId = req.params.podcastId; if (!mongoose.Types.ObjectId.isValid(podcastId)) { return res .status(422) .json({ error: `Podcast ID ${podcastId} is an invalid ObjectId.` }); } if (!req.User.admin) { return res.status(403).send(); } if (!podcastId) { return res.status(401).json({ error: 'Missing required Podcast ID.' }); } let podcast = await Podcast.findByIdAndUpdate({ _id: podcastId }, req.body, { new: true, }); if (!podcast) { return res.status(404).json({ error: 'Podcast could not be found.' }); } res.json(podcast); }; ================================================ FILE: api/src/controllers/rss.js ================================================ import mongoose from 'mongoose'; import moment from 'moment'; import normalizeUrl from 'normalize-url'; import entities from 'entities'; import RSS from '../models/rss'; import { discoverRSS } from '../parsers/discovery'; import search from '../utils/search'; import { isBlockedURLs } from '../utils/blockedURLs'; import { isURL } from '../utils/validation'; import { RssQueueAdd, OgQueueAdd } from '../asyncTasks'; import { getRSSRecommendations } from '../utils/personalization'; exports.list = async (req, res) => { const query = req.query || {}; let rss; if (query.type === 'recommended') { rss = await getRSSRecommendations(req.User._id.toString(), 7); } else { rss = await RSS.apiQuery(req.query); } res.json(rss); }; exports.get = async (req, res) => { const rssId = req.params.rssId; if (!mongoose.Types.ObjectId.isValid(rssId)) { return res.status(422).json({ error: `RSS ID ${rssId} is invalid.` }); } let rss = await RSS.findById(rssId).exec(); if (!rss) { return res.sendStatus(404); } res.json(rss.serialize()); }; exports.post = async (req, res) => { const data = req.body || {}; let normalizedUrl; // TODO: refactor this url check in utitlies try { normalizedUrl = normalizeUrl(data.feedUrl); } catch (e) { return res.status(400).json({ error: 'Please provide a valid RSS URL.' }); } if (!data.feedUrl || !isURL(normalizedUrl)) { return res.status(400).json({ error: 'Please provide a valid RSS URL.' }); } if (isBlockedURLs(data.feedUrl)) { return res.status(400).json({ error: 'This feed can not be added.' }); } let foundRSS = await discoverRSS(normalizeUrl(data.feedUrl)); if (!foundRSS.feedUrls.length) { return res .status(404) .json({ error: "We couldn't find any feeds for that RSS feed URL :(" }); } let insertedFeeds = []; let feeds = []; for (let feed of foundRSS.feedUrls.slice(0, 10)) { let feedTitle = feed.title; if (!feedTitle) { continue; } if (feedTitle.toLowerCase() === 'rss') { feedTitle = foundRSS.site.title; } let feedUrl = normalizeUrl(feed.url); if (!isURL(feedUrl)) { continue; } let rss = await RSS.findOne({ feedUrl: feedUrl }); const limit = moment().subtract(30, 'seconds'); // don't update featured RSS feeds since that ends up removing images etc if (!rss || (!rss.featured && limit.isAfter(rss.lastScraped))) { let response = await RSS.findOneAndUpdate( { feedUrl: feedUrl }, { categories: 'RSS', description: (entities.decodeHTML(feed.title) || '').substring( 0, 240, ), feedUrl: feedUrl, images: { favicon: foundRSS.site.favicon, }, lastScraped: moment().format(), title: entities.decodeHTML(feedTitle), url: foundRSS.site.url, valid: true, }, { new: true, rawResult: true, upsert: true, }, ); rss = response.value; if (response.lastErrorObject.upserted) { insertedFeeds.push(rss); } } feeds.push(rss); } let promises = []; insertedFeeds.map((f) => { promises.push(search(f.searchDocument())); let rssScrapingPromise = RssQueueAdd( { rss: f._id, url: f.feedUrl, }, { priority: 1, removeOnComplete: true, removeOnFail: true, }, ); promises.push(rssScrapingPromise); if (!f.images.og && f.url) { let ogPromise = OgQueueAdd( { url: f.url, rss: f._id, type: 'rss', }, { removeOnComplete: true, removeOnFail: true, }, ); promises.push(ogPromise); } }); await Promise.all(promises); res.status(201); res.json( feeds.map((f) => { return f.serialize(); }), ); }; exports.put = async (req, res) => { if (!req.User.admin) { return res .status(403) .json({ error: 'You must be an admin to perform this action.' }); } if (!req.params.rssId) { return res .status(401) .json({ error: 'You must provide a valid RSS ID to perform this action' }); } let rss = await RSS.findByIdAndUpdate( { _id: req.params.rssId, }, req.body, { new: true }, ); if (!rss) { return res .status(404) .json({ error: `Can't find RSS feed with id ${req.params.rssId}` }); } res.json(rss); }; ================================================ FILE: api/src/controllers/tag.js ================================================ import mongoose from 'mongoose'; import Tag from '../models/tag'; exports.list = async (req, res) => { res.json(await Tag.find({ user: req.user.sub })); }; exports.get = async (req, res) => { const tag = await Tag.findById(req.params.tagId); if (!tag) return res.status(404).json({ error: 'Resource does not exist.' }); if (tag.user._id != req.user.sub) return res.sendStatus(403); res.json(tag); }; exports.post = async (req, res) => { const data = { user: req.user.sub, name: req.body.name, article: req.body.article || [], episode: req.body.episode || [], }; if (!data.name) return res.status(422).json({ error: 'Missing required field' }); const tag = await Tag.create(data); res.json(await Tag.findById(tag._id)); }; exports.put = async (req, res) => { const tagId = req.params.tagId; const name = req.body.name; const article = req.body.article; const episode = req.body.episode; const user = req.user.sub; const remove = req.body.action === 'remove'; if (!(name || article || episode)) return res.status(422).json({ error: 'You have to put data' }); if (article && episode) return res.status(422).json({ error: 'On Feed at a time!' }); const tag = await Tag.findById(tagId).lean(); if (!tag) return res.status(404).json({ error: 'Resource does not exist.' }); if (tag.user._id != user) return res.sendStatus(403); let data = {}; if (remove) data = article ? { $pull: { article } } : { $pull: { episode } }; else data = article ? { $addToSet: { article } } : { $addToSet: { episode } }; if (name) data = { ...data, name }; await Tag.findByIdAndUpdate(tagId, data); res.json(await Tag.findById(tagId)); }; exports.delete = async (req, res) => { const tag = await Tag.findById(req.params.tagId); if (!tag) return res.status(404).json({ error: 'Resource does not exist.' }); if (tag.user._id != req.user.sub) return res.sendStatus(403); await tag.remove(); res.sendStatus(204); }; ================================================ FILE: api/src/controllers/user.js ================================================ import validator from 'validator'; import User from '../models/user'; import RSS from '../models/rss'; import Podcast from '../models/podcast'; import personalization from '../utils/personalization'; exports.list = async (req, res) => { let users = []; if (req.query.type === 'recommended') { let recommendedUserIds = await personalization({ endpoint: '/winds_user_recommendations', userId: req.user.sub, }); users = await User.find({ _id: { $in: recommendedUserIds } }); } else { users = await User.apiQuery(req.query).select( 'name email username bio url twitter background admin', ); } res.json(users); }; exports.delete = async (req, res) => { if (req.params.userId !== req.user.sub) { return res.sendStatus(403); } await req.User.remove(); res.sendStatus(204); }; exports.get = async (req, res) => { if (req.params.user == 'undefined') { return res.sendStatus(404); } let user = await User.findById(req.params.userId); if (!user) { return res.status(404).send('User not found'); } user.password = undefined; user.recoveryCode = undefined; let serialized = user; if (user._id.toString() === req.user.sub) { serialized = user.serializeAuthenticatedUser(); } res.json(serialized); }; exports.put = async (req, res) => { if (req.params.userId !== req.user.sub) { return res.status(403).json({ error: 'Access denied.' }); } const data = req.body || {}; if (data.email && !validator.isEmail(data.email)) { return res.status(400).json({ error: 'Invalid or malformed email address.' }); } const regex = /^[\w-]+$/; if (data.username && !regex.test(data.username)) { return res.status(400).json({ error: 'Usernames must be alphanumeric but can only contain _, . or -.', }); } let user = await User.findById(req.params.userId); if (!user) { return res.sendStatus(404); } if (data.username) { let userByUsername = await User.findOne({ username: data.username }); if (userByUsername && userByUsername.id != user.id) { return res .status(409) .json({ error: 'A resource with this username already exists' }); } } if (data.email) { let userByEmail = await User.findOne({ email: data.email }); if (userByEmail && userByEmail.email != user.email) { return res.status(409).send('User with this email already exists'); } } const whitelist = Object.assign( {}, ...[ 'name', 'email', 'username', 'password', 'interests', 'bio', 'url', 'twitter', 'background', 'preferences', 'recoveryCode', 'active', ].map((key) => ({ [key]: data[key], })), ); user = await User.findByIdAndUpdate({ _id: req.params.userId }, data, { new: true, }); user.password = undefined; user.recoveryCode = undefined; res.status(201).json(user); }; ================================================ FILE: api/src/fixtures/featured.json ================================================ { "podcasts": [ { "category": "UI/UX", "name": "Design Details", "feedUrl": "https://rss.simplecast.com/podcasts/1034/rss", "site": "https://spec.fm/podcasts/design-details" }, { "category": "UI/UX", "name": "Layout.FM", "feedUrl": "http://layout.fm/rss", "site": "http://layout.fm/" }, { "category": "UI/UX", "name": "Responsive Web Design", "feedUrl": "https://responsivewebdesign.com/podcast/feed.xml", "site": "https://responsivewebdesign.com/podcast/" }, { "category": "UI/UX", "name": "Creative Coding Podcast", "feedUrl": "http://creativecodingpodcast.com/feed/", "site": "http://creativecodingpodcast.com/" }, { "category": "UI/UX", "name": "UX Pod", "feedUrl": "http://uxpod.libsyn.com/rss", "site": "http://uxpod.com/" }, { "category": "UI/UX", "name": "Build and Launch", "feedUrl": "https://rss.simplecast.com/podcasts/323/rss", "site": "https://buildandlaunch.net/" }, { "category": "UI/UX", "name": "Nice to meet you", "feedUrl": "http://feeds.soundcloud.com/users/soundcloud:users:5984399/sounds.rss", "site": "http://www.vanschneider.com/show" }, { "category": "UI/UX", "name": "Design Review", "feedUrl": "http://www.designreviewpodcast.com/design-review.rss", "site": "http://www.designreviewpodcast.com/" }, { "category": "UI/UX", "name": "Overtime", "feedUrl": "https://rss.simplecast.com/podcasts/1515/rss", "site": "https://dribbble.com/overtime" }, { "category": "UI/UX", "name": "DesignBetter", "feedUrl": "http://designbetter.libsyn.com/rss", "site": "https://www.designbetter.co/podcast" }, { "category": "UI/UX", "name": "High Resolution", "feedUrl": "https://rss.simplecast.com/podcasts/2652/rss", "site": "https://www.highresolution.design/" }, { "category": "UI/UX", "name": "UI Breakfast", "feedUrl": "https://rss.simplecast.com/podcasts/1441/rss", "site": "https://uibreakfast.com/category/podcast/" }, { "category": "Startups & VC", "name": "a16z", "feedUrl": "https://a16z.com/feed/", "site": "https://a16z.com/" }, { "category": "Startups & VC", "name": "To The Top", "feedUrl": "http://nathanlatkathetop.libsyn.com/rss", "site": "http://nathanlatkathetop.libsyn.com" }, { "category": "Startups & VC", "name": "Rocketship.fm", "feedUrl": "https://www.omnycontent.com/d/playlist/20f38a10-1afe-4760-bb32-a7dd01317ee4/cfecce2e-033b-4f28-a323-a7de003f116b/b76fb826-9e99-4328-b3fa-a7de003f1179/podcast.rss", "site": "http://rocketship.fm/" }, { "category": "Startups & VC", "name": "Twenty Minute VC", "feedUrl": "http://thetwentyminutevc.libsyn.com/rss", "site": "http://www.thetwentyminutevc.com/" }, { "category": "Startups & VC", "name": "This Week in Startups", "feedUrl": "http://feeds.soundcloud.com/users/soundcloud:users:6888303/sounds.rss", "site": "https://thisweekinstartups.com/" }, { "category": "Startups & VC", "name": "Acquired.fm", "feedUrl": "http://www.acquired.fm/episodes?format=rss", "site": "http://www.acquired.fm/" }, { "category": "Startups & VC", "name": "The Impact Podcast", "feedUrl": "http://feeds.feedburner.com/soundcloud/ZGMH", "site": "https://georgianpartners.com/category/podcast/" }, { "category": "Startups & VC", "name": "Startup Podcast", "feedUrl": "http://feeds.hearstartup.com/hearstartup", "site": "https://www.gimletmedia.com/startup/" }, { "category": "Startups & VC", "name": "EntreLeadership", "feedUrl": "http://entreleadershippodcast.ramsey.libsynpro.com/rss", "site": "https://www.entreleadership.com/blog/podcast" }, { "category": "Startups & VC", "name": "Founders Talk", "feedUrl": "https://changelog.com/founderstalk/feed", "site": "https://changelog.com/founderstalk" }, { "category": "Startups & VC", "name": "Startups for the Rest of Us", "feedUrl": "http://www.startupsfortherestofus.com/feed", "site": "http://www.startupsfortherestofus.com/" }, { "category": "Programming", "name": "Merge Conflict", "feedUrl": "http://www.mergeconflict.fm/rss", "site": "http://www.mergeconflict.fm/" }, { "category": "Programming", "name": "Software Engineering Daily", "feedUrl": "http://softwareengineeringdaily.com/feed/podcast/", "site": "https://softwareengineeringdaily.com/" }, { "category": "Programming", "name": "Cynical Developer", "feedUrl": "https://cynicaldeveloper.com/feed/podcast/", "site": "https://cynicaldeveloper.com/Podcast/" }, { "category": "Programming", "name": "Changelog", "feedUrl": "https://changelog.com/podcast/feed", "site": "https://changelog.com" }, { "category": "Programming", "name": "Go Time", "feedUrl": "https://changelog.com/gotime/feed", "site": "https://changelog.com/gotime" }, { "category": "Programming", "name": "JS Party", "feedUrl": "https://changelog.com/jsparty/feed", "site": "https://changelog.com/jsparty" }, { "category": "Programming", "name": "Software Engineering Radio", "feedUrl": "http://feeds.feedburner.com/se-radio", "site": "http://www.se-radio.net/" }, { "category": "Programming", "name": "Talking Machines", "feedUrl": "https://rss.art19.com/talking-machines", "site": "https://art19.com/shows/talking-machines" }, { "category": "Programming", "name": "The Modern Web", "feedUrl": "http://modernweb.podbean.com/feed/", "site": "http://modernweb.podbean.com/" }, { "category": "Programming", "name": "Shoptalk", "feedUrl": "http://shoptalkshow.com/feed/podcast", "site": "https://player.fm/series/shoptalk-19036" }, { "category": "Gaming", "name": "Kinda Funny Gamescast", "feedUrl": "http://feeds.soundcloud.com/users/soundcloud:users:130508806/sounds.rss", "site": "https://www.patreon.com/kindafunnygames" }, { "category": "Gaming", "name": "Giant Bombcast", "feedUrl": "https://www.giantbomb.com/podcast-xml/giant-bombcast", "site": "https://www.giantbomb.com/podcasts/giant-bombcast/" }, { "category": "Gaming", "name": "The Giant Beastcast", "feedUrl": "https://www.giantbomb.com/podcast-xml/beastcast", "site": "https://www.giantbomb.com/podcasts/beastcast/" }, { "category": "Gaming", "name": "Three Moves Ahead", "feedUrl": "https://www.idlethumbs.net/feeds/3ma", "site": "https://www.idlethumbs.net/3ma" }, { "category": "Gaming", "name": "Whats Good Games", "feedUrl": "http://feeds.backtracks.fm/feeds/whatsgoodgames/whats-good-games-a-video-game-podcast/feed.xml", "site": "https://whatsgoodgames.com/" }, { "category": "Machine Learning & AI", "name": "Data Skeptic", "feedUrl": "https://dataskeptic.com/api/blog/rss", "site": "https://dataskeptic.com" }, { "category": "Lifehacks", "name": "Ted Talks", "feedUrl": "https://www.ted.com/talks/rss", "site": "https://www.ted.com" }, { "category": "News", "name": "Policast", "feedUrl": "https://feeds.publicradio.org/public_feeds/policast/npr/rss", "site": "https://www.npr.org/podcasts/414694038/policast" }, { "category": "News", "name": "The Daily", "feedUrl": "http://rss.art19.com/the-daily", "site": "https://www.nytimes.com/column/the-daily" }, { "category": "News", "name": "BBC Global News", "feedUrl": "https://podcasts.files.bbci.co.uk/p02nq0gn.rss", "site": "https://www.nytimes.com/column/the-daily" }, { "category": "News", "name": "PBS NewsHour", "feedUrl": "https://www.pbs.org/newshour/feeds/rss/podcasts/show", "site": "https://www.pbs.org/newshour" }, { "category": "News", "name": "Unfilter", "feedUrl": "http://unfilter.show/rss", "site": "http://unfilter.show" }, { "category": "News", "name": "On The Media", "feedUrl": "http://feeds.wnyc.org/onthemedia", "site": "https://www.wnycstudios.org/shows/otm/" }, { "category": "VR", "name": "Everything VR & AR", "feedUrl": "http://everythingvrar.libsyn.com/rss", "site": "http://everythingvrar.libsyn.com" }, { "category": "VR", "name": "New School VR Podcast", "feedUrl": "http://feeds.soundcloud.com/users/soundcloud:users:265033871/sounds.rss", "site": "http://newschoolvr.com/" }, { "category": "VR", "name": "Voices of VR Podcast – Designing for Virtual Reality", "feedUrl": "http://voicesofvr.com/?feed=podcast", "site": "http://voicesofvr.com/" }, { "category": "VR", "name": "Rev VR", "feedUrl": "http://www.reverendkyle.com/index.php/component/podcastmanager/?format=raw&feedname=2", "site": "http://www.revvrstudios.com/" }, { "category": "VR", "name": "VRScout Report", "feedUrl": "http://vrscout.libsyn.com/rss", "site": "https://vrscout.com/podcast/" }, { "category": "Marketing", "name": "The GaryVee Audio Experience", "feedUrl": "http://askgaryvee.garyvee.libsynpro.com/rss", "site": "http://www.garyvaynerchuk.com/" }, { "category": "Marketing", "name": "Jocko Podcast", "feedUrl": "http://jockopodcast.libsyn.com/rss", "site": "http://jockopodcast.com/" }, { "category": "Marketing", "name": "Starting from nothing", "feedUrl": "http://thefoundation.libsyn.com/rss", "site": "http://www.thefoundation.com/" }, { "category": "Marketing", "name": "HBR IdeaCast", "feedUrl": "http://feeds.harvardbusiness.org/harvardbusiness/ideacast", "site": "http://hbrideacast.org/" }, { "category": "Marketing", "name": "Business & Biceps", "feedUrl": "http://businessandbiceps.libsyn.com/rss", "site": "http://businessandbiceps.com/" }, { "category": "Marketing", "name": "Advanced Selling Podcast", "feedUrl": "http://billcaskey01.libsyn.com/rss", "site": "http://www.advancedsellingpodcast.com/" }, { "category": "Marketing", "name": "Marketing School", "feedUrl": "http://mschool.growtheverywhere.libsynpro.com/rss", "site": "http://mschool.growtheverywhere.libsynpro.com/podcast" }, { "category": "Marketing", "name": "Online Marketing Strategies", "feedUrl": "http://onlinemarketingpodcast.libsyn.com/rss", "site": "http://onlinemarketingpodcast.libsyn.com/" } ], "rss": [ { "category": "UI/UX", "name": "A List Apart", "feedUrl": "http://alistapart.com/main/feed", "site": "http://alistapart.com" }, { "category": "UI/UX", "name": "Smashing Magazine", "feedUrl": "https://www.smashingmagazine.com/feed/", "site": "https://www.smashingmagazine.com" }, { "category": "UI/UX", "name": "Invision Blog", "feedUrl": "https://www.invisionapp.com/blog/feed/", "site": "https://www.invisionapp.com" }, { "category": "UI/UX", "name": "Fast Co Design", "feedUrl": "https://www.fastcodesign.com//latest/rss?truncated=true", "site": "https://www.fastcodesign.com/" }, { "category": "UI/UX", "name": "Yanko Design", "feedUrl": "http://www.yankodesign.com/feed/", "site": "http://www.yankodesign.com/" }, { "category": "UI/UX", "name": "Dexigner", "feedUrl": "http://feeds.dexigner.com/news", "site": "http://dexigner.com" }, { "category": "UI/UX", "name": "Behance", "feedUrl": "http://feeds.feedburner.com/behance/vorr", "site": "https://behance.net" }, { "category": "UI/UX", "name": "HOW", "feedUrl": "http://www.howdesign.com/feed/", "site": "http://www.howdesign.com" }, { "category": "UI/UX", "name": "Web Designer Depot", "feedUrl": "http://feeds2.feedburner.com/webdesignerdepot", "site": "https://www.webdesignerdepot.com/" }, { "category": "Startups & VC", "name": "AVC", "feedUrl": "http://feeds.feedburner.com/avc", "site": "https://avc.com/" }, { "category": "Startups & VC", "name": "Y Combinator Blog", "feedUrl": "https://blog.ycombinator.com/feed/", "site": "https://blog.ycombinator.com" }, { "category": "Startups & VC", "name": "Alex Iskold", "feedUrl": "https://alexiskold.net/feed/", "site": "https://alexiskold.net" }, { "category": "Startups & VC", "name": "David Cohen", "feedUrl": "http://feeds.feedburner.com/DavidGCohen", "site": "http://davidgcohen.com/" }, { "category": "Startups & VC", "name": "VC Adventure", "feedUrl": "https://www.sethlevine.com/feed", "site": "https://www.sethlevine.com" }, { "category": "Startups & VC", "name": "Mattermark Daily", "feedUrl": "https://mattermark.com/category/mattermark-daily/feed/", "site": "https://mattermark.com/category/mattermark-daily" }, { "category": "Startups & VC", "name": "Feld Thoughts", "feedUrl": "http://feeds.feedburner.com/FeldThoughts", "site": "https://www.feld.com/" }, { "category": "Startups & VC", "name": "Product Hunt Blog", "feedUrl": "https://blog.producthunt.com/feed", "site": "https://blog.producthunt.com/" }, { "category": "Startups & VC", "name": "Both Sides of the Table", "feedUrl": "https://bothsidesofthetable.com/feed", "site": "https://bothsidesofthetable.com/" }, { "category": "Startups & VC", "name": "Seeing Both Sides", "feedUrl": "https://seeingbothsides.com/feed/", "site": "https://seeingbothsides.com/" }, { "category": "Programming", "name": "Lobste.rs", "feedUrl": "https://lobste.rs/rss", "site": "https://lobste.rs/" }, { "category": "Programming", "name": "Reddit - Programming", "feedUrl": "https://www.reddit.com/r/programming/.rss", "site": "https://www.reddit.com/r/programming/" }, { "category": "Programming", "name": "Hacker News", "feedUrl": "https://news.ycombinator.com/rss", "site": "https://news.ycombinator.com/" }, { "category": "Programming", "name": "Joel on Software", "feedUrl": "https://www.joelonsoftware.com/feed/", "site": "https://www.joelonsoftware.com/" }, { "category": "Programming", "name": "GitHub", "feedUrl": "https://blog.github.com/feed.xml", "site": "https://blog.github.com/" }, { "category": "Programming", "name": "Toptal", "feedUrl": "https://www.toptal.com/developers/blog.rss", "site": "https://www.toptal.com/developers/blog" }, { "category": "Programming", "name": "Daily WTF", "feedUrl": "http://syndication.thedailywtf.com/TheDailyWtf", "site": "http://thedailywtf.com/" }, { "category": "Gaming", "name": "Indie Games", "feedUrl": "http://indiegames.com/atom.xml", "site": "http://indiegames.com" }, { "category": "Gaming", "name": "IGN", "feedUrl": "http://feeds.ign.com/ign/all", "site": "http://ign.com/" }, { "category": "Gaming", "name": "Kotaku", "feedUrl": "https://kotaku.com/rss", "site": "https://kotaku.com/" }, { "category": "Gaming", "name": "GameInformer", "feedUrl": "http://www.gameinformer.com/b/features/rsscomments.aspx?WeblogPostID=8597456", "site": "http://www.gameinformer.com" }, { "category": "Machine Learning & AI", "name": "R Bloggers", "feedUrl": "https://www.r-bloggers.com/feed/", "site": "https://www.r-bloggers.com" }, { "category": "Machine Learning & AI", "name": "KD Nuggets", "feedUrl": "http://www.kdnuggets.com/feed", "site": "http://www.kdnuggets.com" }, { "category": "Machine Learning & AI", "name": "Kaggle", "feedUrl": "http://blog.kaggle.com/feed", "site": "https://www.kaggle.com/" }, { "category": "Machine Learning & AI", "name": "OpenAI", "feedUrl": "https://blog.openai.com/rss/", "site": "https://blog.openai.com/" }, { "category": "News", "name": "BBC", "feedUrl": "http://feeds.bbci.co.uk/news/rss.xml?edition=us", "site": "http://www.bbc.com/news" }, { "category": "VR", "name": "Oculus", "feedUrl": "http://uploadvr.com/feed/", "site": "https://www.oculus.com/" }, { "category": "VR", "name": "HTC Vive", "feedUrl": "http://blog.vive.com/us/feed/", "site": "http://blog.vive.com" }, { "category": "VR", "name": "Road to VR", "feedUrl": "https://www.roadtovr.com/feed/", "site": "https://www.roadtovr.com/" }, { "category": "VR", "name": "VR Scout", "feedUrl": "https://vrscout.com/feed/", "site": "https://vrscout.com/" }, { "category": "VR", "name": "VR Focus", "feedUrl": "https://www.vrfocus.com/feed/", "site": "https://www.vrfocus.com" }, { "category": "Lifehacks", "name": "Lifehacker", "feedUrl": "https://lifehacker.com/rss", "site": "https://lifehacker.com" }, { "category": "Lifehacks", "name": "How to Geek", "feedUrl": "https://feeds.howtogeek.com/HowToGeek", "site": "https://www.howtogeek.com/" }, { "category": "Lifehacks", "name": "Marc & Angle Hack Life", "feedUrl": "http://feeds.feedburner.com/MarcAndAngel", "site": "http://www.marcandangel.com/" }, { "category": "Lifehacks", "name": "Lifehack", "feedUrl": "https://www.lifehack.org/feed", "site": "http://lifehack.org" }, { "category": "Lifehacks", "name": "Dumb Little Man", "feedUrl": "https://www.dumblittleman.com/feed/", "site": "https://www.dumblittleman.com/" }, { "category": "Lifehacks", "name": "Get Rich Slowly", "feedUrl": "https://www.getrichslowly.org/feed/", "site": "https://www.getrichslowly.org/" }, { "category": "Lifehacks", "name": "Reddit - /r/lifehacks", "feedUrl": "https://www.reddit.com/r/lifehacks/.rss", "site": "https://www.reddit.com/r/lifehacks/" }, { "category": "Lifehacks", "name": "1000 Lifehacks", "feedUrl": "http://1000lifehacks.com/feed/", "site": "http://1000lifehacks.com/" }, { "category": "News", "name": "Reuters", "feedUrl": "http://feeds.reuters.com/reuters/topNews", "site": "https://www.reuters.com/" }, { "category": "News", "name": "NY Times", "feedUrl": "http://rss.nytimes.com/services/xml/rss/nyt/HomePage.xml", "site": "https://nytimes.com" }, { "category": "News", "name": "CNN - Top Stories", "feedUrl": "http://rss.cnn.com/rss/cnn_topstories.rss", "site": "https://cnn.com" }, { "category": "VR", "name": "Road to VR", "feedUrl": "http://roadtovr.com/feed", "site": "https://roadtovr.com" }, { "category": "VR", "name": "Upload VR", "feedUrl": "https://uploadvr.com/feed", "site": "https://uploadvr.com" }, { "category": "VR", "name": "VR Scout", "feedUrl": "https://vrscout.com/feed", "site": "https://vrscout.com" }, { "category": "VR", "name": "VRFocus", "feedUrl": "https://vrfocus.com/feed", "site": "https://vrfocus.com" }, { "category": "VR", "name": "Virtual Reality Reporter", "feedUrl": "https://virtualrealityreporter.com/feed", "site": "https://virtualrealityreporter.com" }, { "category": "VR", "name": "Reddit - Virtual Reality", "feedUrl": "https://www.reddit.com/r/virtualreality/.rss", "site": "https://reddit.com/r/virtualreality" }, { "category": "Marketing", "name": "Hubspot Marketing", "feedUrl": "https://blog.hubspot.com/marketing/rss.xml", "site": "https://hubspot.com" }, { "category": "Marketing", "name": "MarketingProfs Daily", "feedUrl": "http://rss.marketingprofs.com/marketingprofs/daily", "site": "https://marketingprofs.com" }, { "category": "Marketing", "name": "Quicksprout", "feedUrl": "http://feeds2.feedburner.com/quicksprout", "site": "https://www.quicksprout.com/" }, { "category": "Marketing", "name": "Kissmetrics Marketing Blog", "feedUrl": "http://feeds.feedburner.com/KISSmetrics", "site": "https://www.kissmetrics.com/" }, { "category": "Marketing", "name": "Copyblogger", "feedUrl": "http://feeds.copyblogger.com/copyblogger", "site": "https://www.copyblogger.com/" }, { "category": "Marketing", "name": "Moz", "feedUrl": "http://feedpress.me/mozblog", "site": "https://moz.com/" }, { "category": "Marketing", "name": "Duct Tape Marketing", "feedUrl": "https://www.ducttapemarketing.com/feed", "site": "https://www.ducttapemarketing.com" } ] } ================================================ FILE: api/src/loadenv.js ================================================ import dotenv from 'dotenv'; import path from 'path'; // workaround based on https://github.com/motdotla/dotenv/issues/133 let envPath = path.resolve(__dirname, '..', '..', 'app', '.env'); console.log(`Loading .env from ${envPath}`); dotenv.config({ path: envPath }); ================================================ FILE: api/src/models/alias.js ================================================ import mongoose, { Schema } from 'mongoose'; import timestamps from 'mongoose-timestamp'; import mongooseStringQuery from 'mongoose-string-query'; import autopopulate from 'mongoose-autopopulate'; export const AliasSchema = new Schema( { user: { type: Schema.Types.ObjectId, ref: 'User', required: true, index: true, autopopulate: { select: ['name', 'email', 'username'], }, }, rss: { type: Schema.Types.ObjectId, ref: 'RSS', autopopulate: { select: ['url', 'title'], }, }, podcast: { type: Schema.Types.ObjectId, ref: 'Podcast', autopopulate: { select: ['url', 'title'], }, }, alias: { type: String, trim: true, required: true, }, }, { collection: 'aliases' }, ); AliasSchema.plugin(timestamps, { createdAt: { index: true }, updatedAt: { index: true }, }); AliasSchema.plugin(mongooseStringQuery); AliasSchema.plugin(autopopulate); module.exports = exports = mongoose.model('Alias', AliasSchema); ================================================ FILE: api/src/models/article.js ================================================ import mongoose, { Schema } from 'mongoose'; import timestamps from 'mongoose-timestamp'; import mongooseStringQuery from 'mongoose-string-query'; import autopopulate from 'mongoose-autopopulate'; import Content from './content'; import { ParseContent } from '../parsers/content'; import { getUrl } from '../utils/urls'; import sanitize from '../utils/sanitize'; import { isBlockedURLs } from '../utils/blockedURLs'; import { EnclosureSchema } from './enclosure'; export const ArticleSchema = new Schema( { rss: { type: Schema.Types.ObjectId, ref: 'RSS', required: true, autopopulate: { select: [ 'title', 'url', 'feedUrl', 'favicon', 'categories', 'description', 'public', 'valid', 'publicationDate', 'lastScraped', 'images', 'featured', ], }, index: true, }, duplicateOf: { type: Schema.Types.ObjectId, ref: 'Article', required: false, }, url: { type: String, trim: true, required: true, index: { type: 'hashed' }, }, canonicalUrl: { type: String, trim: true, }, fingerprint: { type: String, trim: true, required: true, }, guid: { type: String, trim: true, }, link: { type: String, trim: true, }, title: { type: String, trim: true, required: true, }, description: { type: String, trim: true, // maxLength: 240, default: '', }, content: { type: String, trim: true, default: '', }, commentUrl: { type: String, trim: true, default: '', }, images: { featured: { type: String, trim: true, default: '', }, banner: { type: String, trim: true, default: '', }, favicon: { type: String, trim: true, default: '', }, og: { type: String, trim: true, default: '', }, }, publicationDate: { type: Date, default: Date.now, }, enclosures: [EnclosureSchema], likes: { type: Number, default: 0, }, socialScore: { reddit: { type: Number, }, hackernews: { type: Number, }, }, valid: { type: Boolean, default: true, valid: true, }, }, { collection: 'articles', toJSON: { transform: function (doc, ret) { // Frontend breaks if images is null, should be {} instead if (!ret.images) { ret.images = {}; } ret.images.favicon = ret.images.favicon || ''; ret.images.og = ret.images.og || ''; ret.type = 'articles'; }, }, toObject: { transform: function (doc, ret) { // Frontend breaks if images is null, should be {} instead if (!ret.images) { ret.images = {}; } ret.images.favicon = ret.images.favicon || ''; ret.images.og = ret.images.og || ''; ret.type = 'articles'; }, }, }, ); ArticleSchema.plugin(timestamps, { createdAt: { index: true }, updatedAt: { index: true }, }); ArticleSchema.plugin(mongooseStringQuery); ArticleSchema.plugin(autopopulate); ArticleSchema.index({ rss: 1, fingerprint: 1 }, { unique: true }); ArticleSchema.index({ rss: 1, publicationDate: -1 }); ArticleSchema.index({ publicationDate: -1 }); ArticleSchema.methods.getUrl = function () { return getUrl('article_detail', this.rss._id, this._id); }; ArticleSchema.methods.getParsedArticle = async function () { const url = this.url; const content = await Content.findOne({ url }); if (content) return content; if (isBlockedURLs(url)) { throw new Error(`Blocked URL: ${this.url}`); } try { const parsed = await ParseContent(url); const title = parsed.title || this.title; const excerpt = parsed.excerpt || title || this.description; if (!title) return null; let content = sanitize(parsed.content); // XKCD doesn't like Mercury if (this.url.indexOf('https://xkcd') === 0) content = this.content; return await Content.create({ content, title, url, excerpt, image: parsed.lead_image_url || '', publicationDate: parsed.date_published || this.publicationDate, commentUrl: this.commentUrl, enclosures: this.enclosures, }); } catch (e) { throw new Error(`Mercury call failed for ${this.url}: ${e.message}`); } }; module.exports = exports = mongoose.model('Article', ArticleSchema); module.exports.ArticleSchema = ArticleSchema; ================================================ FILE: api/src/models/content.js ================================================ import mongoose, { Schema } from 'mongoose'; import timestamps from 'mongoose-timestamp'; import mongooseStringQuery from 'mongoose-string-query'; export const ContentSchema = new Schema( { url: { type: String, trim: true, index: true, required: true, }, title: { type: String, trim: true, required: true, }, excerpt: { type: String, trim: true, required: true, }, content: { type: String, trim: true, required: true, }, image: { type: String, trim: true, }, publicationDate: { type: Date, default: Date.now, }, enclosures: [], }, { collection: 'content' }, ); ContentSchema.index({ url: 1 }, { unique: true }); ContentSchema.plugin(timestamps, { createdAt: { index: true }, updatedAt: { index: true }, }); ContentSchema.plugin(mongooseStringQuery); module.exports = exports = mongoose.model('Content', ContentSchema); ================================================ FILE: api/src/models/enclosure.js ================================================ import mongoose, { Schema } from 'mongoose'; import timestamps from 'mongoose-timestamp'; import mongooseStringQuery from 'mongoose-string-query'; import autopopulate from 'mongoose-autopopulate'; import { createHash } from 'crypto'; export const EnclosureSchema = new Schema({ url: { type: String, trim: true, }, type: { type: String, trim: true, }, length: { type: String, trim: true, }, }); ================================================ FILE: api/src/models/episode.js ================================================ import mongoose, { Schema } from 'mongoose'; import timestamps from 'mongoose-timestamp'; import mongooseStringQuery from 'mongoose-string-query'; import autopopulate from 'mongoose-autopopulate'; import 'crypto'; import { createHash } from 'crypto'; import { EnclosureSchema } from './enclosure'; import Content from './content'; import { ParseContent } from '../parsers/content'; import { getUrl } from '../utils/urls'; import sanitize from '../utils/sanitize'; export const EpisodeSchema = new Schema( { podcast: { type: Schema.Types.ObjectId, ref: 'Podcast', required: true, autopopulate: { select: [ 'title', 'url', 'link', 'enclosure', 'feedUrl', 'image', 'categories', 'description', 'public', 'valid', 'publicationDate', 'lastScraped', 'images', 'featured', 'duplicateOf', ], }, }, duplicateOf: { type: Schema.Types.ObjectId, ref: 'Episode', required: false, }, url: { type: String, trim: true, required: true, index: { type: 'hashed' }, }, canonicalUrl: { type: String, trim: true, }, fingerprint: { type: String, trim: true, required: true, }, guid: { type: String, trim: true, }, link: { type: String, trim: true, index: { type: 'hashed' }, }, enclosure: { type: String, trim: true, }, enclosures: [EnclosureSchema], title: { type: String, trim: true, required: true, }, description: { type: String, trim: true, // maxLength: 240, default: '', }, images: { featured: { type: String, trim: true, default: '', }, banner: { type: String, trim: true, default: '', }, favicon: { type: String, trim: true, default: '', }, og: { type: String, trim: true, default: '', }, }, duration: { type: String, default: '', }, publicationDate: { type: Date, default: Date.now, }, likes: { type: Number, default: 0, }, valid: { type: Boolean, default: true, }, }, { collection: 'episodes', toJSON: { transform: function (doc, ret) { // Frontend breaks if images is null, should be {} instead if (!ret.images) { ret.images = {}; } ret.images.favicon = ret.images.favicon || ''; ret.images.og = ret.images.og || ''; ret.type = 'episodes'; }, }, toObject: { transform: function (doc, ret) { // Frontend breaks if images is null, should be {} instead if (!ret.images) { ret.images = {}; } ret.images.favicon = ret.images.favicon || ''; ret.images.og = ret.images.og || ''; ret.type = 'episodes'; }, }, }, ); EpisodeSchema.plugin(timestamps, { createdAt: { index: true }, updatedAt: { index: true }, }); EpisodeSchema.plugin(mongooseStringQuery); EpisodeSchema.plugin(autopopulate); EpisodeSchema.index({ podcast: 1, fingerprint: 1 }, { unique: true }); EpisodeSchema.index({ podcast: 1, publicationDate: -1 }); EpisodeSchema.index({ publicationDate: -1 }); EpisodeSchema.methods.getUrl = function () { return getUrl('episode_detail', this.podcast._id, this._id); }; EpisodeSchema.methods.getParsedEpisode = async function () { const url = this.url; const content = await Content.findOne({ url }); if (content) return content; try { const parsed = await ParseContent(url); const title = parsed.title || this.title; const excerpt = parsed.excerpt || title || this.description; if (!title) return null; const content = sanitize(parsed.content); return await Content.create({ content, title, url, excerpt, image: parsed.lead_image_url || '', publicationDate: this.publicationDate || parsed.date_published, commentUrl: this.commentUrl, enclosures: this.enclosures, }); } catch (e) { throw new Error(`Mercury call failed for ${url}: ${e.message}`); } }; module.exports = exports = mongoose.model('Episode', EpisodeSchema); ================================================ FILE: api/src/models/folder.js ================================================ import mongoose, { Schema } from 'mongoose'; import timestamps from 'mongoose-timestamp'; import mongooseStringQuery from 'mongoose-string-query'; import autopopulate from 'mongoose-autopopulate'; import { getStreamClient } from '../utils/stream'; export const FolderSchema = new Schema( { user: { type: Schema.Types.ObjectId, ref: 'User', required: true, index: true, autopopulate: { select: ['name', 'email', 'username'], }, }, rss: [ { type: Schema.Types.ObjectId, ref: 'RSS', required: true, autopopulate: true, }, ], podcast: [ { type: Schema.Types.ObjectId, ref: 'Podcast', required: true, autopopulate: true, }, ], name: { type: String, trim: true, required: true, }, }, { collection: 'folders', toJSON: { transform: function (doc, ret) { ret.streamToken = getStreamClient() .feed('folder', ret._id) .getReadOnlyToken(); }, }, toObject: { transform: function (doc, ret) { ret.streamToken = getStreamClient() .feed('folder', ret._id) .getReadOnlyToken(); }, }, }, ); FolderSchema.plugin(timestamps, { createdAt: { index: true }, updatedAt: { index: true }, }); FolderSchema.plugin(mongooseStringQuery); FolderSchema.plugin(autopopulate); module.exports = exports = mongoose.model('Folder', FolderSchema); ================================================ FILE: api/src/models/follow.js ================================================ import mongoose, { Schema } from 'mongoose'; import timestamps from 'mongoose-timestamp'; import mongooseStringQuery from 'mongoose-string-query'; import autopopulate from 'mongoose-autopopulate'; import stream from 'getstream'; import config from '../config'; import RSS from './rss'; import Podcast from './podcast'; import { getStreamClient } from '../utils/stream'; export const FollowSchema = new Schema( { user: { type: Schema.Types.ObjectId, ref: 'User', required: true, autopopulate: { select: [ 'name', 'email', 'username', 'bio', 'url', 'twitter', 'background', 'admin', ], }, index: true, }, followee: { type: Schema.Types.ObjectId, ref: 'User', autopopulate: { select: [ 'name', 'email', 'username', 'bio', 'url', 'twitter', 'background', ], }, index: true, }, podcast: { type: Schema.Types.ObjectId, ref: 'Podcast', autopopulate: { select: [ 'url', 'title', 'categories', 'description', 'feedUrl', 'image', 'publicationDate', 'public', 'featured', 'images', 'duplicateOf', ], }, index: true, }, rss: { type: Schema.Types.ObjectId, ref: 'RSS', autopopulate: { select: [ 'url', 'title', 'categories', 'description', 'favicon', 'publicationDate', 'public', 'featured', 'images', 'feedUrl', 'duplicateOf', ], }, index: true, }, feed: { type: String, enum: ['rss', 'podcast', 'timeline'], }, }, { collection: 'follows' }, ); FollowSchema.plugin(timestamps, { createdAt: { index: true }, updatedAt: { index: true }, }); FollowSchema.plugin(mongooseStringQuery); FollowSchema.plugin(autopopulate); FollowSchema.index({ user: 1, rss: 1, podcast: 1 }, { unique: true }); FollowSchema.methods.removeFromStream = async function remove(follows) { const publicationType = this.rss ? 'rss' : 'podcast'; const feedGroup = this.rss ? 'user_article' : 'user_episode'; const publicationID = this.rss ? this.rss._id : this.podcast._id; if (!this.user) { return []; } const timelineFeed = getStreamClient().feed('timeline', this.user._id); const otherFeed = getStreamClient().feed(feedGroup, this.user._id); const results = await Promise.all([ timelineFeed.unfollow(publicationType, publicationID), otherFeed.unfollow(publicationType, publicationID), ]); return results; }; FollowSchema.statics.getOrCreateMany = async function getOrCreateMany(follows) { // validate for (const f of follows) { if (f.type != 'rss' && f.type != 'podcast') { throw new Error(`invalid follow type ${f.type}`); } } // batch create the follow relationships const followInstances = await Promise.all( follows.map(async (f) => { const query = { [f.type]: f.publicationID, user: f.userID }; return this.findOneAndUpdate(query, query, { upsert: true, new: true, }).lean(); }), ); // sync to stream in a batch const feedRelationsTimeline = follows.map((f) => { return { source: `timeline:${f.userID}`, target: `${f.type}:${f.publicationID}`, }; }); const feedRelationsGroup = follows.map((f) => { const feedGroup = f.type == 'rss' ? 'user_article' : 'user_episode'; return { source: `${feedGroup}:${f.userID}`, target: `${f.type}:${f.publicationID}`, }; }); const feedRelations = feedRelationsTimeline.concat(feedRelationsGroup); if (feedRelations.length > 0) { await getStreamClient().followMany(feedRelations); } // update the counts await Promise.all( follows.map(async (f) => { const followerCount = await this.count({ [f.type]: f.publicationID }); const schema = f.type == 'rss' ? RSS : Podcast; await schema.update({ _id: f.publicationID }, { followerCount }); }), ); return followInstances; }; FollowSchema.statics.getOrCreate = async function getOrCreate( followType, userID, publicationID, ) { const instances = await this.getOrCreateMany([ { type: followType, userID: userID, publicationID: publicationID }, ]); return instances[0]; }; module.exports = exports = mongoose.model('Follow', FollowSchema); module.exports.FollowSchema = FollowSchema; ================================================ FILE: api/src/models/listen.js ================================================ import mongoose, { Schema } from 'mongoose'; import timestamps from 'mongoose-timestamp'; import mongooseStringQuery from 'mongoose-string-query'; import autopopulate from 'mongoose-autopopulate'; export const ListenSchema = new Schema( { user: { type: Schema.Types.ObjectId, ref: 'User', required: true, autopopulate: { select: [ 'name', 'email', 'username', 'bio', 'url', 'twitter', 'preferences', 'background', 'admin', ], }, }, episode: { type: Schema.Types.ObjectId, ref: 'Episode', autopopulate: { select: [ 'parent', 'url', 'title', 'description', 'image', 'publictionDate', ], }, required: true, }, duration: { type: Number, default: 0, required: true, }, }, { collection: 'listens' }, ); ListenSchema.index({ user: 1, episode: 1 }, { unique: true }); ListenSchema.plugin(timestamps, { createdAt: { index: true }, updatedAt: { index: true }, }); ListenSchema.plugin(mongooseStringQuery); ListenSchema.plugin(autopopulate); module.exports = exports = mongoose.model('Listen', ListenSchema); ================================================ FILE: api/src/models/note.js ================================================ import mongoose, { Schema } from 'mongoose'; import timestamps from 'mongoose-timestamp'; import mongooseStringQuery from 'mongoose-string-query'; import autopopulate from 'mongoose-autopopulate'; export const NoteSchema = new Schema( { user: { type: Schema.Types.ObjectId, ref: 'User', required: true, index: true, }, episode: { type: Schema.Types.ObjectId, ref: 'Episode', autopopulate: { select: ['title', 'podcast'], maxDepth: 1 }, }, article: { type: Schema.Types.ObjectId, ref: 'Article', autopopulate: { select: ['title', 'rss'], maxDepth: 1 }, }, start: { type: Number, required: true, }, end: { type: Number, required: true, }, // text===null? it's a highlight : it's a note text: { type: String, trim: true, }, }, { collection: 'notes', }, ); NoteSchema.index({ user: 1, article: 1 }, { index: true }); NoteSchema.index({ user: 1, episode: 1 }, { index: true }); NoteSchema.plugin(timestamps, { createdAt: { index: true }, updatedAt: { index: true }, }); NoteSchema.plugin(mongooseStringQuery); NoteSchema.plugin(autopopulate); module.exports = exports = mongoose.model('Note', NoteSchema); ================================================ FILE: api/src/models/pin.js ================================================ import mongoose, { Schema } from 'mongoose'; import timestamps from 'mongoose-timestamp'; import mongooseStringQuery from 'mongoose-string-query'; import autopopulate from 'mongoose-autopopulate'; export const PinSchema = new Schema( { user: { type: Schema.Types.ObjectId, ref: 'User', required: true, autopopulate: { select: [ 'name', 'email', 'username', 'bio', 'url', 'twitter', 'background', 'admin', ], }, }, article: { type: Schema.Types.ObjectId, ref: 'Article', autopopulate: { select: [ 'commentUrl', 'parent', 'url', 'title', 'description', 'images', 'publicationDate', 'enclosures', ], }, }, episode: { type: Schema.Types.ObjectId, ref: 'Episode', autopopulate: { select: [ 'parent', 'url', 'title', 'description', 'images', 'publicationDate', 'link', ], }, }, url: { type: String, trim: true, }, }, { collection: 'pins' }, ); PinSchema.plugin(timestamps, { createdAt: { index: true }, updatedAt: { index: true }, }); PinSchema.plugin(mongooseStringQuery); PinSchema.plugin(autopopulate); module.exports = exports = mongoose.model('Pin', PinSchema); ================================================ FILE: api/src/models/playlist.js ================================================ import mongoose, { Schema } from 'mongoose'; import timestamps from 'mongoose-timestamp'; import mongooseStringQuery from 'mongoose-string-query'; import autopopulate from 'mongoose-autopopulate'; export const PlaylistSchema = new Schema( { user: { type: Schema.Types.ObjectId, ref: 'User', required: true, autopopulate: { select: [ 'name', 'email', 'username', 'bio', 'url', 'twitter', 'background', 'admin', ], }, }, name: { type: String, trim: true, required: true, }, episodes: [ { type: Schema.Types.ObjectId, ref: 'Episode', required: true, autopopulate: true, }, ], likes: { type: Number, default: 0, }, }, { collection: 'playlists' }, ); PlaylistSchema.plugin(timestamps, { createdAt: { index: true }, updatedAt: { index: true }, }); PlaylistSchema.plugin(mongooseStringQuery); PlaylistSchema.plugin(autopopulate); module.exports = exports = mongoose.model('Playlist', PlaylistSchema); ================================================ FILE: api/src/models/podcast.js ================================================ import mongoose, { Schema } from 'mongoose'; import timestamps from 'mongoose-timestamp'; import mongooseStringQuery from 'mongoose-string-query'; import { getStreamClient } from '../utils/stream'; import { getUrl } from '../utils/urls'; export const PodcastSchema = new Schema( { duplicateOf: { type: Schema.Types.ObjectId, ref: 'Podcast', required: false, }, url: { type: String, trim: true, }, canonicalUrl: { type: String, trim: true, }, feedUrl: { type: String, trim: true, index: true, unique: true, required: true, }, feedUrls: [String], fingerprint: { type: String, trim: true, }, title: { type: String, trim: true, required: true, }, description: { type: String, trim: true, default: '', }, summary: { type: String, trim: true, default: '', }, categories: { type: String, trim: true, default: '', }, featured: { type: Boolean, default: false, }, images: { featured: { type: String, trim: true, default: '', }, banner: { type: String, trim: true, default: '', }, favicon: { type: String, trim: true, default: '', }, og: { type: String, trim: true, default: '', }, }, public: { type: Boolean, default: true, }, publicationDate: { type: Date, default: Date.now, }, valid: { type: Boolean, default: true, }, lastScraped: { type: Date, default: Date.now, }, interest: { type: String, default: '', index: true, }, language: { type: String, default: '', }, followerCount: { type: Number, default: 0, }, // @deprecated: considering the huge collection size the count op is really slow postCount: { type: Number, default: 0, }, consecutiveScrapeFailures: { type: Number, default: 0, }, guidStability: { type: String, enum: ['STABLE', 'UNSTABLE', 'UNCHECKED'], default: 'UNCHECKED', }, }, { collection: 'podcasts', toJSON: { transform: function (doc, ret) { // Frontend breaks if images is null, should be {} instead if (!ret.images) { ret.images = {}; } ret.images.favicon = ret.images.favicon || ''; ret.images.og = ret.images.og || ''; ret.streamToken = getStreamClient() .feed('podcast', ret._id) .getReadOnlyToken(); }, }, toObject: { transform: function (doc, ret) { // Frontend breaks if images is null, should be {} instead if (!ret.images) { ret.images = {}; } ret.images.favicon = ret.images.favicon || ''; ret.images.og = ret.images.og || ''; ret.streamToken = getStreamClient() .feed('podcast', ret._id) .getReadOnlyToken(); }, }, }, ); PodcastSchema.index({ featured: 1 }, { partialFilterExpression: { featured: true } }); PodcastSchema.index({ valid: 1, followerCount: -1 }); PodcastSchema.plugin(timestamps, { createdAt: { index: true }, updatedAt: { index: true }, }); PodcastSchema.plugin(mongooseStringQuery); PodcastSchema.statics.incrScrapeFailures = async function (id) { await this.findOneAndUpdate( { _id: id }, { $inc: { consecutiveScrapeFailures: 1 } }, ).exec(); }; PodcastSchema.statics.resetScrapeFailures = async function (id) { await this.findOneAndUpdate( { _id: id }, { $set: { consecutiveScrapeFailures: 0 } }, ).exec(); }; PodcastSchema.methods.searchDocument = function () { return { _id: this._id, objectID: this._id, categories: 'Podcast', description: this.title, image: this.favicon, public: true, publicationDate: this.publicationDate, title: this.title, type: 'podcast', }; }; PodcastSchema.methods.getUrl = function () { return getUrl('podcast_detail', this._id); }; PodcastSchema.methods.serialize = function serialize() { const serialized = this.toObject(); serialized.streamToken = getStreamClient() .feed('podcast', this._id) .getReadOnlyToken(); return serialized; }; PodcastSchema.statics.findFeatured = function () { const query = [ { featured: true }, { interest: 'UI/UX' }, { interest: 'Startups & VC' }, { interest: 'Programming' }, { interest: 'Gaming' }, { interest: 'Machine Learning & AI' }, { interest: 'News' }, { interest: 'VR' }, { interest: 'Lifehacks' }, { interest: 'Marketing' }, ]; return this.find({ $or: query, }); }; module.exports = exports = mongoose.model('Podcast', PodcastSchema); ================================================ FILE: api/src/models/rss.js ================================================ import mongoose, { Schema } from 'mongoose'; import timestamps from 'mongoose-timestamp'; import mongooseStringQuery from 'mongoose-string-query'; import { ArticleSchema } from './article'; import { getStreamClient } from '../utils/stream'; import { getUrl } from '../utils/urls'; export const RSSSchema = new Schema( { duplicateOf: { type: Schema.Types.ObjectId, ref: 'RSS', required: false, }, url: { type: String, trim: true, index: true, }, canonicalUrl: { type: String, trim: true, }, feedUrl: { type: String, trim: true, index: true, unique: true, required: true, }, feedUrls: [String], fingerprint: { type: String, trim: true, }, title: { type: String, trim: true, required: true, }, description: { type: String, trim: true, default: '', }, categories: { type: String, trim: true, default: '', }, featured: { type: Boolean, default: false, }, images: { featured: { type: String, trim: true, default: '', }, banner: { type: String, trim: true, default: '', }, favicon: { type: String, trim: true, default: '', }, og: { type: String, trim: true, default: '', }, }, public: { type: Boolean, default: true, }, publicationDate: { type: Date, default: Date.now, }, valid: { type: Boolean, default: true, index: true, }, lastScraped: { type: Date, default: Date.now, index: true, }, likes: { type: Number, default: 0, }, followerCount: { type: Number, default: 0, }, // @deprecated: considering the huge collection size the count op is really slow postCount: { type: Number, default: 0, }, summary: { type: String, default: '', }, interest: { type: String, default: '', index: true, }, language: { type: String, default: '', }, consecutiveScrapeFailures: { type: Number, default: 0, }, guidStability: { type: String, enum: ['STABLE', 'UNSTABLE', 'UNCHECKED'], default: 'UNCHECKED', }, }, { collection: 'rss', toJSON: { transform: function (doc, ret) { // Frontend breaks if images is null, should be {} instead if (!ret.images) { ret.images = {}; } ret.images.favicon = ret.images.favicon || ''; ret.images.og = ret.images.og || ''; ret.streamToken = getStreamClient() .feed('rss', ret._id) .getReadOnlyToken(); }, }, toObject: { transform: function (doc, ret) { // Frontend breaks if images is null, should be {} instead if (!ret.images) { ret.images = {}; } ret.images.favicon = ret.images.favicon || ''; ret.images.og = ret.images.og || ''; ret.streamToken = getStreamClient() .feed('rss', ret._id) .getReadOnlyToken(); }, }, }, ); RSSSchema.plugin(timestamps, { createdAt: { index: true }, updatedAt: { index: true }, }); RSSSchema.statics.incrScrapeFailures = async function (id) { await this.findOneAndUpdate( { _id: id }, { $inc: { consecutiveScrapeFailures: 1 } }, ).exec(); }; RSSSchema.statics.resetScrapeFailures = async function (id) { await this.findOneAndUpdate( { _id: id }, { $set: { consecutiveScrapeFailures: 0 } }, ).exec(); }; RSSSchema.methods.getUrl = function () { return getUrl('rss_detail', this._id); }; RSSSchema.methods.searchDocument = function () { return { _id: this._id, objectID: this._id, categories: 'RSS', description: this.title, image: this.favicon, public: true, publicationDate: this.publicationDate, title: this.title, type: 'rss', }; }; RSSSchema.methods.serialize = function serialize() { const serialized = this.toObject(); serialized.streamToken = getStreamClient().feed('rss', this._id).getReadOnlyToken(); return serialized; }; RSSSchema.statics.findFeatured = function () { const query = [ { featured: true }, { interest: 'UI/UX' }, { interest: 'Startups & VC' }, { interest: 'Programming' }, { interest: 'Gaming' }, { interest: 'Machine Learning & AI' }, { interest: 'News' }, { interest: 'VR' }, { interest: 'Lifehacks' }, { interest: 'Marketing' }, ]; return this.find({ $or: query, }); }; RSSSchema.index({ featured: 1 }, { partialFilterExpression: { featured: true } }); RSSSchema.index({ valid: 1, followerCount: -1 }); RSSSchema.plugin(mongooseStringQuery); module.exports = exports = mongoose.model('RSS', RSSSchema); ================================================ FILE: api/src/models/tag.js ================================================ import mongoose, { Schema } from 'mongoose'; import timestamps from 'mongoose-timestamp'; import mongooseStringQuery from 'mongoose-string-query'; import autopopulate from 'mongoose-autopopulate'; export const TagSchema = new Schema( { user: { type: Schema.Types.ObjectId, ref: 'User', required: true, index: true, autopopulate: { select: ['name', 'email', 'username'], }, }, episode: [ { type: Schema.Types.ObjectId, ref: 'Episode', required: true, autopopulate: true, }, ], article: [ { type: Schema.Types.ObjectId, ref: 'Article', required: true, autopopulate: true, }, ], name: { type: String, trim: true, required: true, }, }, { collection: 'tags' }, ); TagSchema.plugin(timestamps, { createdAt: { index: true }, updatedAt: { index: true }, }); TagSchema.plugin(mongooseStringQuery); TagSchema.plugin(autopopulate); module.exports = exports = mongoose.model('Tag', TagSchema); ================================================ FILE: api/src/models/user.js ================================================ import mongoose, { Schema } from 'mongoose'; import bcrypt from 'mongoose-bcrypt'; import timestamps from 'mongoose-timestamp'; import mongooseStringQuery from 'mongoose-string-query'; import FollowSchema from './follow'; import PinSchema from './pin'; import ListenSchema from './listen'; import AliasSchema from './alias'; import FolderSchema from './folder'; import PlaylistSchema from './playlist'; import jwt from 'jsonwebtoken'; import config from '../config'; import gravatar from 'gravatar'; import { getStreamClient } from '../utils/stream'; export const UserSchema = new Schema( { email: { type: String, lowercase: true, trim: true, index: true, unique: true, required: true, }, username: { type: String, lowercase: true, trim: true, index: true, unique: true, required: true, }, password: { type: String, required: true, bcrypt: true, }, name: { type: String, trim: true, required: true, }, bio: { type: String, trim: true, default: '', }, url: { type: String, trim: true, default: '', }, twitter: { type: String, trim: true, default: '', }, background: { type: Number, default: 1, }, interests: { type: Schema.Types.Mixed, default: [], }, preferences: { notifications: { daily: { type: Boolean, default: false, }, weekly: { type: Boolean, default: true, }, follows: { type: Boolean, default: true, }, }, }, recoveryCode: { type: String, trim: true, default: '', }, active: { type: Boolean, default: true, }, admin: { type: Boolean, default: false, }, }, { collection: 'users', toJSON: { transform: function (doc, ret) { delete ret.password; if (ret.email) { ret.gravatar = gravatar.url(ret.email, { s: '200', d: 'identicon', protocol: 'https', }); } ret.streamTokens = {}; for (const k of ['timeline', 'user_article', 'user_episode']) { let token = getStreamClient().feed(k, ret._id).getReadOnlyToken(); ret.streamTokens[k] = token; } }, }, toObject: { transform: function (doc, ret) { delete ret.password; if (ret.email) { ret.gravatar = gravatar.url(ret.email, { s: '200', d: 'identicon', protocol: 'https', }); } ret.streamTokens = {}; for (const k of ['timeline', 'user_article', 'user_episode']) { let token = getStreamClient().feed(k, ret._id).getReadOnlyToken(); ret.streamTokens[k] = token; } }, }, }, ); UserSchema.post('remove', async function (user) { return await Promise.all([ PinSchema.remove({ user }), PlaylistSchema.remove({ user }), FollowSchema.remove({ user }), ListenSchema.remove({ user }), AliasSchema.remove({ user }), FolderSchema.remove({ user }), ]); }); UserSchema.plugin(bcrypt); UserSchema.plugin(timestamps, { createdAt: { index: true }, updatedAt: { index: true }, }); UserSchema.plugin(mongooseStringQuery); UserSchema.index({ email: 1, username: 1 }); UserSchema.methods.serializeAuthenticatedUser = function serializeAuthenticatedUser() { let user = this; let serialized; let streamTokens = {}; for (const k of ['timeline', 'user_article', 'user_episode']) { let token = getStreamClient().feed(k, user._id).getReadOnlyToken(); streamTokens[k] = token; } serialized = { _id: user._id, email: user.email, bio: user.bio, url: user.url, twitter: user.twitter, interests: user.interests, name: user.name, username: user.username, preferences: user.preferences, streamTokens: streamTokens, jwt: jwt.sign({ email: user.email, sub: user._id }, config.jwt.secret), }; return serialized; }; module.exports = exports = mongoose.model('User', UserSchema); ================================================ FILE: api/src/parsers/content.js ================================================ import Mercury from '@postlight/mercury-parser'; export async function ParseContent(url) { return await Mercury.parse(url); } ================================================ FILE: api/src/parsers/detect-language.js ================================================ import { ReadFeedStream, ReadFeedURL } from '../parsers/feed'; import franc from 'franc-min'; // DetectLanguage returns the language for the given feed url export async function DetectLanguage(feedURL) { let feedStream = await ReadFeedURL(feedURL); let language = await DetectLangFromStream(feedStream); return language; } // DetectLangFromStream returns the language for the given feed stream export async function DetectLangFromStream(feedStream) { let posts = await ReadFeedStream(feedStream); let bestGuessLanguage = 'eng'; if (!posts || !posts.length) { return bestGuessLanguage; } let meta = posts[0].meta; // language = meta.language // guess the language using franc let languageSums = {}; for (let post of posts.slice(0, 10)) { let languageVector = franc.all(`${post.title} ${post.description}`); for (let [language, score] of languageVector) { if (!(language in languageSums)) { languageSums[language] = 0; } languageSums[language] += score; } } // see which language has the highest score let languages = Object.entries(languageSums).sort((a, b) => b[1] - a[1]); if (languages) { bestGuessLanguage = languages[0][0]; } return bestGuessLanguage; } ================================================ FILE: api/src/parsers/detect-type.js ================================================ import { ReadFeedURL, ReadFeedStream } from './feed.js'; // determines if the given feedStream is a podcast or not export async function IsPodcastStream(feedStream) { let posts = await ReadFeedStream(feedStream); let isPodcast = false; if (posts) { isPodcast = posts.slice(0, 10).every((post) => { return ( post.enclosures.length && post.enclosures[0].type.indexOf('audio') != -1 ); }); } return isPodcast; } // IsPodcastURL checks if the given url is a podcast or not export async function IsPodcastURL(feedURL) { let feedStream = await ReadFeedURL(feedURL); let isPodcast = await IsPodcastStream(feedStream); return isPodcast; } ================================================ FILE: api/src/parsers/discovery.js ================================================ import request from 'request'; import normalize from 'normalize-url'; import url from 'url'; import FeedParser from 'feedparser'; import { Buffer } from 'safe-buffer'; import { Parser as HtmlParser } from 'htmlparser2'; import { extractHostname } from '../utils/urls'; /* * Based on the awesome work of rssfinder * https://github.com/ggkovacs/rss-finder * By @ggkovacs */ const rssMap = { 'application/rss+xml': 1, 'application/atom+xml': 1, 'application/rdf+xml': 1, 'application/rss': 1, 'application/atom': 1, 'application/rdf': 1, 'text/rss+xml': 1, 'text/atom+xml': 1, 'text/rdf+xml': 1, 'text/rss': 1, 'text/atom': 1, 'text/rdf': 1, }; const iconRels = { icon: 1, 'shortcut icon': 1 }; // request settings const maxContentLengthBytes = 1024 * 1024 * 5; const WindsUserAgent = 'Winds: Open Source RSS & Podcast app: https://getstream.io/winds/'; function readRequestBody(stream, url) { return new Promise((resolve, reject) => { let bodyLength = 0; let res; const buffers = []; const strings = []; stream .on('response', (response) => { const contentLength = parseInt(response.headers['content-length'], 10); if (contentLength > maxContentLengthBytes) { stream.abort(); return reject( new Error('Request body larger than maxBodyLength limit'), ); } res = response; }) .on('data', (data) => { if (bodyLength + data.length <= maxContentLengthBytes) { bodyLength += data.length; if (!Buffer.isBuffer(data)) { strings.push(data); } else if (data.length) { buffers.push(data); } } else { stream.abort(); return reject( new Error('Request body larger than maxBodyLength limit'), ); } }) .on('end', () => { if (bodyLength) { res.body = Buffer.concat(buffers, bodyLength); if (stream.encoding !== null) { res.body = res.body.toString(stream.encoding); } } else if (strings.length) { // The UTF8 BOM [0xEF,0xBB,0xBF] is converted to [0xFE,0xFF] in the JS UTC16/UCS2 representation. // Strip this value out when the encoding is set to 'utf8', as upstream consumers won't expect it and it breaks JSON.parse(). if ( stream.encoding === 'utf8' && strings[0].length > 0 && strings[0][0] === '\uFEFF' ) { strings[0] = strings[0].substring(1); } res.body = strings.join(''); } if (typeof res.body === 'undefined') { res.body = stream.encoding === null ? Buffer.alloc(0) : ''; } resolve(res); }) .on('error', reject); }); } export async function discoverRSS(uri) { const headers = { 'User-Agent': WindsUserAgent }; const response = await readRequestBody( request({ uri, headers, maxRedirects: 20, timeout: 12 * 1000, resolveWithFullResponse: true, }), ); let discovered; try { discovered = await discoverFromFeed(response.body); } catch (e) { discovered = discoverFromHTML(response.body); } const canonicalUrl = url.resolve( extractHostname(response.request), response.request.path, ); return fixData(discovered, canonicalUrl); } export function discoverFromHTML(body) { let rs = {}; let feeds = []; let favicon; let isSiteTitle; let siteTitle; const parser = new HtmlParser( { onopentag: function (name, attr) { if (name === 'link' && attr.type && attr.type.toLowerCase() in rssMap) { feeds.push({ title: attr.title || null, url: attr.href || null, }); } if (name === 'link') { let a = attr.rel && attr.rel.toLowerCase(); let t = attr.type && attr.type.toLowerCase(); if (a in iconRels || t === 'image/x-icon') { favicon = attr.href; } } if (name === 'title') { isSiteTitle = true; } }, ontext: function (text) { if (isSiteTitle) { siteTitle = text; } }, onclosetag: function (name) { if (name === 'title') { isSiteTitle = false; } }, }, { recognizeCDATA: true, }, ); parser.write(body); parser.end(); rs.site = { title: siteTitle || null, favicon: favicon || null, }; rs.feedUrls = feeds; return rs; } function isRelativeUrl(str) { return /^https?:\/\//i.test(str); } function getFaviconUrl(uri) { let parsedUrl = url.parse(uri); return url.resolve(parsedUrl.protocol + '//' + parsedUrl.host, 'favicon.ico'); } // make the urls absolute and try the default favicon location async function fixData(res, uri) { let feedUrl; let favicon; let i = res.feedUrls.length; // make the urls unique for (const feed of res.feedUrls) { if (feed.url) { if (!isRelativeUrl(feed.url)) { feed.url = normalize(url.resolve(uri, feed.url)); } } else { feed.url = normalize(uri); } } if (!res.site.url) { res.site.url = normalize(uri); } if (res.site.favicon) { if (!isRelativeUrl(res.site.favicon)) { res.site.favicon = url.resolve(res.site.url, res.site.favicon); } return res; } // see if mysite.com/favicon.ico works :) favicon = getFaviconUrl(res.site.url); try { const headers = { 'User-Agent': WindsUserAgent, 'Accept-Encoding': 'gzip,deflate,br', }; // ensure favicon url is reachable await new Promise((resolve, reject) => { const req = request(favicon, { headers, maxRedirects: 20, timeout: 12 * 1000, }) .on('response', () => resolve(req.abort())) .on('error', reject); }); res.site.favicon = favicon; } catch (_) { //XXX: ignore error } return res; } export function discoverFromFeed(body) { return new Promise(function (resolve, reject) { const feedParser = new FeedParser(); feedParser.on('error', function (err) { reject(err); }); let feedMeta; feedParser.on('readable', function () { if (!feedMeta) { feedMeta = this.meta; } }); feedParser.write(body); feedParser.end(function () { if (feedMeta) { return resolve({ site: { title: feedMeta.title || null, favicon: feedMeta.favicon || null, url: feedMeta.link || null, }, feedUrls: [ { title: feedMeta.title || null, url: feedMeta.xmlUrl || null, }, ], }); } resolve({}); }); }); } ================================================ FILE: api/src/parsers/feed.js ================================================ import request from 'request'; import entities from 'entities'; import moment from 'moment'; import normalize from 'normalize-url'; import sanitizeHtml from 'sanitize-html'; import strip from 'strip'; import zlib from 'zlib'; import * as urlParser from 'url'; import FeedParser from 'feedparser'; import InflateAuto from 'inflate-auto'; import { createHash } from 'crypto'; import { PassThrough } from 'stream'; import { Gunzip } from 'zlib'; import Podcast from '../models/podcast'; // eslint-disable-line import Episode from '../models/episode'; import Article from '../models/article'; import RSS from '../models/rss'; import config from '../config'; // eslint-disable-line import logger from '../utils/logger'; import { getStatsDClient } from '../utils/statsd'; const WindsUserAgent = 'Winds: Open Source RSS & Podcast app: https://getstream.io/winds/'; const AcceptHeader = 'text/html,application/xhtml+xml,application/xml'; const statsd = getStatsDClient(); const requestTTL = 12 * 1000; const maxContentLengthBytes = 1024 * 1024 * 5; function sanitize(dirty) { return sanitizeHtml(dirty, { allowedAttributes: { img: ['src', 'title', 'alt'] }, allowedTags: sanitizeHtml.defaults.allowedTags.concat(['img']), }); } export async function ParsePodcast(podcastUrl, guidStability, limit = 1000) { logger.info(`Attempting to parse podcast ${podcastUrl}`); const start = new Date(); const host = urlParser.parse(podcastUrl).host; const stream = await ReadFeedURL(podcastUrl); const posts = await ReadFeedStream(stream); const podcastResponse = ParsePodcastPosts(host, posts, guidStability, limit); statsd.timing('winds.parsers.podcast.finished_parsing', new Date() - start); return podcastResponse; } export async function ParseFeed(feedURL, guidStability, limit = 1000) { logger.info(`Attempting to parse RSS ${feedURL}`); const start = new Date(); const host = urlParser.parse(feedURL).host; const stream = await ReadFeedURL(feedURL); const posts = await ReadFeedStream(stream); const feedResponse = ParseFeedPosts(host, posts, guidStability, limit); statsd.timing('winds.parsers.rss.finished_parsing', new Date() - start); return feedResponse; } export function ComputeHash(post) { const enclosureUrls = post.enclosures.map((e) => e.url); const enclosureString = enclosureUrls.join(',') || ''; //XXX: ignore post.content for now, it changes too often const data = `${post.title}:${post.description}:${post.link}:${enclosureString}`; return createHash('md5').update(data).digest('hex'); } export function ComputePublicationHash(posts, limit = 20) { const fingerprints = posts .slice(0, limit) .filter((p) => !!p.fingerprint) .map((p) => p.fingerprint); if (fingerprints.length != Math.min(posts.length, limit)) { throw Error('Missing post fingerprints'); } const data = fingerprints.join(','); return createHash('md5').update(data).digest('hex'); } export function CreateFingerPrints(posts, guidStability) { if (!posts.length) { return posts; } // start by selecting the best strategy for uniqueness let uniqueness = { guid: {}, link: {}, enclosure: {}, hash: {} }; for (let p of posts) { uniqueness.guid[p.guid && p.guid.slice(0, 249)] = 1; uniqueness.link[p.link && p.link.slice(0, 249)] = 1; if (p.enclosures.length && p.enclosures[0].url) { uniqueness.enclosure[p.enclosures[0].url.slice(0, 244)] = 1; p.enclosure = p.enclosures[0].url; } p.hash = ComputeHash(p); uniqueness.hash[p.hash] = 1; } // count which strategy is the best let uniquenessCounts = {}; for (const [k, v] of Object.entries(uniqueness)) { uniquenessCounts[k] = Object.keys(v).length; } // select the strategy that's 100% unique, if none match fall back to a hash let strategy = 'hash'; const backupStrategy = guidStability === 'STABLE' ? 'guid' : 'link'; const l = posts.length; const strategies = ['guid', 'link', 'enclosure']; if (guidStability !== 'STABLE') { strategies.shift(); } for (let s of strategies) { if (uniquenessCounts[s] == l) { strategy = s; break; } } if (strategy == 'hash' && uniquenessCounts[backupStrategy] >= 3) { // better to fail in a predictable way strategy = backupStrategy; } // compute the post fingerprints for (let p of posts) { p.fingerprint = `${strategy}:${ p[strategy] && p[strategy].slice(0, 254 - strategy.length) }`; } // next compute the publication fingerprint let hash = ComputePublicationHash(posts); posts[0].meta = posts[0].meta || {}; posts[0].meta.fingerprint = `${strategy}:${hash}`; posts[0].meta.fingerprintCounts = uniquenessCounts; return posts; } // Parse the posts and add our custom logic export function ParsePodcastPosts(domain, posts, guidStability, limit = 1000) { let podcastContent = { episodes: [] }; posts = CreateFingerPrints(posts, guidStability); for (let i in posts.slice(0, limit)) { const post = posts[i]; let url = post.link; if (!url) { url = post.enclosures && post.enclosures[0] ? post.enclosures[0].url : post.guid; } if (!url) { logger.info('skipping episode since there is no url'); continue; } const title = strip(post.title); if (!title) { logger.info('skipping episode since there is no title'); continue; } if (!urlParser.parse(url).host) { url = url.resolve(domain, url); } url = normalize(url); let image = post.image && post.image.url; // ensure we keep order for feeds with no time const time = moment(post.pubdate).toISOString() || moment().subtract(i, 'minutes').toISOString(); let episode = new Episode({ description: (strip(post.description) || '').substring(0, 240), duration: post.duration, guid: post.guid, link: post.link, enclosures: post.enclosures, fingerprint: post.fingerprint, enclosure: post.enclosures && post.enclosures[0] && post.enclosures[0].url, images: { og: image }, publicationDate: time, title: strip(post.title), url: url, }); podcastContent.episodes.push(episode); } if (posts.length) { podcastContent.title = posts[0].meta.title; podcastContent.link = posts[0].meta.link; podcastContent.image = posts[0].meta.image && posts[0].meta.image.url; podcastContent.description = posts[0].meta.description; podcastContent.fingerprint = posts[0].meta.fingerprint; } return podcastContent; } export function ReadURL(url) { let headers = { 'User-Agent': WindsUserAgent, 'Accept-Encoding': 'gzip,deflate', Accept: AcceptHeader, }; return request({ method: 'get', agent: false, pool: { maxSockets: 256 }, uri: url, timeout: requestTTL, headers: headers, maxRedirects: 20, resolveWithFullResponse: true, }); } function sleep(time) { if (time <= 0) { return Promise.resolve(); } return new Promise((resolve) => setTimeout(resolve, time)); } function checkHeaders(stream, url, checkContenType = false) { return new Promise((resolve, reject) => { let resolved = false; let bodyLength = 0; //XXX: piping to a pass through dummy stream so we can pipe it later // without causing request errors let dummy = new PassThrough(); stream.pipe(dummy); stream .on('response', (response) => { if (checkContenType) { const contentType = response.headers['content-type']; if ( !contentType || !contentType.trim().toLowerCase().includes('html') ) { logger.warn( `Invalid content type '${contentType}' for url ${url}`, ); stream.abort(); return resolve(null); } } const contentLength = parseInt(response.headers['content-length'], 10); if (contentLength > maxContentLengthBytes) { stream.abort(); return reject( new Error('Request body larger than maxBodyLength limit'), ); } const encoding = response.headers['content-encoding'] || 'identity'; let inflater; switch (encoding.trim().toLowerCase()) { case 'deflate': inflater = new InflateAuto(); break; case 'gzip': inflater = new Gunzip(); break; } if (inflater) { dummy = dummy.pipe(inflater); } dummy.on('error', (err) => { if (!resolved) { reject(err); } stream.abort(); }); }) .on('error', (err) => { if (!resolved) { reject(err); } else { dummy.destroy(err); } stream.abort(); }) .on('data', (data) => { resolved = true; resolve(dummy); if (bodyLength + data.length <= maxContentLengthBytes) { bodyLength += data.length; } else { dummy.destroy( new Error('Request body larger than maxBodyLength limit'), ); } }) .on('end', () => { if (!resolved) { resolve(dummy); } }); }); } // Read the given feed URL and return a Stream export async function ReadPageURL(url, retries = 2, backoffDelay = 100) { let currentDelay = 0, nextDelay = backoffDelay; for (;;) { try { await sleep(currentDelay); return await checkHeaders(ReadURL(url), url, true); } catch (err) { logger.warn(`Failed to read page url ${url}: ${err.message}. Retrying`); --retries; [currentDelay, nextDelay] = [nextDelay, currentDelay + nextDelay]; if (!retries) { throw err; } } } } // Read the given feed URL and return a Stream export async function ReadFeedURL(feedURL, retries = 2, backoffDelay = 100) { let currentDelay = 0, nextDelay = backoffDelay; for (;;) { try { await sleep(currentDelay); return await checkHeaders(ReadURL(feedURL), feedURL); } catch (err) { logger.warn(`Failed to read feed url ${feedURL}: ${err.message}. Retrying`); --retries; [currentDelay, nextDelay] = [nextDelay, currentDelay + nextDelay]; if (!retries) { throw err; } } } } // Turn the feed Stream into a list of posts export function ReadFeedStream(feedStream) { return Promise.race([ new Promise((resolve, reject) => setTimeout(reject, 2 * requestTTL, new Error('Request timed out')), ), new Promise((resolve, reject) => { const posts = []; const parser = new FeedParser(); let resolved = false; feedStream.on('error', (err) => { if (!resolved) { reject(err); } feedStream.destroy(); }); parser .on('data', (data) => posts.push(data)) .on('end', () => { resolved = true; resolve(posts); }) .on('error', (err) => { if (!resolved) { reject(err); } parser.destroy(); }); feedStream.pipe(parser); }), ]); } // Parse the posts and add our custom logic export function ParseFeedPosts(domain, posts, guidStability, limit = 1000) { let feedContents = { articles: [] }; // create finger prints before doing anything else posts = CreateFingerPrints(posts, guidStability); for (let i in posts.slice(0, limit)) { const post = posts[i]; let article; let url = post.link; try { if (!url) { logger.info('skipping article since there is no url'); continue; } const title = strip(entities.decodeHTML(post.title)); if (!title) { logger.info('skipping article since there is no title'); continue; } let description = strip(entities.decodeHTML(post.description)).substring( 0, 280, ); if (description == 'null') { description = null; } if (!urlParser.parse(url).host) { url = url.resolve(domain, url); } url = normalize(url); // articles need to have a title // ensure we keep order for feeds with no time const time = moment(post.pubdate).toISOString() || moment().subtract(i, 'minutes').toISOString(); const content = sanitize(post.summary); article = new Article({ content: content, description: (description || '').substring(0, 240), enclosures: post.enclosures, fingerprint: post.fingerprint, guid: post.guid, link: post.link, publicationDate: time, title: title, url: url, }); } catch (err) { logger.info('skipping article', { err }); continue; } if (post['yt:videoid']) { let youtubeID = post['yt:videoid']['#']; article.enclosures.push({ type: 'youtube', url: `https://www.youtube.com/watch?v=${youtubeID}`, }); if (post['media:group'] && !article.description) { article.description = post['media:group']['media:description']['#']; } } // HNEWS if (post.comments) { article.commentUrl = post.comments; } if (post.link) { // product hunt comments url if (post.link.startsWith('https://www.producthunt.com')) { const matches = post.description.match( /(https:\/\/www.producthunt.com\/posts\/.*)"/, ); if (matches && matches.length) { article.commentUrl = matches[1]; } } // nice images for XKCD if (post.link.startsWith('https://xkcd')) { const matches = post.description.match( /(https:\/\/imgs.xkcd.com\/comics\/.*?)"/, ); if (matches && matches.length) { article.images = { og: matches[1] }; } } } feedContents.articles.push(article); } if (posts.length) { let meta = posts[0].meta; feedContents.title = meta.title; feedContents.link = meta.link; feedContents.image = meta.image; feedContents.description = meta.description; feedContents.fingerprint = meta.fingerprint; if (meta.link && meta.link.includes('reddit.com')) { feedContents.title = `/r/${feedContents.title}`; } } return feedContents; } export function checkGuidStability(original, control) { const link2guid = original.reduce( (map, content) => map.set(content.link, content.guid), new Map(), ); let same = true; for (const content of control) { const originalGUID = link2guid.get(content.link); if (originalGUID) { same = same && originalGUID == content.guid; } } return same ? 'STABLE' : 'UNSTABLE'; } ================================================ FILE: api/src/parsers/og.js ================================================ import logger from '../utils/logger'; import { ReadPageURL } from './feed.js'; const invalidExtensions = ['mp3', 'mp4', 'mov', 'm4a', 'mpeg']; // determines if the given feedUrl is a podcast or not export async function ParseOG(pageURL) { const pageStream = await ReadPageURL(pageURL); return ParseOGStream(pageStream, pageURL); } export function IsValidOGUrl(url) { if (!url) { return false; } const invalid = invalidExtensions.some((extension) => { if (url.endsWith(`.${extension}`)) { return extension; } }); if (invalid) { logger.warn(`Invalid file extension for url ${url}`); return false; } return true; } function parseImage(html) { const metaTagRe = /(]*?og:image[^>]*?>)/gm; const urlRe = /content="(.*?)"/gm; if (!html.includes('og:image')) { return {}; } const matches = metaTagRe.exec(html); if (!matches) { return {}; } const meta = matches[1]; const urlMatches = urlRe.exec(meta); if (urlMatches) { return { image: urlMatches[1] }; } } function parseCanonicalUrl(html) { if (html.includes('og:image')) { const metaTagRe = /(]*?og:url[^>]*?>)/gm; const matches = metaTagRe.exec(html); if (matches) { const meta = matches[1]; const urlRe = /content="(.*?)"/gm; const urlMatches = urlRe.exec(meta); if (urlMatches) { return { canonicalUrl: urlMatches[1] }; } } } else if (html.includes('"canonical"')) { const linkTagRe = /(]*?rel\s*=\s*"canonical"[^>]*?>)/gm; const matches = linkTagRe.exec(html); if (matches) { const meta = matches[1]; const urlRe = /href="(.*?)"/gm; const urlMatches = urlRe.exec(meta); if (urlMatches) { return { canonicalUrl: urlMatches[1] }; } } } return {}; } export function ParseOGStream(pageStream, pageURL) { let result = {}; return new Promise((resolve, reject) => { pageStream .on('data', (data) => { const html = data.toString('utf8'); for (const extractor of [parseImage, parseCanonicalUrl]) { result = Object.assign(result, extractor(html)); } if (result.image && result.canonicalUrl) { pageStream.destroy(); resolve(result); } }) .on('error', reject) .on('end', () => resolve(result)); }); } ================================================ FILE: api/src/routes/alias.js ================================================ import Alias from '../controllers/alias'; import { wrapAsync } from '../utils/controllers'; module.exports = (api) => { api.route('/aliases').get(wrapAsync(Alias.list)); api.route('/aliases').post(wrapAsync(Alias.post)); api.route('/aliases/:aliasId').get(wrapAsync(Alias.get)); api.route('/aliases/:aliasId').put(wrapAsync(Alias.put)); api.route('/aliases/:aliasId').delete(wrapAsync(Alias.delete)); }; ================================================ FILE: api/src/routes/article.js ================================================ import Article from '../controllers/article'; import { wrapAsync } from '../utils/controllers'; module.exports = (api) => { api.route('/articles').get(wrapAsync(Article.list)); api.route('/articles/:articleId').get(wrapAsync(Article.get)); }; ================================================ FILE: api/src/routes/auth.js ================================================ import Auth from '../controllers/auth'; import { wrapAsync } from '../utils/controllers'; module.exports = (api) => { api.route('/auth/signup').post(wrapAsync(Auth.signup)); api.route('/auth/login').post(wrapAsync(Auth.login)); api.route('/auth/forgot-password').post(wrapAsync(Auth.forgotPassword)); api.route('/auth/reset-password').post(wrapAsync(Auth.resetPassword)); }; ================================================ FILE: api/src/routes/email.js ================================================ import Email from '../controllers/email'; import { wrapAsync } from '../utils/controllers'; module.exports = (api) => { api.route('/email').get(wrapAsync(Email.list)); api.route('/email/:emailName').get(wrapAsync(Email.get)); api.route('/email/:emailName').post(wrapAsync(Email.post)); }; ================================================ FILE: api/src/routes/episode.js ================================================ import Episode from '../controllers/episode'; import { wrapAsync } from '../utils/controllers'; module.exports = (api) => { api.route('/episodes').get(wrapAsync(Episode.list)); api.route('/episodes/:episodeId').get(wrapAsync(Episode.get)); }; ================================================ FILE: api/src/routes/featured.js ================================================ import Featured from '../controllers/featured'; import { wrapAsync } from '../utils/controllers'; module.exports = (api) => { api.route('/featured').get(wrapAsync(Featured.list)); }; ================================================ FILE: api/src/routes/folder.js ================================================ import Folder from '../controllers/folder'; import { wrapAsync } from '../utils/controllers'; module.exports = (api) => { api.route('/folders').get(wrapAsync(Folder.list)); api.route('/folders/:folderId').get(wrapAsync(Folder.get)); api.route('/folders').post(wrapAsync(Folder.post)); api.route('/folders/:folderId').put(wrapAsync(Folder.put)); api.route('/folders/:folderId').delete(wrapAsync(Folder.delete)); api.route('/folders/:folderId/feed').get(wrapAsync(Folder.feed)); }; ================================================ FILE: api/src/routes/follow.js ================================================ import Follow from '../controllers/follow'; import { wrapAsync } from '../utils/controllers'; module.exports = (api) => { api.route('/follows').get(wrapAsync(Follow.list)); api.route('/follows').post(wrapAsync(Follow.post)); api.route('/follows').delete(wrapAsync(Follow.delete)); }; ================================================ FILE: api/src/routes/health.js ================================================ import Health from '../controllers/health'; import { wrapAsync } from '../utils/controllers'; import basicAuth from '../utils/basicAuth'; module.exports = (api) => { api.route('/health').get(wrapAsync(Health.health)); api.route('/status').get(wrapAsync(Health.status)); api.route('/queue').get(wrapAsync(Health.queue)); api.route('/sentry/log').get(wrapAsync(Health.sentryLog)); api.route('/sentry/throw').get(wrapAsync(Health.sentryThrow)); api.use('/bull', basicAuth, Health.bullArena); }; ================================================ FILE: api/src/routes/index.js ================================================ import Default from '../controllers/default'; module.exports = (api) => { api.route('/').get(Default.get); api.route('/').post(Default.post); }; ================================================ FILE: api/src/routes/listen.js ================================================ import Listen from '../controllers/listen'; import { wrapAsync } from '../utils/controllers'; module.exports = (api) => { api.route('/listens').get(wrapAsync(Listen.list)); api.route('/listens').post(wrapAsync(Listen.post)); }; ================================================ FILE: api/src/routes/note.js ================================================ import Note from '../controllers/note'; import { wrapAsync } from '../utils/controllers'; module.exports = (api) => { api.route('/notes').get(wrapAsync(Note.list)); api.route('/notes').post(wrapAsync(Note.post)); api.route('/notes/:noteId').get(wrapAsync(Note.get)); api.route('/notes/:noteId').put(wrapAsync(Note.put)); api.route('/notes/:noteId').delete(wrapAsync(Note.delete)); }; ================================================ FILE: api/src/routes/opml.js ================================================ import multer from 'multer'; import OPML from '../controllers/opml'; import { wrapAsync } from '../utils/controllers'; const upload = multer(); module.exports = (api) => { api.route('/opml/download').get(wrapAsync(OPML.get)); api.route('/opml/upload').post(upload.single('opml'), wrapAsync(OPML.post)); }; ================================================ FILE: api/src/routes/pin.js ================================================ import Pin from '../controllers/pin'; import { wrapAsync } from '../utils/controllers'; module.exports = (api) => { api.route('/pins').get(wrapAsync(Pin.list)); api.route('/pins/:pinId').get(wrapAsync(Pin.get)); api.route('/pins').post(wrapAsync(Pin.post)); api.route('/pins/:pinId').delete(wrapAsync(Pin.delete)); }; ================================================ FILE: api/src/routes/playlist.js ================================================ import Playlist from '../controllers/playlist'; import { wrapAsync } from '../utils/controllers'; module.exports = (api) => { api.route('/playlists').get(wrapAsync(Playlist.list)); api.route('/playlists/:playlistId').get(wrapAsync(Playlist.get)); api.route('/playlists').post(wrapAsync(Playlist.post)); api.route('/playlists/:playlistId').put(wrapAsync(Playlist.put)); api.route('/playlists/:playlistId').delete(wrapAsync(Playlist.delete)); }; ================================================ FILE: api/src/routes/podcast.js ================================================ import Podcast from '../controllers/podcast'; import Episode from '../controllers/episode'; import { wrapAsync } from '../utils/controllers'; module.exports = (api) => { api.route('/podcasts').get(wrapAsync(Podcast.list)); api.route('/podcasts/:podcastId').get(wrapAsync(Podcast.get)); api.route('/podcasts').post(wrapAsync(Podcast.post)); api.route('/podcasts/:podcastId').put(wrapAsync(Podcast.put)); api.route('/podcasts/:podcastId/episodes').get(wrapAsync(Episode.list)); api.route('/podcasts/:podcastId/episodes/:episodeId').get(wrapAsync(Episode.get)); }; ================================================ FILE: api/src/routes/rss.js ================================================ import RSS from '../controllers/rss'; import Article from '../controllers/article'; import { wrapAsync } from '../utils/controllers'; module.exports = (api) => { api.route('/rss').get(wrapAsync(RSS.list)); api.route('/rss/:rssId').get(wrapAsync(RSS.get)); api.route('/rss').post(wrapAsync(RSS.post)); api.route('/rss/:rssId').put(wrapAsync(RSS.put)); api.route('/rss/:rssId/articles').get(wrapAsync(Article.list)); api.route('/rss/:rssId/articles/:articleId').get(wrapAsync(Article.get)); }; ================================================ FILE: api/src/routes/tag.js ================================================ import Tag from '../controllers/tag'; import { wrapAsync } from '../utils/controllers'; module.exports = (api) => { api.route('/tags').get(wrapAsync(Tag.list)); api.route('/tags').post(wrapAsync(Tag.post)); api.route('/tags/:tagId').get(wrapAsync(Tag.get)); api.route('/tags/:tagId').put(wrapAsync(Tag.put)); api.route('/tags/:tagId').delete(wrapAsync(Tag.delete)); }; ================================================ FILE: api/src/routes/user.js ================================================ import User from '../controllers/user'; import Feed from '../controllers/feed'; import { wrapAsync } from '../utils/controllers'; module.exports = (api) => { api.route('/users').get(wrapAsync(User.list)); api.route('/users/:userId').get(wrapAsync(User.get)); api.route('/users/:userId').put(wrapAsync(User.put)); api.route('/users/:userId').delete(wrapAsync(User.delete)); api.route('/users/:userId/feeds').get(wrapAsync(Feed.get)); }; ================================================ FILE: api/src/server.js ================================================ import config from './config'; import fs from 'fs'; import path from 'path'; import express from 'express'; import bodyParser from 'body-parser'; import cors from 'cors'; import compression from 'compression'; import jwt from 'express-jwt'; import limit from 'express-rate-limit'; import logger from './utils/logger'; import { startSampling } from './utils/watchdog'; import { setupExpressRequestHandler, setupExpressErrorHandler } from './utils/errors'; import User from './models/user'; const api = express(); setupExpressRequestHandler(api); api.use(cors({ maxAge: 1728000 })); api.use(compression()); api.use(bodyParser.urlencoded({ extended: true })); api.use(bodyParser.json({ limit: '5mb' })); api.enable('trust proxy'); api.use( new limit({ windowMs: 60 * 1000, max: 1000, delayMs: 0, }), ); api.set('json spaces', 4); api.use( jwt({ secret: config.jwt.secret }).unless({ path: [ '/', '/health', /\/bull*/, '/email/weekly', '/status', '/queue', '/sentry/log', '/sentry/throw', '/auth/signup', '/auth/login', '/auth/forgot-password', '/auth/reset-password', ], }), ); api.use(async function addUser(req, res, next) { // XXX: req.user is attached by JWT when a valid token is provided with the request // and the route requires authentication if (!req.user) { return next(); } try { req.User = await User.findById(req.user.sub).exec(); if (req.User === null) { res.status(401); } } catch (err) { next(err); } next(); }); api.use(function catchAuthErrors(err, req, res, next) { if (err.name === 'UnauthorizedError') { res.status(401).send('Missing authentication credentials.'); } }); api.use(function setPoweredByHeaders(req, res, next) { res.setHeader('X-Powered-By', 'Winds - Powered by GetStream.io'); next(); }); fs.readdirSync(path.join(__dirname, 'routes')).map((file) => { require('./routes/' + file)(api); }); if (require.main === module) { require('./utils/db'); startSampling('winds.event_loop.api.delay'); api.listen(config.server.port, (err) => { if (err) { logger.error({ err }); process.exit(1); } logger.info( `API is now running on port ${config.server.port} in ${config.env} mode`, ); }); } setupExpressErrorHandler(api); module.exports = api; ================================================ FILE: api/src/utils/analytics.js ================================================ import jwt from 'jsonwebtoken'; import streamAnalytics from 'stream-analytics'; import logger from './logger'; import config from '../config'; var streamAnalyticsClient = null; export function getAnalyticsClient() { if (streamAnalyticsClient == null) { const token = jwt.sign( { action: '*', resource: '*', user_id: '*', }, config.stream.apiSecret, { algorithm: 'HS256', noTimestamp: true }, ); streamAnalyticsClient = new streamAnalytics({ apiKey: config.stream.apiKey, token: token, }); } return streamAnalyticsClient; } // tracks engagement for the given user export async function trackEngagement(user, engagement) { let analyticsClient = getAnalyticsClient(); analyticsClient.setUser({ alias: user.email, id: user._id.toString(), }); if (Object.keys(engagement).length && !config.analyticsDisabled) { const res = await analyticsClient.trackEngagement(engagement); return res; } } ================================================ FILE: api/src/utils/basicAuth.js ================================================ import basicAuth from 'express-basic-auth'; import User from '../models/user'; const asyncAuthorizer = async (email, password, cb) => { if (!email || !password) return cb(null, false); const user = await User.findOne({ email: email.toLowerCase().trim(), admin: true }); if (!user) return cb(null, false); if (!(await user.verifyPassword(password))) return cb(null, false); return cb(null, true); }; export default basicAuth({ authorizer: asyncAuthorizer, authorizeAsync: true, challenge: true, }); ================================================ FILE: api/src/utils/blockedURLs.js ================================================ const blockedURLs = ['indeed.']; export const isBlockedURLs = (url = '') => { return !!blockedURLs.find((u) => url.includes(u)); }; ================================================ FILE: api/src/utils/collections.js ================================================ import Podcast from '../models/podcast'; import RSS from '../models/rss'; import Article from '../models/article'; import Episode from '../models/episode'; import { DetectLanguage } from '../parsers/detect-language'; import { getStreamClient } from '../utils/stream'; import config from '../config'; import logger from './logger'; // replaces TrackMetadata and events() calls export async function upsertCollections(type, content) { if (!content.length || config.analyticsDisabled) { return; } const streamClient = getStreamClient(); try { return await streamClient.collections.upsert(type, content); } catch (err) { logger.error(`failed to update collections with type ${type}`, { err }); } } const feedModels = { rss: { feed: RSS, content: Article }, podcast: { feed: Podcast, content: Episode }, }; function estimateSize(content) { let size = 2; // {} for (const [key, value] of Object.entries(content)) { size += Buffer.byteLength(String(key), 'utf8'); size += Buffer.byteLength(String(value), 'utf8'); size += 2; // :, } return size; } export async function sendFeedToCollections(type, feed, content) { const model = feedModels[type]; if (!feed.language) { feed.language = await DetectLanguage(feed.feedUrl); await model.feed.findByIdAndUpdate( feed.id, { language: feed.language }, { new: true }, ); } let mostRecentPublicationDate; if (content.length) { mostRecentPublicationDate = content[0].publicationDate; } await upsertCollections(type, [ { id: feed.id, title: feed.title, language: feed.language, description: (feed.description || '').substring(0, 240), articleCount: content.length, mostRecentPublicationDate, }, ]); const contentModelName = model.content.collection.collectionName; const chunkSize = 1000; const sizeLimit = 100 * 1024; // less then 128Kb to leave some space for external data for (let offset = 0; offset < content.length; ) { const data = []; const limit = Math.min(content.length, offset + chunkSize); let currentSize = 0; for (; offset < limit; ++offset) { const source = content[offset]; const item = { id: source.id, title: source.title, likes: source.likes, socialScore: source.socialScore, description: (source.description || '').substring(0, 240), publicationDate: source.publicationDate, [type]: feed.id, }; //XXX: we overestimate object size by 5-10% const size = estimateSize(item); if (currentSize + size > sizeLimit) { break; } currentSize += size; data.push(item); } await upsertCollections(contentModelName, data); } } ================================================ FILE: api/src/utils/controllers.js ================================================ function wrapAsync(fn) { return function wrapAsyncInner(req, res, next) { // Make sure to `.catch()` any errors and pass them along to the `next()` // middleware in the chain, in this case the error handler. fn(req, res, next).catch((e) => { next(e); }); }; } exports.wrapAsync = wrapAsync; ================================================ FILE: api/src/utils/db/index.js ================================================ import mongoose from 'mongoose'; import config from '../../config'; import logger from '../logger'; mongoose.Promise = global.Promise; const connection = mongoose.connect(config.database.uri, { autoIndex: true, reconnectTries: Number.MAX_VALUE, reconnectInterval: 500, poolSize: 50, bufferMaxEntries: 0, keepAlive: 120, useNewUrlParser: true, }); connection .then((db) => { logger.info( `Successfully connected to ${config.database.uri} MongoDB cluster in ${config.env} mode.`, ); return db; }) .catch((err) => { if (err.message.code === 'ETIMEDOUT') { logger.info('Attempting to re-establish database connection.'); mongoose.connect(config.database.uri); } else { logger.error('Error while attempting to connect to database:', { err }); } }); export default connection; ================================================ FILE: api/src/utils/email/context.js ================================================ import * as personalization from '../personalization'; import Podcast from '../../models/podcast'; import Article from '../../models/article'; import Episode from '../../models/episode'; import Follow from '../../models/follow'; import RSS from '../../models/rss'; import Pin from '../../models/pin'; import User from '../../models/user'; import logger from '../../utils/logger'; import { getStreamClient } from '../../utils/stream'; export async function dailyContextGlobal() { //TODO: actually implement this return await weeklyContextGlobal(); } export async function weeklyContextGlobal() { const [rss, users, podcast, episodes, articles] = await Promise.all([ RSS.find({}).estimatedDocumentCount(), User.find({}).estimatedDocumentCount(), Podcast.find({}).estimatedDocumentCount(), Episode.find({}).estimatedDocumentCount(), Article.find({}).estimatedDocumentCount(), ]); return { counts: { rss, users, podcast, episodes, articles } }; } export async function dailyContextUser(user) { //TODO: actually implement this return await weeklyContextUser(user); } function getRedirectUrl(url, id, userID, position) { return getStreamClient().createRedirectUrl(url, userID, [ { content: id, label: 'click', user_data: userID, location: 'email', position, }, ]); } export async function weeklyContextUser(user) { const userID = user._id.toString(); let articles = []; let episodes = []; try { [articles, episodes] = await Promise.all([ personalization.getArticleRecommendations(userID, 5), personalization.getEpisodeRecommendations(userID, 5), ]); let position = 0; for (const episode of episodes) { episode.trackingUrl = getRedirectUrl( episode.getUrl(), `episode:${episode._id}`, user._id, ++position, ); } for (const article of articles) { article.trackingUrl = getRedirectUrl( article.getUrl(), `article:${article._id}`, user._id, ++position, ); } } catch (e) { logger.warn(`Content recommendations failed for ${userID}: ${e.stack}`); if (e.request) { logger.warn( `Failed with code ${e.response.status} for path ${e.request.path}`, ); } } let podcasts = []; let rss = []; try { [podcasts, rss] = await Promise.all([ personalization.getPodcastRecommendations(userID, 3), personalization.getRSSRecommendations(userID, 3), ]); } catch (e) { logger.warn(`Follow suggestions failed for ${userID}: ${e.stack}`); } return { email: user.email, articles, episodes, user, podcasts, rss, }; } ================================================ FILE: api/src/utils/email/send.js ================================================ import fs from 'fs'; import ejs from 'ejs'; import sendgrid from '@sendgrid/mail'; import logger from '../logger'; import config from '../../config'; export var DummyEmailTransport = { emails: [] }; export function CreateDailyEmail(data) { const msg = ejs.render( fs.readFileSync(__dirname + '/templates/daily.ejs', 'utf8'), data, ); const obj = { to: data.email, from: config.email.sender.support.email, subject: 'Winds Digest', html: msg, }; return obj; } export function CreateWeeklyEmail(data) { const msg = ejs.render( fs.readFileSync(__dirname + '/templates/weekly.ejs', 'utf8'), data, ); const obj = { to: data.email, from: config.email.sender.support.email, subject: 'Winds Digest', html: msg, }; return obj; } export async function SendDailyEmail(data) { let obj = CreateDailyEmail(data); let res = await SendEmail(obj); return res; } export async function SendWeeklyEmail(data) { let obj = CreateWeeklyEmail(data); let res = await SendEmail(obj); return res; } export async function SendWelcomeEmail(data) { const msg = ejs.render(fs.readFileSync(__dirname + '/templates/welcome.ejs', 'utf8')); const obj = { to: data.email, from: config.email.sender.support.email, subject: 'Welcome to Winds!', html: msg, }; let res = await SendEmail(obj); return res; } export async function SendPasswordResetEmail(data) { const msg = ejs.render( fs.readFileSync(__dirname + '/templates/password.ejs', 'utf8'), { recoveryCode: data.recoveryCode, }, ); const obj = { to: data.email, from: config.email.sender.support.email, subject: 'Forgot Password', html: msg, }; return await SendEmail(obj); } export async function SendEmail(obj) { if (config.email.backend === 'sendgrid') { if (!config.email.sendgrid.secret) { throw new Error('Could not send reset email, missing Sendgrid secret.'); } sendgrid.setApiKey(config.email.sendgrid.secret); let res = await sendgrid.send(obj); return res; } else { DummyEmailTransport.emails.unshift(obj); return obj; } } ================================================ FILE: api/src/utils/email/templates/daily.ejs ================================================ Winds Digest Winds
<%= user.username %>'s Digest

If you're not happy with this email's recommendations be sure to talk to balazs@getstream.io

top episodes for you

    <% for(const episode of episodes) { %>
  1. <%= episode.title %>
  2. <% } %>

top articles for you

    <% for(const article of articles) { %>
  1. <%= article.title %>
  2. <% } %>

follow suggestions podcasts

    <% for(const podcast of podcasts) { %>
  1. <%= podcast.title %>
  2. <% } %>

follow suggestions rss

    <% for(const r of rss) { %>
  1. <%= r.title %>
  2. <% } %>

stats about winds

  1. Users: <%= counts.users %>
  2. Articles: <%= counts.articles %>
  3. Episodes: <%= counts.episodes %>
  4. RSS feeds: <%= counts.rss %>
  5. Podcast feeds: <%= counts.podcast %>
Happy Procrastination,
@nickparsons, @kenhoff, @joshtilton and @tschellenbach ================================================ FILE: api/src/utils/email/templates/followee.ejs ================================================ You're so popular! You have a new follower! You're so popular! It looks like <%= follower %> is now following you!

Want to know more about your new follower? Head over to Winds and have a look at their profile.

Best,
The Stream Team ================================================ FILE: api/src/utils/email/templates/password.ejs ================================================ Forgot Password Looks like you really blew it, and let your Winds password fly away.

Let’s get you back on track! Your randomly generated recovery code is:

<%= recoveryCode %>

Best,
The Stream Team ================================================ FILE: api/src/utils/email/templates/weekly.ejs ================================================ Winds Digest Winds
<%= user.username %>'s Digest

If you're not happy with this email's recommendations be sure to talk to balazs@getstream.io

top episodes for you

    <% for(const episode of episodes) { %>
  1. <%= episode.title %>
  2. <% } %>

top articles for you

    <% for(const article of articles) { %>
  1. <%= article.title %>
  2. <% } %>

follow suggestions podcasts

    <% for(const podcast of podcasts) { %>
  1. <%= podcast.title %>
  2. <% } %>

follow suggestions rss

    <% for(const r of rss) { %>
  1. <%= r.title %>
  2. <% } %>

stats about winds

  1. Users: <%= counts.users %>
  2. Articles: <%= counts.articles %>
  3. Episodes: <%= counts.episodes %>
  4. RSS feeds: <%= counts.rss %>
  5. Podcast feeds: <%= counts.podcast %>
Happy Procrastination,
@nickparsons, @kenhoff, @joshtilton and @tschellenbach ================================================ FILE: api/src/utils/email/templates/welcome.ejs ================================================ Welcome to Winds! Thanks for checking out Winds. Winds is an open-source RSS & Podcast app built on React, Redux and Stream.

Contributions are much appreciated, so check us out on GitHub. The roadmap discussion for v2.1 is here and you can suggest Podcasts and RSS feeds to feature as well.

Happy Procrastination,
@nickparsons, @kenhoff, @joshtilton and @tschellenbach ================================================ FILE: api/src/utils/errors.js ================================================ import config from '../config'; import Raven from 'raven'; import path from 'path'; import logger from '../utils/logger'; let version; if (process.env.DOCKER) { version = 'DOCKER'; } else { version = require('../../../app/package.json'); } require.resolve('raven'); const executable = path.basename(process.argv[1]); let ravenInstance; function sendSourceMaps(data) { var stacktrace = data.exception && data.exception[0].stacktrace; if (stacktrace && stacktrace.frames) { stacktrace.frames.forEach(function (frame) { if ( frame.filename.indexOf('/api/dist/') !== -1 && frame.filename.indexOf('/node_modules/') === -1 ) { frame.filename = `app:///${frame.filename.split('api/dist/')[1]}`; } }); } return data; } let sentryOptions = { dsn: config.sentry.dsn, level: 'error', patchGlobal: config.env === 'production', environment: config.env, tags: { script: executable }, release: `v${version}`, }; ravenInstance = Raven.config(sentryOptions.dsn, sentryOptions); if (config.sentry.dsn) { ravenInstance.install(); } function captureError(err, msg) { Raven.captureException(err); } exports.setupExpressRequestHandler = (app) => { if (config.sentry.dsn) { app.use(ravenInstance.requestHandler()); } }; exports.setupExpressErrorHandler = (app) => { if (config.sentry.dsn) { app.use(ravenInstance.errorHandler()); } app.use(function (err, req, res, next) { var status = err.status || err.statusCode || err.status_code || (err.output && err.output.statusCode) || 500; // skip anything not marked as an internal server error if (status < 500) return next(err); logger.error({ err }); return next(err); }); }; exports.Throw = () => { throw new Error('test'); }; exports.Raven = ravenInstance; exports.CaptureError = captureError; ================================================ FILE: api/src/utils/logger/index.js ================================================ import winston from 'winston'; import { inspect } from 'util'; import config from '../../config'; import { createSentryTransport } from './sentry'; import { Raven } from '../errors'; const { format } = winston; function isError(e) { return e && e.stack && e.message; } const warnAboutWinston = format((info) => { if (isError(info)) { console.log( 'You should use logger.error(err). Please use logger.error({err}) instead.', ); return false; } return info; }); const sillyWinstonConsoleFormatter = format.printf((info) => { let message = info.message; if (isError(message)) { message = `${message.stack}`; } else if (isError(info.err)) { message = `${message} ${info.err.stack}`; } else if (message && isError(message.err)) { message = `${message} ${message.err.stack}`; } const meta = info.meta !== undefined ? inspect(info.meta, { depth: null }) : ''; return `[${info.timestamp}] ${info.level}: ${message} ${meta}`; }); const logger = winston.createLogger({ level: config.logger.level, format: format.combine( format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss.SSS' }), warnAboutWinston(), sillyWinstonConsoleFormatter, ), transports: [new winston.transports.Console()], }); if (config.sentry.dsn) { logger.add(createSentryTransport(Raven)); } export default logger; ================================================ FILE: api/src/utils/logger/sentry.js ================================================ import Transport from 'winston-transport'; const winstonLevelToSentryLevel = { silly: 'debug', verbose: 'debug', info: 'info', debug: 'debug', warn: 'warning', error: 'error', }; /** * @param {Error} error */ const errorHandler = (error) => { console.log(error); }; let isError = function (e) { return e && e.stack && e.message; }; /** * @param {{}} info * @param {string} info.level * @return {{}} */ const prepareMeta = (info) => { let msg = info.message; let extra = Object.assign({}, info.extra || {}); let hasError = false; if (isError(info)) { hasError = true; msg = info; extra.stackError = info.stack; } else if (isError(info.message)) { hasError = true; msg = info.message; extra.stackError = info.message.stack; } else if (isError(info.err)) { msg = info.err; hasError = true; extra.stackError = info.err.stack; } else if (info.message && isError(info.message.err)) { msg = info.message.err; hasError = true; extra.stackError = info.message.err.stack; } return [ hasError, msg, { level: winstonLevelToSentryLevel[info.level], tags: info.tags || {}, extra, }, ]; }; class SentryWinstonTransport extends Transport { constructor(options) { super(options); this.options = Object.assign( { dsn: '', patchGlobal: false, install: false, tags: {}, extra: {}, errorHandler, }, options, ); } /** * @param {{}} info * @param {string} info.level * @param {Error|string} info.message * @param {Function} done */ async log(info, done) { if (this.silent) return done(null, true); let [hasError, msg, meta] = prepareMeta(info); let method = hasError ? 'captureException' : 'captureMessage'; try { let eventId = await this.raven[method](msg, meta); done(null, eventId); } catch (error) { done(error); } } } SentryWinstonTransport.prototype.name = 'sentry'; function createSentryTransport(ravenInstance) { let transport = new SentryWinstonTransport({ level: 'error' }); transport.raven = ravenInstance; return transport; } module.exports.createSentryTransport = createSentryTransport; ================================================ FILE: api/src/utils/merge.js ================================================ import mongoose from 'mongoose'; import Article from '../models/article'; import Episode from '../models/episode'; import Follow from '../models/follow'; import Pin from '../models/pin'; import Podcast from '../models/podcast'; import RSS from '../models/rss'; import logger from '../utils/logger'; async function mergeFollows(lhsID, rhsID, type) { const [lhsFollows, rhsFollows] = await Promise.all([ Follow.find({ [type]: lhsID }).lean(), Follow.find({ [type]: rhsID }), ]); //XXX: converting IDs to string to allow equality checks in set const lhsUsers = new Set((lhsFollows || []).map((f) => String(f.user._id))); const update = (rhsFollows || []).filter( (f) => f.user && !lhsUsers.has(String(f.user._id)), ); const remove = (rhsFollows || []).filter( (f) => f.user && lhsUsers.has(String(f.user._id)), ); await Promise.all([ ...(rhsFollows || []).map((f) => f.removeFromStream()), Follow.updateMany({ _id: { $in: update.map((f) => f._id) } }, { [type]: lhsID }), Follow.remove({ _id: { $in: remove.map((f) => f._id) } }), ]); await Follow.getOrCreateMany( update.map((f) => { return { type, userID: f.user._id, publicationID: lhsID }; }), ); } async function mergeArticlesAndPins(lhsID, rhsID, type) { const model = type === 'rss' ? Article : Episode; const field = type === 'rss' ? 'article' : 'episode'; const rhsArticles = await model.find({ rss: rhsID }).lean(); const rhsFingerprints = rhsArticles.map((a) => a.fingerprint); const lhsArticlesWithMatchingFingerprints = await model .find({ rss: lhsID, fingerprint: { $in: rhsFingerprints }, }) .lean(); const lhsIDs = lhsArticlesWithMatchingFingerprints.map((a) => a._id); const lhsFingerprints = new Set( lhsArticlesWithMatchingFingerprints.map((a) => a.fingerprint), ); const update = rhsArticles.filter((a) => !lhsFingerprints.has(a.fingerprint)); const remove = rhsArticles.filter((a) => lhsFingerprints.has(a.fingerprint)); const [removePins, lhsPins] = await Promise.all([ Pin.find({ [field]: { $in: remove.map((a) => a._id) } }), Pin.find({ [field]: { $in: lhsIDs } }), ]); const lhsPinFingerprints = new Set(lhsPins.map((p) => p[field].fingerprint)); const duplicatePins = removePins.filter((p) => lhsPinFingerprints.has(p[field].fingerprint), ); const newPins = removePins.filter( (p) => !lhsPinFingerprints.has(p[field].fingerprint), ); const pinUpdates = newPins.map((p) => { const article = lhsArticlesWithMatchingFingerprints.filter( (a) => a.fingerprint == p[field].fingerprint, )[0]; return Pin.updateOne({ _id: p._id }, { [field]: article }); }); const articleUpdates = remove.map((r) => { const article = lhsArticlesWithMatchingFingerprints.filter( (a) => a.fingerprint == r.fingerprint, )[0]; return model.updateOne({ _id: r._id }, { duplicateOf: article._id }); }); await Promise.all([ model.updateMany({ _id: { $in: update.map((f) => f._id) } }, { rss: lhsID }), ...pinUpdates, ...articleUpdates, Pin.remove({ _id: { $in: duplicatePins.map((f) => f._id) } }), ]); } async function mergeFeedUrls(lhsID, rhsID, type) { const model = type === 'rss' ? RSS : Podcast; const [lhs, rhs] = await Promise.all([ model.findById(lhsID).lean(), model.findById(rhsID).lean(), ]); const feedUrls = new Set( [ lhs.feedUrl, rhs.feedUrl, ...(lhs.feedUrls || []), ...(rhs.feedUrls || []), ].filter((a) => a), ); await model.updateOne({ _id: lhsID }, { feedUrls: [...feedUrls] }); } export async function mergeFeeds(lhsID, rhsID, type) { lhsID = mongoose.Types.ObjectId(lhsID); rhsID = mongoose.Types.ObjectId(rhsID); type = type.toLowerCase(); const model = type === 'rss' ? RSS : Podcast; await Promise.all([ mergeFollows(lhsID, rhsID, type), mergeArticlesAndPins(lhsID, rhsID, type), mergeFeedUrls(lhsID, rhsID, type), ]); await model.updateOne({ _id: rhsID }, { duplicateOf: lhsID }); } ================================================ FILE: api/src/utils/personalization/index.js ================================================ import jwt from 'jsonwebtoken'; import Article from '../../models/article'; import Podcast from '../../models/podcast'; import RSS from '../../models/rss'; import Episode from '../../models/episode'; import logger from '../../utils/logger'; import { getStreamClient } from '../../utils/stream'; import config from '../../config'; function createGlobalToken() { const token = jwt.sign( { action: '*', feed_id: '*', resource: '*', user_id: '*', }, config.stream.apiSecret, { algorithm: 'HS256', noTimestamp: true }, ); return token; } export async function getRecommendations(userID, type, limit) { if (!userID) { throw Error('missing user id'); } const streamClient = getStreamClient(); streamClient._personalizationToken = createGlobalToken(); const path = `winds_${type}_recommendations`; const queryParams = { user_id: userID, limit: limit }; const response = await streamClient.personalization.get(path, queryParams); const data = response.data ? response.data.results : response.results; return data.map((result) => { return result.foreign_id.includes(':') ? result.foreign_id.split(':')[1] : result.foreign_id; }); } export async function getRSSRecommendations(userID, limit = 20) { try { const ids = await getRecommendations(userID, 'rss', limit); const feeds = await RSS.find({ _id: { $in: ids } }); if (ids.length != feeds.length) { logger.warn(`Failed to find some rss feeds from list ${ids.join(',')}`); } return feeds; } catch (err) { logger.warn(`Failed to get RSS recomentations for user ${userID}`, { err }); return []; } } export async function getPodcastRecommendations(userID, limit = 20) { try { const ids = await getRecommendations(userID, 'podcast', limit); const feeds = await Podcast.find({ _id: { $in: ids } }); if (ids.length != feeds.length) { logger.warn(`Failed to find some podcast feeds from list ${ids.join(',')}`); } return feeds; } catch (err) { logger.warn(`Failed to get Podcast recomentations for user ${userID}`, { err }); return []; } } export async function getEpisodeRecommendations(userID, limit = 20) { try { const ids = await getRecommendations(userID, 'episode', limit); const episodes = await Episode.find({ _id: { $in: ids } }); if (ids.length != episodes.length) { logger.warn(`failed to find some episodes from list ${ids.join(',')}`); } return episodes; } catch (err) { logger.warn(`Failed to get Episode recomentations for user ${userID}`, { err }); return []; } } export async function getArticleRecommendations(userID, limit = 20) { try { const ids = await getRecommendations(userID, 'article', limit); const articles = await Article.find({ _id: { $in: ids } }); if (ids.length != articles.length) { logger.warn(`failed to find some articles from list ${ids.join(',')}`); } return articles; } catch (err) { logger.warn(`Failed to get Article recomentations for user ${userID}`, { err }); return []; } } ================================================ FILE: api/src/utils/queue.js ================================================ import Redis from 'ioredis'; import config from '../config'; const redis = new Redis(config.cache.uri); const TTL = 3600; // 1 hour in seconds redis.defineCommand('getQueueFlagSetMembers', { numberOfKeys: 1, lua: ` local set = KEYS[1] redis.replicate_commands() local time = redis.call('TIME') local now = tonumber(time[1]) redis.call('ZREMRANGEBYSCORE', set, 0, now) return redis.call('ZRANGE', set, 0, -1) `, }); redis.defineCommand('tryAddToQueueFlagSet', { numberOfKeys: 1, lua: ` local key = ARGV[1] local TTL = ARGV[2] local set = KEYS[1] redis.replicate_commands() local time = redis.call('TIME') local now = tonumber(time[1]) local exists = redis.call('ZSCORE', set, key) if not exists then return redis.call('ZADD', set, now + TTL, key) end return nil `, }); redis.defineCommand('tryCreateQueueFlag', { numberOfKeys: 1, lua: ` local key = KEYS[1] local TTL = ARGV[1] redis.replicate_commands() local exists = redis.call('EXISTS', key) if exists == 0 then return redis.call('SETEX', key, TTL, 1) end return nil `, }); export async function tryAddToQueueFlagSet(queueName, suffix, id, ttl = TTL) { const key = `queue-status:${queueName}`; const value = `${id}:${suffix}`; const created = await redis.tryAddToQueueFlagSet(key, value, ttl); return !!created; } export async function removeFromQueueFlagSet(queueName, suffix, id) { const key = `queue-status:${queueName}`; const value = `${id}:${suffix}`; return await redis.zrem(key, value); } export async function getQueueFlagSetMembers(queueName) { const key = `queue-status:${queueName}`; return await redis.getQueueFlagSetMembers(key); } export async function tryCreateQueueFlag(queueName, suffix, id, ttl = TTL) { const key = `queue-status:${queueName}:${id}:${suffix}`; const created = await redis.tryCreateQueueFlag(key, ttl); return !!created; } export async function removeQueueFlag(queueName, suffix, id) { const key = `queue-status:${queueName}:${id}:${suffix}`; return await redis.del(key); } ================================================ FILE: api/src/utils/random.js ================================================ // returns a random number from 2**1, 2**2, ..., 2**n-1, 2**n // 2 is two time more likely to be returned than 4, 4 than 8 and so until 2**n export default function weightedRandom(n = 6) { const exp = n; let rand = Math.floor(Math.random() * 2 ** exp); let b; for (b of [...Array(exp).keys()].reverse()) { if (rand >= 2 ** b - 1) { break; } } return 2 ** (exp - b); } ================================================ FILE: api/src/utils/rate-limiter.js ================================================ import Redis from 'ioredis'; import config from '../config'; const redis = new Redis(config.cache.uri); redis.defineCommand('rateLimit', { numberOfKeys: 2, lua: ` local requestsPerDay = tonumber(ARGV[1]) local microsecondsPerDay = 24 * 60 * 60 * 1000 * 1000 local requestsPerMicrosecond = requestsPerDay / microsecondsPerDay local microsecondsPerRequest = 1 / requestsPerMicrosecond local time = redis.call('TIME') local now = tonumber(time[1]) * 1000000 + tonumber(time[2]) local value = tonumber(redis.call('GET', KEYS[1])) or requestsPerDay local lastUpdate = tonumber(redis.call('GET', KEYS[2])) or now local timePassed = now - lastUpdate local newValue = math.min(requestsPerDay, value + requestsPerMicrosecond * timePassed) local timeUntilRefil = math.min(microsecondsPerRequest, math.max(0, microsecondsPerRequest - timePassed)) redis.replicate_commands() if math.floor(newValue) > 0 then newValue = newValue - 1 redis.call('SET', KEYS[2], now) timeUntilRefil = -1 end redis.call('SET', KEYS[1], newValue) return tostring(timeUntilRefil) `, }); function sleep(time) { return new Promise((resolve) => setTimeout(resolve, time)); } export async function tick(userID, requestsPerDay = 3000) { const valueKey = `rate-limit:${userID}:value`; const lastUpdateKey = `rate-limit:${userID}:last-update`; const timeUntilRefil = parseFloat( await redis.rateLimit(valueKey, lastUpdateKey, requestsPerDay), ); if (timeUntilRefil === -1) { return; } await sleep(timeUntilRefil / 1000); return tick(userID); } export async function reset(userID) { const valueKey = `rate-limit:${userID}:value`; const lastUpdateKey = `rate-limit:${userID}:last-update`; return await redis.del(valueKey, lastUpdateKey); } ================================================ FILE: api/src/utils/sanitize.js ================================================ import sanitizeHtml from 'sanitize-html'; const allowedTags = [ 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'a', 'ul', 'ol', 'nl', 'li', 'blockquote', 'code', 'table', 'thead', 'caption', 'tbody', 'tr', 'th', 'td', 'pre', 'figcaption', 'b', 'br', 'i', 'strong', 'em', 'strike', 'img', ]; const options = { allowedIframeHostnames: false, allowedTags, allowedAttributes: { a: ['href', 'target', 'id'], img: ['src', 'title', 'alt', 'data-*'], }, }; const sanitize = (dirty) => { const html = sanitizeHtml(dirty, options).replace(/\n|\r/g, ''); if (html === '') return '

'; return html; }; export default sanitize; ================================================ FILE: api/src/utils/search/index.js ================================================ import algolia from 'algoliasearch'; import config from '../../config'; import util from 'util'; import logger from '../../utils/logger'; if (config.algolia.appId && config.algolia.writeKey && config.algolia.index) { const client = algolia(config.algolia.appId, config.algolia.writeKey); const index = client.initIndex(config.algolia.index); module.exports = async (data) => { if (!data.type) { throw new Error('Missing data.type key and value.'); } await util.promisify(index.addObject.bind(index))(data); }; module.exports.indexMany = async (data) => { await util.promisify(index.addObjects.bind(index))(data); }; } else { module.exports = async () => { logger.info('Faking search indexing'); }; module.exports.indexMany = function () { logger.info('Faking search indexing'); }; } ================================================ FILE: api/src/utils/social.js ================================================ import request from 'request-promise-native'; import * as urlParser from 'url'; import querystring from 'querystring'; import config from '../config'; export function extractRedditPostID(article) { if (!article.link.includes('reddit')) { return; } const parts = article.link.split('/'); if (parts.includes('comments')) { return 't3_' + parts[parts.indexOf('comments') + 1]; } if (parts.includes('r')) { throw new Error(`Invalid URL (subreddit, not submission): ${article.link}`); } const id = parts[parts.length - 1]; if (!/^[a-z0-9]+$/i.test(id)) { throw new Error(`Invalid URL: ${article.link}`); } return 't3_' + id; } export function extractHackernewsPostID(article) { if (!article.commentUrl.includes('ycombinator')) { return; } const url = urlParser.parse(article.commentUrl, true); return url.query.id; } const userAgent = 'web:winds:v2.2'; let accessToken; async function refreshAccessToken() { const url = 'https://www.reddit.com/api/v1/access_token'; const data = querystring.stringify({ grant_type: 'password', username: config.social.reddit.username, password: config.social.reddit.password, }); const options = { uri: url, json: true, headers: { 'User-Agent': userAgent, 'Content-Type': 'application/x-www-form-urlencoded', }, auth: { user: config.social.reddit.key, pass: config.social.reddit.secret, }, body: data, }; const response = await request.post(options); accessToken = response.access_token; } function sleep(time) { return new Promise((resolve) => (time ? setTimeout(resolve, time) : resolve())); } async function tryRedditAPI(path, retries = 2, backoffDelay = 30) { if (!accessToken) { await refreshAccessToken(); } const url = 'https://oauth.reddit.com/api' + path; const options = { json: true, headers: { 'User-Agent': userAgent, Authorization: `bearer ${accessToken}`, }, }; let currentDelay = 0, nextDelay = backoffDelay; while (retries) { try { await sleep(currentDelay); return await request(url, options); } catch (err) { if ([403, 401].includes(err.response.status)) { await refreshAccessToken(); options.headers.Authorization = `bearer ${accessToken}`; continue; } --retries; [currentDelay, nextDelay] = [nextDelay, currentDelay + nextDelay]; } } throw new Error(`Failed to perform call to '${path}'`); } async function tryHackernewsAPI(path, retries = 2, backoffDelay = 30) { const url = 'https://hacker-news.firebaseio.com/v0' + path; let currentDelay = 0, nextDelay = backoffDelay; while (retries) { try { await sleep(currentDelay); return await request(url, { json: true }); } catch (_) { --retries; [currentDelay, nextDelay] = [nextDelay, currentDelay + nextDelay]; } } throw new Error(`Failed to perform call to '${path}'`); } async function tryHackernewsSearch(query, retries = 2, backoffDelay = 30) { const url = 'https://hn.algolia.com/api/v1/search'; let currentDelay = 0, nextDelay = backoffDelay; while (retries) { try { await sleep(currentDelay); return await request(url, { json: true, qs: { restrictSearchableAttributes: 'url', tags: 'story', query, }, }); } catch (_) { --retries; [currentDelay, nextDelay] = [nextDelay, currentDelay + nextDelay]; } } throw new Error(`Failed to perform call to '${url}'`); } export async function redditPost(article) { const response = await tryRedditAPI(`/info?url=${article.url}`); const postScores = response.data.children.map((c) => c.data.score); return postScores.reduce((max, n) => Math.max(max, n), 0); } export async function hackernewsPost(article) { const response = await tryHackernewsSearch(article.url); const postScores = response.hits.map((c) => c.points); return postScores.reduce((max, n) => Math.max(max, n), 0); } export async function redditScore(postID) { const response = await tryRedditAPI(`/info?id=${postID}`); return response.data.children[0].data.score; } export async function hackernewsScore(postID) { const response = await tryHackernewsAPI(`/item/${postID}.json`); return response.score; } const socialSources = { reddit: { extractID: extractRedditPostID, search: redditPost, score: redditScore }, hackernews: { extractID: extractHackernewsPostID, search: hackernewsPost, score: hackernewsScore, }, }; export async function fetchSocialScore(article) { const entries = await Promise.all( Object.entries(socialSources).map( async ([source, { extractID, search, score }]) => { let id; try { id = extractID(article); } catch (_) { //XXX: ignore error } let result; if (id) { try { result = [source, await score(id)]; } catch (_) { //XXX: ignore error } } if (!result) { try { result = [source, await search(article)]; } catch (_) { result = [source, 0]; } } return result; }, ), ); // assemble entries w/ positive score into an object return entries .filter(([_, score]) => !!score) .reduce((obj, [source, score]) => Object.assign(obj, { [source]: score }), {}); } ================================================ FILE: api/src/utils/statsd.js ================================================ import config from '../config'; import { StatsD } from 'node-statsd'; var statsDClient = null; function getStatsDClient() { if (!statsDClient) { statsDClient = new StatsD({ host: config.statsd.host, port: config.statsd.port, prefix: config.statsd.prefix, cacheDns: true, }); } return statsDClient; } async function timeIt(name, fn) { let t0 = new Date(); let r = await fn(); getStatsDClient().timing(name, new Date() - t0); return r; } exports.getStatsDClient = getStatsDClient; exports.timeIt = timeIt; ================================================ FILE: api/src/utils/stream.js ================================================ import stream from 'getstream'; import config from '../config'; var streamClient = null; export function getStreamClient() { if (streamClient === null) { streamClient = stream.connect(config.stream.apiKey, config.stream.apiSecret); } return streamClient; } ================================================ FILE: api/src/utils/upsert.js ================================================ import { diff } from 'deep-object-diff'; import Article from '../models/article'; import Episode from '../models/episode'; import { getStatsDClient, timeIt } from '../utils/statsd'; const duplicateKeyError = 11000; const immutableFields = [ 'publicationDate', 'createdAt', 'updatedAt', 'id', '_id', 'type', ]; const statsd = getStatsDClient(); // upsertManyPosts at once at super speed export async function upsertManyPosts(publicationID, newPosts, schemaField) { // step 1: get the existing objects in mongodb const fingerprints = newPosts.map((p) => p.fingerprint); const lookup = { [schemaField]: publicationID, fingerprint: { $in: fingerprints } }; const schema = schemaField == 'rss' ? Article : Episode; const existingPosts = await schema.find(lookup).lean(); const existingPostsMap = {}; for (const post of existingPosts) { existingPostsMap[post.fingerprint] = post; } // step 2: make a list of posts we should update const operationMap = { new: [], changed: [], unchanged: [] }; const operations = []; for (const post of newPosts) { if (!post[schemaField]) { throw new Error(`You forgot to specify the ${schemaField} field`); } const data = post.toObject ? post.toObject() : post; if (post.fingerprint in existingPostsMap) { const existing = existingPostsMap[post.fingerprint]; if (!postChanged(existing, post)) { operationMap.unchanged.push(data); continue; } // filter on both rss and fingerprint so we can use the index const filter = { [schemaField]: publicationID, fingerprint: existing.fingerprint, }; const { _id, id, ...dataWithoutId } = data; operations.push({ updateOne: { filter: filter, update: dataWithoutId } }); operationMap.changed.push({ _id: existing._id, ...dataWithoutId }); } else { operations.push({ insertOne: { document: data } }); operationMap.new.push(data); } } // step 3: apply the update via bulkWrite // https://docs.mongodb.com/manual/core/bulk-write-operations/ // http://mongoosejs.com/docs/api.html#bulkwrite_bulkWrite if (operations.length) { try { await schema.bulkWrite(operations, { ordered: false }); } catch (e) { // since we use an unordered query it doesnt matter if we hit a few unique constraints if (e.code != duplicateKeyError) { throw e; } } } // step 4: statsd tracking on new, updated and unchanged // TODO: Tommaso! Do you agree with the format? for (const [k, v] of Object.entries(operationMap)) { statsd.increment(`winds.handle_rss.${schemaField}.${k}`, v.length); } return operationMap; } export function normalizePost(post) { const postObject = post.toObject ? post.toObject() : post; // these ids are not present in the RSS feed, so that causes issues for (let e of postObject.enclosures) { delete e['_id']; } return postObject; } // compare 2 posts and see if they changed export function normalizedDiff(existingPost, newPost) { let existingObject = normalizePost(existingPost); let newObject = normalizePost(newPost); // handle the fact that images are updated via OG scraping, so we only care if more became available newObject.images = Object.assign(existingObject.images, newObject.images); let objectDiff = diff(existingObject, newObject); // remove the immutable fields from the diff for (let f of immutableFields) { delete objectDiff[f]; } return Object.keys(objectDiff); } export function postChanged(existingPost, newPost) { return normalizedDiff(existingPost, newPost).length != 0; } ================================================ FILE: api/src/utils/urls.js ================================================ import config from '../config'; import util from 'util'; const urlMap = { article_detail: 'rss/%s/articles/%s', episode_detail: 'podcast/%s/episodes/%s', rss_detail: 'rss/%s', podcast_detail: 'podcast/%s', }; export function getUrl(urlName, ...args) { const format = urlMap[urlName]; const path = util.format(format, ...args); const url = config.url + '/' + path; return url; } export function extractHostname(request) { const protocol = (request.connection && request.connection.encrypted ? 'https' : 'http') + '://'; let canonicalUrl = ''; if (request.uri) { canonicalUrl = `${request.uri.protocol}//${request.uri.host}`; } if (!canonicalUrl && request.href) { canonicalUrl = request.href; } if (!canonicalUrl && request.res) { canonicalUrl = request.res.responseUrl; } if (!canonicalUrl && request.domain) { canonicalUrl = protocol + request.domain; } if (!canonicalUrl) { const host = request.originalHost || request.host || (request.headers ? request.headers['host'] : request.getHeader('Host')); canonicalUrl = protocol + host; } return canonicalUrl; } export function ensureEncoded(url) { if (url == decodeURI(url)) { return encodeURI(url); } return url; } ================================================ FILE: api/src/utils/validation.js ================================================ import normalizeUrl from 'normalize-url'; import validator from 'validator'; import logger from './logger'; export function isURL(url) { if (!url) { return false; } if (typeof url != 'string') { return false; } if (url.indexOf('newsletter:') == 0) { return false; } // make sure that mysubdomain-.google.com works and myurl.com/?q=hello world also works let variations = [url, url.replace(' ', '+'), url.replace('-.', '-a.')]; try { variations.push(normalizeUrl(url)); } catch (e) { logger.info(`normalization failed for url ${url}`); } let valid = variations.some((v) => { let ok = validator.isURL(v, { allow_underscores: true, allow_trailing_dot: true, }); return ok; }); return valid; } ================================================ FILE: api/src/utils/watchdog.js ================================================ import { getStatsDClient } from './statsd'; const defaultSampleInterval = 60; export function startSampling(metricName, sampleInterval = defaultSampleInterval) { const statsd = getStatsDClient(); function updateMetric(diff) { const elapsed = diff[0] * 1000 + diff[1] / 1000000 - sampleInterval; statsd.timing(metricName, elapsed); } function loop() { let time = process.hrtime(); setTimeout(() => { const diff = process.hrtime(time); //XXX: scheduling statsd metric update to avoid disrupting measuring loop process.nextTick(() => updateMetric(diff)); time = process.hrtime(); loop(); }, sampleInterval); } loop(); } ================================================ FILE: api/src/workers/conductor.js ================================================ import moment from 'moment'; import mongoose from 'mongoose'; import db from '../utils/db'; import RSS from '../models/rss'; import Podcast from '../models/podcast'; import logger from '../utils/logger'; import weightedRandom from '../utils/random'; import { RssQueueAdd, PodcastQueueAdd } from '../asyncTasks'; import { isURL } from '../utils/validation'; import { startSampling } from '../utils/watchdog'; import { tryAddToQueueFlagSet, getQueueFlagSetMembers } from '../utils/queue'; const publicationTypes = { rss: { schema: RSS, enqueue: RssQueueAdd }, podcast: { schema: Podcast, enqueue: PodcastQueueAdd }, }; const conductorInterval = 60; const popularScrapeInterval = 2; const defaultScrapeInterval = 25; let timeout; function forever() { conduct() .then(() => { logger.info('Conductor iteration completed...'); }) .catch((err) => { logger.error('Conductor broke down', { err }); }); timeout = setTimeout(forever, conductorInterval * 1000); } if (require.main === module) { logger.info( `Starting the conductor... will conduct every ${conductorInterval} seconds`, ); forever(); startSampling('winds.event_loop.conductor.delay'); } async function getPublications( schema, followerMin, followerMax, interval, limit, exclude = [], ) { const busy = await getQueueFlagSetMembers(schema == RSS ? 'rss' : 'podcast'); const ids = busy.map((v) => v.split(':')[0]); const time = moment().subtract(interval, 'minutes').toDate(); return await schema .find({ _id: { $nin: exclude.concat(ids) }, valid: true, duplicateOf: { $exists: false }, lastScraped: { $lte: time }, followerCount: { $gte: followerMin, $lte: followerMax }, consecutiveScrapeFailures: { $lt: weightedRandom() }, }) .limit(limit) .sort('-followerCount'); } export async function conduct() { const publicationOptions = { removeOnComplete: true, removeOnFail: true }; for (const [type, { schema, enqueue }] of Object.entries(publicationTypes)) { const total = await schema.count(); //XXX: when running winds locally we can scrape more frequently const scrapeInterval = total < 1000 ? popularScrapeInterval : defaultScrapeInterval; // never schedule more than 1/15 per minute interval const maxToSchedule = Math.max(1, Math.floor(total / 15)); logger.info( `conductor will schedule at most ${maxToSchedule} of type ${type} ` + `to scrape per ${conductorInterval} seconds`, ); // find the publications that we need to update const limit = Math.max(1, maxToSchedule / 2); const popular = await getPublications( schema, 100, Number.POSITIVE_INFINITY, popularScrapeInterval, limit, ); const other = await getPublications( schema, 1, 100, scrapeInterval, limit, popular.map((p) => p._id), ); logger.info( `found ${popular.length} popular publications of type ${type} that ` + `we scrape every ${popularScrapeInterval} minutes and ` + `${other.length} that we scrape every ${scrapeInterval} minutes`, ); const publications = popular.concat(other); const updated = await Promise.all( publications.map((p) => tryAddToQueueFlagSet(type, type, p._id)), ); logger.info( `marked ${ updated.filter((u) => !!u).length } of type ${type} publications as isParsing`, ); logger.info(`conductor found ${publications.length} of type ${type} to scrape`); const validPublications = publications.filter((p) => isURL(p.feedUrl)); await Promise.all( validPublications.map((publication) => { const job = { [type]: publication._id, url: publication.feedUrl }; return enqueue(job, publicationOptions); }), ); logger.info( `Processing complete! Will try again in ${conductorInterval} seconds...`, ); } } function shutdown(signal) { logger.info(`Received ${signal}. Shutting down.`); try { clearTimeout(timeout); mongoose.connection.close(); } catch (err) { logger.error(`Failure during Conductor worker shutdown: ${err.message}`); process.exit(1); } process.exit(0); } function failure(reason, err) { logger.error(`Unhandled ${reason}: ${err.stack}. Shutting down Conductor worker.`); try { clearTimeout(timeout); mongoose.connection.close(); } catch (err) { logger.error(`Failure during Conductor worker shutdown: ${err.message}`); } process.exit(1); } process.on('SIGINT', shutdown); process.on('SIGTERM', shutdown); process.on('unhandledRejection', failure.bind(null, 'promise rejection')); process.on('uncaughtException', failure.bind(null, 'exception')); ================================================ FILE: api/src/workers/og.js ================================================ import joi from 'joi'; import mongoose from 'mongoose'; import normalize from 'normalize-url'; import { EventEmitter } from 'events'; import db from '../utils/db'; import logger from '../utils/logger'; import { startSampling } from '../utils/watchdog'; import { removeQueueFlag } from '../utils/queue'; import { isBlockedURLs } from '../utils/blockedURLs'; import RSS from '../models/rss'; // eslint-disable-line import Podcast from '../models/podcast'; // eslint-disable-line import Article from '../models/article'; import Episode from '../models/episode'; import { ParseOG, IsValidOGUrl } from '../parsers/og'; import { ProcessOgQueue, ShutDownOgQueue } from '../asyncTasks'; if (require.main === module) { EventEmitter.defaultMaxListeners = 128; logger.info('Starting the OG worker'); ProcessOgQueue(35, ogProcessor); startSampling('winds.event_loop.og.delay'); } export async function ogProcessor(job) { const JobURL = job.data.url || job.data.urls; logger.info(`OG image scraping: ${JobURL}`); if (isBlockedURLs(JobURL)) { logger.info(`${JobURL} is in block list and ignored.`); return; } try { await handleOg(job); } catch (err) { const tags = { queue: 'og' }; const extra = { JobURL, JobType: job.data.type, }; logger.error('OG job encountered an error', { err, tags, extra }); } } const schemaMap = { episode: Episode, article: Article, rss: RSS, podcast: Podcast }; const parentSchemaMap = { episode: Podcast, article: RSS, rss: RSS, podcast: Podcast }; const validTypes = ['episode', 'article', 'rss', 'podcast']; const joiUrl = joi .string() .uri({ scheme: ['http', 'https'], allowQuerySquareBrackets: true }); const joiObjectId = joi.alternatives().try( joi.string().length(12), joi .string() .length(24) .regex(/^[0-9a-fA-F]{24}$/), ); const schema = joi .object() .keys({ update: joi.boolean().default(false), rss: joiObjectId, podcast: joiObjectId, type: joi.string().valid(validTypes).required(), url: joiUrl, urls: joi.array().min(1), }) .xor('url', 'urls') .xor('rss', 'podcast'); // Run the OG scraping job export async function handleOg(job) { const originalPayload = {}; try { // best effort at escaping urls found in the wild if (!!job.data.urls) { originalPayload.urls = job.data.urls; job.data.urls = job.data.urls.map((u) => ensureEncoded(u)); } else { originalPayload.url = job.data.url; job.data.url = ensureEncoded(job.data.url); } } catch (_) { //XXX: ignore error } const validation = joi.validate(job.data, schema); if (!!validation.error) { logger.warn( `OG job validation failed: ${validation.error.message} for '${JSON.stringify( job.data, )}'`, ); return; } const update = job.data.update; const jobType = job.data.type; const mongoSchema = schemaMap[jobType]; const mongoParentSchema = parentSchemaMap[jobType]; const field = jobType === 'episode' ? 'link' : 'url'; const parentField = mongoParentSchema === RSS ? 'rss' : 'podcast'; await removeQueueFlag('og', parentField, job.data[parentField]); const urls = job.data.urls || [job.data.url]; const unecapedUrls = originalPayload.urls || [originalPayload.url]; for (let i in urls) { const url = urls[i]; const originalUrl = unecapedUrls[i]; if (!!joi.validate(url, joiUrl).error) { logger.warn( `OG job validation failed: invalid URL '${url}' for jobtype ${jobType}`, ); continue; } // if the instance hasn't been created yet, or it already has an OG image, ignore const instances = await mongoSchema .find({ [field]: originalUrl }) .lean() .limit(10); if (!instances.length) { logger.warn( `instance not found for type ${jobType} with lookup ${field}: '${originalUrl}' (${url})`, ); continue; } logger.debug(`found ${instances.length} to update with url ${url}`); const needUpdate = instances.filter((i) => !i.images.og || !i.canonicalUrl); if (!needUpdate.length && !update) { for (const instance of instances.filter((i) => !!i.images.og)) { logger.debug( `instance already has an image '${instance.images.og}': ${jobType} with lookup ${field}: '${url}'`, ); } for (const instance of instances.filter((i) => !!i.canonicalUrl)) { logger.debug( `instance already has a canonical URL '${instance.canonicalUrl}': ${jobType} with lookup ${field}: '${url}'`, ); } continue; } if (!IsValidOGUrl(url)) { continue; } let og; try { og = await ParseOG(url); if (!og.image) { logger.debug(`Didn't find image for ${url}`); } if (!og.canonicalUrl) { logger.debug(`Didn't find canonicalUrl for ${url}`); } if (!og.image && !og.canonicalUrl) { continue; } } catch (err) { //XXX: err object is huge, dont log it const message = err.message.length > 256 ? err.message.substr(0, 253) + '...' : err.message; logger.debug(`OGS scraping broke for URL '${url}': ${message}`); continue; } let normalized; try { normalized = normalize(og.image); } catch (err) { logger.debug(`Bad OG Image URL '${og.image}'`, { err }); } if (!normalized && !og.canonicalUrl) { continue; } const operations = []; for (const instance of needUpdate) { const updates = {}; if (normalized) { updates.images = Object.assign(instance.images || {}, { og: normalized }); } if (og.canonicalUrl) { updates.canonicalUrl = og.canonicalUrl; } operations.push({ updateOne: { filter: { _id: instance._id }, update: { $set: updates } }, }); } await mongoSchema.bulkWrite(operations, { ordered: false }); logger.info(`Stored ${normalized} image for '${url}'`); } } async function shutdown(signal) { logger.info(`Received ${signal}. Shutting down.`); try { await ShutDownOgQueue(); mongoose.connection.close(); } catch (err) { logger.error(`Failure during OG worker shutdown: ${err.message}`); process.exit(1); } process.exit(0); } async function failure(reason, err) { logger.error(`Unhandled ${reason}: ${err.stack}. Shutting down OG worker.`); try { await ShutDownOgQueue(); mongoose.connection.close(); } catch (err) { logger.error(`Failure during OG worker shutdown: ${err.message}`); } process.exit(1); } process.on('SIGINT', shutdown); process.on('SIGTERM', shutdown); process.on('unhandledRejection', failure.bind(null, 'promise rejection')); process.on('uncaughtException', failure.bind(null, 'exception')); ================================================ FILE: api/src/workers/podcast.js ================================================ import joi from 'joi'; import moment from 'moment'; import mongoose from 'mongoose'; import { EventEmitter } from 'events'; import db from '../utils/db'; import Podcast from '../models/podcast'; import Episode from '../models/episode'; import logger from '../utils/logger'; import { ParsePodcast, checkGuidStability, CreateFingerPrints } from '../parsers/feed'; import { ProcessPodcastQueue, ShutDownPodcastQueue, StreamQueueAdd, OgQueueAdd, } from '../asyncTasks'; import { upsertManyPosts } from '../utils/upsert'; import { getStreamClient } from '../utils/stream'; import { startSampling } from '../utils/watchdog'; import { ensureEncoded } from '../utils/urls'; import { getStatsDClient, timeIt } from '../utils/statsd'; import { isBlockedURLs } from '../utils/blockedURLs'; import { tryCreateQueueFlag, removeFromQueueFlagSet } from '../utils/queue'; if (require.main === module) { EventEmitter.defaultMaxListeners = 128; logger.info('Starting to process podcasts....'); ProcessPodcastQueue(35, podcastProcessor); startSampling('winds.event_loop.podcast.delay'); } const streamTTL = 25200; // 7 hours const secondaryCheckDelay = 240000; // 4 minutes const statsd = getStatsDClient(); function sleep(time) { return new Promise((resolve) => setTimeout(resolve, time)); } export async function podcastProcessor(job) { logger.info(`Processing ${job.data.url}`); if (isBlockedURLs(job.data.url)) { logger.info(`${job.data.url} is in block list and ignored.`); return; } try { await handlePodcast(job); } catch (err) { let tags = { queue: 'rss' }; let extra = { JobPodcast: job.data.podcast, JobURL: job.data.url, }; logger.error('Podcast job encountered an error', { err, tags, extra }); statsd.increment('winds.handle_podcast.result.error'); } } const joiObjectId = joi.alternatives().try( joi.string().length(12), joi .string() .length(24) .regex(/^[0-9a-fA-F]{24}$/), ); const joiUrl = joi .string() .uri({ scheme: ['http', 'https'], allowQuerySquareBrackets: true }); const schema = joi.object().keys({ podcast: joiObjectId.required(), url: joiUrl.required(), }); const chunkSize = 100; async function updateFeed(podcastID, update, episodes) { for (let i = 0, j = episodes.length; i < j; i += chunkSize) { const chunk = episodes.slice(i, i + chunkSize); const streamEpisodes = chunk.map((episode) => { return { actor: podcastID, foreign_id: `episodes:${episode._id}`, object: episode._id, time: episode.publicationDate, verb: 'podcast_episode', }; }); await timeIt('winds.handle_podcast.send_to_collections', () => update(streamEpisodes), ); } } export async function handlePodcast(job) { try { // best effort at escaping urls found in the wild job.data.url = ensureEncoded(job.data.url); } catch (_) { //XXX: ignore error } const podcastID = job.data.podcast; await timeIt('winds.handle_podcast.ack', () => { return markDone(podcastID); }); const validation = joi.validate(job.data, schema); if (!!validation.error) { logger.warn( `Podcast job validation failed: ${ validation.error.message } for '${JSON.stringify(job.data)}'`, ); await Podcast.incrScrapeFailures(podcastID); statsd.increment('winds.handle_podcast.result.validation_failed'); return; } const podcast = await Podcast.findOne({ _id: podcastID }); if (!podcast) { logger.warn(`Podcast with ID ${job.data.podcast} does not exist`); statsd.increment('winds.handle_podcast.result.model_instance_absent'); return; } if (podcast.duplicateOf) { logger.warn( `Podcast with ID ${podcastID} is a duplicate of ${podcast.duplicateOf}. Skipping`, ); statsd.increment('winds.handle_podcast.result.model_instance_duplicate'); return; } let podcastContent, guidStability; try { podcastContent = await ParsePodcast(job.data.url, podcast.guidStability); await Podcast.resetScrapeFailures(podcastID); if (!podcast.guidStability || podcast.guidStability === 'UNCHECKED') { //XXX: waiting a bit to increase the chances of catching time-dependent GUIDs await sleep(secondaryCheckDelay); const controlPodcastContent = await ParsePodcast( job.data.url, podcast.guidStability, ); guidStability = checkGuidStability( podcastContent.episodes, controlPodcastContent.episodes, ); podcastContent.episodes = CreateFingerPrints( podcastContent.episodes, guidStability, ); } } catch (err) { await Podcast.incrScrapeFailures(podcastID); logger.warn(`http request failed for url ${job.data.url}: ${err.message}`); } if (!podcastContent || podcastContent.episodes.length === 0) { statsd.increment('winds.handle_podcast.result.no_content'); if (podcast.guidStability != guidStability) { await Podcast.update( { _id: podcastID }, { guidStability: guidStability || podcast.guidStability, }, ); } return; } if ( podcastContent.fingerprint && podcastContent.fingerprint === podcast.fingerprint ) { logger.debug( `Podcast with ID ${podcastID} has same fingerprint as registered before`, ); statsd.increment('winds.handle_podcast.result.same_content'); if (podcast.guidStability != guidStability) { await Podcast.update( { _id: podcastID }, { guidStability: guidStability || podcast.guidStability, }, ); } return; } // update the episodes logger.debug(`Updating ${podcastContent.episodes.length} episodes`); const episodes = podcastContent.episodes; for (const e of episodes) { e.podcast = podcastID; } const operationMap = await upsertManyPosts(podcastID, episodes, 'podcast'); const updatedEpisodes = operationMap.new.concat(operationMap.changed); logger.info( `Finished updating ${updatedEpisodes.length} out of ${podcastContent.episodes.length} changed`, ); await Podcast.update( { _id: podcastID }, { // postCount: await Episode.count({ podcast: podcastID }), fingerprint: podcastContent.fingerprint, guidStability: guidStability || podcast.guidStability, }, ); if (!updatedEpisodes.length) { statsd.increment('winds.handle_podcast.result.no_updates'); return; } const streamClient = getStreamClient(); const podcastFeed = streamClient.feed('podcast', podcastID); if (operationMap.new.length) { await updateFeed( podcastID, podcastFeed.addActivities.bind(podcastFeed), operationMap.new, ); } if (operationMap.changed.length) { await updateFeed( podcastID, streamClient.updateActivities.bind(streamClient), operationMap.changed, ); } const queueOpts = { removeOnComplete: true, removeOnFail: true }; const tasks = []; if (await tryCreateQueueFlag('og', 'podcast', podcastID)) { tasks.push( OgQueueAdd( { type: 'episode', podcast: podcastID, urls: updatedEpisodes.map((e) => e.link), }, queueOpts, ), ); } const allowedLanguage = [null, undefined, '', 'eng'].includes(podcast.language); if (allowedLanguage) { tasks.push( StreamQueueAdd( { podcast: podcastID, contentIds: updatedEpisodes.map((e) => e._id) }, queueOpts, ), ); } statsd.increment('winds.handle_podcast.result.updates'); } // markDone sets lastScraped to now and isParsing to false async function markDone(podcastID) { await removeFromQueueFlagSet('podcast', 'podcast', podcastID); return await Podcast.update( { _id: podcastID }, { lastScraped: moment().toISOString() }, ); } async function shutdown(signal) { logger.info(`Received ${signal}. Shutting down.`); try { await ShutDownPodcastQueue(); mongoose.connection.close(); } catch (err) { logger.error(`Failure during Podcast worker shutdown: ${err.message}`); process.exit(1); } process.exit(0); } async function failure(reason, err) { logger.error(`Unhandled ${reason}: ${err.stack}. Shutting down Podcast worker.`); try { await ShutDownPodcastQueue(); mongoose.connection.close(); statsd.increment('winds.handle_podcast.result.error'); } catch (err) { logger.error(`Failure during Podcast worker shutdown: ${err.message}`); } process.exit(1); } process.on('SIGINT', shutdown); process.on('SIGTERM', shutdown); process.on('unhandledRejection', failure.bind(null, 'promise rejection')); process.on('uncaughtException', failure.bind(null, 'exception')); ================================================ FILE: api/src/workers/rss.js ================================================ import joi from 'joi'; import moment from 'moment'; import mongoose from 'mongoose'; import { EventEmitter } from 'events'; import db from '../utils/db'; import RSS from '../models/rss'; import Article from '../models/article'; import logger from '../utils/logger'; import { ParseFeed, checkGuidStability, CreateFingerPrints } from '../parsers/feed'; import { ProcessRssQueue, ShutDownRssQueue, OgQueueAdd, StreamQueueAdd, } from '../asyncTasks'; import { getStatsDClient, timeIt } from '../utils/statsd'; import { getStreamClient } from '../utils/stream'; import { startSampling } from '../utils/watchdog'; import { upsertManyPosts } from '../utils/upsert'; import { ensureEncoded } from '../utils/urls'; import { tryCreateQueueFlag, removeFromQueueFlagSet } from '../utils/queue'; import { isBlockedURLs } from '../utils/blockedURLs'; if (require.main === module) { EventEmitter.defaultMaxListeners = 128; logger.info('Starting the RSS worker'); ProcessRssQueue(35, rssProcessor); startSampling('winds.event_loop.rss.delay'); } const streamTTL = 25200; // 7 hours const duplicateKeyError = 11000; const secondaryCheckDelay = 240000; // 4 minutes const statsd = getStatsDClient(); function sleep(time) { return new Promise((resolve) => setTimeout(resolve, time)); } export async function rssProcessor(job) { logger.info(`Processing ${job.data.url}`); if (isBlockedURLs(job.data.url)) { logger.info(`${job.data.url} is in block list and ignored.`); return; } try { await handleRSS(job); } catch (err) { let tags = { queue: 'rss' }; let extra = { JobRSS: job.data.rss, JobURL: job.data.url, }; logger.error('RSS job encountered an error', { err, tags, extra }); statsd.increment('winds.handle_rss.result.error'); } logger.info(`Completed scraping for ${job.data.url}`); } const joiObjectId = joi.alternatives().try( joi.string().length(12), joi .string() .length(24) .regex(/^[0-9a-fA-F]{24}$/), ); const joiUrl = joi .string() .uri({ scheme: ['http', 'https'], allowQuerySquareBrackets: true }); const schema = joi.object().keys({ rss: joiObjectId.required(), url: joiUrl.required(), }); const chunkSize = 100; async function updateFeed(rssID, update, articles) { for (let offset = 0; offset < articles.length; offset += chunkSize) { const limit = offset + chunkSize; const chunk = articles.slice(offset, limit); const streamArticles = chunk.map((article) => { return { actor: rssID, foreign_id: `articles:${article._id}`, object: article._id, time: article.publicationDate, verb: 'rss_article', }; }); await timeIt('winds.handle_rss.send_to_collections', () => update(streamArticles), ); } } export async function handleRSS(job) { try { // best effort at escaping urls found in the wild job.data.url = ensureEncoded(job.data.url); } catch (_) { //XXX: ignore error } const rssID = job.data.rss; await timeIt('winds.handle_rss.ack', () => { return markDone(rssID); }); const validation = joi.validate(job.data, schema); if (!!validation.error) { logger.warn( `RSS job validation failed: ${validation.error.message} for '${JSON.stringify( job.data, )}'`, ); statsd.increment('winds.handle_rss.result.validation_failed'); await RSS.incrScrapeFailures(rssID); return; } const rss = await timeIt('winds.handle_rss.get_rss', () => { return RSS.findOne({ _id: rssID }); }); if (!rss) { logger.warn(`RSS with ID ${rssID} does not exist`); statsd.increment('winds.handle_rss.result.model_instance_absent'); return; } if (rss.duplicateOf) { logger.warn( `RSS with ID ${rssID} is a duplicate of ${rss.duplicateOf}. Skipping`, ); statsd.increment('winds.handle_rss.result.model_instance_duplicate'); return; } logger.info(`Marked ${rssID} as done`); let rssContent, guidStability; try { rssContent = await ParseFeed(job.data.url, rss.guidStability); if (!rss.guidStability || rss.guidStability === 'UNCHECKED') { //XXX: waiting a bit to increase the chances of catching time-dependent GUIDs await sleep(secondaryCheckDelay); const controlRssContent = await ParseFeed(job.data.url, rss.guidStability); guidStability = checkGuidStability( rssContent.articles, controlRssContent.articles, ); rssContent.articles = CreateFingerPrints(rssContent.articles, guidStability); } await RSS.resetScrapeFailures(rssID); } catch (err) { await RSS.incrScrapeFailures(rssID); logger.warn(`HTTP request failed for url ${job.data.url}: ${err.message}`); } if (!rssContent || rssContent.articles.length === 0) { logger.debug(`RSS with ID ${rssID} is empty`); statsd.increment('winds.handle_rss.result.no_content'); if (rss.guidStability != guidStability) { await RSS.update( { _id: rssID }, { guidStability: guidStability || rss.guidStability, }, ); } return; } if (rssContent.fingerprint && rssContent.fingerprint === rss.fingerprint) { logger.debug(`RSS with ID ${rssID} has same fingerprint as registered before`); statsd.increment('winds.handle_rss.result.same_content'); if (rss.guidStability != guidStability) { await RSS.update( { _id: rssID }, { guidStability: guidStability || rss.guidStability, }, ); } return; } logger.debug(`Updating ${rssContent.articles.length} articles for feed ${rssID}`); statsd.increment('winds.handle_rss.articles.parsed', rssContent.articles.length); for (const article of rssContent.articles) { article.rss = rssID; } logger.debug(`Starting the upsertManyPosts for RSS with ID ${rssID}`); const operationMap = await upsertManyPosts(rssID, rssContent.articles, 'rss'); const updatedArticles = operationMap.new .concat(operationMap.changed) .filter((a) => !!a.url); logger.info( `Finished updating. ${updatedArticles.length} out of ${rssContent.articles.length} changed for RSS with ID ${rssID}`, ); await RSS.update( { _id: rssID }, { // postCount: await Article.count({ rss: rssID }), fingerprint: rssContent.fingerprint, guidStability: guidStability || rss.guidStability, }, ); statsd.increment('winds.handle_rss.articles.upserted', updatedArticles.length); if (!updatedArticles.length) { statsd.increment('winds.handle_rss.result.no_updates'); return; } const streamClient = getStreamClient(); const rssFeed = streamClient.feed('rss', rssID); if (operationMap.new.length) { await updateFeed( rssID, rssFeed.addActivities.bind(rssFeed), operationMap.new.filter((a) => !!a.url), ); } if (operationMap.changed.length) { await updateFeed( rssID, streamClient.updateActivities.bind(streamClient), operationMap.changed.filter((a) => !!a.url), ); } const queueOpts = { removeOnComplete: true, removeOnFail: true }; const tasks = []; if (await tryCreateQueueFlag('og', 'rss', rssID)) { tasks.push( OgQueueAdd( { type: 'article', rss: rssID, urls: updatedArticles.map((a) => a.url) }, queueOpts, ), ); } const allowedLanguage = [null, undefined, '', 'eng'].includes(rss.language); if (allowedLanguage) { tasks.push( StreamQueueAdd( { rss: rssID, contentIds: updatedArticles.map((a) => a._id) }, queueOpts, ), ); } statsd.increment('winds.handle_rss.result.updates'); } async function markDone(rssID) { await removeFromQueueFlagSet('rss', 'rss', rssID); return await RSS.update({ _id: rssID }, { lastScraped: moment().toISOString() }); } async function shutdown(signal) { logger.info(`Received ${signal}. Shutting down.`); try { await ShutDownRssQueue(); mongoose.connection.close(); } catch (err) { logger.error(`Failure during RSS worker shutdown: ${err.message}`); process.exit(1); } process.exit(0); } async function failure(source, err) { logger.error(`Unhandled ${source}: ${err.stack}. Shutting down RSS worker.`); try { await ShutDownRssQueue(); mongoose.connection.close(); statsd.increment('winds.handle_rss.result.error'); } catch (err) { logger.error(`Failure during RSS worker shutdown: ${err.message}`); } process.exit(1); } process.on('SIGINT', shutdown); process.on('SIGTERM', shutdown); process.on('unhandledRejection', failure.bind(null, 'promise rejection')); process.on('uncaughtException', failure.bind(null, 'exception')); ================================================ FILE: api/src/workers/social.js ================================================ import mongoose from 'mongoose'; import joi from 'joi'; import db from '../utils/db'; import RSS from '../models/rss'; import Article from '../models/article'; import logger from '../utils/logger'; import { ProcessSocialQueue, ShutDownSocialQueue } from '../asyncTasks'; import { timeIt } from '../utils/statsd'; import { fetchSocialScore } from '../utils/social'; import { ensureEncoded } from '../utils/urls'; import { startSampling } from '../utils/watchdog'; import { removeQueueFlag } from '../utils/queue'; if (require.main === module) { logger.info('Starting the Social worker'); ProcessSocialQueue(1, socialProcessor); startSampling('winds.event_loop.social.delay'); } const streamQueueSettings = { removeOnComplete: true, removeOnFail: true }; const joiObjectId = joi.alternatives().try( joi.string().length(12), joi .string() .length(24) .regex(/^[0-9a-fA-F]{24}$/), ); const joiUrl = joi .string() .uri({ scheme: ['http', 'https'], allowQuerySquareBrackets: true }); const schema = joi.object().keys({ rss: joiObjectId.required(), articles: joi.array().min(1).required(), }); const itemSchema = joi.object().keys({ id: joiObjectId.required(), link: joiUrl, commentUrl: joi.any(), }); export async function socialProcessor(job) { logger.info(`Processing social scores for feed ${job.data.rss}`); // just intercept error handling before it goes to Bull try { await handleSocial(job); } catch (err) { const tags = { queue: 'social' }; const extra = { JobRSS: job.data.rss, JobArticles: job.data.articles }; logger.error('Social job encountered an error', { err, tags, extra }); } logger.info(`Completed processing social scores for feed ${job.data.rss}`); } export async function handleSocial(job) { try { // best effort at escaping urls found in the wild for (const article of job.data.articles) { article.link = ensureEncoded(article.link); } } catch (_) { //XXX: ignore error } const validation = joi.validate(job.data, schema); if (!!validation.error) { logger.warn( `Social job validation failed: ${ validation.error.message } for '${JSON.stringify(job.data)}'`, ); return; } const socialBatch = Article.collection.initializeUnorderedBulkOp(); const articles = job.data.articles.filter((a) => !joi.validate(a, itemSchema).error); if (!articles.length) { const errors = job.data.articles .map((a) => joi.validate(a, itemSchema)) .filter((r) => !!r.error); logger.warn( `No article passed validation: ${errors.map( (r) => r.error.message, )} for '${JSON.stringify(job.data)}'`, ); return; } await removeQueueFlag('social', 'rss', job.data.rss); let updatingSocialScore = false; await timeIt('winds.handle_social.update_social_score', () => { return Promise.all( articles.map(async (article) => { const socialScore = await fetchSocialScore(article); if (Object.keys(socialScore).length) { updatingSocialScore = true; socialBatch .find({ _id: mongoose.Types.ObjectId(article.id) }) .updateOne({ $set: { socialScore } }); } }), ); }); if (updatingSocialScore) { await socialBatch.execute(); } } async function shutdown(signal) { logger.info(`Received ${signal}. Shutting down.`); try { await ShutDownSocialQueue(); mongoose.connection.close(); } catch (err) { logger.error(`Failure during Social worker shutdown: ${err.message}`); process.exit(1); } process.exit(0); } async function failure(reason, err) { logger.error(`Unhandled ${reason}: ${err.stack}. Shutting down Social worker.`); try { await ShutDownSocialQueue(); mongoose.connection.close(); } catch (err) { logger.error(`Failure during Social worker shutdown: ${err.message}`); } process.exit(1); } process.on('SIGINT', shutdown); process.on('SIGTERM', shutdown); process.on('unhandledRejection', failure.bind(null, 'promise rejection')); process.on('uncaughtException', failure.bind(null, 'exception')); ================================================ FILE: api/src/workers/stream.js ================================================ import joi from 'joi'; import mongoose from 'mongoose'; import db from '../utils/db'; import RSS from '../models/rss'; import Podcast from '../models/podcast'; import Article from '../models/article'; import Episode from '../models/episode'; import logger from '../utils/logger'; import { ProcessStreamQueue, ShutDownStreamQueue } from '../asyncTasks'; import { timeIt } from '../utils/statsd'; import { sendFeedToCollections } from '../utils/collections'; import { startSampling } from '../utils/watchdog'; if (require.main === module) { logger.info('Starting the Stream worker'); ProcessStreamQueue(2, streamProcessor); startSampling('winds.event_loop.stream.delay'); } export async function streamProcessor(job) { logger.info(`Processing Stream feeds for feed ${job.data.rss}`); // just intercept error handling before it goes to Bull try { await handleStream(job); } catch (err) { const tags = { queue: 'stream' }; const extra = { JobRSS: job.data.rss, JobArticles: job.data.articles }; logger.error('Stream feed job ecountered an error', { err, tags, extra }); //XXX: we have to retry to not lose updates await job.retry(); } logger.info(`Completed processing Stream feeds for feed ${job.data.rss}`); } const joiObjectId = joi.alternatives().try( joi.string().length(12), joi .string() .length(24) .regex(/^[0-9a-fA-F]{24}$/), ); const schema = joi .object() .keys({ rss: joiObjectId, podcast: joiObjectId, contentIds: joi.array().items(joiObjectId).min(1).required(), }) .xor('rss', 'podcast'); export async function handleStream(job) { const validation = joi.validate(job.data, schema); if (!!validation.error) { logger.warn( `Stream job validation failed: ${ validation.error.message } for '${JSON.stringify(job.data)}'`, ); return; } const [type, model, contentModel] = 'rss' in job.data ? ['rss', RSS, Article] : ['podcast', Podcast, Episode]; const feed = await model.findById(job.data[type]); const content = await contentModel .find({ _id: { $in: job.data.contentIds } }) .sort({ publicationDate: -1 }) .limit(1000); await timeIt('winds.handle_stream.send_to_collections', () => sendFeedToCollections(type, feed, content), ); } async function shutdown(signal) { logger.info(`Received ${signal}. Shutting down.`); try { await ShutDownStreamQueue(); mongoose.connection.close(); } catch (err) { logger.error(`Failure during Stream worker shutdown: ${err.message}`); process.exit(1); } process.exit(0); } async function failure(reason, err) { logger.error(`Unhandled ${reason}: ${err.stack}. Shutting down Stream worker.`); try { await ShutDownStreamQueue(); mongoose.connection.close(); } catch (err) { logger.error(`Failure during Stream worker shutdown: ${err.message}`); } process.exit(1); } process.on('SIGINT', shutdown); process.on('SIGTERM', shutdown); process.on('unhandledRejection', failure.bind(null, 'promise rejection')); process.on('uncaughtException', failure.bind(null, 'exception')); ================================================ FILE: api/src/workers/winds-hackernews.js ================================================ import request from 'request-promise-native'; import '../config'; import db from '../utils/db'; import Rss from '../models/rss'; import Article from '../models/article'; async function tryHackernewsAPI(path, retries = 5) { const url = 'https://hacker-news.firebaseio.com/v0' + path; while (retries) { try { return await request(url, { json: true }); } catch (_) { --retries; } } throw new Error(`Failed to perform call to '${path}'`); } async function hackernewsData(postID) { const response = await tryHackernewsAPI(`/item/${postID}.json`); return response.data; } async function hackernewsTop() { const response = await tryHackernewsAPI('/topstories.json'); return response.data; } function commentUrl(postID) { return `https://news.ycombinator.com/item?id=${postID}`; } async function main() { await db; const ids = await hackernewsTop(); const posts = await Promise.all(ids.map(hackernewsData)); const urlToScore = posts.reduce( (map, post) => map.set(post.url, post.score), new Map(), ); const commentUrlToScore = posts.reduce( (map, post) => map.set(commentUrl(post.id), post.score), new Map(), ); const [urlMatch, commentUrlMatch] = await Promise.all([ Article.find({ url: { $in: [...urlToScore.keys()] } }), Article.find({ commentUrl: { $in: [...commentUrlToScore.keys()] } }), ]); const batch = Article.collection.initializeUnorderedBulkOp(); for (const match of urlMatch) { batch .find({ _id: match._id }) .updateOne({ $set: { 'socialScore.hackernews': urlToScore.get(match.url) } }); } for (const match of commentUrlMatch) { batch.find({ _id: match._id }).updateOne({ $set: { 'socialScore.hackernews': commentUrlToScore.get(match.commentUrl), }, }); } await batch.execute(); } main() .then(() => { console.info('done'); process.exit(0); }) .catch((err) => { console.info(`failed with err ${err.stack}`); process.exit(1); }); ================================================ FILE: api/src/workers/winds-queue-state-monitor.js ================================================ import Redis from 'ioredis'; import config from '../config'; import { getStatsDClient } from '../utils/statsd'; const redis = new Redis(config.cache.uri); const statsd = getStatsDClient(); function countSetElements(key) { return redis.zcount(key, '-inf', '+inf'); } function countLockTypes(pattern) { return new Promise((resolve, reject) => { const result = {}; const stream = redis.scanStream({ match: `${pattern}:*`, count: 100 }); stream.on('data', (data) => { const types = data.map((key) => key.split(':')[3]); for (const type of types) { result[type] = result[type] || 0; result[type] += 1; } }); stream.on('end', () => resolve(result)); stream.on('error', reject); }); } async function main() { for (const queueName of ['rss', 'podcast']) { const key = `queue-status:${queueName}`; const count = await countSetElements(key); statsd.gauge(`winds.queue.${queueName}.flags.${queueName}`, count); console.log(`${queueName} total: ${count}`); statsd.gauge(`winds.queue.${queueName}.flags.total`, count); } for (const queueName of ['og', 'stream', 'social']) { const prefix = `queue-status:${queueName}`; const types = await countLockTypes(prefix); let total = 0; for (const [type, count] of Object.entries(types)) { statsd.gauge(`winds.queue.${queueName}.flags.${type}`, count); console.log(`${queueName} type ${type}: ${count}`); total += count; } statsd.gauge(`winds.queue.${queueName}.flags.total`, total); console.log(`${queueName} total: ${total}`); } } main() .then(() => { console.info('done'); setTimeout(process.exit.bind(process, 0), 2000); }) .catch((err) => { console.info(`failed with err ${err.stack}`); setTimeout(process.exit.bind(process, 1), 2000); }); ================================================ FILE: api/test/controllers/alias.js ================================================ import { expect, request } from 'chai'; import api from '../../src/server'; import Alias from '../../src/models/alias'; import Podcast from '../../src/models/podcast'; import Rss from '../../src/models/rss'; import { loadFixture, withLogin, dropDBs } from '../utils'; describe('Alias controller', () => { let alias; let podcast; let rss; before(async () => { await dropDBs(); await loadFixture('initial-data', 'aliases'); alias = await Alias.findOne(); podcast = await Podcast.findOne(); rss = await Rss.findOne(); }); describe('list', () => { it('should return all aliases', async () => { const res = await withLogin(request(api).get('/aliases')); expect(res).to.have.status(200); }); }); describe('get', () => { it('should return a single alias via /aliases/:aliasId', async () => { const res = await withLogin(request(api).get(`/aliases/${alias._id}`)); expect(res).to.have.status(200); }); }); describe('post', () => { it('should try to create empty alias and return error', async () => { const res = await withLogin(request(api).post('/aliases')); expect(res).to.have.status(422); }); }); describe('post', () => { it('should create an RSS alias and return the alias', async () => { const res = await withLogin( request(api) .post('/aliases') .send({ alias: 'name', rss: rss._id }), ); expect(res).to.have.status(200); expect(res.body).to.have.property('rss'); expect(res.body.alias).to.be.equal('name'); }); }); describe('post', () => { it('should create an Podcast alias and return the alias', async () => { const res = await withLogin( request(api) .post('/aliases') .send({ alias: 'name', podcast: podcast._id }), ); expect(res).to.have.status(200); expect(res.body).to.have.property('podcast'); expect(res.body.alias).to.be.equal('name'); }); }); describe('put', () => { it('should update the existed alias', async () => { const res = await withLogin( request(api) .put(`/aliases/${alias._id}`) .send({ alias: 'newName' }), ); expect(res).to.have.status(200); expect(res.body.alias).to.be.equal('newName'); }); }); describe('delete', () => { it('should delete a alias', async () => { let res = await withLogin(request(api).delete(`/aliases/${alias._id}`)); expect(res).to.have.status(204); res = await withLogin(request(api).delete(`/aliases/${alias._id}`)); expect(res).to.have.status(404); }); }); }); ================================================ FILE: api/test/controllers/article.js ================================================ import { expect, request } from 'chai'; import api from '../../src/server'; import Article from '../../src/models/article'; import config from '../../src/config'; import { dropDBs, loadFixture, withLogin, getMockClient } from '../utils.js'; describe('Article controller', () => { let article; before(async () => { await dropDBs(); await loadFixture('initial-data', 'articles'); article = await Article.findOne({}); expect(article).to.not.be.null; expect(article.rss).to.not.be.null; }); describe('get', () => { it('should return the right article via /articles/:articleId', async () => { let response = await withLogin(request(api).get(`/articles/${article.id}`)); expect(response).to.have.status(200); }); }); describe('get parsed article', () => { it('should return the parsed version of the article', async () => { const response = await withLogin( request(api) .get(`/articles/${article.id}`) .query({ type: 'parsed' }), ); expect(response).to.have.status(200); }); }); describe('list', () => { it('should return the list of articles', async () => { let response = await withLogin(request(api).get('/articles')); expect(response).to.have.status(200); }); }); describe('list from personalization', () => { it('should return the list of articles', async () => { const mock = getMockClient(); const opts = { user_id: '5b0f306d8e147f10f16aceaf', limit: 20 }; const result = { results: [{ foreign_id: `article:${article.id}` }] }; mock.personalization.get.withArgs('winds_article_recommendations', opts).returns({ data: result }); const response = await withLogin( request(api) .get('/articles') .query({ type: 'recommended', }), ); expect(response).to.have.status(200); expect(response.body.length).to.be.at.least(1); expect(response.body[0].url).to.eq(article.url); mock.personalization.get.reset(); }); }); }); ================================================ FILE: api/test/controllers/auth.js ================================================ import { expect, request } from 'chai'; import jwt from 'jsonwebtoken'; import api from '../../src/server'; import config from '../../src/config'; import Podcast from '../../src/models/podcast'; import RSS from '../../src/models/rss'; import User from '../../src/models/user'; import { DummyEmailTransport } from '../../src/utils/email/send'; import { loadFixture, getMockClient, getMockFeed, dropDBs } from '../utils'; import Redis from 'ioredis'; const cache = new Redis(config.cache.uri); describe('Auth controller', () => { describe('signup', () => { before(dropDBs); describe('empty state', () => { let response; let user; before(async () => { expect(await User.findOne({ email: 'valid@email.com' })).to.be.null; await cache.flushall(); response = await request(api) .post('/auth/signup') .send({ email: 'valid@email.com', username: 'valid', name: 'Valid Name', password: 'valid_password', }); user = await User.findOne({ email: 'valid@email.com' }); }); after(async () => { await RSS.remove().exec(); await Podcast.remove().exec(); await User.findOneAndDelete({ email: 'valid@email.com' }); }); it('should return 200', () => { const mockClient = getMockClient(); expect(response).to.have.status(200); expect( mockClient.followMany.firstCall && mockClient.followMany.firstCall.args, ).to.be.null; }); }); describe('valid request', () => { let response; let user; before(async () => { expect(await User.findOne({ email: 'valid@email.com' })).to.be.null; await cache.flushall(); await loadFixture('featured'); response = await request(api) .post('/auth/signup') .send({ email: 'valid@email.com', username: 'valid', name: 'Valid Name', password: 'valid_password', }); user = await User.findOne({ email: 'valid@email.com' }); }); after(async () => { await RSS.remove().exec(); await Podcast.remove().exec(); }); it('should return 200', () => { expect(response).to.have.status(200); }); it('should return user info', () => { const keys = ['_id', 'email', 'interests', 'name', 'username']; expect(Object.keys(response.body)).to.include.members(keys); for (const key of keys) { //XXX: converting to string to avoid type differences expect(String(response.body[key])).to.be.equal(String(user[key])); } }); it('should return valid jwt', async () => { expect(response.body.jwt).to.not.be.empty; const decoded = jwt.verify(response.body.jwt, config.jwt.secret); expect(decoded).to.not.be.null; expect(Object.keys(decoded)).to.include.members(['email', 'sub']); expect(decoded.email).to.equal(user.email); expect(decoded.sub).to.equal(String(user._id)); }); it('should create a User entity', async () => { expect(user).to.not.be.null; expect(user).to.include({ email: 'valid@email.com', username: 'valid', name: 'Valid Name', }); expect(await user.verifyPassword('valid_password')).to.be.true; }); it('should follow featured podcasts and RSS feeds', async () => { const mockClient = getMockClient(); const podcastEntries = await Podcast.find({ featured: true, }); const rssEntries = await RSS.find({ featured: true, }); const merged = [...podcastEntries, ...rssEntries]; let correct = []; for (const data of merged) { let type = data.constructor.modelName == 'RSS' ? 'rss' : 'podcast'; let userFeed = type == 'rss' ? 'user_article' : 'user_episode'; correct.push( { source: `timeline:${user._id}`, target: `${type}:${data._id}`, }, { source: `${userFeed}:${user._id}`, target: `${type}:${data._id}`, }, ); } const actual = mockClient.followMany.firstCall.args[0]; expect(actual).to.deep.have.same.members(correct); }); it('should send welcome email to user', async () => { let email = DummyEmailTransport.emails[0]; expect(email.subject).to.equal('Welcome to Winds!'); }); }); describe('invalid request', () => { it('should return 400 for missing/empty data', async () => { const bodies = [ { email: undefined, username: 'valid', name: 'Valid Name', password: 'valid_password', }, { email: 'valid@email.com', username: undefined, name: 'Valid Name', password: 'valid_password', }, { email: 'valid@email.com', username: 'valid', name: undefined, password: 'valid_password', }, { email: 'valid@email.com', username: 'valid', name: 'Valid Name', password: undefined, }, { email: '', username: 'valid', name: 'Valid Name', password: 'valid_password', }, { email: 'invalid.email.com', username: '', name: 'Valid Name', password: 'valid_password', }, { email: 'invalid.email.com', username: 'valid', name: '', password: 'valid_password', }, { email: 'invalid.email.com', username: 'valid', name: 'Valid Name', password: '', }, ]; const requests = bodies.map(body => request(api) .post('/auth/signup') .send(body), ); for (const response of await Promise.all(requests)) { expect(response).to.have.status(400); } }); it('should return 400 for invalid email', async () => { const bodies = [ { email: 'invalid.email.com', username: 'valid', name: 'Valid Name', password: 'valid_password', }, { email: 'invalid@email', username: 'valid', name: 'Valid Name', password: 'valid_password', }, { email: '@invalid.email.com', username: 'valid', name: 'Valid Name', password: 'valid_password', }, ]; const requests = bodies.map(body => request(api) .post('/auth/signup') .send(body), ); for (const response of await Promise.all(requests)) { expect(response).to.have.status(400); } }); it('should return 400 for invalid username', async () => { const response = await request(api) .post('/auth/signup') .send({ email: 'valid@email.com', username: 'invalid username', name: 'Valid Name', password: 'valid_password', }); expect(response).to.have.status(400); }); it('should return 409 for existing user', async () => { await dropDBs(); await loadFixture('initial-data'); const response = await request(api) .post('/auth/signup') .send({ email: 'valid@email.com', username: 'valid', name: 'Valid Name', password: 'valid_password', }); expect(response).to.have.status(409); }); }); }); describe('login', () => { let user; before(async () => { await dropDBs(); await loadFixture('initial-data'); user = await User.findOne({ email: 'valid@email.com' }); expect(user).to.not.be.null; expect(await user.verifyPassword('valid_password')).to.be.true; }); describe('valid request', () => { let response; before(async () => { response = await request(api) .post('/auth/login') .send({ email: 'valid@email.com', password: 'valid_password', }); }); it('should return 200 for existing user', () => { expect(response).to.have.status(200); }); it('should return user info', () => { const keys = ['_id', 'email', 'interests', 'name', 'username']; expect(Object.keys(response.body)).to.include.members(keys); for (const key of keys) { //XXX: converting to string to avoid type differences expect(String(response.body[key])).to.be.equal(String(user[key])); } }); it('should return valid jwt', async () => { expect(response.body.jwt).to.not.be.empty; const decoded = jwt.verify(response.body.jwt, config.jwt.secret); expect(decoded).to.not.be.null; expect(Object.keys(decoded)).to.include.members(['email', 'sub']); expect(decoded.email).to.equal(user.email); expect(decoded.sub).to.equal(String(user._id)); }); }); describe('invalid request', () => { it('should return 400 for missing/empty data', async () => { const bodies = [ { password: 'valid_password' }, { email: 'valid@email.com' }, { email: '', password: 'valid_password' }, { email: 'valid@email.com', password: '' }, ]; const requests = bodies.map(body => request(api) .post('/auth/login') .send(body), ); for (const response of await Promise.all(requests)) { expect(response).to.have.status(400); } }); it('should return 404 for nonexistent user', async () => { const response = await request(api) .post('/auth/login') .send({ email: 'invalid@email.com', password: 'valid_password', }); expect(response).to.have.status(404); }); it('should return 403 for existing user w/ wrong password', async () => { const response = await request(api) .post('/auth/login') .send({ email: 'valid@email.com', password: 'invalid_password', }); expect(response).to.have.status(403); }); }); }); describe('password recovery', () => { before(async () => { await dropDBs(); await loadFixture('initial-data'); }); describe('recovery code endpoint', () => { describe('valid request', () => { let response; before(async () => { response = await request(api) .post('/auth/forgot-password') .send({ email: 'valid@email.com' }); }); it('should return 200 for existing user', () => { expect(response).to.have.status(200); }); it('should send recovery code email to user', async () => { const user = await User.findOne({ email: 'valid@email.com' }); let email = DummyEmailTransport.emails[0]; expect(email.subject).to.equal('Forgot Password'); }); }); describe('invalid request', () => { it('should return 404 for nonexistent user', async () => { const response = await request(api) .post('/auth/forgot-password') .send({ email: 'invalid@email.com' }); expect(response).to.have.status(404); }); }); }); describe('password reset endpoint', () => { let user; before(async () => { user = await User.findOne({ email: 'valid@email.com' }); }); describe('valid request', () => { let response; before(async () => { response = await request(api) .post('/auth/reset-password') .send({ email: 'valid@email.com', recoveryCode: user.recoveryCode, password: 'new-password', }); }); it('should return 200 for existing user', () => { expect(response).to.have.status(200); }); it('should return user info', () => { const keys = ['_id', 'email', 'interests', 'name', 'username']; expect(Object.keys(response.body)).to.include.members(keys); for (const key of keys) { //XXX: converting to string to avoid type differences expect(String(response.body[key])).to.be.equal(String(user[key])); } }); it('should return valid jwt', async () => { expect(response.body.jwt).to.not.be.empty; const decoded = jwt.verify(response.body.jwt, config.jwt.secret); expect(decoded).to.not.be.null; expect(Object.keys(decoded)).to.include.members(['email', 'sub']); expect(decoded.email).to.equal(user.email); expect(decoded.sub).to.equal(String(user._id)); }); }); describe('invalid request', () => { it('should return 404 for nonexistent user', async () => { const response = await request(api) .post('/auth/reset-password') .send({ email: 'invalid@email.com' }); expect(response).to.have.status(404); }); it('should return 404 for incorrect recoveryCode', async () => { const response = await request(api) .post('/auth/reset-password') .send({ email: 'valid@email.com', recoveryCode: 'incorrect-recovery-code', }); expect(response).to.have.status(404); }); }); }); }); }); ================================================ FILE: api/test/controllers/episode.js ================================================ import { expect, request } from 'chai'; import api from '../../src/server'; import Episode from '../../src/models/episode'; import config from '../../src/config'; import { withLogin, dropDBs, loadFixture, getMockClient } from '../utils'; describe('Episode controller', () => { let episode; before(async () => { await dropDBs(); await loadFixture('initial-data'); episode = await Episode.findOne({}); expect(episode).to.not.be.null; expect(episode.rss).to.not.be.null; }); describe('get', () => { it('should return the right article via /episodes/:episodeId', async () => { const response = await withLogin( request(api).get(`/episodes/${episode._id}`), ); expect(response).to.have.status(200); expect(response.body._id).to.eq(`${episode._id}`); }); }); describe('get parsed episode', () => { it('should return the parsed version of the episode', async () => { const response = await withLogin( request(api) .get(`/episodes/${episode._id}`) .query({ type: 'parsed' }), ); expect(response).to.have.status(200); }); }); describe('list', () => { it('should return the list of episodes', async () => { const response = await withLogin(request(api).get('/episodes')); expect(response).to.have.status(200); expect(response.body.length).to.be.at.least(1); }); }); describe('list with recommendations', () => { it('should return the list of episodes', async () => { const mock = getMockClient(); const opts = { user_id: '5b0f306d8e147f10f16aceaf', limit: 20 }; const result = { results: [ { foreign_id: `episode:${episode.id}` }, { foreign_id: 'episode:5ae0c71a0e7cbc4ee14a7c81' }, ], }; mock.personalization.get .withArgs('winds_episode_recommendations', opts) .returns({ data: result }); const response = await withLogin( request(api) .get('/episodes') .query({ type: 'recommended', }), ); expect(response).to.have.status(200); expect(response.body.length).to.be.at.least(1); expect(response.body[0].url).to.eq(episode.url); mock.personalization.get.reset(); }); }); }); ================================================ FILE: api/test/controllers/featured.js ================================================ import { expect, request } from 'chai'; import { withLogin } from '../utils.js'; import api from '../../src/server'; import { dropDBs, loadFixture } from '../utils'; describe('Featured', () => { before(async () => { await dropDBs(); await loadFixture('initial-data', 'featured'); }); describe('read list', () => { it('should return rss and podcasts', async () => { const response = await withLogin(request(api).get('/featured')); expect(response).to.have.status(200); expect(response.body).to.be.a('Array'); }); }); }); ================================================ FILE: api/test/controllers/feed.js ================================================ import { expect, request } from 'chai'; import api from '../../src/server'; import User from '../../src/models/user'; import Episode from '../../src/models/episode'; import Article from '../../src/models/article'; import { dropDBs, getMockClient, createMockFeed, loadFixture, withLogin, } from '../utils.js'; describe('Feed controller', () => { let user; before(async () => { await dropDBs(); await loadFixture('initial-data', 'liked-shares'); user = await User.findOne({ email: 'valid@email.com' }); expect(user).to.not.be.null; }); describe('invalid request', () => { it('should return 400 if feed type is missing', async () => { const response = await withLogin( request(api).get(`/users/${user.id}/feeds/`), ); expect(response).to.have.status(400); }); it('should return 400 if feed type is empty', async () => { const response = await withLogin( request(api) .get(`/users/${user.id}/feeds/`) .query({ type: '' }), ); expect(response).to.have.status(400); }); it('should return 400 if feed type is invalid', async () => { const response = await withLogin( request(api) .get(`/users/${user.id}/feeds/`) .query({ type: 'invalid' }), ); expect(response).to.have.status(400); }); it('should return 404 if user id is invalid', async () => { for (const type of ['user', 'timeline', 'article', 'episode']) { const response = await withLogin( request(api) .get('/users//feeds/') .query({ type }), ); expect(response).to.have.status(404); } }); }); const feeds = { article: Article, episode: Episode }; for (const type in feeds) { describe(`${type} feed`, () => { let response; let content; let userFeed; before(async () => { content = await feeds[type].find({}); userFeed = createMockFeed(`user_${type}`, user.id); userFeed.get.returns( Promise.resolve({ results: content.map(c => { return { foreign_id: `article:${c.id}` }; }), }), ); response = await withLogin( request(api) .get(`/users/${user.id}/feeds/`) .query({ type, page: 1, per_page: 42 }), ); }); it('should return 200', () => { expect(response).to.have.status(200); }); it(`should return ${type}s from user_${type} Stream feed`, async () => { const mockClient = getMockClient(); expect(mockClient.feed.calledWith(`user_${type}`, user.id)).to.be.true; expect(userFeed.get.calledWith({ limit: 42, offset: 1 })); //XXX: validating only ids since mocha deep comparison crashes node with OOM for (const entity of response.body) { expect(content.map(s => String(s._id))).to.include(entity._id); } }); }); } }); ================================================ FILE: api/test/controllers/folder.js ================================================ import { expect, request } from 'chai'; import { dropDBs, loadFixture, withLogin } from '../utils'; import Folder from '../../src/models/folder'; import api from '../../src/server'; describe('Folder controller', () => { const keys = ['_id', 'user', 'name', 'rss', 'podcast', 'createdAt']; let folder; let folders; before(async () => { await dropDBs(); await loadFixture('initial-data', 'folders'); folders = await Folder.find({ user: '5b0f306d8e147f10f16aceaf' }); folder = await Folder.findById('5bbb10d3ec7e1d8e1c5b6705'); }); describe('list all folders', () => { it('should return 200 for valid request', async () => { const response = await withLogin(request(api).get('/folders')); expect(response).to.have.status(200); expect(response.body.length).to.be.equal(folders.length); expect(response.body.map((f) => f._id)).to.have.all.members( folders.map((f) => String(f._id)), ); for (const entry of response.body) expect(Object.keys(entry)).to.include.members(keys); }); }); describe('retrieving folder by id', () => { it('should return 200 for valid request', async () => { const response = await withLogin(request(api).get(`/folders/${folder._id}`)); expect(response).to.have.status(200); expect(Object.keys(response.body)).to.include.members(keys); expect(response.body._id).to.be.equal(String(folder._id)); expect(response.body.name).to.be.equal(folder.name); expect(response.body.rss.map((r) => r._id)).to.have.all.members( folder.rss.map((r) => String(r._id)), ); expect(response.body.podcast.map((p) => p._id)).to.have.all.members( folder.podcast.map((p) => String(p._id)), ); }); it('should return 404 for invalid id', async () => { const response = await withLogin( request(api).get('/folders/5b0f306d8e147f10deadbeef'), ); expect(response).to.have.status(404); }); }); describe('retrieving folder feeds by id', () => { it('should return 200 for valid request', async () => { const response = await withLogin( request(api).get(`/folders/${folder._id}/feed`), ); expect(response).to.have.status(200); expect(response.body).to.be.an('array'); }); it('should return 404 for invalid id', async () => { const response = await withLogin( request(api).get('/folders/5b0f306d8e147f10deadbeef/feeds'), ); expect(response).to.have.status(404); }); }); describe('creating new folder', () => { it('should create a new folder by name only', async () => { const data = { name: 'newfolder' }; const response = await withLogin( request(api) .post('/folders') .send(data), ); expect(response).to.have.status(200); expect(Object.keys(response.body)).to.include.members(keys); expect(response.body.user._id).to.be.equal('5b0f306d8e147f10f16aceaf'); expect(response.body.name).to.be.equal(data.name); expect(response.body.rss).to.be.empty; expect(response.body.podcast).to.be.empty; }); it('should create a new folder with list of rss/podcasts', async () => { const data = { name: 'newNewfolder', rss: ['5b0ad0baf6f89574a638887e'], podcast: ['5afb7f68fe7430d35996cc62'], }; const response = await withLogin( request(api) .post('/folders') .send(data), ); expect(response).to.have.status(200); expect(Object.keys(response.body)).to.include.members(keys); expect(response.body.user._id).to.be.equal('5b0f306d8e147f10f16aceaf'); expect(response.body.name).to.be.equal(data.name); expect(response.body.rss.map((r) => String(r._id))).to.have.all.members( data.rss, ); expect(response.body.podcast.map((p) => String(p._id))).to.have.all.members( data.podcast, ); }); }); describe('updating existing folder', () => { it('should delete rss from folder', async () => { const data = { rss: '5b0ad0baf6f89574a638887a', action: 'remove' }; const response = await withLogin( request(api) .put(`/folders/${folder._id}`) .send(data), ); expect(response).to.have.status(200); expect(Object.keys(response.body)).to.include.members(keys); expect(response.body.user._id).to.be.equal('5b0f306d8e147f10f16aceaf'); expect(response.body.name).to.be.equal(folder.name); expect(response.body.rss.map((r) => String(r._id))).to.not.include(data.rss); }); it('should add rss to folder', async () => { const data = { rss: '5b0ad0baf6f89574a638887a' }; const response = await withLogin( request(api) .put(`/folders/${folder._id}`) .send(data), ); expect(response).to.have.status(200); expect(Object.keys(response.body)).to.include.members(keys); expect(response.body.user._id).to.be.equal('5b0f306d8e147f10f16aceaf'); expect(response.body.name).to.be.equal(folder.name); expect(response.body.rss.map((r) => String(r._id))).to.include(data.rss); }); it('should add podcast to folder', async () => { const data = { podcast: '5afb7f68fe7430d35996cc62' }; const response = await withLogin( request(api) .put(`/folders/${folder._id}`) .send(data), ); expect(response).to.have.status(200); expect(Object.keys(response.body)).to.include.members(keys); expect(response.body.user._id).to.be.equal('5b0f306d8e147f10f16aceaf'); expect(response.body.name).to.be.equal(folder.name); expect(response.body.podcast.map((p) => String(p._id))).to.include( data.podcast, ); }); it('should delete rss from folder', async () => { const data = { podcast: '5afb7f68fe7430d35996cc62', action: 'remove' }; const response = await withLogin( request(api) .put(`/folders/${folder._id}`) .send(data), ); expect(response).to.have.status(200); expect(Object.keys(response.body)).to.include.members(keys); expect(response.body.user._id).to.be.equal('5b0f306d8e147f10f16aceaf'); expect(response.body.name).to.be.equal(folder.name); expect(response.body.podcast.map((p) => String(p._id))).to.not.include( data.podcast, ); }); it('should update folder name', async () => { const data = { name: 'newName' }; const response = await withLogin( request(api) .put(`/folders/${folder._id}`) .send(data), ); expect(response).to.have.status(200); expect(response.body.name).to.be.equal(data.name); }); it('should return 404 for invalid id', async () => { const response = await withLogin( request(api) .put('/folders/5b0f306d8e147f10deadbeef') .send(folder), ); expect(response).to.have.status(404); }); }); describe('deleting folder by id', () => { it('should return 204 for valid request', async () => { const response = await withLogin( request(api).delete(`/folders/${folder._id}`), ); expect(response).to.have.status(204); expect(await Folder.findById(folder._id)).to.be.null; }); it('should return 404 for invalid id', async () => { const response = await withLogin( request(api).delete('/folders/5b0f306d8e147f10deadbeef'), ); expect(response).to.have.status(404); }); }); }); ================================================ FILE: api/test/controllers/follow.js ================================================ import { expect, request } from 'chai'; import api from '../../src/server'; import Follow from '../../src/models/follow'; import RSS from '../../src/models/rss'; import Podcast from '../../src/models/podcast'; import User from '../../src/models/user'; import { loadFixture, withLogin, dropDBs } from '../utils'; describe('Follow controller', () => { let followedRSS; let followedPodcast; let rss; let podcast; let user; before(async () => { await dropDBs(); await loadFixture('initial-data', 'follows'); followedRSS = await Follow.findOne({ rss: { $exists: true, $ne: null } }); followedPodcast = await Follow.findOne({ podcast: { $exists: true, $ne: null } }); rss = await RSS.findOne(); podcast = await Podcast.findOne(); user = await User.findById('5b0f306d8e147f10f16aceaf'); }); describe('get', () => { it('should return all follows where type is RSS', async () => { const res = await withLogin(request(api).get('/follows?type=rss')); expect(res).to.have.status(200); }); it('should return all follows where type is podcast', async () => { const res = await withLogin(request(api).get('/follows?type=podcast')); expect(res).to.have.status(200); }); it('should fail when an unauthenticated user attempts to read RSS follows', async () => { const res = await request(api).get('/follows?type=rss'); expect(res).to.have.status(401); }); it('should fail when an unauthenticated user attempts to read podcast follows', async () => { const res = await request(api).get('/follows?type=podcast'); expect(res).to.have.status(401); }); it('should return hydrated follows where type is RSS', async () => { const res = await withLogin(request(api).get('/follows?type=rss')); expect(res).to.have.status(200); expect(res.body[0].rss).to.have.own.property('_id'); expect(res.body[0].user).to.have.own.property('_id'); }); it('should return hydrated follows where type is podcast', async () => { const res = await withLogin(request(api).get('/follows?type=podcast')); expect(res).to.have.status(200); expect(res.body[0].rss).to.be.undefined; expect(res.body[0].podcast).to.have.own.property('_id'); expect(res.body[0].user).to.have.own.property('_id'); }); it('should return a specific RSS follow relationship', async () => { const res = await withLogin( request(api).get(`/follows?user=${user._id}&rss=${followedRSS.rss._id}`), ); expect(res).to.have.status(200); expect(res.body[0]._id).to.equal(followedRSS._id.toString()); }); it('should return a specific podcast follow relationship', async () => { const res = await withLogin( request(api).get( `/follows?user=${user._id}&podcast=${followedPodcast.podcast._id}`, ), ); expect(res).to.have.status(200); expect(res.body[0]._id).to.equal(followedPodcast._id.toString()); }); }); describe('post', () => { it('should throw an error when adding an RSS follow without a required field', async () => { const res = await withLogin( request(api) .post('/follows') .send({ rss: rss._id }), ); expect(res).to.have.status(422); }); it('should throw an error when adding a podcast follow without a required field', async () => { const res = await withLogin( request(api) .post('/follows') .send({ podcast: podcast._id }), ); expect(res).to.have.status(422); }); it('should throw an error when adding a follow without a required rss or podcast field', async () => { const res = await withLogin( request(api) .post('/follows') .send({ user: user._id }), ); expect(res).to.have.status(422); }); it('should follow an RSS feed', async () => { const res = await withLogin( request(api).post(`/follows?type=rss&rss=${rss._id}`), ); expect(res).to.have.status(200); }); it('should follow a podcast feed', async () => { const res = await withLogin( request(api).post(`/follows?type=podcast&podcast=${podcast._id}`), ); expect(res).to.have.status(200); }); it('should fail to follow a non existing RSS feed', async () => { const res = await withLogin( request(api).post(`/follows?type=rss&rss=5b3084e0000000000000000a`), ); expect(res).to.have.status(404); }); it('should fail to follow a non existing podcast feed', async () => { const res = await withLogin( request(api).post( `/follows?type=podcast&podcast=5b3084e0000000000000000b`, ), ); expect(res).to.have.status(404); }); it('should follow an existing RSS feed', async () => { const res = await withLogin( request(api).post(`/follows?type=rss&rss=${followedRSS.rss._id}`), ); expect(res).to.have.status(200); }); it('should follow an existing podcast feed', async () => { const res = await withLogin( request(api).post( `/follows?type=podcast&podcast=${followedPodcast.podcast._id}`, ), ); expect(res).to.have.status(200); }); }); describe('delete', () => { it('should remove an RSS follow relationship', async () => { const follow = await Follow.create({ user: user._id, rss: '6b0ad0baf6f89574a638887a', }); const res = await withLogin( request(api).delete(`/follows?type=rss&rss=${follow.rss._id}`), ); expect(res).to.have.status(204); expect(await Follow.findById(follow._id)).to.be.null; }); it('should remove a podcast follow relationship', async () => { const follow = await Follow.create({ user: user._id, podcast: '6afb7fedfe7430d35996d66e', }); const res = await withLogin( request(api).delete( `/follows?type=podcast&podcast=${follow.podcast._id}`, ), ); expect(res).to.have.status(204); expect(await Follow.findById(follow._id)).to.be.null; }); it('should not fail when the follow relationship does not exist', async () => { const res = await withLogin( request(api).delete(`/follows?type=rss&rss=8b0ad0baf6f89574a638887a`), ); expect(res).to.have.status(204); }); }); }); ================================================ FILE: api/test/controllers/health.js ================================================ import { expect, request } from 'chai'; import api from '../../src/server'; import { loadFixture, withLogin, dropDBs } from '../utils'; describe('Health controller', () => { let health; before(async () => { await dropDBs(); }); describe('get', () => { it('should return health status of the api', async () => { const res = await request(api).get('/health'); expect(res).to.have.status(200); }); it('should return the status of the api and workers', async () => { const res = await request(api).get('/status'); expect(res).to.have.status(200); }); it('should return the status of the worker queue', async () => { const res = await request(api).get('/queue'); expect(res).to.have.status(200); }); }); }); ================================================ FILE: api/test/controllers/listen.js ================================================ import sinon from 'sinon'; import { expect, request } from 'chai'; import User from '../../src/models/user'; import Listen from '../../src/models/listen'; import api from '../../src/server'; import logger from '../../src/utils/logger'; import { dropDBs, loadFixture, withLogin } from '../utils'; describe('Listen controller', () => { const episodeId = '5b0ad37026dc3db38194e286'; let user; let listen; before(async () => { await dropDBs(); await loadFixture('initial-data', 'listens'); listen = (await Listen.find() .sort('_id') .limit(1) .lean())[0]; user = listen.user; }); describe('upsert entry', () => { it('should return 200 for new entry', async () => { const data = { user: user._id, episode: episodeId, duration: 33, }; const response = await withLogin( request(api) .post('/listens') .send(data), ); expect(response).to.have.status(200); const keys = ['user', 'episode', 'duration']; expect(Object.keys(response.body)).to.include.members(keys); const newListen = await Listen.findOne(data); expect(newListen).to.not.be.null; expect(response.body._id).to.be.equal(String(newListen._id)); expect(response.body.user._id).to.be.equal(String(data.user)); expect(response.body.user._id).to.be.equal(String(newListen.user._id)); expect(response.body.episode._id).to.be.equal(data.episode); expect(response.body.episode._id).to.be.equal(String(newListen.episode._id)); expect(response.body.duration).to.be.equal(data.duration); expect(response.body.duration).to.be.equal(newListen.duration); }); it('should return 200 for existing entry', async () => { const data = { _id: listen._id, user: user._id, episode: episodeId, duration: 66, }; const response = await withLogin( request(api) .post('/listens') .send(data), ); expect(response).to.have.status(200); const updatedListen = await Listen.findById(listen._id).lean(); const keys = ['_id', 'user', 'episode', 'duration']; expect(Object.keys(response.body)).to.include.members(keys); expect(response.body._id).to.be.equal(String(updatedListen._id)); expect(response.body.user._id).to.be.equal(String(data.user)); expect(response.body.user._id).to.be.equal(String(updatedListen.user._id)); expect(response.body.episode._id).to.be.equal(data.episode); expect(response.body.episode._id).to.be.equal(String(updatedListen.episode._id)); expect(response.body.duration).to.be.equal(data.duration); expect(response.body.duration).to.be.equal(updatedListen.duration); }); it('should return 500 for invalid request', async () => { //XXX: silensing error logs to have nice clean test output sinon.stub(logger, 'error'); const response = await withLogin( request(api) .post('/listens') .send({ episode: { $gte: { and: 1 } } }), ); expect(response).to.have.status(500); logger.error.restore(); }); }); }); ================================================ FILE: api/test/controllers/note.js ================================================ import { expect, request } from 'chai'; import { dropDBs, loadFixture, withLogin } from '../utils'; import Note from '../../src/models/note'; import api from '../../src/server'; describe('Note controller', () => { const keys = ['_id', 'user', 'start', 'end', 'text']; let note; let notes; let authedUser = '5b0f306d8e147f10f16aceaf'; before(async () => { await dropDBs(); await loadFixture('initial-data', 'notes'); notes = await Note.find({ user: authedUser }); note = await Note.findById('5bca58f5e4313757120cabc5'); }); describe('list notes', () => { it('should return 200 for valid request', async () => { const response = await withLogin(request(api).get('/notes')); expect(response).to.have.status(200); expect(response.body.length).to.be.equal(notes.length); expect(response.body.map((n) => n._id)).to.have.all.members( notes.map((t) => String(t._id)), ); for (const entry of response.body) { expect(Object.keys(entry)).to.include.members(keys); if (entry.article) expect(entry.episode).to.be.undefined; if (entry.episode) expect(entry.article).to.be.undefined; } }); }); describe('retrieving note by id', () => { it('should return 200 for valid request', async () => { const response = await withLogin(request(api).get(`/notes/${note._id}`)); expect(response).to.have.status(200); expect(Object.keys(response.body)).to.include.members(keys); expect(response.body._id).to.be.equal(String(note._id)); expect(response.body.text).to.be.equal(note.text); expect(response.body.start).to.be.equal(note.start); expect(response.body.end).to.be.equal(note.end); if (note.article) expect(response.body.article._id).to.be.equal(String(note.article._id)); if (note.episode) expect(response.body.episode._id).to.be.equal(String(note.episode_id)); }); it('should return 404 for invalid id', async () => { const response = await withLogin( request(api).get('/notes/5b0f306d8e147f10deadbeef'), ); expect(response).to.have.status(404); }); }); describe('creating new notes', () => { it('should create a new highlight', async () => { const data = { start: 11, end: 22, article: String(note.article._id), }; const response = await withLogin( request(api) .post('/notes') .send(data), ); expect(response).to.have.status(200); expect(Object.keys(response.body)).to.include.members(keys); expect(response.body.user).to.be.equal(authedUser); expect(response.body.start).to.be.equal(data.start); expect(response.body.end).to.be.equal(data.end); expect(response.body.text).to.be.empty; expect(response.body.article._id).to.be.equal(data.article); expect(response.body.episode).to.be.undefined; }); it('should create a new note', async () => { const data = { start: 33, end: 44, text: 'note', article: String(note.article._id), }; const response = await withLogin( request(api) .post('/notes') .send(data), ); expect(response).to.have.status(200); expect(Object.keys(response.body)).to.include.members(keys); expect(response.body.user).to.be.equal(authedUser); expect(response.body.start).to.be.equal(data.start); expect(response.body.end).to.be.equal(data.end); expect(response.body.text).to.be.equal(data.text); expect(response.body.article._id).to.be.equal(data.article); expect(response.body.episode).to.be.undefined; }); it('should create a new highlight and merge overlaps', async () => { const data = { start: 1, end: 30, text: '', article: String(note.article._id), }; const overlaps = await Note.find({ user: authedUser, article: data.article, $nor: [{ end: { $lte: data.start } }, { start: { $gte: data.end } }], }).lean(); const response = await withLogin( request(api) .post('/notes') .send(data), ); for (const note of overlaps) { if (note.start < data.start) data.start = note.start; if (note.end > data.end) data.end = note.end; if (note.text) data.text = data.text + '\n' + note.text; } expect(response).to.have.status(200); expect(Object.keys(response.body)).to.include.members(keys); expect(response.body.user).to.be.equal(authedUser); expect(response.body.start).to.be.equal(data.start); expect(response.body.end).to.be.equal(data.end); expect(response.body.mergedNotes.sort()).to.deep.equal( overlaps.map((n) => String(n._id)).sort(), ); expect(response.body.text).to.be.equal(data.text); expect(response.body.article._id).to.be.equal(data.article); expect(response.body.episode).to.be.undefined; }); it('should create a new note and merge overlaps', async () => { const data = { start: 22, end: 44, text: 'note', article: String(note.article._id), }; const overlaps = await Note.find({ user: authedUser, article: data.article, $nor: [{ end: { $lte: data.start } }, { start: { $gte: data.end } }], }).lean(); const response = await withLogin( request(api) .post('/notes') .send(data), ); for (const note of overlaps) { if (note.start < data.start) data.start = note.start; if (note.end > data.end) data.end = note.end; if (note.text) data.text = data.text + '\n' + note.text; } expect(response).to.have.status(200); expect(Object.keys(response.body)).to.include.members(keys); expect(response.body.user).to.be.equal(authedUser); expect(response.body.start).to.be.equal(data.start); expect(response.body.end).to.be.equal(data.end); expect(response.body.mergedNotes.sort()).to.deep.equal( overlaps.map((n) => String(n._id)).sort(), ); expect(response.body.text).to.be.equal(data.text); expect(response.body.article._id).to.be.equal(data.article); expect(response.body.episode).to.be.undefined; }); }); describe('updating existing notes', () => { it('should update a note', async () => { const data = { text: 'new text' }; const response = await withLogin( request(api) .put(`/notes/${note._id}`) .send(data), ); expect(response).to.have.status(200); expect(Object.keys(response.body)).to.include.members(keys); expect(response.body.user).to.be.equal(authedUser); expect(response.body.start).to.be.equal(note.start); expect(response.body.end).to.be.equal(note.end); expect(response.body.text).to.be.equal(data.text); expect(response.body.article._id).to.be.equal(String(note.article._id)); expect(response.body.episode).to.be.undefined; }); it('should return 404 for invalid id', async () => { const response = await withLogin( request(api) .put('/notes/5b0f306d8e147f10deadbeef') .send({ text: 'invalid' }), ); expect(response).to.have.status(404); }); }); describe('deleting notes by id', () => { it('should return 204 for valid request', async () => { const response = await withLogin(request(api).delete(`/notes/${note._id}`)); expect(response).to.have.status(204); expect(await Note.findById(note._id)).to.be.null; }); it('should return 404 for invalid id', async () => { const response = await withLogin( request(api).delete('/notes/5b0f306d8e147f10deadbeef'), ); expect(response).to.have.status(404); }); }); }); ================================================ FILE: api/test/controllers/opml.js ================================================ import { expect, request } from 'chai'; import fs from 'fs'; import path from 'path'; import api from '../../src/server'; import { IsPodcastStream } from '../../src/parsers/detect-type'; import { withLogin, loadFixture, dropDBs } from '../utils'; // load fixture with follows and feeds // setup a users // test the get // - auth is required // - verify that the right data is there // post // - large files // - different extensions // - folder/no folder OPML // detect feed type codebase // - various formats // edge cases // - what if a feed URL is somehow broken (check) // - what if the feed is too large (more than 5MB, check) // - what if you upload a file that's too large (check) // - what if the site URL is not valid (check) // - what if you already follow a certain feed function AuthGetRequest(getPath) { return withLogin(request(api).get(getPath)); } function AuthPostRequest(path) { return withLogin(request(api).post(path)); } describe('OPML', () => { before(async () => { await dropDBs(); await loadFixture('initial-data', 'opml', 'featured'); }); describe('Export', () => { describe('invalid request', () => { let response; before(async () => { response = await request(api).get('/opml/download'); }); it('should return 401', () => { expect(response).to.have.status(401); }); }); describe('valid request', () => { let response; before(async () => { response = await AuthGetRequest('/opml/download'); }); it('should return 200', () => { expect(response).to.have.status(200); }); }); }); describe('Import', () => { describe('valid request', () => { let response; before(async () => { response = await AuthPostRequest('/opml/upload').attach( 'opml', fs.readFileSync(path.join(__dirname, '..', 'data', 'test.xml')), 'test.xml', ); }); it('should return 200', () => { expect(response).to.have.status(200); expect(response).to.be.json; expect(response.body.length).to.equal(2); expect(response.body[0].follow.user).to.equal('5b0f306d8e147f10f16aceaf'); expect(response.body[0].follow.rss).to.be.undefined; expect(response.body[1].follow.user).to.equal('5b0f306d8e147f10f16aceaf'); expect(response.body[1].follow.podcast).to.be.undefined; }); }).retries(10); describe('invalid request', () => { it('should return 200', async () => { const response = await AuthPostRequest('/opml/upload').attach( 'opml', fs.readFileSync(path.join(__dirname, '..', 'data', '404.opml')), '404.opml', ); expect(response).to.have.status(200); expect(response).to.be.json; expect(response.body.length).to.equal(2); expect(response.body[0].follow.user).to.equal('5b0f306d8e147f10f16aceaf'); expect(response.body[1].error).to.equal('Error opening https://kotaku.com/rss404'); }).retries(3); it('should return 200', async () => { const response = await AuthPostRequest('/opml/upload').attach( 'opml', fs.readFileSync(path.join(__dirname, '..', 'data', 'not-a-url.opml')), 'not-a-url.opml', ); expect(response).to.have.status(200); expect(response).to.be.json; expect(response.body.length).to.equal(2); expect(response.body[0].follow.user).to.equal('5b0f306d8e147f10f16aceaf'); expect(response.body[1].error).to.equal('Invalid feedUrl https://kotaku/rss404'); }).retries(3); }); }); describe('Feed Detection', () => { describe('Podcast', async () => { let isPodcast; before(async () => { let p = path.join( __dirname, '..', 'data', 'podcast-feed', 'giant-bombcast', ); let feedStream = fs.createReadStream(p); isPodcast = await IsPodcastStream( feedStream, 'https://giant-bomcast.com/', ); }); it('giant bomcast should be a podcast', async () => { expect(isPodcast).to.be.true; }); it('design details should be a podcast', async () => { let p = path.join( __dirname, '..', 'data', 'podcast-feed', 'design-details', ); let feedStream = fs.createReadStream(p); isPodcast = await IsPodcastStream( feedStream, 'https://spec.fm/podcasts/design-details', ); expect(isPodcast).to.be.true; }); }); describe('RSS', async () => { let isPodcast; before(async () => { let p = path.join(__dirname, '..', 'data', 'feed', 'techcrunch'); let feedStream = fs.createReadStream(p); isPodcast = await IsPodcastStream( feedStream, 'https://giant-bomcast.com/', ); }); it('techcrunch should not be a podcast', async () => { expect(isPodcast).to.be.false; }); }); }); }); ================================================ FILE: api/test/controllers/pin.js ================================================ import { expect, request } from 'chai'; import api from '../../src/server'; import Pin from '../../src/models/pin'; import Article from '../../src/models/article'; import Episode from '../../src/models/episode'; import { loadFixture, withLogin, dropDBs } from '../utils'; describe('Pin controller', () => { let pin; let article; let episode; before(async () => { await dropDBs(); await loadFixture('initial-data', 'pins'); pin = (await Pin.find() .sort('_id') .limit(1))[0]; article = (await Article.find() .sort('_id') .limit(1))[0]; episode = (await Episode.find() .sort('_id') .limit(1))[0]; }); describe('get', () => { it('should return all pins', async () => { const res = await withLogin(request(api).get('/pins')); expect(res).to.have.status(200); }); }); describe('get', () => { it('should return the a single pin via /pins/:pinId', async () => { const res = await withLogin(request(api).get(`/pins/${pin._id}`)); expect(res).to.have.status(200); }); }); describe('get', () => { it('should return a limited number of pins', async () => { const res = await withLogin( request(api) .get('/pins') .query({ limit: 1 }), ); expect(res).to.have.status(200); expect(res.body).to.be.an('array'); }); }); describe('post', () => { it('should create an article pin and return the hydrated article', async () => { const res = await withLogin( request(api) .post('/pins') .send({ article: article._id }), ); expect(res).to.have.status(200); expect(res.body).to.have.property('article'); }); }); describe('post', () => { it('should create an episode pin and return a hydrated episode', async () => { const res = await withLogin( request(api) .post('/pins') .send({ episode: episode._id }), ); expect(res).to.have.status(200); expect(res.body).to.have.property('episode'); }); }); describe('delete', () => { it('should delete a pin', async () => { const res = await withLogin(request(api).delete(`/pins/${pin._id}`)); expect(res).to.have.status(204); }); }); }); ================================================ FILE: api/test/controllers/playlist.js ================================================ import sinon from 'sinon'; import { expect, request } from 'chai'; import User from '../../src/models/user'; import Playlist from '../../src/models/playlist'; import api from '../../src/server'; import logger from '../../src/utils/logger'; import { dropDBs, loadFixture, withLogin } from '../utils'; describe('Playlist controller', () => { const otherUserId = '4342306d8e147f10f16aceaf'; let user; let playlist; before(async () => { await dropDBs(); await loadFixture('initial-data', 'playlists'); user = await User.findOne({ _id: '5b0f306d8e147f10f16aceaf' }); playlist = await Playlist.findOne(); }); describe('listing all entries', () => { it('should return 200 for valid request', async () => { const response = await withLogin(request(api).get('/playlists')); expect(response).to.have.status(200); const keys = ['_id', 'user', 'name', 'episodes']; for (const entry of response.body) { expect(Object.keys(entry)).to.include.members(keys); } }); it('should filter results if query is provided', async () => { const fileters = [ { episode: '5b0ad37026dc3db38194e286' }, { type: 'recommended' }, { type: 'featured' }, ]; const response = await withLogin( request(api) .get('/playlists') .query(), ); expect(response).to.have.status(200); const keys = ['_id', 'user', 'name', 'episodes']; for (const entry of response.body) { expect(Object.keys(entry)).to.include.members(keys); } }); it('should return 403 when retrieving entries created by other users', async () => { const response = await withLogin( request(api) .get('/playlists') .query({ user: otherUserId }), ); expect(response).to.have.status(403); }); it('should return 500 for invalid request', async () => { //XXX: silensing error logs to have nice clean test output sinon.stub(logger, 'error'); const response = await withLogin( request(api) .get('/playlists') .query({ episode: { $gte: '' } }), ); expect(response).to.have.status(500); logger.error.restore(); }); }); describe('retrieving entry by id', () => { it('should return 200 for valid request', async () => { const response = await withLogin( request(api).get(`/playlists/${playlist._id}`), ); expect(response).to.have.status(200); const keys = ['_id', 'user', 'name', 'episodes']; expect(Object.keys(response.body)).to.include.members(keys); expect(response.body._id).to.be.equal(String(playlist._id)); expect(response.body.user._id).to.be.equal(String(playlist.user._id)); expect(response.body.name).to.be.equal(playlist.name); //XXX: mocha seems to hang if we try to do a full compare expect(response.body.episodes.map((e) => e._id)).to.have.all.members( playlist.episodes.map((e) => String(e._id)), ); }); it('should return 404 for invalid id', async () => { const response = await withLogin( request(api).get('/playlists/5b0f306d8e147f10deadbeef'), ); expect(response).to.have.status(404); }); it('should return 403 when retrieving entries created by other users', async () => { const otherPlaylist = await Playlist.create({ user: otherUserId, name: 'other playlist', episodes: [], }); const response = await withLogin( request(api).get(`/playlists/${otherPlaylist._id}`), ); expect(response).to.have.status(403); }); it('should return 500 for invalid request', async () => { //XXX: silensing error logs to have nice clean test output sinon.stub(logger, 'error'); const response = await withLogin(request(api).get('/playlists//')); expect(response).to.have.status(500); logger.error.restore(); }); }); describe('creating new entry', () => { it('should return 200 for valid request', async () => { const data = { user: user.id, name: 'yet other playlist', episodes: ['5b0ad37626dc3db38194fa73'], }; const response = await withLogin( request(api) .post('/playlists') .send(data), ); expect(response).to.have.status(200); const keys = ['_id', 'user', 'name', 'episodes']; expect(Object.keys(response.body)).to.include.members(keys); const newPlaylist = await Playlist.findOne({ name: 'yet other playlist' }); expect(response.body._id).to.be.equal(String(newPlaylist._id)); expect(response.body.user._id).to.be.equal(data.user); expect(response.body.user._id).to.be.equal(String(newPlaylist.user._id)); expect(response.body.name).to.be.equal(data.name); expect(response.body.name).to.be.equal(newPlaylist.name); //XXX: mocha seems to hang if we try to do a full compare expect(response.body.episodes.map((e) => e._id)).to.have.all.members( data.episodes, ); expect(response.body.episodes.map((e) => e._id)).to.have.all.members( newPlaylist.episodes.map((e) => String(e._id)), ); }); it('should return 500 for invalid request', async () => { //XXX: silensing error logs to have nice clean test output sinon.stub(logger, 'error'); const data = { _id: 'Howdy pardner' }; const response = await withLogin( request(api) .post('/playlists') .send(data), ); expect(response).to.have.status(500); logger.error.restore(); }); }); describe('updating existing entry', () => { it('should return 200 for valid request', async () => { const data = { user: user.id, name: 'Episode w/ new name', episodes: playlist.episodes.map((e) => e._id), }; const response = await withLogin( request(api) .put(`/playlists/${playlist._id}`) .send(data), ); expect(response).to.have.status(200); const keys = ['_id', 'user', 'name', 'episodes']; expect(Object.keys(response.body)).to.include.members(keys); const updatedPlaylist = await Playlist.findById(playlist._id).lean(); expect(response.body._id).to.be.equal(String(updatedPlaylist._id)); expect(response.body.user._id).to.be.equal(data.user); expect(response.body.user._id).to.be.equal(String(updatedPlaylist.user._id)); expect(response.body.name).to.be.equal(data.name); expect(response.body.name).to.be.equal(updatedPlaylist.name); //XXX: mocha seems to hang if we try to do a full compare expect(response.body.episodes.map((e) => e._id)).to.have.all.members( data.episodes.map(String), ); expect(response.body.episodes.map((e) => e._id)).to.have.all.members( updatedPlaylist.episodes.map((e) => String(e._id)), ); }); it('shoudl return 404 for invalid id', async () => { const response = await withLogin( request(api) .put('/playlists/5b0f306d8e147f10deadbeef') .send(playlist), ); expect(response).to.have.status(404); }); it('should return 403 when updating entries created by other users', async () => { const otherPlaylist = await Playlist.create({ user: otherUserId, name: 'other playlist', episodes: [], }); const response = await withLogin( request(api) .put(`/playlists/${otherPlaylist._id}`) .send(playlist), ); expect(response).to.have.status(403); }); it('should return 500 for invalid request', async () => { //XXX: silensing error logs to have nice clean test output sinon.stub(logger, 'error'); const response = await withLogin( request(api).delete('/playlists//'), ); expect(response).to.have.status(500); logger.error.restore(); }); }); describe('deleting entry by id', () => { it('should return 204 for valid request', async () => { const response = await withLogin( request(api).delete(`/playlists/${playlist._id}`), ); expect(response).to.have.status(204); expect(await Playlist.findById(playlist._id)).to.be.null; }); it('shoudl return 404 for invalid id', async () => { const response = await withLogin( request(api).delete('/playlists/5b0f306d8e147f10deadbeef'), ); expect(response).to.have.status(404); }); it('should return 403 when deleting entries created by other users', async () => { const otherPlaylist = await Playlist.create({ user: otherUserId, name: 'other playlist', episodes: [], }); const response = await withLogin( request(api).delete(`/playlists/${otherPlaylist._id}`), ); expect(response).to.have.status(403); }); it('should return 500 for invalid request', async () => { //XXX: silensing error logs to have nice clean test output sinon.stub(logger, 'error'); const response = await withLogin( request(api).delete('/playlists//'), ); expect(response).to.have.status(500); logger.error.restore(); }); }); }); ================================================ FILE: api/test/controllers/podcast.js ================================================ import { expect, request } from 'chai'; import api from '../../src/server'; import Podcast from '../../src/models/podcast'; import config from '../../src/config'; import { loadFixture, dropDBs, withLogin, getMockClient } from '../utils.js'; describe('Podcast controller', () => { let podcast; before(async () => { await dropDBs(); await loadFixture('initial-data'); podcast = await Podcast.findOne({}); expect(podcast).to.not.be.null; }); describe('get podcast list', () => { it('should return the right podcast feed from /podcasts', async () => { const response = await withLogin(request(api).get('/podcasts')); expect(response).to.have.status(200); expect(response.body.length).to.be.at.least(1); }); }); describe('get podcast list from personalization', () => { it('should return the right podcast feed from /podcasts?type=recommended', async () => { const mock = getMockClient(); const opts = { user_id: '5b0f306d8e147f10f16aceaf', limit: 7 }; const result = { results: [{ foreign_id: `episode:${podcast.id}` }] }; mock.personalization.get.withArgs('winds_podcast_recommendations', opts).returns({ data: result }); const response = await withLogin( request(api) .get('/podcasts') .query({ type: 'recommended', }), ); expect(response).to.have.status(200); expect(response.body.length).to.be.at.least(1); expect(response.body[0].url).to.eq(podcast.url); mock.personalization.get.reset(); }); }); describe('get podcast', () => { it('should return the right rss feed from /podcasts/:podcastId', async () => { const response = await withLogin( request(api).get(`/podcasts/${podcast._id}`), ); expect(response).to.have.status(200); expect(response.body._id).to.eq(`${podcast._id}`); }); }); describe('add Podcast', () => { let podcast; it('should create podcast from https://a16z.com/podcasts/feed/', async () => { const response = await withLogin( request(api) .post('/podcasts') .send({ feedUrl: 'https://a16z.com/podcasts/feed/' }), ); expect(response).to.have.status(200); expect(response.body).to.have.length(1); expect(response.body[0].url).to.eq('https://a16z.com'); podcast = await Podcast.find({ url: 'https://a16z.com' }); expect(podcast).to.be.not.null; }); it('2nd time should not create or update anything', async () => { const response = await withLogin( request(api) .post('/podcasts') .send({ feedUrl: 'https://a16z.com/podcasts/feed/' }), ); expect(response).to.have.status(200); expect(response.body).to.have.length(1); const podcast2 = await Podcast.find({ url: 'https://a16z.com' }); expect(podcast2).to.be.not.null; expect(podcast2.updatedAt).to.eq(podcast.updatedAt); }); }); }); ================================================ FILE: api/test/controllers/rss.js ================================================ import { expect, request } from 'chai'; import api from '../../src/server'; import RSS from '../../src/models/rss'; import config from '../../src/config'; import { loadFixture, withLogin, dropDBs, getMockClient } from '../utils'; describe('RSS controller', () => { let rss; before(async () => { await dropDBs(); await loadFixture('initial-data', 'articles'); rss = await RSS.findOne({}); expect(rss).to.not.be.null; }); describe('get feed', () => { it('should return the right rss feed from /rss/:rssId', async () => { const response = await withLogin(request(api).get(`/rss/${rss._id}`)); expect(response).to.have.status(200); expect(response.body._id).to.eq(`${rss._id}`); }); }); describe('get RSS list', () => { it('should return the right rss feed from /rss', async () => { const response = await withLogin(request(api).get('/rss')); expect(response).to.have.status(200); expect(response.body).to.be.a('Array'); }); it('should return the right rss feed from /podcasts?type=recommended', async () => { const mock = getMockClient(); const opts = { user_id: '5b0f306d8e147f10f16aceaf', limit: 7 }; const result = { results: [ { foreign_id: `rss:${rss.id}` }, { foreign_id: 'rss:5ae0c71a0e7cbc4ee14a7c81' }, ], }; mock.personalization.get .withArgs('winds_rss_recommendations', opts) .returns({ data: result }); const response = await withLogin( request(api) .get('/rss') .query({ type: 'recommended', }), ); expect(response).to.have.status(200); expect(response.body.length).to.be.at.least(1); expect(response.body[0].url).to.eq(rss.url); mock.personalization.get.reset(); }); }); describe('add road to VR', () => { let rss; it('should create 3 feed from Road to VR', async () => { const response = await withLogin( request(api) .post('/rss') .send({ feedUrl: 'https://www.roadtovr.com/' }), ); expect(response).to.have.status(201); expect(response.body).to.have.length(3); expect(response.body[0].url).to.eq('https://roadtovr.com'); rss = await RSS.find({ url: 'https://roadtovr.com' }); }); }); describe('add RSS feed - HN', () => { let rss; it('should create 1 feed from HN URL', async () => { const response = await withLogin( request(api) .post('/rss') .send({ feedUrl: 'https://news.ycombinator.com' }), ); expect(response).to.have.status(201); expect(response.body).to.have.length(1); expect(response.body[0].url).to.eq('https://news.ycombinator.com'); rss = await RSS.findOne({ url: 'https://news.ycombinator.com' }); }); it('2nd time shoudl still return a response', async () => { const response = await withLogin( request(api) .post('/rss') .send({ feedUrl: 'https://news.ycombinator.com' }), ); expect(response).to.have.status(201); expect(response.body).to.have.length(1); const rss2 = await RSS.findOne({ url: 'https://news.ycombinator.com' }); // but not be updated expect(Number(rss2.updatedAt)).to.eq(Number(rss.updatedAt)); }); // TODO: enable this test once techcrunch website is fixed and won't redirect anymore // it('creates 2 RSS feeds for Tech Crunch', async () => { // const response = await withLogin( // request(api) // .post('/rss') // .send({ feedUrl: 'https://techcrunch.com' }), // ); // expect(response).to.have.status(201); // expect(response.body).to.have.length(2); // let tcRSS = await RSS.find({ url: 'https://techcrunch.com' }); // expect(tcRSS).to.have.length(2); // }); }); }); ================================================ FILE: api/test/controllers/tag.js ================================================ import { expect, request } from 'chai'; import { dropDBs, loadFixture, withLogin } from '../utils'; import Tag from '../../src/models/tag'; import api from '../../src/server'; describe('Tag controller', () => { const keys = ['_id', 'user', 'name', 'episode', 'article']; let tag; let tags; let authedUser = '5b0f306d8e147f10f16aceaf'; before(async () => { await dropDBs(); await loadFixture('initial-data', 'tags'); tags = await Tag.find({ user: authedUser }); tag = await Tag.findById('5bca58f5e4313757120c8810'); }); describe('list all tags', () => { it('should return 200 for valid request', async () => { const response = await withLogin(request(api).get('/tags')); expect(response).to.have.status(200); expect(response.body.length).to.be.equal(tags.length); expect(response.body.map((t) => t._id)).to.have.all.members( tags.map((t) => String(t._id)), ); for (const entry of response.body) expect(Object.keys(entry)).to.include.members(keys); }); }); describe('retrieving tag by id', () => { it('should return 200 for valid request', async () => { const response = await withLogin(request(api).get(`/tags/${tag._id}`)); expect(response).to.have.status(200); expect(Object.keys(response.body)).to.include.members(keys); expect(response.body._id).to.be.equal(String(tag._id)); expect(response.body.name).to.be.equal(tag.name); expect(response.body.article.map((a) => a._id)).to.have.all.members( tag.article.map((a) => String(a._id)), ); expect(response.body.episode.map((e) => e._id)).to.have.all.members( tag.episode.map((e) => String(e._id)), ); }); it('should return 404 for invalid id', async () => { const response = await withLogin( request(api).get('/tags/5b0f306d8e147f10deadbeef'), ); expect(response).to.have.status(404); }); }); describe('creating new tags', () => { it('should create a new tag by name only', async () => { const data = { name: 'newtag' }; const response = await withLogin( request(api) .post('/tags') .send(data), ); expect(response).to.have.status(200); expect(Object.keys(response.body)).to.include.members(keys); expect(response.body.user._id).to.be.equal(authedUser); expect(response.body.name).to.be.equal(data.name); expect(response.body.episode).to.be.empty; expect(response.body.article).to.be.empty; }); it('should create a new tag with list of feeds', async () => { const data = { name: 'newNewtags', article: ['5b0ad37226dc3db38194e5ec', '5b0ad37226dc3db38194e5ed'], episode: ['5b0ad37026dc3db38194e286'], }; const response = await withLogin( request(api) .post('/tags') .send(data), ); expect(response).to.have.status(200); expect(Object.keys(response.body)).to.include.members(keys); expect(response.body.user._id).to.be.equal(authedUser); expect(response.body.name).to.be.equal(data.name); expect(response.body.article.map((a) => a._id)).to.have.all.members( data.article, ); expect(response.body.episode.map((e) => e._id)).to.have.all.members( data.episode, ); }); }); describe('updating existing tags', () => { it('should add article to a tag', async () => { const data = { article: '5b0ad37226dc3db38194e5ed' }; const response = await withLogin( request(api) .put(`/tags/${tag._id}`) .send(data), ); expect(response).to.have.status(200); expect(Object.keys(response.body)).to.include.members(keys); expect(response.body.user._id).to.be.equal(authedUser); expect(response.body.name).to.be.equal(tag.name); expect(response.body.article.map((a) => String(a._id))).to.include( data.article, ); }); it('should delete article from a tag', async () => { const data = { article: '5b0ad37226dc3db38194e5ec', action: 'remove' }; const response = await withLogin( request(api) .put(`/tags/${tag._id}`) .send(data), ); expect(response).to.have.status(200); expect(Object.keys(response.body)).to.include.members(keys); expect(response.body.user._id).to.be.equal(authedUser); expect(response.body.name).to.be.equal(tag.name); expect(response.body.article.map((a) => String(a._id))).to.not.include( data.article, ); }); it('should add episode to a tag', async () => { const data = { episode: '5b0ad37626dc3db38194fa73' }; const response = await withLogin( request(api) .put(`/tags/${tag._id}`) .send(data), ); expect(response).to.have.status(200); expect(Object.keys(response.body)).to.include.members(keys); expect(response.body.user._id).to.be.equal(authedUser); expect(response.body.name).to.be.equal(tag.name); expect(response.body.episode.map((e) => String(e._id))).to.include( data.episode, ); }); it('should delete episode from a tag', async () => { const data = { episode: '5b0ad37626dc3db38194fa73', action: 'remove' }; const response = await withLogin( request(api) .put(`/tags/${tag._id}`) .send(data), ); expect(response).to.have.status(200); expect(Object.keys(response.body)).to.include.members(keys); expect(response.body.user._id).to.be.equal(authedUser); expect(response.body.name).to.be.equal(tag.name); expect(response.body.episode.map((p) => String(p._id))).to.not.include( data.episode, ); }); it('should update tags name', async () => { const data = { name: 'newName' }; const response = await withLogin( request(api) .put(`/tags/${tag._id}`) .send(data), ); expect(response).to.have.status(200); expect(response.body.name).to.be.equal(data.name); }); it('should return 404 for invalid id', async () => { const response = await withLogin( request(api) .put('/tags/5b0f306d8e147f10deadbeef') .send({ name: 'invalid' }), ); expect(response).to.have.status(404); }); }); describe('deleting tags by id', () => { it('should return 204 for valid request', async () => { const response = await withLogin(request(api).delete(`/tags/${tag._id}`)); expect(response).to.have.status(204); expect(await Tag.findById(tag._id)).to.be.null; }); it('should return 404 for invalid id', async () => { const response = await withLogin( request(api).delete('/tags/5b0f306d8e147f10deadbeef'), ); expect(response).to.have.status(404); }); }); }); ================================================ FILE: api/test/controllers/user.js ================================================ import { expect, request } from 'chai'; import api from '../../src/server'; import User from '../../src/models/user'; import { withLogin, loadFixture, getMockClient, getMockFeed, dropDBs } from '../utils'; describe('User controller', () => { before(async () => { await dropDBs(); await loadFixture('initial-data'); }); let authUser = { email: 'logged_in_user@email.com', sub: '4342306d8e147f10f16aceaf', }; describe('retrieve user', () => { let user; before(async () => { await loadFixture('user'); user = await User.findOne({ email: authUser.email }); expect(user).to.not.be.null; }); after(async () => { await User.remove().exec(); }); describe('valid request', () => { it('should return 200 and the user resource, including the email field, when retrieving the authenticated user', async () => { const response = await withLogin( request(api).get(`/users/${user._id}`), authUser, ); expect(response).to.have.status(200); expect(response.body._id).to.equal(user._id.toString()); expect(response.body.email).to.not.be.false; expect(response.body.streamTokens).to.not.be.false; }); it('should return 200 and the user resource, excluding the email field, when retrieving another user', async () => { const anotherUser = await User.findOne({ email: 'another_user@email.com', }); const response = await withLogin( request(api).get(`/users/${anotherUser.id}`), authUser, ); expect(response).to.have.status(200); expect(response.body._id).to.equal(anotherUser._id.toString()); expect(response.body).to.not.have.an('email'); }); }); describe('invalid requests', () => { it('should return 404 if requested user does not exist', async () => { const nonExistingId = '5b10e1c601e9b8702ccfb974'; expect(await User.findOne({ _id: nonExistingId })).to.be.null; const response = await withLogin( request(api).get(`/users/${nonExistingId}`), authUser, ); expect(response).to.have.status(404); }); }); describe('authentication and authorization', () => {}); }); describe('remove user', () => { let user; beforeEach(async () => { await loadFixture('user'); user = await User.findOne({ email: authUser.email }); expect(user).to.not.be.null; }); afterEach(async () => { await User.remove().exec(); }); describe('valid request', () => { it('should return 204 and remove the user model', async () => { const response = await withLogin( request(api).delete(`/users/${user._id}`), authUser, ); expect(response).to.have.status(204); expect(await User.findOne({ _id: user._id })).to.be.null; }); }); describe('authentication and authorization', () => { it('should return 403 for unauthorized access to an existing user resource', async () => { const anotherUser = await User.findOne({ email: 'another_user@email.com', }); const response = await withLogin( request(api).delete(`/users/${anotherUser.id}`), authUser, ); expect(response).to.have.status(403); expect(await User.findOne({ _id: anotherUser._id })).to.not.be.null; }); it('should return 403 unauthorized access to a non-existing user resource', async () => { const nonExistingId = '5b10e1c601e9b8702ccfb974'; expect(await User.findOne({ _id: nonExistingId })).to.be.null; const response = await withLogin( request(api).delete(`/users/${nonExistingId}`), authUser, ); expect(response).to.have.status(403); }); }); }); describe('update user', () => { let user; beforeEach(async () => { await loadFixture('user'); user = await User.findOne({ email: authUser.email }); expect(user).to.not.be.null; }); afterEach(async () => { await User.remove().exec(); }); describe('valid requests', () => { it('should return 201 for valid update', async () => { const updatedUser = { email: 'valid.alternative@email.com', username: 'validusername', name: 'Valid Name', }; const response = await withLogin( request(api) .put(`/users/${user.id}`) .send(updatedUser), authUser, ); expect(response).to.have.status(201); expect(JSON.parse(response.text)).to.include(updatedUser); expect(await User.findOne({ _id: user.id })).to.include(updatedUser); }); }); describe('invalid requests', () => { it('should return 400 for invalid email', async () => { const bodies = [ { email: 'invalid.email.com', username: 'valid', name: 'Valid Name' }, { email: 'invalid@email', username: 'valid', name: 'Valid Name' }, { email: '@invalid.email.com', username: 'valid', name: 'Valid Name', }, ]; const requests = bodies.map(body => withLogin( request(api) .put(`/users/${user.id}`) .send(body), authUser, ), ); for (const response of await Promise.all(requests)) { expect(response).to.have.status(400); } }); it('should return 400 for invalid username', async () => { const response = await withLogin( request(api) .put(`/users/${user.id}`) .send({ email: 'logged_in_user@email.com', username: 'invalid username', name: 'Valid Name', }), authUser, ); expect(response).to.have.status(400); }); it('should return 409 for existing username', async () => { const anotherUser = await User.findOne({ email: 'another_user@email.com', }); const response = await withLogin( request(api) .put(`/users/${user.id}`) .send({ email: user.email, username: anotherUser.username, name: user.name, }), authUser, ); expect(response).to.have.status(409); }); it('should return 409 for existing email', async () => { const anotherUser = await User.findOne({ email: 'another_user@email.com', }); const response = await withLogin( request(api) .put(`/users/${user.id}`) .send({ email: anotherUser.email, username: user.username, name: user.name, }), authUser, ); expect(response).to.have.status(409); }); }); describe('authentication and authorization', () => { it('should return 403 for unauthorized access to an existing user resource', async () => { const anotherUser = await User.findOne({ email: 'another_user@email.com', }); const response = await withLogin( request(api) .put(`/users/${anotherUser.id}`) .send({}), authUser, ); expect(response).to.have.status(403); expect(await User.findOne({ _id: anotherUser._id })).to.not.be.null; }); it('should return 403 for unauthorized access to a non-existing user resource', async () => { const nonExistingId = '5b10e1c601e9b8702ccfb974'; expect(await User.findOne({ _id: nonExistingId })).to.be.null; const response = await withLogin( request(api) .put(`/users/${nonExistingId}`) .send({}), authUser, ); expect(response).to.have.status(403); }); }); }); }); ================================================ FILE: api/test/data/404.opml ================================================ Subscriptions ================================================ FILE: api/test/data/discovery/case.html ================================================ RSSFinder

RSSFinder

================================================ FILE: api/test/data/discovery/fail.xml ================================================ The Is Not The Feed You're Looking For

Move Along. Move Along.

================================================ FILE: api/test/data/discovery/index.html ================================================ RSSFinder

RSSFinder

================================================ FILE: api/test/data/discovery/nofavicon.html ================================================ RSSFinder

RSSFinder

================================================ FILE: api/test/data/discovery/nourl.xml ================================================ <![CDATA[Index - 24óra]]> http://index.hu/assets/images/rss_logo.gif Index http://index.hu/ 144 35 http://index.hu/24ora/ hu-HU http://backend.userland.com/rss Thu, 24 Dec 2015 12:19:00 +0100 <![CDATA[Támogatást kaphatnak a bölcsődék a dolgozók fizetéséhez]]> http://index.hu/gazdasag/2015/12/24/tamogatast_kaphatnak_a_bolcsodek_a_dolgozok_fizetesehez/ Thu, 24 Dec 2015 12:19:00 +0100 http://index.hu/gazdasag/2015/12/24/tamogatast_kaphatnak_a_bolcsodek_a_dolgozok_fizetesehez/ ================================================ FILE: api/test/data/discovery/rss.xml ================================================ <![CDATA[CNN.com - RSS Channel - App International Edition]]>https://www.cnn.com/app-international-edition/index.htmlhttp://i2.cdn.turner.com/cnn/2015/images/09/24/cnn.digital.pngCNN.com - RSS Channel - App International Editionhttps://www.cnn.com/app-international-edition/index.htmlcoredev-bumblebeeWed, 25 Jul 2018 19:58:01 GMTWed, 25 Jul 2018 19:29:10 GMT10<![CDATA[Trump blasts Cohen over tape disclosure]]>https://www.cnn.com/collections/intl-trump-cohen/https://www.cnn.com/collections/intl-trump-cohen/Wed, 25 Jul 2018 19:54:18 GMT<![CDATA[Cars turned to molten metal as Greek wildfires wipe villages off the map]]>https://www.cnn.com/2018/07/25/europe/greece-wildfires-missing-intl/index.htmlhttps://www.cnn.com/2018/07/25/europe/greece-wildfires-missing-intl/index.htmlWed, 25 Jul 2018 19:32:28 GMT<![CDATA[Evidence detected of lake beneath the surface of Mars]]>https://www.cnn.com/2018/07/25/world/mars-subsurface-water-lake-evidence/index.htmlhttps://www.cnn.com/2018/07/25/world/mars-subsurface-water-lake-evidence/index.htmlWed, 25 Jul 2018 16:47:48 GMT<![CDATA[Putin's Washington visit delayed, White House says]]>https://www.cnn.com/2018/07/25/politics/trump-putin-meeting-delay/index.htmlhttps://www.cnn.com/2018/07/25/politics/trump-putin-meeting-delay/index.htmlWed, 25 Jul 2018 19:47:30 GMT<![CDATA[Pakistan election: 31 dead in bomb attack as voting continues]]>https://cnn.it/2LGOo57https://cnn.it/2LGOo57<![CDATA[Was nerve agent left in multiple places in UK?]]>https://www.cnn.com/2018/07/24/europe/novichok-poisoning-investigation-intl/index.htmlhttps://www.cnn.com/2018/07/24/europe/novichok-poisoning-investigation-intl/index.htmlWed, 25 Jul 2018 12:57:41 GMT<![CDATA[Auto boss Sergio Marchionne dies]]>https://money.cnn.com/2018/07/25/news/companies/sergio-marchionne-obit/index.htmlhttps://money.cnn.com/2018/07/25/news/companies/sergio-marchionne-obit/index.html<![CDATA[Hundreds missing after dam collapse floods towns]]>https://www.cnn.com/2018/07/25/asia/laos-dam-flood-intl/index.htmlhttps://www.cnn.com/2018/07/25/asia/laos-dam-flood-intl/index.htmlWed, 25 Jul 2018 10:59:27 GMT<![CDATA[Trump's Hollywood star smashed to pieces]]>https://www.cnn.com/2018/07/25/politics/trump-walk-of-fame-star-smash/index.htmlhttps://www.cnn.com/2018/07/25/politics/trump-walk-of-fame-star-smash/index.htmlWed, 25 Jul 2018 17:19:53 GMT<![CDATA[Vaccine crisis outrage: China calls for calm]]>https://www.cnn.com/2018/07/25/asia/china-vaccine-censorship-intl/index.htmlhttps://www.cnn.com/2018/07/25/asia/china-vaccine-censorship-intl/index.htmlWed, 25 Jul 2018 13:19:45 GMT<![CDATA[Syria street market suicide bombing kills 38 ]]>https://www.cnn.com/2018/07/25/middleeast/syria-bombing-intl/index.htmlhttps://www.cnn.com/2018/07/25/middleeast/syria-bombing-intl/index.htmlWed, 25 Jul 2018 19:50:23 GMT<![CDATA[Demi Lovato in hospital for apparent drug overdose]]>https://www.cnn.com/2018/07/24/entertainment/demi-lovato-hospitalized/index.htmlhttps://www.cnn.com/2018/07/24/entertainment/demi-lovato-hospitalized/index.htmlWed, 25 Jul 2018 16:30:43 GMT<![CDATA[Viagra trial on pregnant women stopped after 11 babies die]]>https://www.cnn.com/2018/07/24/health/viagra-clinical-trial-stopped-baby-deaths-bn/index.htmlhttps://www.cnn.com/2018/07/24/health/viagra-clinical-trial-stopped-baby-deaths-bn/index.htmlWed, 25 Jul 2018 19:45:55 GMT<![CDATA[Swedish student stops deportation of Afghan man with Facebook live protest ]]>https://www.cnn.com/2018/07/25/europe/swedish-deportation-protest-intl/index.htmlhttps://www.cnn.com/2018/07/25/europe/swedish-deportation-protest-intl/index.htmlWed, 25 Jul 2018 14:15:09 GMT<![CDATA[30-ton disco ball destined for Nevada desert]]>https://www.cnn.com/style/article/big-burning-man-reflective-orb/index.htmlhttps://www.cnn.com/style/article/big-burning-man-reflective-orb/index.htmlFri, 06 Jul 2018 09:41:30 GMT<![CDATA[White House stops announcing calls with world leaders]]>https://www.cnn.com/2018/07/24/politics/foreign-leaders-call-white-house/index.htmlhttps://www.cnn.com/2018/07/24/politics/foreign-leaders-call-white-house/index.htmlWed, 25 Jul 2018 05:06:54 GMT<![CDATA[US airlines give in to China's demands over Taiwan]]>https://money.cnn.com/2018/07/25/news/companies/taiwan-china-airlines/index.htmlhttps://money.cnn.com/2018/07/25/news/companies/taiwan-china-airlines/index.html<![CDATA[New images show N Korea dismantling test site]]>https://www.cnn.com/videos/politics/2018/07/24/north-korea-dismantling-test-site-starr-dnt-lead-vpx.cnnhttps://www.cnn.com/videos/politics/2018/07/24/north-korea-dismantling-test-site-starr-dnt-lead-vpx.cnnTue, 24 Jul 2018 21:15:03 GMT<![CDATA[Roma furious over $49M transfer gazumping ]]>https://www.cnn.com/2018/07/25/football/roma-malcom-barcelona-bordeaux-transfer-spt-intl/index.htmlhttps://www.cnn.com/2018/07/25/football/roma-malcom-barcelona-bordeaux-transfer-spt-intl/index.htmlWed, 25 Jul 2018 09:46:59 GMT<![CDATA[Tour de France riders accidentally tear-gassed]]>https://www.cnn.com/2018/07/24/sport/tour-de-france-protesters-pepper-spray/index.htmlhttps://www.cnn.com/2018/07/24/sport/tour-de-france-protesters-pepper-spray/index.htmlTue, 24 Jul 2018 15:29:44 GMT<![CDATA[Massive iceberg threatens small village]]>https://www.cnn.com/2018/07/23/europe/greenland-iceberg-intl/index.htmlhttps://www.cnn.com/2018/07/23/europe/greenland-iceberg-intl/index.htmlWed, 25 Jul 2018 16:46:58 GMT<![CDATA[US intel warns of Russian threat to power grid]]>https://www.cnn.com/videos/politics/2018/07/24/us-intel-warning-russia-cyberattack-threats-to-power-grid-sciutto-tsr-vpx.cnnhttps://www.cnn.com/videos/politics/2018/07/24/us-intel-warning-russia-cyberattack-threats-to-power-grid-sciutto-tsr-vpx.cnnTue, 24 Jul 2018 22:10:17 GMT<![CDATA['Nobody needs to die of AIDS anymore,' Elton John says]]>https://www.cnn.com/2018/07/24/health/elton-john-aids-conference-amsterdam-intl/index.htmlhttps://www.cnn.com/2018/07/24/health/elton-john-aids-conference-amsterdam-intl/index.htmlWed, 25 Jul 2018 10:14:09 GMT<![CDATA[Thai soccer boys to become monks]]>https://www.cnn.com/2018/07/24/asia/thai-soccer-boys-monks-intl/index.htmlhttps://www.cnn.com/2018/07/24/asia/thai-soccer-boys-monks-intl/index.htmlTue, 24 Jul 2018 09:03:59 GMT<![CDATA[Man accused of supporting ISIS in Syria transferred to US for prosecution]]>https://www.cnn.com/2018/07/24/politics/us-citizens-accused-isis-transferred/index.htmlhttps://www.cnn.com/2018/07/24/politics/us-citizens-accused-isis-transferred/index.htmlWed, 25 Jul 2018 01:26:35 GMT<![CDATA[White House edits out Putin's support for Trump]]>https://www.cnn.com/videos/politics/2018/07/25/white-house-changes-trump-putin-helsinki-summit-transcript-newday-vpx.cnnhttps://www.cnn.com/videos/politics/2018/07/25/white-house-changes-trump-putin-helsinki-summit-transcript-newday-vpx.cnnWed, 25 Jul 2018 14:29:51 GMT<![CDATA[Ivanka Trump is shutting down her company]]>https://www.cnn.com/2018/07/24/politics/ivanka-trump-brand-company/index.htmlhttps://www.cnn.com/2018/07/24/politics/ivanka-trump-brand-company/index.htmlTue, 24 Jul 2018 23:56:10 GMT<![CDATA[Tesla's real problem is its scramble for cash]]>http://money.cnn.com/2018/07/23/investing/tesla-elon-musk-cash-debt/index.htmlhttp://money.cnn.com/2018/07/23/investing/tesla-elon-musk-cash-debt/index.htmlMon, 23 Jul 2018 18:47:30 GMT<![CDATA[Southern Europe's huge, hidden lake]]>https://www.cnn.com/travel/article/lake-skadar-montenegro-albania/index.htmlhttps://www.cnn.com/travel/article/lake-skadar-montenegro-albania/index.htmlWed, 25 Jul 2018 09:26:35 GMT<![CDATA[Guess who wants to gut the Endangered Species Act]]>https://www.cnn.com/2018/07/24/opinions/why-trump-wants-to-gut-endangered-species-act-filipovic/index.htmlhttps://www.cnn.com/2018/07/24/opinions/why-trump-wants-to-gut-endangered-species-act-filipovic/index.htmlTue, 24 Jul 2018 21:20:30 GMT<![CDATA[Famed 'Ferris Bueller' Ferrari up for auction]]>https://www.cnn.com/videos/cnnmoney/2018/07/24/ferris-bueller-ferrari-replica-for-sale-newsource-orig.cnnhttps://www.cnn.com/videos/cnnmoney/2018/07/24/ferris-bueller-ferrari-replica-for-sale-newsource-orig.cnnTue, 24 Jul 2018 16:17:48 GMT<![CDATA[China cuts taxes to protect economy against trade war]]>http://money.cnn.com/2018/07/24/news/economy/economy-of-china-stimulus/index.htmlhttp://money.cnn.com/2018/07/24/news/economy/economy-of-china-stimulus/index.htmlTue, 24 Jul 2018 12:48:22 GMT<![CDATA[The feminist DJs taking back the night ]]>https://www.cnn.com/2018/07/24/africa/uganda-feminist-djs-asequals-intl/index.htmlhttps://www.cnn.com/2018/07/24/africa/uganda-feminist-djs-asequals-intl/index.htmlTue, 24 Jul 2018 07:18:32 GMT<![CDATA[The 15-year-old off-road sensation]]>https://www.cnn.com/2018/07/25/sport/mia-chapman-red-bull-off-road-racing/index.htmlhttps://www.cnn.com/2018/07/25/sport/mia-chapman-red-bull-off-road-racing/index.htmlWed, 25 Jul 2018 15:26:32 GMT<![CDATA[Hidden secrets in buildings]]>https://www.cnn.com/style/article/facial-recognition-architecture/index.htmlhttps://www.cnn.com/style/article/facial-recognition-architecture/index.htmlWed, 25 Jul 2018 08:24:34 GMT<![CDATA[Crazy $1 billion theme park opens]]>https://www.cnn.com/travel/article/warner-bros-world-abu-dhabi/index.htmlhttps://www.cnn.com/travel/article/warner-bros-world-abu-dhabi/index.htmlTue, 24 Jul 2018 18:02:04 GMT<![CDATA[Why these kids are suing their governments]]>https://www.cnn.com/2018/07/24/health/youth-climate-march/index.htmlhttps://www.cnn.com/2018/07/24/health/youth-climate-march/index.htmlWed, 25 Jul 2018 02:51:04 GMT<![CDATA[Top Instagram influencer says: Get a real job]]>https://money.cnn.com/2018/07/24/technology/fat-jewish-swish-beverage-canned-wine/index.htmlhttps://money.cnn.com/2018/07/24/technology/fat-jewish-swish-beverage-canned-wine/index.html<![CDATA[Open champ underestimates wealth -- by nearly $12M]]>https://www.cnn.com/2018/07/24/golf/francesco-molinari-quiz-open-championship-golf-spt-intl/index.htmlhttps://www.cnn.com/2018/07/24/golf/francesco-molinari-quiz-open-championship-golf-spt-intl/index.htmlTue, 24 Jul 2018 11:02:26 GMT<![CDATA[Five great American buildings you'll never see]]>https://www.cnn.com/style/article/america-lost-buildings/index.htmlhttps://www.cnn.com/style/article/america-lost-buildings/index.htmlTue, 24 Jul 2018 05:43:33 GMT<![CDATA[Photos capture shifts in society]]>https://www.cnn.com/style/article/aperture-summer-open-exhibition/index.htmlhttps://www.cnn.com/style/article/aperture-summer-open-exhibition/index.htmlTue, 24 Jul 2018 10:13:37 GMT<![CDATA[What your sexual fantasies say about you]]>https://www.cnn.com/2018/07/24/health/sex-fantasies-kerner/index.htmlhttps://www.cnn.com/2018/07/24/health/sex-fantasies-kerner/index.htmlTue, 24 Jul 2018 06:25:15 GMT<![CDATA[US President: 'What kind of a lawyer would tape a client? So sad!']]>https://www.cnn.com/2018/07/25/politics/donald-trump-twitter-michael-cohen/index.htmlhttps://www.cnn.com/2018/07/25/politics/donald-trump-twitter-michael-cohen/index.htmlWed, 25 Jul 2018 16:37:32 GMT<![CDATA[Caught in a lie, Trump turns to conspiracy theory]]>https://www.cnn.com/2018/07/25/politics/trump-cohen-tape-recording/index.htmlhttps://www.cnn.com/2018/07/25/politics/trump-cohen-tape-recording/index.htmlWed, 25 Jul 2018 17:17:45 GMT<![CDATA[Trump on tape discussing buying rights to Playboy model's story]]>https://www.cnn.com/2018/07/24/politics/michael-cohen-donald-trump-tape/index.htmlhttps://www.cnn.com/2018/07/24/politics/michael-cohen-donald-trump-tape/index.htmlWed, 25 Jul 2018 12:52:17 GMT<![CDATA[Listen to the conversation for yourself]]>https://www.cnn.com/videos/politics/2018/07/24/cohen-trump-audio-recording-cuomo-vpx.cnnhttps://www.cnn.com/videos/politics/2018/07/24/cohen-trump-audio-recording-cuomo-vpx.cnnWed, 25 Jul 2018 02:04:21 GMT<![CDATA[The night Cohen went to war with Trump]]>https://www.cnn.com/2018/07/25/politics/donald-trump-michael-cohen-tape-recording/index.htmlhttps://www.cnn.com/2018/07/25/politics/donald-trump-michael-cohen-tape-recording/index.htmlWed, 25 Jul 2018 14:09:04 GMT<![CDATA[Pakistan election: 31 dead as bomb attack mars voting]]>https://www.cnn.com/2018/07/24/asia/pakistan-election-intl/index.htmlhttps://www.cnn.com/2018/07/24/asia/pakistan-election-intl/index.htmlWed, 25 Jul 2018 19:41:07 GMT<![CDATA[Pompeo testifies on Russia and N. Korea]]>https://www.cnn.com/politics/live-news/pompeo-russia-north-korea-senate-hearing/index.htmlhttps://www.cnn.com/politics/live-news/pompeo-russia-north-korea-senate-hearing/index.htmlWed, 25 Jul 2018 19:41:32 GMT<![CDATA[Politician: LGBT community 'unproductive']]>https://www.cnn.com/2018/07/25/asia/japanese-politician-criticism-intl/index.htmlhttps://www.cnn.com/2018/07/25/asia/japanese-politician-criticism-intl/index.htmlWed, 25 Jul 2018 08:33:39 GMT ================================================ FILE: api/test/data/feed/90.cx ================================================ 九零创新实验室 https://www.90.cx Hostker LLC Wed, 06 Jun 2018 18:34:55 +0000 zh-CN hourly 1 https://wordpress.org/?v=4.9.6 【安全公告】Intel 处理器安全漏洞公告 https://www.90.cx/intel-bug/ https://www.90.cx/intel-bug/#comments Mon, 08 Jan 2018 18:44:19 +0000 https://www.90.cx/?p=236 继续阅读【安全公告】Intel 处理器安全漏洞公告]]> 最近 Intel 被爆出芯片硬件设计层面的漏洞,可能导致系统信息泄露、应用跨界访问内核数据等问题。由于涉及到的 CPU 产品线涵盖 1995 年出厂的几乎所有 Intel CPU 芯片,不可能进行全球召回处理,因此只能在系统层打补丁修复这一问题。针对本次安全事件我们已经安排好运算节点修复日程表,具体时间细节请阅读近期群发的短信、邮件通知。本文将对漏洞补丁做汇总方便用户更新虚拟机系统。

漏洞编号

  • CVE-2017-5753
  • CVE-2017-5715
  • CVE-2017-5754

漏洞描述

现代 CPU 通常使用「预测执行」(Speculative Execution)和「分支预测」(Indirect Branch Prediction)技术实现对处理器计算资源的最大化利用。但由于这两种技术在实现上存在安全缺陷,无法通过正确判断将低权限的应用程序访存与内核高权限的访问分开,使得攻击者可以绕过内存访问的安全隔离边界,在内核中读取操作系统和其他程序的内存数据,造成敏感信息泄露,根据获取到的数据,可能会导致用户的数据隐私泄露、登陆凭证被攻击者窃取。具体信息如下:

  1. Meltdown漏洞利用破坏了用户程序和操作系统之间的基本隔离,允许攻击者未授权访问其他程序和操作系统的内存,获取其他程序和操作系统的敏感信息。
  2. Spectre 漏洞利用破坏了不同应用程序之间的安全隔离,允许攻击者借助于无错程序(Error-Free)来获取敏感信息。

修复方法

运算节点我们会按照时间表逐步测试和安装补丁,预计 IO 性能会下降 5%-30%根据我们的业务场景实测计算性能不存在变化,IO 性能同比下降大约 0.1%。由于本次漏洞利用要求条件较高,需要首先持有本地用户权限进行内存操作才有可能产生问题。因此虚拟机用户可根据业务场景自行判断是否需要安装补丁。以下为目前我们平台提供的系统对应的补丁列表供参考(最后更新 2 月 7 日 22:00):

LInux 补丁
  • CentOS 6 x86_64 已修复所有漏洞,yum update 重启后 kenel 版本 >= 2.6.32-696.18.7.el6 即可修复;
  • CentOS 7 x86_64 已修复所有漏洞,yum update 重启后 kenel 版本 >= 3.10.0-693.11.6.el7 即可修复;
  • Debian 8 x86_64 仅修复 CVE-2017-5754,apt-get update && apt-get upgrade 重启后 kernel 版本 >= 3.16.51-3+deb8u1 即可修复;
  • Ubuntu 16 x86_64 已修复所有漏洞,apt-get update && apt-get upgrade && apt-get dist-upgrade 重启后 kernel 版本 >= 4.4.0-112 即可修复。

※ 以上版本为我们所有机房更新源的同步情况,将会每天更新直到全部发布。

Windows 补丁
  • windows server 2003 凉透了,建议丢掉升级到 2008。
  • windows server 2008 R2 需要手工安装不能自动升级,补丁下载地址
  • windows server 2012 R2 需要手工安装不能自动升级,补丁下载地址
  • 本次微软还发布了其它补丁,可通过自动更新安装其它补丁。但是上述补丁需要手工安装。并且补丁可能与某些反病毒软件冲突。
]]>
https://www.90.cx/intel-bug/feed/ 3
Hostker 香港区域开源镜像站上线啦 https://www.90.cx/hostker-hk-mirrors/ https://www.90.cx/hostker-hk-mirrors/#comments Fri, 25 Nov 2016 13:52:57 +0000 https://www.90.cx/?p=207 继续阅读Hostker 香港区域开源镜像站上线啦]]> 现在起新开的运算型云服务器将会默认启用我们的香港区域内网开源镜像站进行更新,目前我们已经同步 CentOS 6 / 7 ,Ubuntu 16,Debian 8 这几个系统的主要更新源。每日凌晨 1 时与上游同步。

老用户可通过以下命令使用内网更新源:

CentOS 6

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget http://mirrors-hk.hostker.net/.help/CentOS6-Base-Hostker.repo -O/etc/yum.repos.d/CentOS6-Base-Hostker.repo

CentOS 7

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget http://mirrors-hk.hostker.net/.help/CentOS7-Base-Hostker.repo -O/etc/yum.repos.d/CentOS7-Base-Hostker.repo

Ubuntu 16

mv /etc/apt/sources.list /etc/apt/sources.list.backup
cat>/etc/apt/sources.list<<EOF
deb http://mirrors-hk.hostker.net/ubuntu/ xenial main restricted universe multiverse
deb http://mirrors-hk.hostker.net/ubuntu/ xenial-security main restricted universe multiverse
deb http://mirrors-hk.hostker.net/ubuntu/ xenial-updates main restricted universe multiverse
deb http://mirrors-hk.hostker.net/ubuntu/ xenial-proposed main restricted universe multiverse
deb http://mirrors-hk.hostker.net/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors-hk.hostker.net/ubuntu/ xenial main restricted universe multiverse
deb-src http://mirrors-hk.hostker.net/ubuntu/ xenial-security main restricted universe multiverse
deb-src http://mirrors-hk.hostker.net/ubuntu/ xenial-updates main restricted universe multiverse
deb-src http://mirrors-hk.hostker.net/ubuntu/ xenial-proposed main restricted universe multiverse
deb-src http://mirrors-hk.hostker.net/ubuntu/ xenial-backports main restricted universe multiverse
EOF

Debian 8

mv /etc/apt/sources.list /etc/apt/sources.list.backup
cat>/etc/apt/sources.list<<EOF
deb http://mirrors-hk.hostker.net/debian/ jessie main non-free contrib
deb http://mirrors-hk.hostker.net/debian/ jessie-updates main non-free contrib
deb http://mirrors-hk.hostker.net/debian/ jessie-backports main non-free contrib
deb http://mirrors-hk.hostker.net/debian-security/ jessie/updates main non-free contrib
deb-src http://mirrors-hk.hostker.net/debian/ jessie main non-free contrib
deb-src http://mirrors-hk.hostker.net/debian/ jessie-updates main non-free contrib
deb-src http://mirrors-hk.hostker.net/debian/ jessie-backports main non-free contrib
deb-src http://mirrors-hk.hostker.net/debian-security/ jessie/updates main non-free contrib
EOF

]]>
https://www.90.cx/hostker-hk-mirrors/feed/ 1
用 PHP 实现 WebSocket 服务 https://www.90.cx/php-websocket/ https://www.90.cx/php-websocket/#comments Tue, 19 Jul 2016 08:07:04 +0000 https://www.90.cx/?p=162 继续阅读用 PHP 实现 WebSocket 服务]]> 聊天室、游戏等场景躲避不了服务器主动下发消息。通常 PHP 的生命周期都是在一个 HTTP 请求结束之后就会跟着结束,在连接没有断开的情况下,一个请求就会咬住一个进程不放开。这种情况用阻塞 HTTP 请求来等待服务器下发消息就显得很蠢。不过作为世界上最好的语言,PHP 当然是有解的,Hostker 为开发者实现了 WebSocket 服务。

WebSocket 是基于 HTTP 的一个协议,用于双向的实时通讯,以下简称 WS 服务。由于需要启动进程监听一个特定的端口,还需要高性能的服务支撑,我们选择了 Swoole 扩展进行开发。Swoole 是一个 Server 框架,实现了多进程、事件驱动、异步、Task 等功能。

启动 WS 服务之后,主进程会读取 Hostker 上面所有开通了 WS 服务的 APP 对应配置并保存在可共享的内存中,同时派生出一定数量的 Worker 进程和 Task 进程。

当 PHP 需要主动推送消息时,会通过一个内部接口将消息发给 WS 主进程,主进程会根据 Worker 的繁忙程度投递到最闲的 Worker 进程,Worker 会对这一请求进行分析,单发、群发、鉴权等,没有问题的话异步投递给 Task 任务进行消息推送。

当用户连接或者断开 WS 时,主进程同样会根据繁忙程度选择 Worker 进程进行绑定,并异步投递给 Task 任务通知给 PHP。

有开发者申请开通或者关闭 WS 服务的时候,内部会通过一个接口更新到共享内存中,供 Task 任务和 Worker 进程鉴权使用。

Task 任务作用就是上面提到的两个,下发消息和回报上下线状态,在接到新任务之后会立即执行。

至此,本博客的主线内容全部更新完毕。今后会根据情况不定期更新一些技术内容。

]]>
https://www.90.cx/php-websocket/feed/ 6
httpoxy 漏洞在 PHP 环境的说明 https://www.90.cx/httpoxy/ https://www.90.cx/httpoxy/#respond Tue, 19 Jul 2016 05:28:22 +0000 https://www.90.cx/?p=163 继续阅读httpoxy 漏洞在 PHP 环境的说明]]> 这两天一直有小伙伴询问这个漏洞的问题,在这里用团队博客解释一下。这个漏洞对中国大陆的 PHP 用户几乎不存在影响。

在 PHP 环境,HTTP 请求的 Header 会加上 HTTP_ 前缀并放到环境变量和 $_SERVER、$_ENV 中。因此如果发出 Porxy 头部,就会变成 HTTP_PROXY 增加到 PHP 的环境变量中。

极个别的 HTTP 客户端实现有可能会直接读取环境变量的 HTTP_PROXY 头部作为代理,从而导致 PHP 在访问外部 HTTP 的时候数据被绕到这个指定的代理上。目前已知的受影响的库有 Guzzle (已在 4 天前修复)、Artax(本文发布的 13 小时前修复),直接在 PHP 中使用 curl、file_get_contents 并没有任何影响。

以上,就是这个漏洞对 PHP 造成的问题。可以说在中国大陆除了 Composer 依赖(Laravel 等)之外应该没什么人使用那两个库,即使有问题及时升级也可以解决,因此对主流开源程序影响几乎为0。

※ 关于 Python、Golang,内置的 HTTP Client 就有影响,具体参考漏洞官方说明

]]>
https://www.90.cx/httpoxy/feed/ 0
PHP 沙箱环境介绍 https://www.90.cx/hostker-php-sandbox/ https://www.90.cx/hostker-php-sandbox/#respond Mon, 18 Jul 2016 16:36:30 +0000 https://www.90.cx/?p=137 继续阅读PHP 沙箱环境介绍]]> 沙箱是我们的命根子,用户之间需要有一套比较完善的隔离方案。因此我们的沙箱做了这些事:

  • 文件权限隔离
  • 数据库沙箱
  • CPU 时间统计
  • 网络访问沙箱
  • 缓冲区调整
  • 危险函数拦截

下面来分别说说。

文件权限隔离

不同的虚拟主机之间的数据,原则上是无法互访的。大多数情况下我们可以用 open_basedir 进行隔离,而 PHP 在某些情况下会绕过这一隔离,因此我们的沙箱环境覆盖到了 open_basedir 无法保护到的部分。

数据库沙箱

拿到了用户名密码,再买个同网络的主机,是不是就能随便黑人家数据库了?在其他家可以,在Hostker&主机壳是行不通的。我们将数据库的权限精确匹配到每个用户开通的主机上,相同用户名下的主机才可互访数据库,不同用户之间即使持有正确用户名密码也无法连上数据库。

既然做了沙箱,就顺便把数据库查询次数和时间统计上,放在 HTTP Header 中,有兴趣的读者可以根据这些数据进行程序优化。

CPU 时间统计

如何确认一个用户所占用的计算资源?按运行时间?大多数情况下,时间有可能是消耗在网络 IO 上,因此对用户按请求时间计费并不公平。我们在沙箱上完成了系统态和用户态的 CPU 时间统计,并放在 HTTP Header 中供开发者参考。

网络访问沙箱

使用过 DEDEcms 的用户应该对 PHPDDOS 不陌生,这程序漏洞太多了,黑客都有一套自动化扫描入侵的程序,插一个 PHPDDOS 文件,死循环对某个攻击目标发送 HTTP 请求。这就非常危险了,很容易把服务器出口带宽吃光。

另外,黑客有可能手痒痒希望扫描我们的内网窥探 CDN 的分布情况。

针对这些问题我们的沙箱对全部的网络访问进行了一次过滤,对于有问题的请求会直接拦截掉,确保不会消耗大量出口带宽,并保证内网的节点安全。

缓冲区调整

上面提到的东西都需要在 Header 中出现,那么万一用户提前 flush 了数据怎么处理?我们的沙箱会拦截用户的输出行为,全部重定向到缓冲区中,直到一个请求彻底完成,才发送带有 CPU 时间、数据库时间、数据库查询次数的 Header,再将缓冲区的数据作为 Body 发出。

危险函数拦截

PHP 并不适合长时间运行,因此我们对 PHP 的运行时间有所限制。可是万一用户使用 set_timeout_limit() 进行调整怎么办?直接禁用函数?甩一脸错误?

针对比较危险的函数行为,我们会首先判断这一行为的合法性,例如 sleep、usleep 函数,对于小于 5 秒的相对合理的暂停是没问题的,如果超过 5 秒才会返回异常。而对于 set_timeout_limit() 我们判断是超过 60 秒就拒绝这一修改行为,小于 60 秒则放行。

但是对于大多数使用开源程序的用户,他们最害怕见到的就是错误,如果修改失败就会产生 Warning,因此我们函数返回的是 true,看起来是成功了,实际上配额还是我们给用户分配的默认配额。这样用户体验就会稍微好一点。

以上就是我们 PHP 沙箱的主要功能,还有更多细节这里不方便展开说明。

]]>
https://www.90.cx/hostker-php-sandbox/feed/ 0
对比 PHP 各种运行模式 https://www.90.cx/php-mode/ https://www.90.cx/php-mode/#comments Mon, 18 Jul 2016 07:36:45 +0000 https://www.90.cx/?p=132 继续阅读对比 PHP 各种运行模式]]> 比较主流的 PHP 运行模式有三种,分别是:

  1. Apache + mod_php 直接挂载模块运行代码,无进程通讯;
  2. Nginx + php-fpm 通过 FastCGI 处理进程间通讯;
  3. Cpanel、DirectAdmin 所使用的 suPHP 相当于 CGI 模式。

Hostker&主机壳选择的是第一种,使用服务器、VPS 的团队通常选择第二种,虚拟主机厂商基本上都是第三种。我们先了解他们的运行原理,再对比一下优点和缺点,最后看性能。想直接查看性能对比可以直接拉到本文最下面。

Apache + mod_php

几年前 LAMP(Linux Apache MySQL PHP)非常火爆,然而现在使用 Apache 似乎有一点非主流的味道。大众对 Apache 的印象是速度慢,配置难。不过到了 Apache 2.4,性能已经基本和 Nginx 相当。

我们选择 Apache 的主要原因是他可以直接将 PHP 当作一个模块挂载在进程中运行,选择 Prefork 预派生进程模式,Apache 会维护一个进程池,提前启动一群 httpd 进程等待请求进来,可以直接在进程中运行 PHP 并返回处理结果。处理完成后进程不会退出,而是继续等待下一个请求。

结合 Apache 的 .htaccess 可以实现无需重启即可重载绝大多数配置,可以让用户非常自由的定制各项配置参数。因此这是性能最好、配置最灵活的方案。

不过这样运行的进程全部的系统用户都是同一个,安全方面就需要十分谨慎,其它虚拟主机厂商无法使用的原因是用户可以非常轻松的跨到其它虚拟主机去读数据,非常危险。因此我们在 PHP 层面开发了一套沙箱解决这一问题,具体细节移步《Hostker 沙箱环境介绍》阅读。

Nginx + php-fpm

在大多数人眼中,Nginx 和 Apache 扮演的角色是一样的。其实不是,Nginx 是一个反向代理服务,而 Apache 是一个可以直接运行 PHP 的 HTTP 服务。也就是说,除了 PHP 之外,NodeJS、Golang 等语言在运行的时候,都是需要自行处理 HTTP 或者 FastCGI 协议的,Nginx 只管将 HTTP 请求或者是 FastCGI 转发给其它进程。而 Apache 则是直接在自己进程内部完成 PHP 的运行并直接返回结果。

因此 Nginx 在运行 PHP 时,需要 PHP 自己启动 php-fpm 管理一个进程池,并监听在一个 TCP 端口(最常见的 9000 / 9001)或者 Unix Socket 等待 Nginx 通过 FastCGI 转发请求过来。所以性能方面无论如何都躲避不了进程通讯的 IO 性能消耗,这点不如 Apache 性能好。

不过鉴于大多数运维都比较熟悉 Nginx 的配置文件,配置项相比 Apache 也稍微简单一些,因此一些自己维护服务器的运维会选择这个模式。

suPHP(类似 CGI)

大概 20 年前,CGI 是最流行的运行动态网站所使用的接口标准。在一个请求到达 HTTP 服务(Apache)之后,HTTP 服务会根据 CGI 配置通过命令启动一个进程处理这一请求,处理完成之后再关闭进程。

相信读到这里,我不需要做性能对比,读者就明白这肯定是性能最差的方案。那么虚拟主机厂商为什么都喜欢这个模式?因为使用 Cpanel、DirectAdmin 等方案的他们没有比较好的用户隔离方法,只能通过新建不同的 Linux 系统用户运行 PHP 来隔开用户。

suPHP 模块可以实现当请求到达 Apache 之后,判断这个虚拟主机归属哪个用户,通过对应用户启动一个 PHP 进程来处理,并在处理完成之后关闭这个进程。因此是市面上虚拟主机最常用的模式。

性能对比

以下对比使用的配置是单核 768M 内存 512M Swap 的虚拟机,测试使用的是 phpinfo() 函数返回的结果有 80 KB 长度,这一函数在运行过程中会扫描 PHP 的所有环境配置项,因此能比较直观的看出初始化和进程通讯所产生的性能影响。

PHP 版本是 7.0.8,Apache 和 Nginx 版本在截图中。进程配置(Apache 和 php-fpm)是统一初始化 15 个进程,最大限制 100 个进程。

使用测试工具是 ab,发起 100 并发,总计 1000 次请求。

Apache + mod_php 测试结果是每秒完成 412 次请求

apache_mod

Nginx + php-fpm 测试结果是每秒完成 352 次请求。FastCGI 的进程间通讯还是拉低了性能。

nginx_fpm

最后是同行所使用的 suPHP ,每秒完成 41 次请求

apache_cgi

每次启动和关闭进程造成的性能影响惨不忍睹,我们的性能是同行的 10 倍!

]]>
https://www.90.cx/php-mode/feed/ 2
解密Hostker&主机壳CDN——Squid篇 https://www.90.cx/hostker-cdn-squid/ https://www.90.cx/hostker-cdn-squid/#respond Fri, 15 Jul 2016 12:08:10 +0000 https://www.90.cx/?p=110 继续阅读解密Hostker&主机壳CDN——Squid篇]]> 没有阅读过《解密Hostker&主机壳CDN——Nginx篇》的读者,需要看一遍我们 CDN 的流程图:cdn2
在完成 Nginx 部分之后,请求移交到 Squid 手中。

Squid 会根据这个 URL 访问的频繁程度,决定放置于我们 CDN 节点的内存还是硬盘中进行缓存,访问越频繁越有可能进入内存缓存,其次是硬盘,在硬盘塞满后,访问最少的 URL 将会被删除缓存。

我们的 Squid 默认会把全部请求转发后端确认是否更新,如果后端返回了 Expires 头或者 max-age,将会根据用户自定义的时间进行缓存。缓存期间不会到后端确认是否更新,直接 HIT 命中缓存。客户端浏览器也会根据这两个头进行缓存而不会向 CDN 发出请求,从而加快访问速度。

用户只需要在 .htaccess 写好相应规则,我们的 CDN 和客户端浏览器就能同时收到该缓存规则并依照规则执行。具体规则示例:

ExpiresActive On
ExpiresByType application/x-javascript “access plus 1 month”
ExpiresByType text/html M604800
<FilesMatch “\.(xls|ppt|doc)$”>
ExpiresDefault A9030400
</FilesMatch>

  • ExpiresActive On 表示开启缓存模块;
  • ExpiresByType [type] [rule]  其中 ExpiresByType 表示根据 MIME 类型执行缓存规则,type 表示 MIME 类型,rule 表示缓存规则;
  • ExpiresDefault [rule] 其中 ExpiresDefault 表示默认的缓存规则,rule 表示缓存规则。细分如下:
  • “access plus 1 month” 其中 access 表示从用户访问的时间(CDN 节点是根据 CDN 访问后端的时间)算起,plus 表示增加,1 month 表示 1 个月。
    同理可以使用 3 days 表示 3 天,1 hours 表示 1 小时,2 minutes 表示 2 分钟。可以连着用 “access plus 1 month 2 days 5 hours 9 minutes” 表示从用户访问后的 1 个月 2 天 5 小时 9 秒内缓存有效,无需找后端确认修改时间;
  • M604800 表示从文件的修改时间开始缓存 604800 秒(一周);
  • A9030400 是 access plus 的另一个用法,同理 M604800 可以写为 “modification plus 7 days”。

※ 多说一点 Apache 和 HTTP 相关的小知识:

  • FilesMatch 是根据文件名制定相应规则,双引号内的内容为正则表达式,上面示例是匹配文件名后缀为 xls 或者 ppt 或者 doc 的文件。关于正则表达式有兴趣的用户可以去网上寻找相关资料学习。
  • Expires 头和 max-age 可以用 PHP 的 header() 函数模拟发送,靠 .htaccess 主要是为了让静态文件得到缓存。
  • Expires 头内容缓存的过期时间,格式示例:Tue, 19 Feb 2013 15:34:21 GMT
  • max-age 位于 Cache-Control 头里面,单位是秒,比如 300 秒过期示例:Cache-Control: max-age=300

这样一来,我们就无需专门为 CDN 开发缓存控制面板,用户可以使用 .htaccess 或者 PHP 灵活控制所有的文件的 CDN 缓存规则。

至此,CDN 相关的技术大概介绍完毕,接下来是运算节点的介绍。

]]>
https://www.90.cx/hostker-cdn-squid/feed/ 0
解密Hostker&主机壳CDN——Nginx篇 https://www.90.cx/hostker-cdn-nginx/ https://www.90.cx/hostker-cdn-nginx/#respond Fri, 15 Jul 2016 10:27:33 +0000 https://www.90.cx/?p=106 继续阅读解密Hostker&主机壳CDN——Nginx篇]]> 上一篇我们说到《HTTPS 握手过程》,现在进入主线 CDN。来看一张图了解用户的访问过程:cdn2从图上我们可以看到进入 CDN 之后第一个步骤是判断 HTTP 请求头的 Host 值,系统会从内存中读取 Host 对应的数据,包括域名所属主机、用户自定义的 UA、IP 安全策略等。前面的文章有提到,我们没有使用 Nginx 的配置文件保存这些数据,而是直接写入内存,因此省去了每次修改都扫描整个配置文件的过程。

拿到了配置之后,我们在 Nginx 层有一些系统统一给用户准备好的保护规则,例如恶意 IP、UA 全局屏蔽。首先进行全局的规则判断,然后进行用户自定义的黑名单规则判断。没有问题的话,进入到危险行为判断。

危险行为包括 CC 攻击、WordPress 后台爆破、论坛密码爆破、垃圾评论等。针对这些问题我们在 Nginx 层开发了 AntiCC 模块和 AntiSPAM 模块。

AntiCC 模块

anticc

在用户遇到 CC 攻击时,我们会临时启动 AntiCC 模块进行过滤。首次访问的访客将会重定向到 anticc.smartgslb.com 并出现这个界面。用户点击「继续访问」按钮后,浏览器将会运行一段 js 进行计算得到正确的令牌,并重定向回 CDN 节点,继续之前的访问。确保不影响其它网站的正常使用。

※ 对于引来流量洪水攻击的网站,我们将会直接清退!这一模块仅用于紧急自保使用。已知自己被人攻击的用户不要试图使用我们的 CDN!

AntiSPAM 模块

顾名思义,这个模块就是防垃圾。除了前面提到的根据 UA 和 IP 进行黑名单防御之外,我们针对比较常见的 WP、DZ 密码爆破等行为开发了这个模块。

原理非常简单,在 POST 请求到特定 URL 的时候,CDN 会进行一个判断,访客需要首先访问过网页,得到一个 token 在浏览器中,然后再进行 POST 行为,我们的 CDN 才会放行。目前这一模块每天都会拦截上万次 WordPress 后台密码爆破攻击。

静态资源处理

说到静态资源,防盗链必不可少。由于有 CDN 的存在,我们无法直接在运算节点 Apache 层面写 .htaccess 进行防盗链,而是需要在控制面板中进行配置。这一点不难理解,几句话带过。

我们一直强调自己独有的静态资源加速,这一功能原理也不复杂,针对未备案的域名,将访客的图片、附件请求 302 重定向至我们的域名,例如 www.90.cx 重定向到 www-90-cx-static.smartgslb.com 域名,这样可以在不干扰网页的情况下,提供中国大陆最近最快的 CDN 带宽供用户访问。

重定向也有非常多的讲究,不能一股脑儿全部重定向过去,js 和 css 这两个流量不大而且和网页渲染密切相关的东西肯定不能进行重定向。字体方面,我们在重定向之后增加了跨域许可头(CORS),确保浏览器可以正确载入字体。这些都是在静态资源处理模块中完成的动作。

数据统计

我们自己实现了一个 UDP 协议,Nginx 在处理完请求之后会将请求情况实时汇报给我们一个节点,我们进行汇总处理并展示在 http://status.hostker.com/

至此 Nginx 部分的任务就结束了。

接下来轮到《解密Hostker&主机壳CDN——Squid篇

]]>
https://www.90.cx/hostker-cdn-nginx/feed/ 0
HTTPS 握手过程 https://www.90.cx/https-init/ https://www.90.cx/https-init/#respond Fri, 15 Jul 2016 08:43:01 +0000 https://www.90.cx/?p=94 继续阅读HTTPS 握手过程]]> 在讨论 CDN 之前,我们需要先完成 HTTP 请求的握手。如果一个请求发往 443 端口,那么我们就需要按 HTTPS 协议进行握手。这时就涉及到一个问题,如何识别这个请求对应的主机?在 HTTP 请求中,客户端发起 GET 或者 POST 请求,在头部会有一个 Host 字段,对应值就是访客输入的域名。例如访问 http://90.cx/ 的请求头是这样:

GET / HTTP/1.1
Host: 90.cx
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36

我们都知道 HTTPS 的作用就是加密数据,加密的过程是这样的:

  1. 客户端发起 HTTPS 连接;
  2. 服务器返回证书(公钥)
  3. 客户端产生随机密码并使用公钥加密;
  4. 以下省略……

涉及到密码学的知识这里不多讲,只说涉及到我们开发的技术细节。在发起 HTTPS 请求的时候,上面那一串 GET 数据也是要保护的,因此服务器必需先给证书。这时问题就来了,我们还不知道用户访问的是哪个域名,如何提供对应的证书?在以前,主机商要求使用 HTTPS 的网站都必需购买独立 IP,就是这个原因。

可是我们是 CDN 厂商啊,节点是分散的啊,这怎么能忍?因此有了 SNI(Server Name Indication 服务器名称指示)。从 Windows Vista 开始的系统,都已经支持 SNI 了。而 XP 环境下,许多用户使用的是 360、猎豹等国产多核浏览器,非 IE 内核也是支持 SNI 的。

有了 SNI 扩展,在第一步发起 HTTPS 连接的时候,客户端将会发送对应的域名给服务器的 443 端口。服务器收到之后检查对应域名的证书返回给客户端完成支持。

在标准 Nginx 中,都是通过配置文件的方式实现的证书载入和更新。但是作为 CDN 厂商我们是无法容忍 reload 的。因此我们二次开发 Nginx 完成动态证书支持,将证书和私钥全部存放到 CDN 节点的内存中,当用户请求 Hostker&主机壳 的 CDN 时,我们不需要查询配置文件,直接读取域名并在内存中找到对应的证书和私钥完成握手过程。

用户对某个域名进行增加、删除证书和私钥操作时,我们会直接把对应操作下发到全网 CDN 节点,直接操作内存进行修改。同样不需要接触 Nginx 的配置文件,节省的 reload 过程可以让操作生效时间非常短,通常在 1 分钟内就可以完成全网部署。

完成 HTTPS 握手之后,就可以进入 CDN 处理了。

下一篇《解密 Hostker&主机壳 CDN——Nginx篇

]]>
https://www.90.cx/https-init/feed/ 0
CDN 厂商都爱自架 DNS? https://www.90.cx/cname-mx-clash/ https://www.90.cx/cname-mx-clash/#comments Fri, 01 Jul 2016 08:33:25 +0000 https://www.90.cx/?p=80 继续阅读CDN 厂商都爱自架 DNS?]]> 不知道你有没有发现一个规律,基本上所有的 CDN 厂商都会选择自架 DNS 而不是只提供 CNAME 方式解析。这个原因说起来非常之奇葩。

抬头看域名,这个博客的域名是 www.90.cx。当然也可以是 90.cx,但是为什么大多数网站都会选择 www 二级域名呢?因为当初设计 DNS 时是这样考虑的:

  • www.90.cx:提供万维网服务,也就是网页浏览,通过 A 记录解析;
  • smtp.90.cx/pop3.90.cx:提供邮箱服务器,也是 A 记录解析到IP;
  • mail.90.cx:提供邮箱服务,使用 MX 记录,这样全部邮箱就都是 @mail.90.cx 后缀;
  • ftp.90.cx:提供 FTP 服务,还是 A 记录;
  • 90.cx:顶级域名是啥能吃么?

gg我们选这个域名就是短小好记啊!@90.cx 看着多高大上!

按照 RFC 1034 标准,如果设置有 CNAME 记录,为了避免混淆,不可出现其它记录(MX 中枪)。如果用户的域名是类似我们这种比较有意义后缀的,当然不希望 @ 后面跟着 mail 咯。因此 CDN 厂商不得不自架 DNS,并自定义一个智能解析类型,像 Hostker&主机壳 自定义了 CDN 类型解析。返回的结果就是权威服务器进行智能解析后的 A 记录,这样就可以与 MX 共存,并且不使用 CNAME 还能省去一次解析时间,加快访问速度。

所以关于标题的疑问,并不是 CDN 厂商爱架设 DNS 。

这都是被迫的啊(╯‵□′)╯︵┻━┻

]]>
https://www.90.cx/cname-mx-clash/feed/ 8
================================================ FILE: api/test/data/feed/a16z ================================================ Andreessen Horowitz https://a16z.com Software Is Eating the World Wed, 06 Jun 2018 05:55:38 +0000 en hourly 1 http://wordpress.com/ https://a16z.files.wordpress.com/2017/12/cropped-a16z-favicon.png?w=32 Andreessen Horowitz https://a16z.com 32 32 ================================================ FILE: api/test/data/feed/api.prprpr.me ================================================ ================================================ FILE: api/test/data/feed/apublica.org ================================================ Agência Pública https://apublica.org Fri, 29 Jun 2018 19:26:19 +0000 pt-BR hourly 1 https://wordpress.org/?v=4.9.6 OIT ainda analisa denúncia sobre reforma trabalhistahttps://apublica.org/2018/06/truco-oit-ainda-analisa-denuncia-sobre-reforma-trabalhista/ https://apublica.org/2018/06/truco-oit-ainda-analisa-denuncia-sobre-reforma-trabalhista/#respond Fri, 29 Jun 2018 19:26:19 +0000 http://apublica.org/?post_type=claim_review&p=48110
Crozet / Pouteau / Albouy / OIT
Reunião da 107ª Conferência Internacional do Trabalho, da OIT, em que o Brasil foi chamado a explicar mudança feita pela reforma trabalhista
Reunião da 107ª Conferência Internacional do Trabalho, da OIT, em que o Brasil foi chamado a explicar mudança feita pela reforma trabalhista

A reforma trabalhista alterou disposições da Consolidação das Leis do Trabalho (CLT) e tem sido alvo de críticas, intensificadas desde que as mudanças entraram em vigor, em novembro de 2017. Denúncias de que as mudanças na lei teriam reduzido ou suprimido direitos foram apresentadas por entidades sindicais à Organização Internacional do Trabalho (OIT), agência da Organização das Nações Unidas (ONU). A principal acusação é de que a reforma fere uma convenção internacional, por conta da prevalência de acordos negociados entre patrões e alguns tipos de empregados.

A oposição, que apoia as denúncias, alega que as mudanças na legislação acarretaram a inclusão do Brasil na “lista suja” da OIT – uma relação de países que descumprem normas internacionais sobre trabalho – e ainda destaca os efeitos negativos que a alteração legislativa teria no mercado de trabalho. Já o governo comemora as decisões da organização internacional, afirmando que isentam o Brasil de violar os direitos trabalhistas.

O Truco – projeto de checagem de fatos da Agência Pública – verificou quatro frases sobre o tema, duas de autoria da senadora Ângela Portela (PDT-RR) e duas do ministro do Trabalho, Helton Yomura. As afirmações do ministro constam em um texto publicado no site do Planalto, enquanto as declarações de Portela foram feitas em sessão deliberativa no Senado, no dia 12 de junho.


“O Brasil foi incluído na ‘lista suja’ da Organização Internacional do Trabalho, a OIT.” – Ângela Portela (PDT-RR), senadora.

ExageradoA senadora Ângela Portela (PDT-RR) afirmou recentemente que o Brasil foi incluído na “lista suja” da Organização Internacional do Trabalho (OIT). Essa relação traz os países que violam normas trabalhistas internacionais, segundo análise dos técnicos da entidade. O país na verdade faz parte de uma lista preliminar, e a avaliação para que seja incluído na lista definitiva ainda não terminou. Por isso, a afirmação foi considerada exagerada.

A assessoria de imprensa da senadora atribuiu a fonte da afirmação a um artigo publicado pela Associação Nacional dos Magistrados da Justiça do Trabalho (Anamatra). O texto diz que o relatório da 107ª Conferência Internacional do Trabalho, que ocorreu de 28 de maio a 8 de junho, em Genebra, na Suíça, incluiu o Brasil no grupo de 24 países que fazem parte da “lista suja”. O documento, no entanto, não chegou a essa conclusão – informa apenas que a análise sobre a situação brasileira ainda está em aberto.

O Brasil ratificou 97 convenções da OIT, sete delas classificadas como fundamentais pela organização – ou seja, são definidoras de uma série de princípios que precisam ser seguidos em relação a diferentes aspectos do trabalho. Entre essas últimas está a de número 98, que trata do direito de sindicalização e de negociação coletiva, ratificada em 1952.

A reforma trabalhista, estabelecida pela Lei nº 13.467/2017, alterou as normas de acordos coletivos no Brasil. Os acordos individuais entre trabalhador e patrão, estabelecidos pelo artigo 444 da Consolidação das Leis do Trabalho (CLT), passaram a ter “a mesma eficácia legal e preponderância sobre os instrumentos coletivos, no caso de empregado portador de diploma de nível superior e que receba salário mensal igual ou superior a duas vezes o limite máximo dos benefícios do Regime Geral de Previdência Social”. Isso quer dizer que indivíduos com salários iguais ou superiores a R$ 11.062,62 agora podem fechar acordos diferentes daqueles mediados por entidades sindicais com empregadores.

Segundo entidades sindicais brasileiras, isso viola o direito de negociação coletiva estabelecido pela OIT na Convenção nº 98. Denúncias a respeito disso foram levadas ao Comitê de Peritos na Aplicação de Convenções e Recomendações da organização em agosto e setembro de 2017. O comitê analisou o caso e mostrou preocupação a respeito das mudanças na lei, pedindo então para o governo brasileiro analisar as críticas e apresentar uma resposta em 2018.

A análise levou o Comitê de Aplicação de Normas (CAS, na sigla em inglês) da OIT a colocar o Brasil na lista longa de 40 países denunciados por violar convenções fundamentais. Essa lista funciona como um documento preliminar a ser avaliado pelo Comitê da Conferência Internacional do Trabalho, que então formula uma lista menor, chamada “lista curta”, ou “lista suja” da OIT.

Mesmo sendo apenas uma indicação preliminar e não uma inclusão na lista definitiva, a situação foi criticada pela defesa do governo brasileiro na 107ª Conferência Internacional do Trabalho. Na ocasião, o governo disse que “a inclusão do Brasil na lista do CAS configura um julgamento precipitado da situação brasileira antes de ouvir o governo, apesar dos padrões básicos para o processo.”

Como a análise sobre a possível violação do Brasil da Convenção nº 98 ainda não terminou, o país não está incluído na “lista suja” definitiva. Ainda assim, a denúncia foi acatada e, pelo comitê de aplicação de normas, o Brasil está sob análise entre os países suspeitos de violar convenções fundamentais, fazendo parte de uma lista preliminar. Procurada pelo Truco, a OIT não quis se pronunciar sobre o caso.

Após receber os selos, a assessoria de imprensa argumentou que a senadora não fez distinção entre lista preliminar e lista definitiva em sua fala: “Quando se fala que o Brasil foi incluído na lista suja, não se fez distinção entre ‘lista preliminar’ e ‘lista definitiva’. Se está incluído na lista preliminar…está incluído na lista. Não há qualquer exagero aí”. Há porém diferenças entre as duas listagens, conforme explicado na checagem.


“Após ouvir os argumentos dos trabalhadores, dos empregadores e do governo, a comissão decidiu apenas solicitar informações adicionais ao governo brasileiro.” – Helton Yomura, ministro do Trabalho.

Sem contexto

O ministro do Trabalho, Helton Yomura, referiu-se em sua frase a uma decisão do Comitê da 107ª Conferência Internacional do Trabalho. Na conclusão do evento, o órgão solicitou informações adicionais ao governo sobre a reforma trabalhista brasileira e seus impactos. Essa de fato foi a única decisão tomada até o momento, mas pode resultar na inclusão do país na “lista suja” dos que violam leis trabalhistas. A posição final da OIT a respeito da mudança na legislação ainda não foi tomada e depende da resposta do Brasil. A afirmação do ministro Helton Yomura traz dados verdadeiros, mas sem contexto.

Denunciado ao Comitê de Aplicação de Normas por violar a Convenção nº 98 da OIT com a reforma trabalhista, o governo brasileiro foi convidado a se explicar durante a 107ª Conferência Internacional do Trabalho. Foram ouvidas as defesas do Ministério do Trabalho, de representantes dos empregadores e de trabalhadores.

O governo afirmou que a legislação brasileira não afeta a livre organização sindical e o direito à negociação coletiva, garantidos pelas normas da OIT. Já os representantes dos trabalhadores brasileiros afirmaram que a reforma trabalhista constitui “o ataque mais grave aos direitos sindicais e dos trabalhadores em toda a história do Brasil”. Governos de outros países e seus respectivos representantes sindicais e empregadores divergiram sobre a questão.

Dentre os argumentos do governo e de apoiadores da reforma estava o fato de que a denúncia e a análise feitas pelo Comitê de Aplicação de Normas ocorreram fora do ciclo regular de análises. Em situações normais, países que ratificam convenções da OIT, como é o caso do Brasil, devem apresentar a cada três anos um relatório a respeito da situação de cada convenção em seu país a um Comitê de Peritos. O Brasil apresentou o último relatório a respeito da Convenção nº 98 em 2016 e o próximo está previsto para 2019. A reforma trabalhista entrou em vigor no ano passado, ou seja, nesse intervalo. Assim, a situação brasileira não pôde ser analisada ainda.

Levando isso em conta, o Comitê da Conferência Internacional do Trabalho, em suas conclusões, deu um prazo de alguns meses para que o Brasil apresentasse mais informações sobre o caso. Foram pedidos esclarecimentos em dois pontos: sobre a aplicação dos princípios de negociação coletiva livre e voluntária na nova lei trabalhista; e sobre as consultas tripartites com os interlocutores sociais a respeito da reforma trabalhista, conforme apontado no relatório da conferência pela assessoria do ministério.

Isso não quer dizer, contudo, que a OIT considera que a reforma respeitou os direitos trabalhistas, como diz o Ministério do Trabalho. Só depois que o governo brasileiro apresentar as informações solicitadas é que a organização tomará uma decisão final.

A equipe do ministro foi comunicada sobre o selo e enviou a seguinte resposta: “O pedido de informações formulado para a OIT é um fato que foi amplamente noticiado. A não tomada de posição da OIT em relação às mudanças advindas com a modernização trabalhista, que entrou em vigor em novembro de 2017 (há sete meses portanto), é algo que, pelo calendário da entidade, só pode ser objeto de avaliação em 2019. A possibilidade de a OIT vir a incluir o Brasil na chamada “lista suja” pressupõe da mesma forma que a entidade pode chegar à conclusão de que a modernização trabalhista não viola direitos dos trabalhadores brasileiros, como o Ministério do Trabalho defende e que certamente será comprovado após a análise das informações prestadas. Qualquer entendimento diferente desse é pura ilação.”


“Os direitos trabalhistas têm proteção constitucional e não podem ser retirados [pela reforma trabalhista], nem há reforma da própria Constituição.” – Helton Yomura, ministro do Trabalho.

ExageradoMuitos direitos trabalhistas não estão previstos na Constituição, mas na Consolidação das Leis do Trabalho (CLT) ou em outras leis ordinárias. Nem todos os direitos trabalhistas têm proteção constitucional e alguns deles foram, de fato, alterados pela reforma aprovada pelo governo do presidente Michel Temer (PMDB). Por isso, a frase é exagerada.

Procurada pelo Truco, a equipe do ministro afirma que os artigos 7º e 8º da Constituição Federal listam os direitos dos trabalhadores e de organização sindical. “Como a Constituição é norma hierarquicamente superior à CLT, os direitos ali relacionados não podem ser derrogados por norma inferior. Sequer emenda constitucional poderia derrogar esses direitos, já que se trata de cláusulas pétreas”, disse a assessoria do Ministério do Trabalho. Destacou ainda um trecho da reforma trabalhista. O artigo indicado, 611-B, atesta que nenhuma convenção ou acordo coletivo de trabalho pode suprimir ou reduzir os direitos listados ali. No entanto, o texto traz apenas uma parte dos direitos trabalhistas estabelecidos pela legislação brasileira. Não estão na lista algumas garantias previstas em leis ordinárias, nem a totalidade das disposições contidas na CLT.

O artigo 611-A, no entanto, traz disposições opostas. Nele estão listados os direitos trabalhistas que podem ser alterados a partir da vigência da nova legislação. No grupo de direitos que podem ser negociados por meio de convenção coletiva ou acordo coletivo de trabalho estão aspectos importantes como tempo de jornada de trabalho, adesão ao Programa Seguro-Emprego (PSE), enquadramento do grau de insalubridade e intervalo intrajornada.

A advogada Adriana Giori de Barros, do escritório Bertolucci e Ramos Gonçalves, afirma que os direitos constitucionais não foram reduzidos pela reforma trabalhista. Ela no entanto destaca que a Constituição Federal define as linhas gerais dos direitos dos trabalhadores, enquanto a CLT é o principal instrumento regulamentador das relações de trabalho.

Professor de direito trabalhista da Universidade de São Paulo (USP) e sócio do Siqueira Castro, Otávio Pinto e Silva concorda com a classificação das legislações. Para ele, a Constituição, norma de hierarquia superior, estabelece um parâmetro de proteção mínima, mas as especificidades ficam a cargo da CLT. “Há muitos direitos que estão abaixo da Constituição e que numa alteração da CLT você pode limitar ou reduzir”, explica.

Um exemplo dado pelo professor é a legislação que determina as modalidades de contratação de trabalhadores no Brasil. Enquanto o artigo 7º da Constituição determina que o salário mínimo fixado em lei e nacionalmente unificado é um direito de todos os trabalhadores, a nova CLT permite o pagamento de vencimentos inferiores ao salário mínimo para empregados no regime de trabalho intermitente. O contrato de trabalho intermitente, aquele que ocorre de modo esporádico, em dias alternados ou por apenas algumas horas, prevê remuneração por período trabalhado, e não mensal.

“Nesse caso, as condições da nova legislação são menos favoráveis para o trabalhador”, afirma Silva. “Não foi necessária uma alteração constitucional para criar uma situação mais vulnerável porque a regulamentação dos tipos de contrato consta na CLT, e não na Constituição.”

Barros destaca, no entanto, que muitos direitos não podem ser negociados. É o caso da licença maternidade e paternidade, da aposentadoria, do décimo terceiro salário e da indenização rescisória do Fundo de Garantia do Tempo de Serviço (FGTS). Esses e outros direitos estão listados no artigo 611-B da lei que institui a reforma trabalhista. Trata-se do trecho indicado pela assessoria de imprensa do ministro do Trabalho como fonte para a afirmação de Yomura.

O argumento de que os direitos trabalhistas estão previstos na Constituição e que, portanto, a aprovação da reforma trabalhista não interfere neles, é usado pela base governista há algum tempo. Em junho de 2017, o Truco verificou uma frase do senador petista Paulo Paim sobre o tema. Na ocasião, Paim defendia que muitos direitos relevantes não estão documentados na Constituição, mas em outras leis ordinárias. A frase foi considerada verdadeira.

Segundo a advogada Fabiola Marques, professora de direito do trabalho na Pontifícia Universidade Católica de São Paulo (PUC-SP) consultada na verificação da afirmação de Paim, os direitos trabalhistas mais importantes estão na CLT e em algumas leis ordinárias. “O que a reforma está fazendo é justamente alterar esses direitos”, afirmou.

Ao ser comunicada sobre o selo, a assessoria de imprensa do ministro do Trabalho contestou o resultado: “Direitos basilares de proteção ao trabalhador estão previstos no artigo 7º da Constituição, passíveis de mudança apenas por emenda constitucional. O artigo e seus incisos garantem direitos como FGTS, 13º salário, férias, aviso prévio, descanso semanal remunerado, adicional de trabalho noturno, jornada máxima de trabalho de oito horas diárias e 44 semanais, hora extra com adicional de no mínimo 50% em relação à hora normal de trabalho, irredutibilidade de vencimentos, licenças maternidade e paternidade, aposentadoria, adicional por insalubridade, veto ao trabalho de menores de 16 anos, exceto na qualidade de aprendiz, a partir dos 14 anos, proibição de discriminação de salário ou critério de contratação de portadores de deficiências, proteção contra dispensa arbitrária ou sem justa causa, reconhecimento das convenções e acordos coletivos de trabalho, salário mínimo. O artigo 8º, por sua vez, garante a livre atividade sindical e associação sindical dos trabalhadores, sem a tutela do Estado, o artigo 9º assegura o direito de greve. Já o artigo 10º garante aos trabalhadores e empregadores a participação em colegiados de órgãos públicos em que são discutidas e deliberadas questões profissionais ou previdenciárias  de interesse das categorias profissionais, e o 11º permite a eleição de um representante dos trabalhadores nas empresas com mais de 200 funcionários.”


“A reforma [trabalhista] de Temer já está produzindo efeitos. O emprego está cada vez mais precário, com menos carteira assinada e mais autônomos e contratos intermitentes.” – Ângela Portela (PDT-RR), senadora.

Impossível provar

Os dados disponíveis hoje não mostram os efeitos da reforma trabalhista. Como as mudanças entraram em meio a uma situação de crise econômica e estão em vigor desde 11 de novembro – ou seja, são ainda recentes –, não há indicações estatísticas que permitam separar o que foi causado pela retração e o que está relacionado à mudança na lei. Isso ocorre tanto com os números mais recentes do Cadastro Geral de Empregados e Desempregados (Caged), do Ministério do Trabalho, como com os da Pesquisa Nacional por Amostra de Domicílios (Pnad) Contínua, do Instituto Brasileiro de Geografia e Estatística (IBGE). A afirmação de Ângela Portela (PDT-RR) é impossível de provar.

A parlamentar citou como fonte da afirmação de que há menos vagas com carteira assinada uma reportagem que cita dados da Pnad Contínua. De acordo com o levantamento do IBGE, existiam 32,9 milhões pessoas empregadas com carteira assinada no primeiro trimestre deste ano (janeiro-fevereiro-março). Em relação aos três últimos meses de 2017, o número caiu 1,2%, ou seja, houve uma redução de 408 mil vagas. Embora o dado seja verdadeiro, essa redução não pode ser atribuída à reforma trabalhista. “Existe um efeito de sazonalidade no início do ano. É comum o desemprego subir”, diz Cimar Azeredo, coordenador de Trabalho e Rendimento do IBGE. “Os indicadores da Pnad Contínua até agora divulgados não conseguem separar o que foi causado pela reforma trabalhista e o que foi provocado pela crise.”

Uma das maneiras de verificar o impacto da reforma, segundo Azeredo, seria analisar os números sobre trabalho intermitente, que foi formalizado com a última reforma. Ele é definido como a prestação de serviços não contínua, que pode acontecer com alternância de períodos determinados e independe do tipo de atividade do contratado e do empregador.

O acompanhamento do trabalho intermitente é feito por enquanto apenas pelo Cadastro Geral de Empregados e Desempregados (Caged) do Ministério do Trabalho – que levanta dados de admissões e demissões em empregos formais no Brasil. A pasta começou a coletar os números sobre essa modalidade a partir de novembro, quando houve um saldo positivo de 3.067 contratos registrados. Inicialmente, o saldo foi de 2.574, em dezembro, de 2.461, em janeiro, e de 2.091 vagas, em fevereiro. Já em março, o saldo ficou em 3.199 postos e, em abril, chegou a 3.601 vagas. Ou seja, foram 16.993 vagas criadas desde novembro, o que representa apenas 0,04% do total de 38.205.000 postos de trabalho formais.

Também não é possível afirmar que houve um aumento de trabalhadores autônomos após a reforma trabalhista, já que houve uma estabilidade no contingente desta classe nos últimos dois trimestres analisados pela Pnad Contínua. A pesquisa identifica o total de trabalhadores por conta própria (indivíduos com empreendimento próprio, sem empregados remunerados). No trimestre de novembro-dezembro-janeiro, havia 23.182.000 trabalhadores nessa condição. No período seguinte (fevereiro-março-abril), o número ficou em 23.025.000. Para a Pnad, essa diferença de 157 mil (0,7%) é considerada como estável.

A assessoria da senadora contestou o resultado da checagem ao ser informada da classificação: “No que se refere à reforma trabalhista, o que se diz é: ‘O emprego está cada vez mais precário, com menos carteira assinada e mais autônomos e contratos intermitentes’. Todos os levantamentos relativos a mercado de trabalho, inclusive – e especialmente – os oficiais, como o Caged, confirmam textualmente essa afirmação. É evidente, portanto, que até agora a reforma trabalhista não produziu efeitos que revertam esse quadro, como era seu objetivo. Lógica elementar. Sobre o que acontecerá no futuro, não existe bola de cristal e, então, aí sim é impossível provar.” Como a checagem mostrou, no entanto, os dados do IBGE ou do Caged não mostram se houve algum impacto causado pela reforma trabalhista.

]]>
https://apublica.org/2018/06/truco-oit-ainda-analisa-denuncia-sobre-reforma-trabalhista/feed/ 0
Sob constante ameaçahttps://apublica.org/2018/06/video-sob-constante-ameaca/ https://apublica.org/2018/06/video-sob-constante-ameaca/#respond Mon, 25 Jun 2018 13:52:52 +0000 http://apublica.org/?post_type=video&p=47734 Nas grandes cidades brasileiras, as mulheres não ocupam o espaço urbano da mesma forma que os homens, por medo da violência de gênero. Tendem a evitar lugares como becos, pontes e passarelas, pensam horários e roupas antes de sair de casa e fazem desvios em seus caminhos, enquanto essas não são preocupações masculinas. Este medo, assim como as afetividades e a subjetividade na forma de ocupar a cidade, dão a tônica ao documentário.

Foram gravadas entrevistas com mulheres cis, trans, homens trans, mulheres brancas, negras, migrantes, deficientes visuais e cadeirantes e uma pesquisa online com 2590 respostas trouxe dados impressionantes como o de que 89% das mulheres não anda em becos e 93% evita andar a noite pela cidade.

“Sob Constante Ameaça” cria um suspense contínuo – vivenciado pelas mulheres em suas rotinas reais e traduzido na fala de uma delas: “Uma das coisas que é muito comum, é eu não saber se vou voltar inteira pra casa”. O filme possui planos que podem ser vistos tanto na perspectiva das personagens quanto na de um possível agressor, colocando o expectador em um lugar de tensão.

]]>
https://apublica.org/2018/06/video-sob-constante-ameaca/feed/ 0
Mulheres e o direito à cidadehttps://apublica.org/2018/06/mulheres-e-o-direito-a-cidade/ https://apublica.org/2018/06/mulheres-e-o-direito-a-cidade/#respond Mon, 25 Jun 2018 13:52:10 +0000 http://apublica.org/?p=48091 A entrevista aconteceu na Casa Pública, no lançamento do minidoc “Sob Constante Ameaça” e contou com as opiniões da urbanista e arquiteta Tainá de Paula e da fundadora do escritório coletivo de arquitetura “Terceira Margem”, Iazana Guizzo, com condução da repórter da Pública Andrea Dip.

Andrea Dip – Vocês acham que a cidade tem catracas para as mulheres? E essas catracas são diferentes dependendo das interseccionalidades?

Tainá de Paula – Vou me apresentar. Sou a Tainá de Paula, arquiteta e urbanista. E, na verdade, eu debato essas assimetrias de gênero a partir das desigualdades sociais postas. A cidade acaba sendo um grande território de opressão de um modo geral – de classe, raça e gênero. Inclusive, uma mulher, provavelmente negra, fala desse racismo e do machismo que sofre em um off do filme [o minidoc “Sob Constante Ameaça” exibido antes da conversa] e achei super interessante porque é exatamente isso. Uma mulher negra, de determinada faixa social e determinada idade tem a percepção da cidade de uma forma totalmente diferente que uma mulher branca de determinada classe social tem. Isso está posto, está colocado. E acho também que esse não pertencimento, essa catraca que nunca roda para as mulheres parte muito da não inserção das mulheres no próprio pensamento da cidade. Inicialmente, os primeiros planejadores, os primeiros construtores, os primeiros pensadores da cidade foram homens e, concretamente, elas foram pensadas a partir dessa lógica e dessa métrica. Se a gente for parar para pensar no Rio de Janeiro, mulheres ricas eram vistas no centro da cidade em determinadas ruas, onde elas poderiam comprar, Rua do Ouvidor e tal. Mas era da carruagem para casa, da casa para aquela rua e acabou. Quem trabalhava, quem exercia o comando e tinha livre circulação nessa cidade era o homem. E as mulheres negras pós-escravas, por exemplo, foram proibidas de circular “rebolativas”. Tem um decreto municipal que fala da forma como as mulheres negras rebolavam no centro do Rio de Janeiro, foram proibidas de andar “rebolativas”. Esse não pertencimento desse corpo feminino na sua plenitude, na sua forma completa de ser e estar, rebolando ou não, sendo força de trabalho ou não nessa cidade também criou a cultura desse não pertencimento. A mulher ter paridade nesse pensar urbano é fundamental para a gente definir outras formas de ser na cidade.

Iazana Guizzo – Eu sou da Terceira Margem, também sou arquiteta e urbanista. A Terceira Margem é um coletivo e escritório de arquitetura que se propõe a fazer de um outro modo esse pensar, em uma lógica que a gente defende como feminina. Eu queria chamar atenção, indo de encontro ao que você está falando para a espacialidade dos lugares onde vocês apresentam o filme, e que vêm justamente dessas entrevistas que você faz no início, onde as mulheres já dão a dica de que não querem habitar, não conseguem habitar, melhor dizendo. Eu fiquei pensando aqui que esses espaços não são desenhados nem para os homens. São espaços desenhados para os carros, para uma cidade que precisa circular, onde a mercadoria precisa circular. Então, são espaços que não são nem pensados para as pessoas. Então, qual é a lógica ali? A lógica é de uma cidade funcionalista, onde à noite, então, não tem uso, é uma lógica do automóvel, é uma lógica do desenho que não pensa a cidade, pensa um edifício isolado. E isso, para mim, acho que revela alguma coisa que é o espaço como produção de subjetividade, a gente desenha uma cidade que produz corpos funcionais, automáticos, que não estão sensíveis a determinadas questões, e isso tudo também é masculino. Quando você traz a ideia de que é pior para a mulher negra, com certeza é pior para a mulher negra. É pior para a mulher negra pobre? Com certeza é pior para a mulher negra pobre. É opressivo para os homens, é opressivo mais ainda para as mulheres, é opressivo mais ainda para as mulheres negras, é opressivo mais ainda para as mulheres negras pobres.

Andrea Dip – Sim, são essas interseccionalidades. Esses espaços são ruins inclusive para os homens, mas o homem, se deixar a carteira em casa, por exemplo, resolveu seu problema, que é o medo de ser assaltado. Se a gente estiver assim, do jeito que a gente está, sem nada no bolso, a gente vai ter medo de violência de gênero, que é outra coisa, é um outro medo. Daí gostaria de fazer outra pergunta: A gente faz essa discussão de que a cidade deveria ser mais pensada para as mulheres, um outro tipo de espaço, circulação, pensado uma outra maneira, mas esses espaços de confinamento são ameaçadores por conta da misoginia, por conta do social? Por exemplo, se a gente pensar esses mesmos espaços em outros lugares que talvez não tenham uma violência de gênero tão forte, será que eles são tão ameaçadores? De fato, a gente deveria repensar os espaços por conta da violência de gênero ou esses espaços são ameaçadores por causa dessa violência?

Tainá de Paula – Eu acho que são as duas coisas. A gente tem uma lógica misógina, um machismo estrutural, não debatido de forma suficiente na sociedade, e existe o que a gente chama de erro de projeto mesmo, deu errado. Uma coisa que me chamou a atenção [no filme] e que eu fiquei enlouquecida porque eu conheço uma empresa que faz exatamente aquele modelo de passarela de dois metros.

Andrea Dip – Gaiola, aquele gaiolão [passarelas fechadas mostradas no filme].

Tainá de Paula – Gaiola. Na forma como a sociedade se estabelece hoje, aquilo é um grande separador urbano, um grande enclave urbano, você não vê a pessoa que passa. E isso automaticamente se torna, nesse cenário de incerteza de segurança, claro, um ponto de insegurança central no tecido urbano desse território. E para as mulheres, nessa lógica misógina, passa automaticamente a ser um ponto onde a violência sexual pode ser aplicada e pode ser realizada. A gente também não tem um protocolo de segurança pública pensado para as mulheres, a Guarda Municipal deveria ter protocolo de segurança específico para violência de gênero e não tem. As criança têm, antigamente se tinha a figura do Guarda Municipal anti-capacitista para os possíveis portadores de deficiência da cidade, tem a Guarda Municipal, parte dela voltada para o turista, mas não tem Guarda Municipal especializada em violência de gênero. Então, as mulheres também precisam refletir sobre esse apagamento da condição feminina, dos corpos femininos. Paralelo a isso, eu acho também que existe na cidade, um pouco até do que já falamos, essa concepção de que estruturalmente a cidade é de todos, e todos é muita coisa, e todos vira ninguém quando você não repensa o planejamento urbano para os vários segmentos sociais. Acho que o planejamento urbano e os estudos preliminares de projetos de urbanismo e de arquitetura não refletem no Brasil as dificuldades e deficiências dos locais. As cidades que a gente tem hoje são um reflexo do nosso não-debate. A gente investe em transportes públicos de massa que não transportam determinada classe social, a gente tem metrô, o VLT, quantos negros conseguem pagar transporte público no Brasil e no Rio de Janeiro, especificamente, que é um dos transportes mais caros e mais não-inteligentes? A plateia começa a rir e o riso é de nervoso! Do ponto de vista de segurança das mulheres, as estações de trem são recordistas no índice de estupro ou de assédio, porque a partir de determinado momento ou horário elas ficam totalmente escuras em um perímetro de 600 metros. São Paulo tem um estudo de planejamento super interessante sobre mobilidade incluindo as mulheres, e está provado que as mulheres andam muito mais a pé, porque levam seus filhos na escola, nos postos de saúde, e a cidade não está preparada para isso. Acho que não está no projeto, não está no planejamento porque existe uma lógica estrutural que é machista e que nega o debate. E se eu não tenho debate, eu não tenho o reflexo disso no projeto.

Iazana Guizzo – Eu acho também que é uma combinação. Um fato que eu acho que é claro é: cidade vazia é cidade perigosa. Então, se a gente tem uma combinação social, machista, que leva à violência, se isso estiver vazio, vai ser perigoso.

Andrea Dip – Ou com muitos homens, né? Porque as mulheres também falam isso, “eu não passo onde tem muito homem”.

Iazana Guizzo – Sim, já sou acuada, né? Então, esse desenho de cidade que é uma cidade que não tem gente, não tem circulação. Eu falo isso porque eu tive a oportunidade de fazer um doutorado-sanduíche na França e foi uma coisa que me chamou muito a atenção, que lá cidade vazia é cidade segura, mesmo em Paris. O meu corpo não aceitava isso porque eu já entrava em estado de alerta, exatamente isso que a gente viu no filme. Respondendo bem diretamente a sua pergunta: acho que, evidentemente, uma certa espacialidade tem a ver, mas combinada com um certo arranjo social, cultural de um território. Uma coisa é a gente ocupar a cidade que está aí, o que é quase como uma espécie de redução de danos à situação que a gente vive, que é de não poder ocupar essa cidade. Vamos dizer assim, uma cidade feita por um pensamento funcionalista, machista, autoritário, capitalista. O que é defender uma cidade das mulheres? O que é isso? O que seria um desenho produzido por uma outra lógica? Esse desafio, eu tenho pensado nele há um tempo, e me evoca muito a ideia de a gente pensar uma outra cosmovisão com isso. Quando o Eduardo Ribeiro de Castro vai falar de uma perspectiva ameríndia em relação a uma perspectiva eurocêntrica, e que ele vai dizer “O que é o rio? É uma entidade”. Nessas cidades em que a gente está vivendo são esgotos, começa por aí, como é que uma entidade vira esgoto? Porque eu acho que defender uma perspectiva feminina é defender uma perspectiva da terra. Das árvores, dos rios, de um certo modo de estar no mundo que não é um… o Eduardo vai falar isso em relação à perspectiva Yanomami, a diferença de enxergar a Terra como um ser vivo, que respira, em contraponto a um lugar de onde eu extraio materiais e deposito lixo tóxico.

Andrea Dip – Vou aproveitar que você propõe isso e perguntar a mesma coisa para a Tainá: como seria uma cidade pensada para as mulheres?

Tainá de Paula – Em uma lógica utopista de cidade, que é tão importante para os urbanistas principalmente, a gente precisa fazer o exercício de ir na radicalidade do projeto para conseguir voltar no possível, e é um exercício que eu costumo fazer muito. Como lógica utopista de cidade, acho que a gente pode pensar cidades obviamente inclusivas e cidades que sejam, na sua gênese, fontes de transformações sociais, e que as pessoas consigam escolher, vivenciar e dividir as suas transformações, que isso seja um processo coletivo. Isso tem que ser feito de uma forma horizontal. Acho que o urbanismo africano vem ensinando muito isso, de como você usa matrizes culturais e matrizes sociais para pensar e refletir como eu ocupo esse território de uma forma que pode ser espontânea, em certa medida, mas que necessariamente escuta esse povo e essa forma de pensar e agir. Lá é muito comum a gente ter casas de parto junto com biblioteca, junto com escola, que é junto com unidade habitacional, esses espaços não podem ser tão pensados de forma funcional e distante. É fundamental ter uma cidade que não exclua isso, como é o caso das cidades brasileiras por exemplo, que investiu ao longo dos anos nessa lógica casa grande/senzala, e só substituiu para cidade satélite/centro altamente urbanizado e descaracterizado da sua potência original de subúrbio, cidades do interior, de cidade periurbana, que nos afasta de uma lógica de agricultura familiar, que nos afastou de uma lógica de tempo maior com a família. A gente precisa pensar em como essa nova urbanidade, essa nova forma de ocupação acabou nos distanciando do que é esse ser brasileiro, que é o sujeito que plantava mandioca no seu quintal em Quintino e agora não planta mais porque vendeu metade do lote ou criou-se um prédio no lugar daquele lote maravilhoso que ele tinha. E não só a classe média, mas os pobres tiveram muito impacto nessa mudança, nessa transformação da forma de moradia e como se alimenta, como vive, como se relaciona. A gente está no Rio de Janeiro, onde a Rocinha tem esse nome porque concretamente as pessoas tinham roçados nos seus lotes. Eu acredito muito nesse retorno não dessa imagem lúdica, perdida ou dessa caricatura desse viver brasileiro, mas em uma outra possibilidade, em outra forma de vida mais espaçada, que possibilite, por exemplo, crianças conseguirem ter acesso a ensino integral que funcione como um CEU, que permita um outro ritmo e outro acesso a várias culturas e a sua própria cultura, que permita que eu tenha hortas orgânicas internas nesse lote. Eu acredito que a estrutura urbana tem que ser injetada de lembretes e marcadores de uma vida possível. E a gente precisa começar a pensar esses espaços como potencial de transformação. E nessa estrutura capitalista do carro, que a Iazana colocou muito bem, que exclui homens, mulheres, crianças, todo mundo, a gente precisa criar os espaços de respiro que sejam verdes ou que sejam espaços coletivos.

Reprodução Youtube
Andrea Dip, Iazana Guizzo e Tainá de Paula conversaram sobre como o o medo de assédio e violência de gênero influenciam a forma que as mulheres ocupam a cidade

Andrea Dip – Voltando um pouco, como vocês acham que essa violência de gênero, com todas as suas interseccionalidades, se imprime nos nossos afetos, como ela se imprime na forma como a gente se relaciona com a cidade, de forma subjetiva?

Iazana Guizzo – Eu acho que o nosso corpo é produzido. Não há uma naturalidade, não somos naturais. Eu aposto em uma produção de subjetividade. Então todas as nossas práticas, os encontros ao longo da existência vão produzindo um certo modo de estar no mundo, uma certa maneira de sentir, de ver, de viver, de pensar, nada disso nasceu com a gente de fato. Há perspectivas que pensam isso, eu não penso, e a beleza de pensar assim é que a gente pode mudar, não há algo determinado, fechado em si. Então, nesse sentido, a produção do corpo da mulher é absolutamente tomada por machismo desde o início. se a gente começa a cavoucar, e acho que esse levante feminista está super forte, e a gente começa a conversar sobre isso, e a gente começa a pensar uma série de acordos tácitos que vão fazer com que nós mesmas nos causemos alguma espécie de repressão sem que isso precise ser dito. Você pega um relacionamento entre homem e mulher, por exemplo. Uma série de condutas que você toma sem ninguém ter te pedido para tomar, mas é adequado, é correto, é visto com bons olhos, é uma produção da sua família, é uma produção do bairro, é uma produção da novela, é uma produção do cinema, está em todo lugar. Como a gente vem disputando a cidade, quando você transgride algum desses acordos tácitos é que você percebe que ele é um acordo tácito. Nessa ocupação, nessa disputa pelo seu corpo, “meu corpo, minhas regras”, você vai, então, se defrontar com isso. Acho que a Tainá que sabe esses dados mas o Brasil é um dos países mais machistas do mundo, e a violência contra a mulher está muito longe de ser só de chegar às vias de fato, de chegar a ser estuprada, por exemplo. A violência está em não poder existir, não poder ocupar os lugares, ou quando pode ocupar, tem que ocupar na lógica masculina. Se eu sou arquiteta, eu sou arquiteta do concreto, eu uso roupas pretas, roupas específicas, sigo a linha de uma determinada arquitetura que garanta que as coisas reconheçam “ah, ela com certeza é arquiteta”. Mas vai você experimentar um modo singular de fazer as coisas. Porque eu acho que, quando a gente se coloca como minoria, e aí em um sentido deleuziano de se colocar contra o hegemônico, o menor é o que não está dado, é o que não é o modelo hegemônico, é o contra-hegemônico, só te resta a experimentação, e a experimentação vai sempre ser, de alguma maneira, desconfiada, errada. Dua mulheres andando na rua de mão dada, mulher saindo de maiô no Carnaval, que absurdo!

Andrea Dip – Mulher andando sozinha à noite. Você só precisa estar ali, seu corpo ali à noite já é errado, já é estranho.

Iazana Guizzo – E aí o bonito é que a cada coisinha dessa que a gente faz, a gente disputa a cidade. É uma disputa, é uma resistência é é o instaurar de um outro modus operandi ali na cidade. Por isso que é tão importante esse levante, tão importante a gente se encontrar, tão importante a gente de fato instaurar outras práticas. A disputa pela bicicleta na cidade também tem a ver com isso, entre outras coisas.

Pública – Vocês acham que esse medo é consequência de uma sociedade patriarcal, consequência de uma misoginia, no sentido de “por ser assim, estamos com medo” ou vocês acham que isso é uma ferramenta de dominação? Que isso não acontece por acaso e não é por acaso que a gente tem medo de andar na rua, que mandam a gente para casa, que não ocupamos os espaços que achamos que deveríamos ocupar. Vocês acham que isso é uma consequência dessa misoginia ou que isso é uma ferramenta de dominação de fato?

Tainá de Paula – De novo, acho que são as duas coisas, mas acho que esse modelo da dominação está diretamente ligado à opressão e à lógica machista de pensar esse corpo feminino. E aí, falando também do meu lugar de feminista marxista, e achando que a grande sacada do capitalismo é transformar o corpo da mulher em mercadoria em determinado ponto, em certa medida, seja ela passada através de um dote, seja ela sendo valorizada pela existência ou não de um hímen, seja ela sendo valorizada a partir de uma pele diáfana, pelas formas como ela se sociabiliza, se estão próximas de uma certa cultura eurocêntrica, e aí na lógica de aproximação de uma teoria branca, eurocêntrica, indo no gráfico, uma mulher negra pós-escrava, está na base dessa pirâmide de ranking entre mulheres, e a lógica de ranqueamento de corpos é uma lógica extremamente machista porque homens não passam por esse ranqueamento, na lógica capitalista todos estão em pé de igualdade, na lógica meritocrática, porque a gente sabe também que não existe esse igualdade entre os corpos de homens também. Algumas feministas colocam esse debate de que homens também passam por essa lógica patriarcal, esse marcador. Eu não chego a tanto, mas concordo que existe um debate a ser feito em relação ao corpo masculino também, e é um debate que eu faço por exemplo em relação aos corpos de homens negros, à luz do hiperencarceramento, genocídio da população e principalmente dos jovens negros. Mas voltando às mulheres, acho que esse isolamento das mulheres na categoria “mercadoria” fez com que, concretamente, isso fosse reproduzido na sociedade como objetificação. E aí, pegando esse objeto que ganha valor maior ou menor do ponto de vista financeiro, de potencial econômico que pode ser extraído naquela mercadoria, as mulheres se acostumaram consciente e inconscientemente a se tratar e se autorreferenciar na sociedade como objeto. Então a cultura da estética, a cultura do ranqueamento entre mulheres, isso tudo na verdade são subitens, sub-caixinhas nessa lógica capitalista de pensar os corpos. Eu sou uma feminista anticapitalista por essência, nosso gargalo central está aí. Por isso que em determinados momentos, quando eu vejo o feminismo caminhando para uma lógica muito liberal de pensar a individualidade, eu me incomodo muito. É claro que também não devemos perder de vista a garantia da identidade, e aí eu falo também do meu lugar de fala de mulher negra, vejo também que foi muito importante o feminismo negro pensar esses corpos individualmente e pensar a sua própria identidade. A gente precisa, no campo do mulherio preto, pensar nessa nova estética, que foi uma estética negada e que a gente tem que dar conta e dizer “não vamos questionar o tombamento da Karol Conká, deixa ela ser rica e poderosa porque é o que temos”. Se a gente for começar a criticar esse tipo de individualidade, a gente também precisa discutir antes por que é que essa individualidade foi negada, um pouco por aí. Por que é que esse corpo perdeu importância e agora ele exige uma importância, que é um pouco esse marcador que a gente precisa entender também. Mas acho que estamos em um momento, e eu tenho muita dificuldade de falar aqui “a culpa é da Primavera” porque as feministas históricas ficam uma arara comigo, mas a gente está em um momento que ainda é uma grande “ondona” da Primavera, a gente não pode deixar de falar sobre isso. A minha saída do armário está muito marcada na Primavera. Eu sempre fiz um namoro com o movimento de mulheres, principalmente as mulheres negras, mas é a partir da onda da Primavera que eu vejo, não só eu, mas várias outras mulheres se reivindicando mulheres feministas, no meu caso, mulheres feministas negras interseccionais. Acho que o clique é muito latente nessa época, e no Brasil não é diferente. E acho que a gente tem que surfar literalmente nessa onda para transformar esse novo comum, de a mulher não se entender, não querer se garantir como mercadoria.

Maria Bia – Onde é que entra, na visão de vocês, o direito das pessoas em situação de rua? E, dentro desse quadro, o direito das mulheres e crianças que vivem em situação de rua?

Pablo – Tenho uma professora que veio da República Tcheca que fala que, ao vir para o Rio, teve que aprender a ter medo da cidade, que lá ela não tinha medo da cidade. Mas, ao mesmo tempo, trata-se de um país do Leste Europeu tremendamente conservador e com um problema sério de tráfico humano e violência doméstica, o que leva o Brasil a ter a peculiaridade do assédio na rua como uma coisa muito forte na questão da misoginia. A demonstração da misoginia se dá pelo assédio, enquanto outros não são necessariamente assim, mas também são conservadores.

Iazana Guizzo – Se a gente tivesse uma cidade mais democrática, uma cidade minimamente estruturada, a gente não teria tanto esse modo de morar que, por um lado, nas condições em que a gente está, vive muita opressão, todos nós convivemos com isso. É gritante o aumento da população de rua no rio. E demonstra muito que isso não é uma questão só de opção, mas também pode vir a ser. E aí, acho que é essa a sua pergunta, a possibilidade de dar diferença em qualquer radicalidade desde que ela não seja fascista, se não vira um relativismo fascista, que também é um perigo. Mas uma garantia de que é possível habitar a cidade de muitas maneiras, inclusive questionando a cidade, o que eu acho que também tem nesse modo de morar, e que não é de hoje. A Grécia Clássica tinha essas figuras já para questionar. E aí, esse debate entra como por exemplo outros debates que trazem um pouco isso, que é a luta antimanicomial, por exemplo, que vai dizer assim “nos interessam diversos modos de viver, não só porque ‘ah, que legal, a gente não vai prender as pessoas que são diferentes'”, o que seria o mínimo, mas porque esses modos de vida singulares nos interrogam, nos colocam questões, nos deslocam desses modos absolutamente automáticos de viver. Então a diferença nos interessa enquanto cidade, quanto mais diferença, mais produção de criação, de liberdade, de existência.

Tainá de Paula – Acho exatamente isso, e acho que o Estado precisa ser, falando claramente, aparelhado para lidar com as diferenças e as multiplicidades. Se a gente pega estados liberais, e aí falando de Estados Unidos de novo, a população de rua norte-americana, tem um trabalho de assistência social muito bem estabelecido que lida com essa diversidade. Existem hotéis públicos, abrigos públicos, modelos de praça-abrigo. Existem outras formas de você lidar com a população de rua que não o aprisionamento, que não a locomoção para outro município, que é uma prática fascista clássica do Rio de Janeiro especificamente. E São Paulo agora com o Dória, meus pêsames. Internação compulsória, criminalização automática, esterilização compulsória, incêndio, enfim. Existem práticas concretas, estabelecidas, e outras veladas, que são automaticamente inseridas nesse estado enlouquecido, fascista que a gente tem hoje. Acho que a gente precisa ampliar o debate, pegando o gancho também da população de rua, de como essas formas não estão visibilizadas porque nós não fazemos o debate do tema. Não existe lá grandes comoções quando mendigos são removidos, por exemplo. Pelo contrário, as pessoas ligam para que os seus mendigos, a população de rua seja removida dos bairros. Eles são alocados para outro bairro, para outra cidade. Precisa estabelecer também a discussão coletiva desse modelo do Estado, e aí pegando o gancho de quem falou de como esse Estado dialoga, como esse Estado atua, ou quais políticas públicas esse Estado deveria tomar. O Estado, gente, infelizmente é o reflexo de como a sociedade se estabelece e se comporta. Se temos uma sociedade racista, automaticamente esse Estado será racista. Se temos um Estado fascista e conservador, automaticamente esse Estado será fascista e conservador. Existe uma ocupação da elite burguesa escravagista, homofóbica e racista? Existe. Mas existe também o período curto, mas existente e democrático nesse país, e já vimos, estamos vendo que é através do voto, o pior da nossa sociedade foi catapultado para esse lugar da institucionalidade.

Andrea Dip – Inclusive o Congresso mais conservador…

Tainá de Paula – … visto antes na história desse país. É importante a gente falar sobre isso porque se, de fato, existe a máquina econômica que gera quadros e faz com que esses quadros ocupem os espaços de representação, existe um não incômodo social sobre esses quadros. Ninguém sai pedindo a cassação do Bolsonaro, por exemplo. Nenhum petição pública, nenhuma comoção, no seio da sociedade, discutiu a atuação do Bolsonaro nos últimos quatro anos de Congresso. Ao contrário, ele tem um índice considerável de votantes e ainda não está em campanha eleitoral. É só a imagem dele que está sendo projetada e, infelizmente, as aberrações que ele fala. A gente precisa discutir com a sociedade, existe uma tarefa social a ser feita, e o conservadorismo está encontrando brechas e formas de se consolidar. No meu ativismo feminista eu acompanhei, no último ano, as aprovações dos planos municipais e estaduais de Educação, na rede feminista nacional. E saibam vocês que em 86% dos municípios que estruturam o estado do Brasil a palavra “gênero” foi retirada dos planos municipais de educação, inclusive nas casas legislativas do Rio de Janeiro. É importante a gente falar sobre isso. O plano municipal da cidade do Rio de Janeiro tem frases do tipo “gênero alimentício nas escolas”, e a frase ficou “alimentício nas escolas”, porque a assessoria da base legislativa conservadora sentou no computador, deu um “find”, “excluir” todo o conteúdo da palavra “gênero”. A gente precisa discutir no seio da nossa sociedade, nessa estrutura que a gente tem, o que está acontecendo. Porque isso só foi possível porque, de certa forma, a sociedade não discute gênero, então tudo bem tirar essa palavra’. Mas é essa palavra que gera e possibilita a discussão de violência sexual, a discussão de violência de gênero, a discussão da violência doméstica, a discussão das assimetrias de gênero e todas as identidades. Ou eu não posso falar sobre identidade nas escolas? Não, não posso. E acho que só através de um acesso ao sistema de educação e ao sistema de formação cultural para esse país é que a gente vai conseguir, na base estrutural, conseguir fazer essas modificações. Eu não sei como uma rede educacional que está construída dessa forma, atrelada a uma PEC do Teto que congela durante 20 anos investimento em saúde e educação vai construir as mentes pensantes desse país. Eu tenho muito medo.

Andrea Dip – Isso sem nem entrar nos projetos de Escola Sem Partido.

Iazana Guizzo – Sem nem entrar no Ensino Superior também.

Tainá de Paula – Sim. Então, eu acho que o caso é grave. A gente pode até ter uma onda feminista que a gente tem que surfar horrores nessa onda e transformá-la em um maremoto, mas o ataque ao modelo contrário, o backlash disso é enorme, e a gente está longe de se organizar como, por exemplo, as argentinas se organizaram nesta semana. Dois milhões de mulheres na rua em um frio de cinco graus.

Andrea Dip – Passaram a noite.

Tainá de Paula – Sim, 24 horas. Isso é estrutura social, mobilização social, e muita discussão coletiva sobre os temas. Acho que essas microrrevoluções só acontecem com grandes mobilizações sociais.

]]>
https://apublica.org/2018/06/mulheres-e-o-direito-a-cidade/feed/ 0
Afif usa dado falso e número sem contexto sobre empresashttps://apublica.org/2018/06/truco-afif-usa-dado-falso-e-numero-sem-contexto-sobre-empresas/ https://apublica.org/2018/06/truco-afif-usa-dado-falso-e-numero-sem-contexto-sobre-empresas/#respond Thu, 21 Jun 2018 15:29:41 +0000 http://apublica.org/?post_type=claim_review&p=47966
Antônio Cruz/Agência Brasil
Vice-governador do estado de São Paulo de 2011 a 2014, Afif defende a valorização de micro e pequenas empresas

Guilherme Afif Domingos (PSD) licenciou-se da presidência do Serviço Brasileiro de Apoio às Micro e Pequenas Empresas (Sebrae), em 6 de junho, para concorrer ao Palácio do Planalto. Sua nomeação ainda precisa ser aprovada na convenção do partido. Não é a primeira vez que Afif concorre à Presidência. Em 1989, foi candidato pelo PL (que virou PR, depois de se fundir com o PRONA), legenda que ajudou a fundar em 1985 e pela qual se elegeu deputado constituinte, em 1986. Antes disso, o presidenciável havia passado pelo PDS, de 1981 a 1985. Em 1990, migrou para o PFL (atual DEM), onde ficou até 2011, quando participou da fundação do PSD.

Foi vice-governador de São Paulo na chapa de Geraldo Alckmin (PSDB), de 2011 a 2014. Entre 2013 e 2015, ocupou o cargo de ministro-chefe da Secretaria da Micro e Pequena Empresa no governo Dilma Rousseff (PT). Durante toda sua carreira, defendeu os micro e pequenos empresários, levantando bandeiras como a diminuição de impostos e da burocracia e a distribuição de incentivos fiscais.

Como pré-candidato, Afif participou de um debate promovido pela Confederação Nacional de Municípios no dia 23 de maio. O Truco – projeto de fact-checking da Agência Pública, que vem analisando o discurso dos presidenciáveis – verificou cinco de suas falas na ocasião. A assessoria de imprensa do pré-candidato foi questionada sobre as fontes das informações usadas e respondeu dentro do prazo estabelecido. Afif é o 14º presidenciável checado pelo Truco.

Leia mais:

Rodrigo Maia usa dados sem contexto sobre educação

Aldo Rebelo usa dados falsos sobre golpe de 64, Copa e Amazônia

Manuela D’Ávila erra dados sobre segurança pública

 


“Se tiver 200 a 300 municípios no Brasil que tenham médias e grandes empresas é muito. Mas em todos os municípios brasileiros estão lá as micro e pequenas empresas.”

FalsoAfif subestimou a quantidade de municípios brasileiros que possuem grandes e médias empresas e ainda superestimou a quantidade dos que contam com pequenas empresas. As grandes empresas estão presentes em 1.721 municípios (30% do total), as médias em 3.847 e 1.655 municípios possuem empresas grandes e médias ao mesmo tempo. Além disso, existem 108 municípios que não possuem empresas de pequeno porte. Somente as microempresas estão presentes em todos. Portanto, é incorreto dizer que as micro e pequenas empresas estão em todos os municípios brasileiros, como alega Afif. A frase é falsa.

De acordo com o Estatuto Nacional da Microempresa e da Empresa de Pequeno Porte (Lei Complementar nº 123/2006), são consideradas microempresas aquelas com receita bruta até R$ 360 mil. Entre R$ 360 mil e R$ 4,8 milhões, são empresas de pequeno porte. Acima de R$ 4,8 milhões, são classificadas como empresas de médio e grande porte. Para o Banco Nacional de Desenvolvimento Econômico e Social (BNDES), as médias empresas são aquelas com receita bruta anual maior que R$ 4,8 milhões e menor ou igual a R$ 300 milhões, e as grandes têm o faturamento anual maior que R$ 300 milhões.

O DataSebrae é o único órgão que possui dados da distribuição de empresas por porte nos municípios, levando em conta o faturamento anual. Diferentemente do que diz a lei federal, o órgão considera como empresas de pequeno porte aquelas com até R$ 3,6 milhões de faturamento anual. O IBGE só possui dados de empresas segundo seu número de funcionários e não as classifica quanto ao porte.

O Brasil possui 5.570 municípios, segundo dados do IBGE. Desses, de acordo com o DataSebrae, 3.913 possuem médias ou grandes empresas – número bastante superior ao citado por Afif. As grandes empresas estão presentes em 1.721 municípios e as médias, em 3.847. Já os municípios que abrigam, ao mesmo tempo, empresas médias e grandes, são 1.655. Os dados foram calculados a partir do levantamento do Sebrae de 2014, último disponível.

No que diz respeito às micro e pequenas empresas, as primeiras realmente estão presentes em todos os municípios, segundo o órgão. No entanto, as pequenas, com faturamento entre R$ 360 mil e R$ 4,8 milhões, estão em apenas 5.462 deles – em 108 municípios brasileiros não há pequenas empresas.

Questionada, a assessoria de imprensa do pré-candidato argumentou que com a frase, Afif quis “ilustrar a extrema concentração econômica brasileira”, não dizer literalmente que apenas entre 200 e 300 municípios possuem médias e grandes empresas concomitantemente. Para isso, eles utilizam dados do IBGE que dizem que 25 municípios concentram 37,7% de participação no PIB. Os outros 5.545 repartem os 62,3% restantes.

A assessoria também citou dados do Anuário do Trabalho nos Pequenos Negócios 2016, realizado pelo Sebrae em parceria com o Dieese. O documento determina o porte de empresas a partir do número de funcionários e utiliza dados do IBGE para determinar a quantidade de empresas. Conclui que os municípios com mais de 100 mil habitantes concentram 80,8% das grandes e médias empresas. Ou seja, ainda sobra 19,2% de empresas deste porte espalhadas por outros municípios.

Ao ser informada da classificação da checagem, a equipe de Afif destacou que o primeiro trecho não seria propriamente uma afirmação por conta do uso da expressão “se tiver” e que a frase abordava a desigualdade econômica brasileira. “Salientando que em 316 municípios (acima de 100 mil habitantes) temos 80,8% da médias e grandes empresas segundo o Anuário do Trabalho nos Pequenos Negócios 2016 (Sebrae – Dieese; 2017)”, afirma.

“O crédito não chega: 84% das micro e pequenas empresas não veem a cor do crédito.”

Sem contextoA afirmação do pré-candidato traz um dado verdadeiro, mas falta contexto indispensável à compreensão do tema. É verdade que 84% das micro e pequenas empresas não viram “a cor do crédito” no ano passado, como alega Afif. No entanto, isso ocorreu porque essas empresas não tentaram conseguir empréstimos – apenas 16% das empresas desse porte tentaram obter crédito. Além disso, faltou dizer que o número só vale para os empréstimos concedidos em 2017. A mesma pesquisa mostra que 51% das empresas de micro ou pequeno porte já utilizaram linhas de crédito antes, ou seja, já obtiveram empréstimos anteriormente. Por isso, a afirmação foi considerada sem contexto.

A fonte do dado citado por Afif é o estudo O Financiamento das Micro e Pequenas Empresas no Brasil, realizado pelo Sebrae em 2017. A pesquisa mostra que 84% das micro e pequenas empresas não pegaram empréstimos em 2017. Segundo o estudo, isso aconteceu porque elas não tentaram, não porque o crédito foi negado. Dentro do grupo que não tentou, 39% disseram não precisar de empréstimo, 16% não gostam de empréstimo, 15% não confiam na política econômica, 11% não conseguiriam pagar e 6% não gostam de pagar juros altos. Portanto, as principais razões das micro e pequenas empresas não solicitarem crédito, no ano de 2017, foram a falta de interesse ou de necessidade.

Além disso, somente 49% dos micro e pequenos empresários afirmam nunca ter solicitado crédito pela empresa e 51% já o fizeram, segundo a mesma pesquisa do Sebrae. Desses últimos, apenas 16% deles já tiveram o pedido de crédito negado alguma vez. Entre 2013 e 2017, 36% das micro e pequenas empresas tomou ou manteve empréstimo em algum momento.

Outra pesquisa, realizada pelo Serviço de Proteção ao Crédito (SPC) em junho de 2017, reforça a falta de interesse dos micro e pequenos empresários em contratar crédito. O estudo foi feito com base no Indicador de Demanda por Crédito do Micro e Pequeno Empresário de Varejo e Serviços, que leva em conta 800 empreendimentos com até 49 funcionários nas 27 unidades da Federação, e mostrou recuo na demanda por crédito – 85% das micro e pequenas empresas disseram não querer empréstimos nos três meses seguintes à pesquisa. Apenas 6% delas declararam interesse. Entre as que não tinham interesse, 39% disseram conseguir se manter com recursos próprios e 28% justificaram a decisão devido às altas taxas de juros. No que diz respeito às dificuldades de conseguir empréstimos, o estudo do SPC diz que 37% dos empresários consideram contratar crédito algo difícil.

Procurada pelo Truco, a equipe do pré-candidato confirmou que a fonte do dado é o relatório O Financiamento das Micro e Pequenas Empresas no Brasil, mas destacou outro dado da pesquisa, que fala sobre a percepção de dificuldade do crédito, e não sobre a utilização de crédito. “Só 16% dos pequenos negócios tentaram empréstimos novos nesse ano e a maioria (82%) enfrentou dificuldades para sua obtenção, sendo os juros altos (48%) e a falta de garantias (20%) as principais. Disso resulta a citação de que 84% não tem acesso”, explicou a assessoria. No entanto, alegar dificuldades de obter crédito não quer dizer que as solicitantes tiveram os empréstimos negados, como mostram números da própria pesquisa.

A assessoria de imprensa do pré-candidato disse, depois de atribuído o selo à frase, que o contexto da fala foi em relação à burocracia que as pequenas empresas têm que superar para conseguir os empréstimos. “Muitas não tentaram conseguir empréstimos porque muitas delas nem possuem quadros técnicos para superar essa burocracia. Portanto, a fala foi em relação a importância da desburocratização”, diz.

“Na Constituinte nós colocamos que é proibido todo e qualquer trabalho de menores de 14 anos. Aí a turma resolveu e mudou, não é 14, é proibido todo e qualquer trabalho para menores de 16 anos, com exceção do aprendiz a partir dos 14 anos. E fizeram uma lei de aprendizado só para as grandes empresas, que representam 2% do universo das empresas. E nós esquecemos de fazer uma lei de aprendizado para 98% das empresas, que são as micro e pequenas empresas.”

VerdadeiroNão existe uma lei de aprendizagem específica para as micro e pequenas empresas no Brasil. A afirmação de Afif é verdadeira. A assessoria de imprensa do presidenciável informou que retirou as informações da Constituição Federal, do Manual da Aprendizagem de 2009 do Ministério do Trabalho e do Boletim do Sebrae de dezembro de 2017.

No artigo 121 da Constituição Federal de 1934 foi proibido o trabalho para menores de 14 anos, o trabalho noturno foi permitido para maiores de 16 anos e o emprego em indústrias insalubres foi negado para menores de 18 anos e mulheres. Na Constituição de 1967, a idade mínima diminuiu para 12 anos. Na Constituição Federal de 1988, voltou a restrição a menores de 14 anos, e uma emenda constitucional de 1998 elevou a faixa etária para 16 anos. Ou seja, atualmente, é negado qualquer emprego a menores de 16 anos de idade, exceto na condição de aprendiz, a partir dos 14 anos, de acordo com o artigo 403 da Consolidação das Leis do Trabalho (CLT).

O Estatuto da Criança e do Adolescente (ECA) e a CLT regulamentam as condições e os direitos dos jovens e das empresas contratantes. De acordo com o artigo 429 da CLT, os estabelecimentos de qualquer natureza, que tenham pelo menos 7 empregados, são obrigados a empregar o número de aprendizes equivalente a partir de 5% a 15% dos trabalhadores existentes em cada estabelecimento, cujas funções demandem formação profissional.

Contudo, é facultativa a contratação de aprendizes pelas microempresas, empresas de pequeno porte (inclusive as que integram o Sistema Integrado de Pagamento de Impostos e Contribuições, denominado como “Simples”) e entidades sem fins lucrativos que tenham por objetivo a educação profissional. E, quando ocorrer a contratação por parte delas, deverão seguir as mesmas leis de aprendizagem que as outras empresas – com exceção da obrigação de matricular seus aprendizes nos cursos dos Serviços Nacionais de Aprendizagem, segundo o Estatuto Nacional da Microempresa e da Empresa de Pequeno Porte.

Quanto ao total de pequenos negócios no Brasil, a assessoria de imprensa de Afif encaminhou o Boletim do Sebrae de dezembro de 2017, que constata que, em 2015, 98,5% das empresas privadas no país eram de pequeno porte (EPP), microempresas (ME) e de microempreendedores individuais (MEI), mas não especifica a porcentagem para as de médio e grande porte. O documento O Público do Sebrae, publicado em junho do ano passado – que procura detalhar o perfil dos empreendedores de pequenos negócios no país – revela que em 2016, existiam cerca de 12 milhões de empresas no Brasil. Desse total, 98,5% são pequenos negócios (MEI, EPP, ME) e 180 mil (1,5%), empresas de grande e médio porte.

“Existem 508 mil imóveis da União em mãos particulares.”

FalsoDurante o debate promovido pela Confederação Nacional de Municípios, Afif também falou sobre os imóveis da União concedidos a particulares e os de utilização pública. Apesar de ter comentado os dois casos em uma única frase, o Truco dividiu a afirmação em duas partes porque os selos atribuídos a cada trecho são distintos. O número usado pelo pré-candidato sobre imóveis do governo federal em mãos de particulares é antigo. Hoje, há 632.556 imóveis da União em uso dominial, que são imóveis públicos em uso por particulares. A frase é, portanto, falsa.

Procurada pelo Truco, a assessoria de imprensa de Afif alega que a fonte do dado é uma página do Ministério do Planejamento, Desenvolvimento e Gestão. No link enviado o ministério faz um balanço de quantos imóveis a União tem. “A União possui 30.993 imóveis de uso especial […] e 508.629 imóveis de uso dominial”, atesta o ministério. O dado, extraído dos sistemas SIAPA e SPIUnet, é referente ao ano de 2011.

O número utilizado por Afif e contido no link, contudo, está bastante desatualizado. Os arquivos da Secretaria de Patrimônio da União (SPU), vinculada ao Ministério do Planejamento, mostram que na verdade já são mais 600 mil os imóveis da União em uso por particulares. Os dados da planilha são de maio de 2018.

Os imóveis de uso dominial, quando utilizados por particulares, exigem o pagamento de uma retribuição pela utilização privada de um bem público. Assim, os recursos gerados dessa forma são conhecidos como receitas patrimoniais. No entanto, as taxas cobradas mensalmente pela concessão desses imóveis variam enormemente e podem ser de apenas 0,6% do valor avaliado do imóvel.

Comunicada do resultado da apuração, a assessoria de imprensa de Afif admitiu que o número usado é antigo. “O contexto da fala foi em relação a dificuldade dos municípios realizarem PPPs devido à capacidade de garantia.
O que foi proposto é a criação de um fundo da União que garantisse aos investidores a parceria. E a proposta foi criar um fundo com garantia dos imóveis da União. Quanto mais imóveis, mais garantia e mais municípios serão atendidos. O número é antigo (2011), mas não é falso, e está no site do Ministério do Planejamento. Se hoje há mais de 500 mil quer dizer que a proposta se torna mais viável ainda, atendendo mais municípios.”

“[Existem] mais 38 mil [imóveis da União] de utilização pública.”

VerdadeiroNo segundo trecho da frase em que aborda o número de imóveis da União, Afif aponta que são mais de 38 mil os imóveis de utilização pública, ou seja, os que estão em uso para o serviço público. O número corresponde ao indicado pela SPU em maio de 2018. Por isso, a frase é verdadeira.

Quando procurado pelo Truco, o pré-candidato apontou como fonte do dado um link com números desatualizados, diferentes do que ele indicou em seu pronunciamento. No link enviado à reportagem, consta que a União possui 30.993 imóveis de utilização pública. Na planilha mais atual, de maio de 2015, são 38.435 imóveis. O número mais recente corresponde ao apontado pelo pré-candidato no debate, quando ele falou em “mais de 38 mil” imóveis classificados como “uso especial”.

Os imóveis da União de uso especial são aqueles que se destinam à execução de serviços administrativos ou à prestação de serviços públicos em geral, como prédios de repartições públicas, escolas, hospitais ou outros equipamentos públicos, sejam eles de administração federal, estadual ou municipal.

Veja outras checagens dos presidenciáveis

]]>
https://apublica.org/2018/06/truco-afif-usa-dado-falso-e-numero-sem-contexto-sobre-empresas/feed/ 0
Milhares de imóveis da União estão vagos para usohttps://apublica.org/2018/06/milhares-de-imoveis-da-uniao-estao-vagos-para-uso/ https://apublica.org/2018/06/milhares-de-imoveis-da-uniao-estao-vagos-para-uso/#respond Thu, 21 Jun 2018 15:21:18 +0000 http://apublica.org/?p=47983 No centro do Rio de Janeiro, a dois quarteirões da Igreja da Candelária, um edifício de 11 andares permanece vazio há cerca de oito anos. Conhecido como Palácio dos Esportes, o prédio serviu de sede para a Fundação Centro Brasileiro para a Infância e Adolescência (FCBIA), extinta em 1998, e, depois, para diversas associações esportivas que o ocuparam esporadicamente. O edifício chegou a ser cotado para servir de sede do Porto Maravilha. A reforma do Palácio dos Esportes, contudo, foi descartada, pois considerou-se inviável a obra: somente o custo inicial do projeto de readequação das instalações era de R$ 4,2 milhões.

Abandonado, o prédio, propriedade da União, foi ocupado por um grupo não identificado em agosto de 2015 e esvaziado, no dia seguinte, pela Polícia Militar. Hoje, segue com as portas fechadas e deve ser destinado à Marinha, que assumirá o ônus da recuperação e manutenção das instalações.

Google Street View
Edifício “Palácio dos Esportes”, propriedade da União no Centro do Rio de Janeiro, vazio ou ocupado irregularmente há oito anos

O Palácio dos Esportes é apenas um entre os mais de 10 mil imóveis do governo federal que estão vagos, segundo a Secretaria de Patrimônio (SPU), ligada ao Ministério do Planejamento.

A partir de dados abertos da SPU, a Pública apurou que, dos 10.304 imóveis que a secretaria afirma estarem desocupados, apenas 2.647 estão indicados nos dados disponíveis ao público.

Essa diferença de 7.657 imóveis desocupados que não constam na lista não foi explicada pela SPU até o fechamento da matéria – a secretaria se limitou a informar que o levantamento dos 10 mil imóveis vagos foi realizado em dezembro de 2017.

Além disso, na mesma base, outras 16 mil propriedades não possuem informação se estão ou não ocupadas. Procurada, a assessoria da SPU respondeu que pode haver mais imóveis vagos entre esses 16 mil e que essas propriedades “estão passando por um processo de recadastramento que teve início este mês [junho] e deverá estar concluído no final do ano”.

Principais tipos de imóveis vazios

Além dos comprovadamente vagos, podem existir muitos outros, já que propriedades cedidas a outros órgãos, como governos e prefeituras, podem estar sob a descrição de “em guarda provisória”, caso do edifício Wilton Paes de Almeida, que desabou após um incêndio no centro de São Paulo no início de maio.

O Wilton Paes de Almeida, por exemplo, não era utilizado pelo governo havia mais de dez anos. Em outubro de 2017, a União passou o imóvel para a prefeitura de São Paulo. A justificativa era que a prefeitura deveria prevenir “invasões e depredações” e fazer limpeza periódica.

O cadastro atual da SPU lista 433 imóveis em guarda provisória em todo o país. Segundo a secretaria, a responsabilidade pela gestão do imóvel passa para quem o recebe.

Além disso, há ainda imóveis que estão desocupados e em reforma há muitos anos, sem que isso conste na listagem da SPU. Em outro exemplo no centro de São Paulo, um prédio cedido ao Tribunal Regional Eleitoral de São Paulo (TRE-SP) está desde 2014 em processo de readequação. A previsão de utilização do espaço é apenas em 2020.

Google Street View
Edifício do TRE no Centro de SP está em obras há quatro anos e deve ser entregue apenas em 2020

Imóveis sem uso podem ser transformados em moradia para sem-teto

A dois quarteirões dos escombros do edifício Wilton Paes de Almeida, no centro de São Paulo, localiza-se o condomínio Dandara. O antigo prédio da Justiça do Trabalho, vazio durante dez anos, foi totalmente reformado e entregue a 120 famílias do movimento de Unificação das Lutas de Cortiços e Moradia (ULCM).

O Dandara foi o primeiro edifício reformado pelo programa Minha Casa Minha Vida Entidades em São Paulo. Em 2009, o prédio vazio foi ocupado por integrantes da ULCM que pressionaram o Governo Federal para que houvesse uma destinação ao imóvel. A resposta veio em 2010, quando o Dandara foi cedido pela União através de uma Concessão de Direito Real de Uso (CDRU), uma das formas existentes para destinar propriedades à habitação popular.

“A nossa organização não ocupa para morar [indefinidamente]. Se tem um prédio vazio, sem função social, a gente ocupa para criar um fato para que o governo olhe para aquilo que está abandonado”, explica a síndica do condomínio, Marli Baffini. Com a cessão do uso, a ULCM deixou o espaço para que as reformas ocorressem. A readequação, chamada de “retrofit”, levou cerca de quatro anos e custou R$ 12 milhões.

No centro do Rio de Janeiro, a Ocupação Manuel Congo, que já existe há cerca de dez anos, também foi reformada por meio do Minha Casa Minha Vida Entidades. O prédio, antiga sede do Instituto Nacional do Seguro Social (INSS), é hoje lar de cerca de 40 famílias do Movimento Nacional de Luta por Moradia (MNLM).

Atualmente, a SPU lista 1.684 terrenos cedidos através da CDRU em todo o Brasil, a maior parte em Maceió (450), em Alagoas. Há, ainda, 939 imóveis de uso especial concedidos para moradia (CUEM) – forma de cessão gratuita de imóveis públicos em área urbana, mais da metade (499) em Belém, no Pará.”

Segundo Danielle Klintowitz, arquiteta do Instituto Pólis – organização não governamental que desenvolve políticas públicas na área urbana –, o déficit habitacional poderia ser atenuado se parte dos imóveis vagos da União fosse reaproveitada para moradia, o que ela considera obrigação constitucional do governo brasileiro. “A Constituição fala sobre a função social da propriedade pública e privada. Quando a União deixa esses imóveis vagos em áreas centrais, ela está fazendo uma medida inconstitucional porque não dá função social para os imóveis”, afirma Danielle. Na avaliação da arquiteta, disponibilizar imóveis da União para habitação pode evitar que tragédias como a ocorrida no Largo do Paissandú se repitam. “A gente deveria ter um sistema mais ágil de destinação desses imóveis. O que a gente tem hoje é que a SPU tenta cobrir o passivo de décadas”, comenta.

Na experiência de Fernanda Accioly, que trabalhou na SPU de 2010 a 2013, a transferência de imóveis da União para moradia passa por uma série de obstáculos que vão desde a resistência de funcionários públicos à falta de organização de movimentos de moradia em determinadas localidades, além da recusa de prefeituras de conduzir projetos de habitação em terrenos valorizados. “Um grande interlocutor para essa proposta se concretizar são as prefeituras, que muitas vezes não aceitavam que determinadas áreas bem localizadas com serviço de infraestrutura e transporte fossem disponibilizadas para fazer habitação de interesse social. Às vezes era preciso mudar o zoneamento ou aprovar o projeto, e eles não se dispunham”, relembra.

Margareth Uemura, coordenadora entre 2004 a 2006 do Programa de Reabilitação de Áreas Centrais, da extinta Secretaria de Programas Urbanos, critica o fato de que o Minha Casa Minha Vida tenha destinado mais recursos para empreiteiras construírem novas habitações em vez de financiar a reforma de imóveis abandonados. “O Minha Casa Minha Vida foi um programa declaratoriamente feito para movimentar recursos da economia destinados à empreiteiras e aos grandes conjuntos”, avalia.

No mesmo sentido, a professora da Faculdade de Arquitetura e Urbanismo da Universidade de São Paulo (FAU/USP) Maria Lucia Refinetti afirma que a compra de terrenos para construção de moradia pode sair mais caro para as políticas habitacionais. “Não adianta a União se desfazer de um imóvel público para fazer dinheiro e depois adquirir [outro imóvel] para fazer política de habitação se precisar fazer desapropriação e acabar pagando mais por isso”, pondera. Na avaliação de Klintowitz, outro problema do Minha Casa Minha Vida foi a construção de moradia em áreas mal localizadas. “Se esse programa tivesse acontecido de verdade, a gente poderia ter produzido unidades habitacionais mais bem localizadas”, analisa.

Em Brasília, condomínio privado disputa terra pública

Segundo os registros da SPU, a cidade brasileira que mais possui imóveis da União vagos para uso é Brasília. Lá, a secretaria aponta 173 terrenos ociosos, a maioria deles, 96, na região administrativa de Santa Maria, antiga área de assentamento de famílias de baixa renda no sul do Distrito Federal.

Nessa região está o Residencial Santos Dumont, loteamento privado de casas envolvido em uma disputa com a Agência de Fiscalização do Governo do Distrito Federal (Agefis). Construído inicialmente como moradia para militares da aeronáutica, o condomínio passou a ser residência de civis – cerca de 14 mil pessoas vivem no local.

Em 2015, o residencial foi notificado pela Agefis por ter cercado irregularmente o seu entorno, isolando terrenos e serviços públicos, como uma escola e um posto policial. A Agefis ordenou a derrubada de 2 quilômetros do cercamento, mas, contestada pelos moradores, a decisão não foi levada adiante. Segundo a Agefis, o residencial “não é um local de prioridade de fiscalização neste momento”. Já a administração do condomínio afirma que a cerca sempre existiu e negou ocupar terreno público.

Google Street View
A SPU aponta que a maior parte dos terrenos vagos do Distrito Federal está nas proximidades do Condomínio Santos Dumont, que foi notificado pelo governo por cercar área pública

Além dos imóveis ociosos em Santa Maria, Brasília possui terrenos vagos em áreas nobres do Plano Piloto, como nas asas Norte e Sul. A Asa Norte é a campeã, com 38 terrenos vagos para uso; já na Asa Sul são seis. Fora os terrenos, as duas asas juntas possuem 49 apartamentos vagos. Há, ainda, dois andares em edifícios, três salas e duas residências vagas.

O segundo município brasileiro com mais imóveis vagos para uso é outra capital: Campo Grande, no Mato Grosso do Sul. Na cidade, a maior parte dos imóveis vagos são terrenos, sobretudo os lotes do Jardim Imá, área ao redor do aeroporto e da base aérea da Força Aérea Brasileira (FAB).

A terceira cidade na lista também fica no Mato Grosso do Sul: Ponta Porã, na divisa do estado com o Paraguai. O município possui 112 imóveis vagos para uso, a maioria deles terrenos vagos na Vila Militar, bairro próximo ao centro da cidade.

Cidades com mais imóveis vagos

Campo Grande e as cidades fronteiriças do Mato Grosso do Sul fazem do estado um dos com mais imóveis vagos para uso entre os estados brasileiros. O topo da lista, contudo, é ocupado por São Paulo – o estado mais populoso do país tem 622 imóveis da União ociosos, muitos deles ex-propriedades de estatais extintas ou privatizadas.

Estados com mais imóveis vazios

Os terrenos ociosos fruto das privatizações da década de 1990

A cidade paulista com mais imóveis vagos é Araraquara, onde há 103 terrenos da União sem uso. Boa parte são lotes das antigas Rede Ferroviária Federal (RFFSA) e Ferrovia Paulista S.A. (Fepasa), estatais privatizadas no final da década de 1990 pelo governo Fernando Henrique Cardoso (PSDB). Extintas, as estatais deixaram para trás terrenos não apenas em Araraquara, mas em todo o interior paulista.

Em Leme, um terreno abandonado da Fepasa chegou a ser ocupado por 120 famílias sem-teto em agosto de 2017. As famílias foram expulsas pela PM em outubro de 2017.

Em Campinas, um edifício e dois terrenos da antiga malha ferroviária foram cedidos pela SPU à prefeitura, um deles para projetos habitacionais para famílias de baixa renda.

A prefeitura de Rincão chegou a ser incluída no Cadastro Informativo de Créditos não Quitados do Governo Federal – que limita as verbas recebidas da União – por dívidas na compra de terrenos da Fepasa na década de 1990.

]]>
https://apublica.org/2018/06/milhares-de-imoveis-da-uniao-estao-vagos-para-uso/feed/ 0
Investigação indica que dinheiro dos credores da Boi Gordo virou terra em Matopibahttps://apublica.org/2018/06/investigacao-indica-que-dinheiro-dos-credores-da-boi-gordo-virou-terra-em-matopiba/ https://apublica.org/2018/06/investigacao-indica-que-dinheiro-dos-credores-da-boi-gordo-virou-terra-em-matopiba/#respond Tue, 19 Jun 2018 15:00:12 +0000 http://apublica.org/?p=47934 O dinheiro que deveria ter sido pago aos mais de 30 mil credores de uma das maiores falências da história do Brasil serviu para engordar o patrimônio do Grupo Golin, grande conglomerado do agronegócio. Segundo investigação realizada por empresa contratada pela massa falida e supervisionada pelo Ministério Público (MP), parte dos R$ 6 bilhões (em valores atualizados) devidos aos investidores lesados virou terra. E das boas: dezenas de milhares de hectares na disputada região do Matopiba (sigla formada pelas iniciais dos estados Maranhão, Tocantins, Piauí e Bahia), considerada pela Empresa Brasileira de Pesquisa Agropecuária (Embrapa) a última fronteira agrícola do país. Segundo a consultoria Informa Economics FNP, o preço médio da terra bruta por hectare na região é de R$ 12.625,00 (dados de fevereiro de 2018). Grilagens e especulação imobiliária no Matopiba são investigadas pela Pública desde o início deste ano.

Parte do portfólio de um dos maiores fundos de investimentos em terras do Brasil, o Vision Brazil Investments, foi formada por meio de empréstimos a pessoas ligadas ao Grupo Golin, inclusive por um suposto “fantasma”. A Vision teve papel decisivo no retorno do dinheiro desviado da falência, de acordo com uma investigação de dez anos feita pela empresa Offshore Asset Recovery (OAR), contratada pelo síndico da falência, o advogado Gustavo Sauer, sob supervisão do MP de São Paulo. Após ter lucros milionários em operações de empréstimo firmadas com a Vision, o Grupo Golin reinvestiu valores na compra de fazendas no cerrado de Matopiba, valorizado pelo agronegócio, em estados como Piauí, Bahia e Mato Grosso. A denúncia dos representantes dos credores já rendeu ao Grupo Golin uma condenação confirmada em segunda instância no Tribunal de Justiça de São Paulo. A Vision foi condenada em primeira instância pela mesma investigação, mas teve a sentença anulada porque um juiz de segunda instância aceitou o argumento de “cerceamento de defesa” sem avaliar o mérito. Os credores, porém, ainda não viram um tostão. O total de desvio de bens, em valores atualizados, é de cerca de R$ 612 milhões.

José Cícero da Silva/Agência Pública
Áreas do topo da chapada do Matopiba são ideais para o cultivo de commodities e foram cobiçadas pelo mercado financeiro nos últimos anos

A falência em questão é a das Fazendas Reunidas Boi Gordo, um império da pecuária que veio abaixo em 2004, depois de ter vendido investimentos em cabeças de gado prometendo retornos muito acima do mercado: 40% de lucro em um ano e meio, em uma época em que o investimento em pecuária rendia cerca de 9% anuais. Acabou se revelando uma arapuca. Para o MP de São Paulo, o esquema ruiu por se tratar de uma pirâmide financeira.

Fundada em 1988, a Boi Gordo virou febre de investidores em meados dos anos 1990. O presidente da empresa, Paulo Roberto de Andrade, inspirou o autor Benedito Ruy Barbosa, da TV Globo, na composição do personagem Bruno Mezenga, protagonista da novela O rei do gado, imortalizado por Antônio Fagundes. As fazendas da Boi Gordo serviram de cenário para a novela global, inclusive para a abertura, que mostrava Fagundes montado em um cavalo girando entre a boiada ao som dos violinos do grupo Orquestra da Terra.

Fagundes e Ruy Barbosa também caíram no conto da Boi Gordo e hoje integram a massa falida da empresa. Outros globais deram com os burros (ou bois) n’água, como a atriz Marisa Orth e o designer Hans Donner, criador do logotipo da Globo, além de celebridades do mundo do futebol como os ex-jogadores Evair, Vampeta, César Sampaio e o técnico pentacampeão Luiz Felipe Scolari. Até o “Tremendão” Erasmo Carlos entrou na fria. Os mais prejudicados, porém, foram cidadãos de classe média: 70% dos credores da Boi Gordo fizeram aplicações inferiores a R$ 40 mil. Em termos geográficos, a gama de investidores é proveniente de todos os estados do país e de outros 18 países como Alemanha, Argentina, França, Inglaterra, Estados Unidos, Suíça e Portugal, por exemplo.

Aposentados como Wilma de Medeiros Gelesko, 84 anos, perderam as economias de uma vida. Viúva, ela trabalha até hoje numa papelaria no bairro do Tatuapé, zona leste de São Paulo. Com o sotaque paulistano carregado, conta que foi levada ao investimento pelas mãos do falecido marido, o contador Jorge Gelesko Júnior, e chegou a ter R$ 14 mil em investimento – além das aplicações do marido de R$ 60 mil – em valores da época. “Meu marido foi convencido por um colega de que aplicar na Boi Gordo seria um excelente negócio”, conta. “Ele me dizia que esse investimento seria a segurança da nossa velhice, eu já estava me aposentando na época que eu investi”, diz, lembrando que a aplicação foi feita pelo casal entre 1996 e 1997, época da primeira exibição de O rei do gado. “Eu me sinto esperançosa ainda. O meu filho sempre diz pra mim: ‘Você não vai receber esse dinheiro, quem vai receber são as suas netas’. Mas eu falo não, eu acho que vou receber sim”, afirma.

Caio Castor/Agência Pública
“Eu me sinto esperançosa ainda”, afirma Wilma Gellesko, que aplicou as economias de uma vida na Boi Gordo

Wilma participa de uma das cinco associações de credores, a XV de Outubro, que tem 565 integrantes e foi fundada pelo radialista e ex-deputado estadual Afanásio Jazadji, outro lesado pela empresa. A maior delas é a Associação dos Lesados pela Fazenda Reunidas Boi Gordo S/A (ALBG) e Empresas Coligadas e Associadas, com cerca de 8.400 pessoas cadastradas e mais de R$ 500 milhões em créditos a receber. O diretor da ALBG, José Luiz Peres, é ex-corretor da empresa. “Eu vendia bois para a Boi Gordo, era corretor, trabalhei dois anos lá. Era um bom investimento. Meu pai vendeu a casa dele e colocou na Boi Gordo. Eu pago aluguel com a minha mãe até hoje”, relata Peres, que herdou os créditos do pai. Também há grupos de credores não reunidos em associações.

O misterioso sumiço dos bens

A Boi Gordo pediu concordata em outubro de 2001. Prevista em um decreto-lei de 1945 (já revogado), a concordata era uma forma de se evitar a falência e obter desconto nas dívidas da empresa. Em troca, as empresas beneficiadas por esse instrumento legal se comprometiam em pagar seus credores em dois anos. O pedido foi feito na cidade de Comodoro, município mato-grossense próximo à fronteira com a Bolívia, situado a mais de 600 quilômetros de Cuiabá, para onde o antigo dono do império da Boi Gordo, Paulo Roberto de Andrade, transferiu a sede da empresa dois meses antes. A mudança de sede foi contestada de imediato por grupos de advogados dos credores, que a viram como artimanha para fraudar as dívidas. Depois de uma longa discussão judicial sobre se a concordata deveria correr em São Paulo ou no Mato Grosso, em outubro de 2003 o STJ definiu que o processo deveria correr em terras paulistas.

Essa questão de competência ainda não havia sido decidida quando Paulo Roberto de Andrade vendeu o controle acionário da Boi Gordo para duas empresas ligadas a dois grupos do agronegócio: o Grupo Sperafico, um clã da soja oriundo do Paraná, com tentáculos no Congresso Nacional – o mais recente membro da família a ocupar cargo legislativo é o deputado federal Dilceu Sperafico (PP-PR), eleito em 2014 e atualmente chefe da Casa Civil no governo estadual paranaense; e o Grupo Golin, que iniciou suas atividades no Mato Grosso do Sul nos anos 1980 e se espalhou por nove estados brasileiros nas décadas seguintes. A venda foi feita em julho de 2003 para as empresas Cobrazem (Grupo Sperafico) e Satcar do Brasil (Grupo Golin). No acordo, sigiloso e não registrado na Junta Comercial do Estado de São Paulo (Jucesp), conforme estabelece a lei, ficou determinado que a Satcar indicaria futuramente os novos sócios.

De acordo com documentos obtidos pela Pública, ambas as empresas declararam que queriam “renegociar as dívidas [da Boi Gordo] com os credores e financiar novas operações, envolvendo basicamente a utilização das terras para plantio de gêneros para exportação”. A Cobrazem pulou fora do negócio em 2003 e a Satcar indicou outra empresa do Grupo Golin para assumir o controle acionário – a Forte Colonizadora e Empreendimentos Ltda., cujos sócios são Júlio Lourenço Golin e Jocenir Pedro Golin, que assumiram um passivo de R$ 930 milhões (R$ 2,1 bilhões em valores atuais).

Recuperar a Boi Gordo seria uma tarefa quase impossível. Indicado por um juiz de Comodoro (MT) quando foi feito o pedido de concordata, o perito Wanderley Ferreira Bendes avaliou ser inviável a reabilitação da Boi Gordo por falta de capital de giro e ausência de liquidez para sanar as dívidas e seguir as atividades. Em abril de 2004, sem honrar nenhum pagamento aos credores no período da concordata, a falência da empresa foi decretada. Só então se descobriu que os bens que seriam arrecadados e vendidos para ressarcir os credores haviam desaparecido. O patrimônio da Boi Gordo, que constava no balanço da empresa quando foi pedida a concordata, havia sido drasticamente reduzido – sobrando apenas algumas propriedades rurais imobilizadas pela Comissão de Valores Mobiliários (CVM). Maquinário e frota de veículos, material genético, banco de sêmen, propriedades rurais e urbanas, contratos de arrendamento desapareceram antes que fossem usados para ressarcir os credores.

José Cícero da Silva/Agência Pública
Maquinário da Boi Gordo foi desviado pelo grupo Golin, segundo decisão judicial já validada em segunda instância

“Houve um desvio brutal de bens da Boi Gordo. E nada dessa movimentação de bens entrou no caixa da Boi Gordo nem foi formalizado perante a Junta Comercial”, afirma o promotor de Falências do Ministério Público de São Paulo, Eronides Santos. Sob a supervisão do MP, a empresa especializada em investigação de falências OAR passou a buscar os responsáveis pelo desvio dos bens do antigo império do gado. A investigação levou uma década, entre 2004 e 2014, para desvendar a complicada trama financeira que havia surrupiado os bilhões da massa falida da Boi Gordo para engordar o patrimônio do Grupo Golin. O trabalho resultou em uma denúncia por parte do MP que culminou em uma condenação do Grupo Golin em junho de 2015, já confirmada em segunda instância.

Segundo a decisão de primeira instância do processo que analisa a denúncia de fraude à falência da Boi Gordo – estendida ao Grupo Golin e subsidiárias da Vision Brazil –, não houve por parte do Grupo Golin negociação com credores, aporte de capital de giro ou tentativa de dar continuidade aos negócios da Boi Gordo. Houve, sim, segundo a decisão do juiz Marcelo Barbosa Sacramone, um esforço de “apropriação de recursos sem pagamento à concordatária”. O total do patrimônio líquido à época da concordata era cerca de R$ 500 milhões.

Um exemplo de fraude, conforme a decisão judicial, foi o desaparecimento do gado da empresa – à época da derrocada, os balanços registravam um valor superior a R$ 85 milhões em animais, embriões e sêmen de gado. Só de gado puro de origem, eram cerca de 8 mil cabeças, segundo depoimento do próprio Paulo Roberto de Andrade no processo judicial.

A sentença apontou que boa parte do patrimônio em animais foi apropriada por outras empresas do Grupo Golin. O mesmo ocorreu com boa parte dos 300 mil hectares em nome da Boi Gordo. Meses depois de ter assumido o controle da falida, o grupo reabilitou a empresa Eldorado Agroindustrial, e a Forte arrendou à Eldorado uma série de fazendas sem nenhuma contrapartida ou repasse do valor arrecadado aos credores. Foi o caso dos imóveis rurais: Realeza I, II, III, IV e V; Sítio Atlas; Bairro do Porto I, II, III, IV, V, VI, VII, VIII e IX e Guaporé I e II.

Um patriarca e um fantasma

Dois personagens são figuras-chave nessa história. Um deles é o patriarca do Grupo Golin, Joselito Golin, que, apesar do nome de batismo, sempre se apresenta como Paulo. O outro é uma figura nebulosa chamada Paulo Roberto da Rosa. Pairam dúvidas se Rosa realmente é uma pessoa de carne e osso, ou apenas uma pessoa de papel, um fantasma que movimentou quase R$ 1 bilhão em bens e dinheiro. Uma denúncia feita em 2015 pela procuradora da Fazenda Marina Tomaz Kalinic Dutra levantou fortes suspeitas quanto à existência de Rosa. “A Receita Federal do Brasil realizou fiscalização relativamente ao Imposto de Renda de PAULO ROBERTO DA ROSA […], quanto aos anos calendário 2008 e 2009 e acabou constatando tratar-se de ‘pessoa fictícia’”, relata Marina.

A Receita Federal constatou que não havia nenhum registro de nascimento com o nome e filiação correspondente a Paulo Roberto da Rosa no cartório da comarca de Canutama (AM), onde os documentos de Rosa atestam que sua certidão foi registrada. Rosa também não possui cadastro na Justiça Eleitoral, só foi ter CPF em 1999, aos 36 anos, e o assento de sua certidão de nascimento foi lavrado em 1995, ou seja, quando ele tinha 29 anos. Uma perícia em um cheque assinado por Rosa apontou indícios de a assinatura dele ser, na verdade, de um contador do Grupo Golin, Gerson Luiz Oliveira. Como era de esperar, ele nunca compareceu para prestar depoimento nas ações judiciais a que responde.

O tal Rosa desempenhou importante papel no desvio de bens da Boi Gordo, segundo as investigações. Alçado a diretor-presidente da empresa após Julio Lourenço Golin assumir a presidência do Conselho de Administração da Boi Gordo, Rosa assinou vários dos arrendamentos das fazendas pertencentes à massa falida. Do outro lado do balcão, como arrendador, Joselito assinava pela Eldorado Industrial, como comprovam documentos das fazendas Realeza, do sítio Atlas e do Bairro do Porto. “Eleito presidente das Fazendas Reunidas Boi Gordo, fora Paulo Roberto da Rosa que celebrou os contratos de arrendamento, sem qualquer pagamento, dos principais ativos da Boi Gordo com a Eldorado”, diz o juiz Sacramone em decisão judicial.

Segundo a denúncia, o valor equivalente aos bens desviados foi enviado ao exterior pelo Grupo Golin por meio de uma complexa trama financeira. Validada pelo MP, a denúncia entendeu que, para trazer os recursos de volta ao Brasil, entrou em cena um grande fundo de investimentos, o Vision Brazil Investments. O Vision foi criado por dois nomes relevantes do mercado financeiro nacional: Amaury Fonseca Júnior, ex-diretor e head trader de instituições como Bank of America e JP Morgan no Brasil, e Fábio Greco, ex-responsável pela área de derivativos do Bank of America no Brasil e do Banco Patrimônio (subsidiária brasileira do extinto banco de investimentos Salomon Brothers), com passagem de seis anos pelo Chase Manhattan Bank.

Uma série de operações suspeitas foi descoberta nos trabalhos de investigação. Nos contratos de mútuo – acordos de empréstimo firmados entre particulares em torno de bens móveis –, os polos eram sempre os mesmos: de um lado, representantes do Grupo Golin e, de outro, subsidiárias do fundo Vision Brazil Investments, como a ICGL Empreendimentos e Participações S.A., ICGL 2 Empreendimentos e Participações Ltda., AGK 4 Empreendimentos e Participações Ltda. e AGK5 Empreendimentos e Participações Ltda. Nos documentos da Jucesp, há uma série de transferências de recursos a essas empresas pelas companhias registradas em locais considerados paraísos fiscais, como, por exemplo, o estado de Delaware, nos Estados Unidos.

José Cícero da Silva/Agência Pública
Plantação de soja na região do Matopiba. Região despertou o interesse do fundo Vision Brazil

Esses contratos eram firmados pelas empresas do Grupo Vision, que ofertavam um valor em dinheiro aos representantes do Grupo Golin em troca do compromisso de pagamento por meio de propriedades rurais. Uma espécie de contrato de corretagem de imóveis para a Vision, que, fundada em 2006, queria investir em terras no cerrado brasileiro, seguindo as tendências do mercado financeiro mundial. Esses imóveis eram adquiridos por valores significativamente mais baixos do que os empréstimos oferecidos pelas subsidiárias do Grupo Vision, trazendo lucros astronômicos para o Grupo Golin, sempre próximos aos 1.000%. Foi também através dessas operações que as subsidiárias do Grupo Vision adquiriram terras no coração do Matopiba. Entre elas estão dois grandes imóveis rurais – fazendas Piauí e Terçado – formados pela Vision no cerrado piauiense, que reúne 1,5 milhão de hectares de terra arável nos platôs das muitas chapadas ao sul do estado. Juntos, os imóveis somam 47.247 hectares – área quase equivalente à cidade de Porto Alegre – em municípios como Manoel Emídio, Alvorada do Gurgueia, Palmeira do Piauí e Currais. Em seu site, a Vision afirma possuir 335 mil hectares no Matopiba e afirma ter criado uma empresa – a Tiba Agro – só para gerenciar projetos agrícolas no cerrado.

Um exemplo das operações de mútuo está na aquisição das fazendas Brejo da Onça II e Olho D’Água, localizadas em Alvorada do Gurgueia (PI). Segundo a denúncia da OAR, os imóveis rurais, oficialmente comprados por R$ 100 mil cada um, foram dados em pagamento a dois contratos de mútuo firmados pelo suposto fantasma Paulo Roberto da Rosa com a ICGL, subsidiária do Grupo Vision, que, somados valiam R$ 7,6 milhões. Um lucro gigantesco sobre o valor original das terras que nem sequer foram pagas à vendedora.

As áreas foram compradas pelo Grupo Golin, em março de 2008, da advogada Josyane Rocha da Silva. “Eu tinha essas terras aqui no sul do estado, estava passando por um momento muito difícil e tinha o interesse em vendê-las. O Grupo Golin mostrou interesse em comprar. Eu tive pessoalmente com o Joselito Golin, que é conhecido como Paulo Golin, e ele me transmitiu uma confiança, mas na verdade eu caí numa teia de aranha”, conta Josyane. Ela conta que fez um acordo com Golin pelas áreas que, juntas, ultrapassam 4.700 hectares, mas recebeu apenas um pagamento como sinal. Confiando no negócio, ela conta que assinou a escritura transferindo as terras para um técnico em contabilidade ligado ao Grupo Golin chamado Ronaldo Lisboa de Freitas. Este transferiu as áreas a Paulo Roberto da Rosa, que, por meio de seu procurador, Joselito Golin, repassou-as à ICGL, conforme as cadeias dominiais dos imóveis obtidas pela Pública. Como os pagamentos não vieram, a advogada Josyane devolveu o sinal e obteve a reintegração de posse das duas fazendas por meio de uma decisão liminar da Justiça piauiense. “Durante a negociação, o Paulo Golin falou que ia telefonar para a Tiba Agro [do fundo de investimentos Vision] para receber o dinheiro da transação. Eles pareciam ser parte do mesmo grupo”, relata a advogada, revelando a proximidade entre o grupo de agronegócio e o fundo de investimento. O Instituto de Terras do Piauí (Interpi) move uma ação de reintegração de posse na Justiça do estado por entender que a área comprada pela Vision é pública – o processo corre na Justiça desde 2012 e ainda não há conclusão.

Segundo a denúncia, o mesmo estratagema foi usado nos acordos de mútuo envolvendo várias outras fazendas. Só em 2007, por exemplo, Paulo Rosa adquiriu nove fazendas (Chapadão, Cabeceira, Engano, Terçado, Última Fronteira II, Alto da Serra, Alto da Curriola, Ipanema e Serra), todas no Piauí. Os imóveis foram dados como pagamento a mútuos que, somados, chegam a R$ 60 milhões, recebidos por Rosa em um período de cinco meses. Em muitos desses imóveis, Rosa – sempre representado por Joselito Golin – teve lucros próximos a 1.000%. A fazenda Cabeceira, por exemplo, formada a partir da compra de seis matrículas imobiliárias por R$ 437.400,00, foi dada como pagamento a um mútuo de R$ 4,62 milhões. Ou seja, descontados os pouco mais de R$ 430 mil que pagou pelas matrículas, Rosa ficou com um lucro de R$ 4,18 milhões – cerca de 9,6 vezes o que investiu. A fazenda Engano foi comprada por R$ 250.000,00 e dada como pagamento a um mútuo de R$ 2,6 milhões – lucro de 957% no mesmo período de sete meses. Também a fazenda Pirajazinho II, comprada em setembro de 2007 por R$ 900.000,00, foi dada em pagamento a um mútuo de R$ 9.520.070,39 em abril de 2008 – lucro de 958% nos mesmos sete meses. Todos esses mútuos foram ofertados por duas subsidiárias da Vision Brazil: ICGL e ICGL 2.

“Identificamos esse dinheiro desviado da Boi Gordo voltando do exterior para o Brasil, na forma de empréstimos, através de fundos de investimento”, afirma o promotor Eronides Santos (à direita), do MP (SP)

“Nós identificamos esse dinheiro desviado da Boi Gordo voltando do exterior para o Brasil, na forma de empréstimos, através de fundos de investimento por meio de um laranja, o Paulo Roberto da Rosa, sempre por meio de um procurador, o Paulo Golin, cujo nome de batismo na verdade é Joselito”, descreve o promotor Eronides Santos. “Esse Paulo Roberto da Rosa movimentou R$ 1 bilhão, sempre através do Golin como procurador”, resume. Em juízo, a Vision Brazil reconheceu que firmou os contratos de mútuo que visavam investimentos no setor agropecuário. A Vision alegou ter sido apresentada a Paulo Golin e a Paulo Roberto da Rosa, “empresário bem-sucedido na aquisição, exploração e venda de grandes propriedades rurais”. O valor dos empréstimos, segundo a empresa, era definido por avaliações de mercado preestabelecidas e que não tinham controle sobre o valor que os mutuários – na maioria das vezes, Rosa e o contador Gerson Luiz Oliveira – pagavam pelas fazendas dadas posteriormente em pagamento.

O juiz Marcelo Sacramone recusou os argumentos da Vision. “Os documentos juntados aos autos demonstram que as operações não foram regulares. O montante emprestado não é condizente com a situação financeira de Paulo Roberto da Rosa, não é condizente à prática do mercado, a operação não é lógica economicamente e implica risco exacerbado ao agente, a menos que haja interesses outros”, decidiu o juiz. “Ainda que a parte ré sustente que o lucro obtido com a compra e venda dos imóveis era algo que cabia ao mutuário Paulo Roberto da Rosa e que ela não tinha interferência, a alegação não é crível. Como agente econômico, que procurava maximizar seu lucro, a parte ré não continuaria a deixar de auferir 90% de lucro pelas aquisições das terras, ou seja, não deixaria de comprar diretamente os bens no mercado para não ter que pagar estratosférico percentual de lucro”, argumenta Sacramone.

Para o magistrado, a única explicação lógica para o fato de a Vision oferecer contratos de mútuo tão generosos a Paulo Roberto da Rosa e outras pessoas do Grupo Golin é “conceber-se que o capital emprestado não é do mutuante [Vision], mas do próprio mutuário [Golin] e a operação fora realizada simplesmente para legalizar os recursos obtidos mediante desvio dos bens da anterior concordatária”. A Vision negou a afirmação dizendo que o dinheiro era da própria empresa e teve origem em fundos geridos pela empresa nas Ilhas Cayman. “Essa alegação, contudo, é insuficiente. Cumpria à parte ré demonstrar efetivamente a origem do capital e que, no caso, não tinha origem no Grupo Golin. Referida demonstração não fora realizada a contento nos autos e sem quaisquer justificativas, o que indica a participação na operação de desvio dos recursos em benefício do Grupo Golin e em benefício próprio, já que conservou consigo a propriedade das fazendas dadas em pagamento”, decidiu Sacramone.

Em segunda instância, contudo, a Vision obteve decisão favorável a uma alegação de cerceamento da defesa e conseguiu anular os efeitos da decisão do juiz Sacramone em relação às subsidiárias da Vision. O processo retornou à primeira instância para que a empresa possa produzir provas de que o dinheiro dos mútuos não tinha relação com o Grupo Golin e, consequentemente, com a fraude à falência da Boi Gordo. A empresa alega que o dinheiro dos mútuos veio de investidores internacionais reunidos nos fundos geridos por ela.

Na esfera federal, a Receita também viu irregularidades nos negócios entre as subsidiárias da Vision e Paulo Roberto da Rosa, classificados como “evidente fraude para o não pagamento de impostos” por Golin. “Conclui-se, portanto, estar claramente comprovado que JOSELITO GOLIN, com a ajuda de empresas a ele ligadas, utilizou-se de personagem fictício para celebrar negócios e fraudar o fisco”, diz denúncia do MPF. Em dezembro de 2015, a juíza federal Carolina Viegas determinou a indisponibilidade dos bens de Golin e das subsidiárias da Vision envolvidas nos mútuos.

Em contato com a Pública, a Vision Brazil Investments declarou que “as suspeitas levantadas pelo síndico da Massa Falida das Fazendas Reunidas Boi Gordo em relação aos negócios realizados pelas Empresas foram todas afastadas, no incidente, por provas robustas que demonstram terem sido os imóveis adquiridos de forma idônea pelas Empresas, mediante operações comerciais lícitas, todas assistidas por prestigioso escritório de advocacia, auditadas por empresas de renome e devidamente escrituradas”. Alegou também que em segunda instância viu “nítida separação entre os negócios dessas Empresas e os atos praticados pelas pessoas que administraram a massa falida (denominado ‘grupo Golin’). Logo, o acórdão do Tribunal de Justiça evidenciou que não havia fundamento que sustentasse qualquer envolvimento dessas empresas com eventuais atos e desvios alegadamente praticados pelo grupo Golin no âmbito da falência das Fazendas Reunidas Boi Gordo”. A empresa destacou o fato de o processo ter sido remetido à primeira instância para melhor apreciação das provas sobre a participação da Vision no desvio de recursos da Boi Gordo. E declarou “que a idoneidade das operações por elas empreendidas foi atestada pela [empresa de auditoria] PwC em substancioso laudo pericial, produzido ao longo de mais de 1 (um) ano de diligências, já apresentado judicialmente e a ser considerado pelo juízo de primeiro grau por determinação do Tribunal de Justiça de São Paulo”. As empresas do grupo são representadas pelo ex-presidente do STF Cezar Peluso.

A Vision permanece com muitas das fazendas adquiridas nas cobiçadas áreas de cerrado com a lucrativa corretagem do suposto fantasma Paulo Roberto da Rosa e o contador dos Golin, o também condenado Gerson Luiz Oliveira. Em seus investimentos em terras, a Vision é especializada em adquirir terra bruta e transformá-la para revender a produtores e especuladores interessados. Segundo uma apresentação de um dos sócios da Vision Brazil produzida para investidores em 2016, a empresa adquiriu, no fim de 2007, um imóvel rural de 25 mil hectares por R$ 41,4 milhões e o revendeu por R$ 87,9 milhões.

Apesar de anular os efeitos da sentença em relação à Vision Brazil por cerceamento de defesa (sem análise do mérito), a participação do Grupo Golin foi completamente confirmada em segunda instância pelo Tribunal de Justiça de São Paulo.

Lucro dos mútuos estacionou na compra de fazendas, diz MP

Os beneficiários dos mútuos realizados pela Vision Brazil usaram os lucros dos contratos para integralizar capital de outras empresas. Uma delas foi a Bom Jardim Empreendimentos Rurais Ltda. A empresa teve seu capital consideravelmente ampliado em menos de 40 dias em 2009: saiu de R$ 100 mil para R$ 3,6 milhões com o lucro dos mútuos obtidos por Paulo Roberto da Rosa, segundo documentos da Jucesp. Em seguida, a Bom Jardim adquiriu uma fazenda rebatizada com o mesmo nome da empresa, um imóvel de 14 mil hectares na cobiçada serra do Quilombo, área rural disputada a tapa por gigantes do agronegócio, situada entre os municípios de Bom Jesus, Gilbués e Monte Alegre do Piauí. O imóvel encontra-se com a matrícula bloqueada após denúncia do MP do Piauí por inconformidades das matrículas dos imóveis com a Lei de Registros Públicos (6.015/1973). Na decisão de bloqueio, o juiz da vara agrária de Bom Jesus (PI), Heliomar Rios Ferreira, afirmou que as matrículas dos imóveis foram hipotecadas em uma transação de R$ 2,6 bilhões proveniente de uma das maiores companhias financeiras do mundo, a Metlife, sediada em Nova York. Parte do empréstimo se destina à compra de novas fazendas.

Segundo o promotor Eronides Santos, do MP de São Paulo, a maior parte dos lucros dos mútuos realizados pelo Grupo Golin virou fazendas. “Nós começamos a monitorar e a verificar onde esse dinheiro foi estacionado. E foi na aquisição de propriedades rurais. Inúmeras propriedades rurais em nome de empresas e membros da família Golin”, descreve Santos. Outra fazenda adquirida com o capital proveniente dos mútuos, a fazenda Chapadão do São Domingos, localizada em Uruçuí (PI), foi adquirida em setembro de 2009 por R$ 5 milhões pela empresa JAP Empreendimentos e Participações. A JAP pertence a duas filhas de Joselito Golin: Judiliane e Ana Paula Golin. Dois meses depois da aquisição, a fazenda foi vendida à Empresa Brasileira de Terras 2 Ltda., representada pelos dois administradores da Vision, Fábio Greco e Amaury Fonseca Jr., por cerca de R$ 44 milhões.

José Cícero da Silva/Agência Pública
O grupo Golin responde a uma dezena de processos envolvendo questões fundiárias na vara agrária de Bom Jesus (PI), cujo titular é o juiz Heliomar Rios Ferreira (foto)

No Piauí, membros do Grupo Golin enfrentam uma série de acusações de serem beneficiários de grilagem de terras e autores de episódios de violência. Em 2016, Jocenir Pedro Golin foi denunciado pelo MP do Piauí por constar na cadeia dominial de uma matrícula grilada por um servidor do cartório da cidade de Gilbués (PI). O servidor em questão, por meio de manobras no cartório do município piauiense, transformou uma área de 6 mil braças, que seria equivalente a pouco mais de 8 mil hectares, em uma área de 51.315 hectares. A área foi posteriormente clonada no cartório de Barreiras do Piauí (PI), chegando a mais de 100 mil hectares criados na caneta.

“Antes pensava que somente Jesus Cristo fosse capaz de multiplicar os pães, mas aqui no Piauí nós temos uma figura que tem o poder divino de multiplicar terras. Não há poder maior do que esse!!! Jesus Cristo deve estar com muita inveja ou, pelo menos, lamentando não ter vivido para ver tal proeza, pois, em sendo na sua época, teria resolvido o problema dos hebreus e Moisés não ficaria vagando anos pelo deserto à procura de um mísero pedaço de chão para alocar seu povo!!!”, escreveu o juiz Heliomar Rios Ferreira na inflamada decisão que determinou o bloqueio das matrículas decorrentes da manobra. Jocenir Pedro Golin era um dos sócios da Forte Colonizadora, apontada como responsável direta pelo desvio de bens da Boi Gordo. O outro sócio da Forte, Júlio Lourenço Golin, também aparece como beneficiário da manobra do cartorário como sócio da empresa Vale Verde S/A. Esta e Jocenir Golin receberam cerca de 19 mil hectares da área criada em cartório e a venderam posteriormente a outro comprador. Golin foi denunciado pelo MPF por ter conseguido crédito bancário com a terra de mentira. O cartório de Gilbués, assim como muitos outros do sul piauiense, encontra-se sob intervenção judicial.

Outro lado

O advogado Leandro Tilkian, que representa três empresas do Grupo Golin citadas na reportagem (Eldorado Agroindustrial, Bom Jardim Empreendimentos Rurais e JAP Empreendimentos e Participações), assim como o patriarca Joselito Golin, suas filhas Ana Paula, Rafaela e Judiliane, disse não querer se manifestar até o julgamento dos embargos de declaração da decisão de segunda instância, que ocorrerá no próximo dia 26 de junho. A advogada Tânia Maiuri, que representa Paulo Roberto da Rosa, disse não ter sido autorizada por seu cliente a prestar esclarecimentos à reportagem. O advogado Isidoro Mazzotini, que representa o contador Gerson Luís Oliveira, não respondeu às questões enviadas até o fechamento da reportagem.

Roberto Iser Júnior, que representa Júlio Lourenço Golin e a empresa Forte Colonizadora, enviou à reportagem um laudo pericial feito pela empresa de auditoria Concept nas contas da Boi Gordo. O laudo afirma que o valor apontado como desviado na sentença de primeira instância “não possui respaldo técnico formal e material, posto que, conforme demonstrado e fundamentado neste trabalho, a quase totalidade dos ativos foi vendida e transferida antes da data de aquisição pela Forte Colonizadora Ltda. (30/set./03) ou foi arrecadada pelo síndico da massa falida”. “Não existe uma prova de algum bem que estivesse em nome da Boi Gordo que tenha sido transferido para Júlio Golin, para a Forte Colonizadora ou para qualquer um dos outros réus arrolados como integrantes do Grupo Golin. O acórdão fala que está comprovado, mas não mostra onde. Isso que nós vamos argumentar no julgamento dos embargos”, afirma Roberto Iser Júnior. Ele refuta também a caracterização das empresas e familiares de Joselito Golin como grupo econômico.

A reportagem não conseguiu contato com a defesa de Paulo Roberto de Andrade.

]]>
https://apublica.org/2018/06/investigacao-indica-que-dinheiro-dos-credores-da-boi-gordo-virou-terra-em-matopiba/feed/ 0
Depois que o fogo apagahttps://apublica.org/2018/06/depois-que-o-fogo-apaga/ https://apublica.org/2018/06/depois-que-o-fogo-apaga/#respond Mon, 18 Jun 2018 15:01:04 +0000 http://apublica.org/?post_type=video&p=47910 Durante 45 dias acompanhamos o dia a dia de Noemi, Adilson, Grivalda e Jéssica no acampamento que se levantou em frente aos escombros do edifício Wilton Paes, no Largo do Paissandú, no Centro de São Paulo.

Os quatro desabrigados são parte das mais de 150 famílias que ficaram sem-teto com o incêndio e desabamento do edifício ocupado pelo movimento LMD (Luta por Moradia Digna) na madrugada de terça-feira, 1 de maio de 2018.

Depois de 23 dias acampadas e à espera de uma solução do poder público – que ainda não veio – Noemi e a filha Jéssica buscaram abrigo em outra ocupação no centro da cidade. Adilson e a esposa Grivalda, porém, resolveram seguir acampados em condições insalubres.

Na cidade mais rica do país, esses personagens escancaram as dificuldades cruéis de uma parcela cada vez maior da população na luta por moradia digna.

]]>
https://apublica.org/2018/06/depois-que-o-fogo-apaga/feed/ 0
Rodrigo Maia usa dados sem contexto sobre educaçãohttps://apublica.org/2018/06/truco-rodrigo-maia-usa-dados-sem-contexto-sobre-educacao/ https://apublica.org/2018/06/truco-rodrigo-maia-usa-dados-sem-contexto-sobre-educacao/#respond Fri, 15 Jun 2018 18:47:35 +0000 http://apublica.org/?post_type=claim_review&p=47898
J.Batista/Câmara dos Deputados
O presidente da Câmara. Rodrigo Maia (DEM), quer entrar na disputa pela Presidência da República

Presidente da Câmara dos Deputados desde julho de 2016, Rodrigo Maia (DEM) ganhou notoriedade desde o impeachment de Dilma Rousseff. Com a posse de Temer, que não possui vice, o parlamentar tornou-se o primeiro nome na linha sucessória para a Presidência da República. Recentemente Maia teve o nome anunciado como pré-candidato do Democratas para as eleições presidenciais, mas, como tem atingido 1% nas pesquisas, já há sinais de que pode desistir. Sua assessoria, por enquanto, nega a informação.

Ainda que faça parte da base aliada de Temer, o parlamentar adotou um discurso de oposição em suas entrevistas como presidenciável, posicionando-se contra o Planalto em temas como precificação de combustíveis e criticando a organização e a burocracia da intervenção federal no Rio de Janeiro. Em 6 de junho, ele participou de uma sabatina com pré-candidatos ao Planalto realizada pelo jornal Correio Braziliense. Apesar de se dizer ser contra privatizações, Maia dedicou boa parte de seu tempo para criticar o peso do Estado no orçamento federal. Além de educação básica e ensino superior, o pré-candidato também falou sobre saúde e desigualdade social, sempre defendendo reformas estruturais.

O Truco – projeto de fact-checking da Agência Pública, que está analisando frases de todos os pré-candidatos à Presidência – verificou quatro trechos da entrevista. Apoiado em estudos e pesquisas, ele acertou um dado sobre desigualdade no país, mas deixou de lado o contexto em dois números corretos sobre o ensino superior. O pré-candidato também errou o porcentual de crianças em creches no Brasil.

Leia mais:
Aldo Rebelo usa dados falsos sobre golpe de 64, Copa e Amazônia
Manuela D’Ávila erra dados sobre segurança pública
Em artigo escrito da prisão, Lula distorce dados


“[O Brasil é] um país desigual, onde 55% das pessoas que estão na extrema pobreza estão no Nordeste.”

VerdadeiroA afirmação de Rodrigo Maia é verdadeira. Em reportagem publicada no dia 12 de março de 2018, o Valor Econômico divulgou o resultado de um relatório encomendado à LCA Consultores sobre esse tema. O estudo identificou um crescimento de 11,2% no número de pessoas em situação de extrema pobreza no país em 2017. O Nordeste concentrava 55% deste grupo, cerca de 8,1 milhões de pessoas. O Sudeste e o Norte apresentaram o mesmo porcentual, com 13% do total para cada região. A análise baseou-se em microdados da Pesquisa Nacional por Amostra de Domicílios (Pnad) Contínua, elaborada pelo Instituto Brasileiro de Geografia e Estatística (IBGE).

A consultoria adotou a linha de corte do Banco Mundial para países de nível médio-alto de desenvolvimento, que corresponde a cerca de R$ 136 mensais, em valores de 2017. A partir dessa metodologia, descobriu que a população em extrema pobreza passou de 13,34 milhões, em 2016, para 14,83 milhões, no ano passado. O documento da LCA Consultores não está disponível e, apesar de ter sido solicitado à empresa pelo Truco, não foi fornecido.

No Brasil, não há uma linha oficial de pobreza, mas, mesmo utilizando procedimentos diferentes de mensuração da renda da população, os dados permanecem similares. O Instituto de Pesquisa e Estratégia Econômica do Ceará (Ipece) lançou no dia 22 de maio um levantamento sobre o total das pessoas em extrema pobreza no Brasil a partir dos microdados da Pnad Contínua. A metodologia seguiu os parâmetros do programa Bolsa Família, que considera extremamente pobres as pessoas com rendimento domiciliar per capita menor ou igual a R$ 85. Segundo a pesquisa, no ano passado, o Nordeste concentrava cerca de 52% da extrema pobreza do país. Entre 2016 e 2017, houve um aumento de 13,95%, ou seja, o número de pessoas nessa condição passou de 8,7 milhões para 10,1 milhões.


“De 0 a 3 anos é dramático você ter apenas 25% de crianças em creches no Brasil.”

FalsoAinda há um grande porcentual de crianças sem acesso a creches no Brasil, mas o dado usado pelo presidenciável está errado. Crianças de até 3 anos têm direito à educação infantil em creches ou entidades equivalentes garantido pela Lei de Diretrizes e Bases da Educação (LDB) e pelo Estatuto da Criança e do Adolescente. Mesmo assim, isso ainda não é realidade para muitas delas. De acordo com a Pnad Contínua, do IBGE, que traz o número mais recente sobre esse tema, 32,7% das crianças nessa faixa etária frequentavam creches ou unidades educacionais equivalentes em 2017. Em 2016, eram 30,4%.

O Plano Nacional de Educação (PNE) foi criado para ampliar o acesso à educação no país e estabelece metas para serem cumpridas em dez anos a partir de 2014. A primeira é relacionada ao ensino infantil e prevê a ampliação da “oferta de educação infantil em creches, de forma a atender, no mínimo, 50% (cinquenta por cento) das crianças de até 3 anos até 2024”.

Os números mostram que o atendimento tem crescido ao longo dos anos, mas ainda está distante da meta. O Relatório de Monitoramento das Metas do PNE – que usa dados do Censo Escolar, realizado pelo Instituto Nacional de Estudos e Pesquisas Educacionais (Inep), e do IBGE – informa que, de 2004 para 2015, a parcela de crianças de 0 a 3 anos com acesso à creche ou à escola aumentou 13,1 pontos porcentuais, atingindo 30,4% em 2015. Em 2016, o número chegou a 31,9%. Os resultados estão próximos dos da Pnad Contínua, apesar de usarem outra metodologia.

O dado citado por Maia vem da Síntese dos Indicadores Sociais de 2016, do IBGE, que usa a Pnad 2015. O documento diz que apenas 25,6% das crianças com menos de 4 anos eram matriculadas em creches ou escolas naquele ano. O suplemento Aspectos dos cuidados das crianças de menos de 4 anos de idade informa que, de 10,3 milhões de crianças nessa faixa etária, apenas 2,6 milhões tinham acesso à creche. Os dados, no entanto, estão desatualizados. A Pnad foi encerrada em 2016. Foi substituída pela Pnad Contínua, que teve a metodologia revista e atualizada e traz diferenças na amostra, abrangência geográfica e periodicidade.

O número de crianças em creches apresentado pela Pnad 2015 (25,6%) é diferente do apresentado pelo relatório das metas do PNE (30,4%). Isso porque cada levantamento tem uma metodologia distinta. O primeiro foi feito com base em uma amostra da população, enquanto o segundo é feito cruzando dados do Censo Educacional, que é uma pesquisa declaratória feita somente a instituições de ensino e estudantes, com os dados do IBGE.


“Os 40% dos brasileiros que ganham mais têm 65% das vagas das universidades públicas. Isso é uma distorção.”

Sem contexto

Ao propor reformas estruturais que diminuiriam o peso do Estado no orçamento federal, Rodrigo Maia fez diversas críticas às universidades públicas brasileiras. Para ele, é uma distorção que a parcela correspondente aos 40% mais ricos no país ocupem 65% das vagas das universidades públicas. Procurado, o pré-candidato não informou qual foi a fonte usada. O mesmo dado aparece no estudo “Um Ajuste Justo: Análise da eficiência e equidade do gasto público no Brasil”, um relatório do Banco Mundial publicado em novembro de 2017. O número está correto, mas falta contexto à frase.

Em 2015, o rendimento domiciliar médio per capita no grupo dos 40% mais ricos do Brasil era de R$ 1.057, de acordo com a Pnad 2015 – valor pouco maior do que um salário mínimo, atualmente em R$ 954. Trata-se, portanto, de uma parcela populacional que, apesar de ganhar mais do que a maioria da população, não possui necessariamente uma renda alta. A pesquisa do IBGE é a mesma utilizada nos cálculos do Banco Mundial.

Segundo a Pnad, a renda média per capita só fica acima de R$ 2 mil no grupo dos 10% mais ricos. Nessa parcela, a renda média é de R$ 5.231 por pessoa. Nos 20% mais ricos, a renda média ainda é de R$ 1.947 e, nos 30% mais ricos, a média fica em R$ 1.375 por pessoa. Além disso, outro estudo mostra que a participação de estudantes com renda familiar acima de nove salários mínimos está caindo, enquanto a parcela com rendimento de até três salários mínimos aumenta.

O estudo do Banco Mundial propõe a adoção de um modelo similar ao do Fundo de Financiamento Estudantil (Fies) para parte dos alunos das universidades públicas e discute também os gastos com educação superior no país. Na página 136 do documento, a instituição atesta que, em 2002, nenhum estudante universitário fazia parte dos 20% mais pobres da população e somente 4% integrava o grupo dos 40% mais pobres. “Em 2015, aproximadamente 15% dos estudantes do ensino superior estavam no grupo dos 40% mais pobres. No entanto, somente 20% dos estudantes fazem parte dos 40% mais pobres da população, ao passo que 65% integram o grupo dos 40% mais ricos”, calculou. Os números da instituição são baseados na Pnad, do IBGE, de 2015. Os dados levam em conta instituições públicas federais, estaduais e municipais e seus estudantes, com idades entre 18 e 24 anos.

Além de boa parte dos 40% que ganham mais não serem necessariamente ricos, como mostra a própria Pnad, a participação de estudantes de renda mais baixa está aumentando, enquanto cai a de alunos de renda mais elevada. Isso aparece na última Pesquisa do Perfil Socioeconômico dos Estudantes das Universidades Federais, da Associação Nacional dos Dirigentes das Instituições Federais de Ensino Superior (Andifes), publicada em julho de 2016 com dados de 2014.

O estudo, apresentado no Fórum Nacional de Pró-Reitores de Assuntos Estudantis (Fonaprace), mostra que a parcela de estudantes provenientes de famílias com rendimento acima de nove salários mínimos caiu no período de 2010 a 2014, de 6,57% para 2,96%. Já a participação de alunos com rendimento familiar de até três salários mínimos atingiu mais de 51% do total de vagas. No Nordeste, eles são quase 64%, por conta de um aumento de mais de 14% em sua participação regional desde 2010, antes em cerca de 50%. Os dados da pesquisa foram obtidos por meio de questionários preenchidos por amostras de estudantes de universidades públicas federais.


“O custo [dos alunos] das universidades públicas é 2,5 vezes maior que [o] das universidades privadas.”

Sem contextoAinda no trecho da sabatina em que discorre sobre os problemas do ensino superior no Brasil, Rodrigo Maia apresenta outro dado proveniente do mesmo estudo do Banco Mundial. O documento atesta que “alunos nas universidades públicas brasileiras em média custam de duas a três vezes mais do que alunos matriculados em universidades privadas”. Embora a afirmação esteja correta, falta contexto.

As universidades públicas oferecem uma gama de cursos mais diversificada. Isso inclui muitas áreas com custo por aluno elevado, algumas delas desinteressantes economicamente para uma instituição privada. Além disso, a produção científica e a proporção de alunos de pós-graduação são muito maiores nas públicas, o que também contribui para o custo mais alto.

O gasto médio por aluno, se considerado todo o ensino superior brasileiro –ou seja, incluindo instituições públicas e privadas –, não é elevado segundo os critérios do Banco Mundial. As universidades e institutos federais, no entanto, fogem a essa regra. “Se considerarmos somente as instituições públicas, o nível de gasto por aluno é próximo ao verificado em países que possuem o dobro do PIB per capita do Brasil, e muito superior ao de vários países da Organização para a Cooperação e Desenvolvimento Econômico (OCDE), tais como Itália e Espanha”, calcula o relatório.

Em comparação com as universidades privadas, alunos nas universidades públicas brasileiras em média custam de duas a três vezes mais do que alunos matriculados em universidades privadas. O cálculo do Banco Mundial foi feito com base nas estatísticas do Exame Nacional de Desempenho dos Estudantes (Enade), no Censo da Educação Superior e em relatórios de gasto por aluno das universidades federais, elaborados pela Secretaria Executiva do Ministério da Educação (MEC).

O estudo, entretanto, não destaca as grandes diferenças entre o ensino superior público e o privado no Brasil. Em entrevista para o Jornal da Unicamp, Nelson Cardoso Amaral, professor do Programa de Pós-Graduação em Educação da Universidade Federal de Goiás (UFG), aponta que, ao calcular o gasto por aluno, o relatório do Banco Mundial soma todos os recursos financeiros aplicados na instituição – incluindo, por exemplo, gastos em pesquisa e extensão e os vencimentos de funcionários e professores na ativa e aposentados – e divide o total pelo número de matrículas. Esse grande volume, ao se fazer o cálculo, gera um resultado maior no custo por aluno. Também entrevistado pelo jornal, o vice-presidente da Sociedade Brasileira para o Progresso da Ciência (SBPC), Carlos Roberto Jamil Cury, diz que é necessário levar em consideração o perfil de cada instituição para fazer comparações desse tipo. Entre os fatores que influenciam o custo por estudante estão a proporção de alunos em atividades de pós-graduação e as atividades de pesquisa científica produzidas.

Embora a rede privada seja responsável por 75% das matrículas do ensino superior, de acordo com o Censo da Educação Superior do MEC, todas as 20 instituições que lideram a produção científica brasileira são públicas, segundo um relatório encomendado pela Coordenação de Aperfeiçoamento de Pessoal de Nível Superior (Capes). O documento, divulgado em janeiro de 2018, foi produzido pela empresa estadunidense Clarivate Analytics e analisa a pesquisa científica no Brasil entre 2011 e 2016. A conclusão do estudo é que praticamente só há produção de pesquisa científica em universidades públicas no país.

A diversidade de cursos oferecidos também é maior na rede pública. “Cursos caros e que exigem laboratórios bem equipados – como medicina e as engenharias – tendem a se concentrar no sistema público”, afirmou Renato Pedrosa, líder do Laboratório de Estudos sobre Ensino Superior da Unicamp, também entrevistado.

Veja outras checagens dos presidenciáveis

]]>
https://apublica.org/2018/06/truco-rodrigo-maia-usa-dados-sem-contexto-sobre-educacao/feed/ 0
Quem fiscaliza os tribunais de contas?https://apublica.org/2018/06/quem-fiscaliza-os-tribunais-de-contas/ https://apublica.org/2018/06/quem-fiscaliza-os-tribunais-de-contas/#respond Thu, 14 Jun 2018 16:56:01 +0000 http://apublica.org/?p=47860 “As minhas contas foram aprovadas pelo Tribunal de Contas do Estado.” Essa frase está na ponta da língua dos políticos investigados na Operação Lava Jato por fraudar licitações e superfaturar obras. E o argumento não é falso. Os ex-governadores Aécio Neves (PSDB), de Minas Gerais, Sérgio Cabral (MDB), do Rio de Janeiro, e Beto Richa (PSDB), do Paraná – investigados por suspeita de terem favorecido empresas em licitações –, tiveram as contas aprovadas nos tribunais de contas de seus estados, colocando em xeque a credibilidade dos órgãos de controle como mecanismo para coibir esquemas de corrupção. 

O problema é que, entre os julgadores das suas movimentações financeiras, estavam aliados políticos. A ONG Transparência Brasil revelou, em estudo publicado no ano passado, que oito em cada dez conselheiros de contas do país exerceram mandatos eletivos ou altas funções em governos. A pesquisa, realizada em 2014 e atualizada em 2016, incluiu membros do Tribunal de Contas da União (TCU), dos 27 tribunais de contas dos estados e do Distrito Federal, e dos tribunais municipais. Existem quatro tribunais de contas do conjunto de municípios dos estados de Pará, Goiás, Ceará e Bahia, e Tribunais Municipais de contas nas cidades de São Paulo e Rio de Janeiro.

O levantamento mostra que 23% dos 233 conselheiros e ministros respondem a processos ou já foram punidos na Justiça e até mesmo nos próprios tribunais de contas. Os supostos guardiões do dinheiro público são acusados de fraudar licitações, superfaturar obras e enriquecer ilicitamente. A mais comum acusação que recai sobre eles: improbidade administrativa.

Embora não tenha havido nenhuma investigação específica sobre elas, a Operação Lava Jato escancarou a participação dos integrantes dessas cortes estaduais, municipais e federal nos esquemas de desvio de dinheiro. No Rio de Janeiro, cinco conselheiros do TCE estão afastados, suspeitos de cobrar propina para fazer “vista grossa” de contratos do governo com empreiteiras.

Até fevereiro deste ano, o ex-ministro das cidades do governo de Dilma Rousseff Mário Negromonte (PP-BA) ocupava uma cadeira no conselho do Tribunal de Contas dos Municípios do Estado Bahia (TCM). Ele foi acusado de pedir propina de R$ 25 milhões para beneficiar empresas do setor de rastreamento de veículos quando era ministro. Indicado pelo ex-governador Jaques Wagner (PT-BA), em 2014, o conselheiro foi afastado depois que virou réu por corrupção passiva. O senador Agripino Maia (DEM-RN) teria influenciado a mudança de parecer do TCE do Rio Grande do Norte, favorecendo a OAS na construção do estádio Arena das Dunas para a Copa do Mundo de 2014, de acordo com denúncia da Procuradoria-Geral da República, acatada pelo Supremo Tribunal Federal (STF). A operação atingiu também a cúpula do TCU. O filho do ministro Aroldo Cedraz (ex-deputado federal da Bahia pelo PFL, hoje DEM), o advogado Tiago Cedraz, passou a ser investigado em 2015 depois de o dono da empreiteira UTC Engenharia, Ricardo Pessoa, ter dito que o contratou para obter dados de difícil acesso na corte e para comprar uma decisão referente à usina nuclear Angra 3. Procurados pela reportagem da Pública, todos negam as acusações. (Leia o que dizem os citados)

Tudo dominado

Os tribunais de contas estaduais possuem sete conselheiros. Quatro são escolhidos pelo voto dos deputados; um, livremente pelo governador; e os outros dois, também pelo governador, mas têm de ser auditores e procuradores do Ministério Público de Contas.

Procurador do Ministério Público junto ao TCU e presidente da Associação Nacional do Ministério Público de Contas (Ampcon), Júlio Marcelo de Oliveira conhecido por ser o autor da representação que levou à reprovação das contas de 2014 da ex-presidente Dilma Rousseff (PT) por fraude fiscal , alerta que, quanto mais tempo o mesmo grupo político permanece no poder de um estado, mais influência ele tem no tribunal de contas.

É o caso, por exemplo, de Minas Gerais. O PSDB permaneceu no governo por 12 anos, de janeiro de 2003 a janeiro de 2015. Todos os membros do órgão mineiro são ligados aos ex-governadores tucanos Aécio Neves e Antonio Anastasia: os ex-deputados Mauri Torres (PSDB), José Alves Viana (DEM), Wanderley Ávila (PSDB) e Sebastião Helvécio (PDT) foram indicados pela Assembleia Legislativa. Já os dois cargos técnicos, ocupados por Cláudio Terrão e Gilberto Pinto Dinis, foram nomeação de Anastasia.

O levantamento da ONG Transparência Brasil que avaliou a vida pregressa de todos os membros das cortes dos tribunais de contas na ativa em 2016 traz a informação de que, no grupo de conselheiros que jamais ocuparam cargo eletivo nem foram secretários de governo, 6% respondem a processo na Justiça. Já entre os conselheiros que são políticos profissionais, a porcentagem sobe para 27%.

Políticos que perderam o mandato, que estão achando difícil se reeleger, ou que querem aumentar o poder político da família, sendo substituídos na Assembleia pelo filho ou mulher, por exemplo, cobiçam as vagas de conselheiros de contas. Ali, recebem diversos benefícios, como foro privilegiado, cargo vitalício, salários altos – o salário-base é de R$ 30.471 –, além de gratificações e outras vantagens.

Juntos, os tribunais de contas custam mais de R$ 10 bilhões aos cofres públicos, de acordo com o procurador Júlio Marcelo de Oliveira. Os cargos de conselheiros são equivalentes aos dos desembargadores, e os ministros do TCU são equiparados pela Constituição Federal aos ministros do Supremo Tribunal de Justiça (STJ). Os membros dos órgãos de controle estão regidos pela Lei Orgânica da Magistratura. No entanto, ninguém os fiscaliza. “Os tribunais de contas não têm controle nenhum. Ninguém fiscaliza esses órgãos”, ressaltou Oliveira.

Em abril deste ano, vagou uma cadeira na corte de Minas, com a morte da conselheira Adriene Andrade, mulher do ex-senador Clésio Andrade (MDB). Ela preenchia a vaga de indicação livre do governador. Será a vez agora do atual gestor do estado, Fernando Pimentel (PT), indicar um nome. O líder do governo no Legislativo, deputado estadual Durval Ângelo, é o mais cotado a assumir o conselho, perpetuando a prática de aliados políticos fiscalizarem a prestação de contas de governadores.

Com interesses políticos predominando sobre interesses públicos, não faltam escândalos no currículo do TCE de Minas Gerais. Em 2002, o então presidente do órgão, José Ferraz, já falecido, foi apontado pelo Ministério Público do estado como um dos envolvidos em um incêndio criminoso que destruiu provas de investigações fiscais. Em 2008, três conselheiros, incluindo o presidente, foram indiciados por suspeita de envolvimento com uma organização criminosa acusada de ter desviado R$ 200 milhões em verbas do Fundo de Participação dos Municípios. O esquema foi revelado na Operação Pasárgada, que teve como alvo também membros da corte do Rio. Em 2015, o jornal Estado de Minas revelou que os conselheiros receberam, em dezembro de 2014, salários que ultrapassavam R$ 150 mil mensais.

O Ministério Público chegou a questionar na Justiça, em 2006, a indicação de Adriene Andrade ao conselho da corte de contas, com o argumento de que ela não possuía os requisitos para preencher a vaga. Ela era ré em processos sob a acusação de fraudar licitações e respondia a ações cíveis e inquéritos policiais por supostas irregularidades administrativas quando foi prefeita de Três Pontas, de 2001 a 2004.

Leia também: Veja o que dizem os mencionados na reportagem

Sociedade civil fica de fora do TCE

Para ser conselheiro do TCE de Minas, de acordo com artigo 78 da Constituição mineira, que foi inspirada na brasileira – na qual há os critérios destinados aos ministros do TCU –, é preciso ter “mais de trinta e cinco e menos de sessenta e cinco anos de idade; possuir idoneidade moral e reputação ilibada; notórios conhecimentos jurídicos, contábeis, econômicos, financeiros ou de administração pública; e ter mais de dez anos de exercício de função ou de efetiva atividade profissional que exijam os conhecimentos mencionados no inciso anterior”.

Doutor em contabilidade e finanças públicas, com mais de dez anos de serviço público, sendo quatro no TCE, o contador Alexandre Bossi encontrou na lei a possibilidade de fazer diferente: ocupar uma vaga de juiz de contas sendo um representante da sociedade civil. O desejo surgiu depois que ele trabalhou como auditor no tribunal mineiro. “Eu me sentia muito incomodado. Como auditor concursado, como técnico, você levanta várias coisas, faz inspeção na rua, visita municípios, faz um trabalho técnico de qualidade, com levantamento de irregularidades, de má gestão. Quando chega para votação política, no plenário, muitas vezes aquilo que a gente pesquisava, pegando o que a lei estipula em termos de punição, era deixado de lado. Achávamos, por exemplo, alguma irregularidade muito grande em uma estatal, aí, ao invés de aplicar multa, aplicava ressalva. Ou seja, não funcionava”, lembrou Bossi.

Em 2000, com a morte de um conselheiro indicado pela Assembleia, Bossi decidiu candidatar-se. O percurso, descobriu, não era tão simples como parecia. De acordo com o regimento interno do Legislativo mineiro, para entrar na disputa por uma vaga na corte de contas, é preciso ter o apoio de 20% dos deputados estaduais. “É feito para a sociedade não participar. É publicado no rodapé do Diário Oficial e, quando abre a vaga, só tem dez dias para fazer o registro”, avaliou.

Tamás Bodolay/Agência Pública
Alexandre Bossi encontrou na lei a possibilidade de fazer diferente: ocupar uma vaga de juiz de contas sendo um representante da sociedade civil

Consultor do Legislativo desde 1993, ele tinha proximidade com os parlamentares e bateu na porta dos 77 gabinetes para conseguir os 16 votos necessários. Cada deputado pode apoiar até dois candidatos. “Os deputados falavam comigo: ‘Você tá doido? Já tenho compromisso com meu colega aqui, do partido tal’. Eu respondia: “Ô deputado, não diga isso. Diga que tem compromisso porque acredita que ele vai ser um bom fiscal, um bom auditor, mas não porque é seu amigo de partido”, lembrou. Bossi conseguiu o apoio e foi o primeiro representante da sociedade civil a disputar o cargo no país. Ele concorreu naquele ano com cinco deputados.

Na votação do plenário, Bossi precisaria de 39 votos, mas teve apenas um. Depois que experimentou a eleição pela primeira vez, o servidor público conseguiu entrar na disputa todas as outras cinco vezes em que vagaram cadeiras da Assembleia, em 2004, 2005, 2009, 2011 e 2012, sempre concorrendo com deputados. Ele até mesmo tentou ser o indicado do Aécio, em 2006. “Eu tentei falar com o governador, dizer pra ele para indicar uma pessoa com perfil técnico, mas o Aécio nem me recebeu. Foi o Anastasia, na época secretário de Estado, quem me atendeu”, contou. Naquele ano, Adriene Andrade foi a escolhida.

“Não vou me candidatar mais”, garantiu Bossi. “Eu fiquei de 2000 a 2012 mexendo com isso. É muito cansativo, eu paro a minha vida, mas isso não significa que eu desisti da luta”, explicou. Ele disse desconhecer casos de nomeações que não sejam políticas. “A sociedade civil organizada jamais conseguiu emplacar um nome. No caso da minha candidatura, eu tive a iniciativa, mas contei com o apoio de entidades como o Conselho Regional de Contabilidade e do Sindicato dos Servidores do Tribunal de Contas”. Para ele, é muito importante colocar os tribunais de contas, “órgãos desconhecidos da sociedade e tão importantes no combate à corrupção”, sempre na pauta de discussão. “Os diversos casos de desvio de dinheiro público que, com frequência, aparecem nas primeiras páginas dos jornais são prova de que os tribunais de contas não andam exercendo satisfatoriamente o seu papel fiscalizador”.

Aprovada pelo TCE-MG, cidade administrativa cai na mira da Lava Jato

Gustavo Baxter/Agência Pública
Cidade administrativa cai na mira da Operação Lava Jato

Na mira da Operação Lava Jato, a Cidade Administrativa da capital mineira passou pelo crivo do Tribunal de Contas de Minas em 2007. As suspeitas reveladas nas investigações da Polícia Federal (PF) são de que o então governador Aécio Neves tenha recebido da Odebrecht R$ 5,2 milhões em propina para que a empresa faturasse a licitação. Os recursos teriam ido para sua campanha, de acordo com a delação do ex-executivo da empreiteira Benedicto Júnior. Sempre que questionado sobre as acusações, Aécio Neves diz que “o edital de licitação foi apresentado previamente ao Ministério Público Estadual e ao Tribunal de Contas do Estado”.

Inaugurada em 4 de março de 2010, dia em que o avô de Aécio, o ex-presidente Tancredo Neves, completaria 100 anos, a Cidade Administrativa é a obra mais cara da gestão do tucano. Ela custou R$ 1,2 bilhão aos cofres públicos. Apesar do alto investimento, salta aos olhos de quem frequenta o local a infraestrutura já decadente: pisos com rachaduras surgidas apenas três meses depois da inauguração , janelas proibidas de serem abertas – ficam lacradas – porque os vidros caem lá do alto e cheiro forte de esgoto nos jardins. Em 2015, um vendaval arrancou parte do teto do prédio.

Em fevereiro, Fernando Pimentel decidiu desativar o Palácio Tiradentes, um dos prédios da Cidade Administrativa, onde o governador despachava. De acordo com Pimentel, a medida trará uma economia de 40% nos gastos com insumos diversos, manutenção rotineira e com o consumo de água e energia. O PSDB rebateu a decisão do petista e garantiu que a centralização da estrutura governamental naquele espaço gerou uma economia de R$ 590 milhões aos cofres públicos entre 2011 e 2015.

Passados 17 anos do lançamento do edital da Cidade Administrativa, o TCE de Minas instaurou, em abril de 2017, um procedimento para investigar se houve fraude no contrato. A medida foi tomada depois que a Procuradoria-Geral da República abriu inquérito para averiguar a existência de crimes envolvendo Aécio Neves na obra. A iniciativa para a investigação partiu do Ministério Público de Contas.

Gustavo Baxter/Agência Pública
Em 2015, um vendaval arrancou parte do teto do prédio

A Pública entrou em contato com as assessorias de imprensa do senador Aécio Neves e do Tribunal de Contas de Minas, que não deram retorno.

Ministério Público

Além de atuarem como auxiliares dos tribunais de contas no controle e na fiscalização da execução do orçamento e dos atos de gestão dos recursos públicos, os membros do Ministério Público de Contas podem apresentar uma denúncia à corte de contas para que irregularidades sejam apuradas e os gestores, responsabilizados. Os pareceres dos procuradores de contas, servidores concursados com carreira de bacharel em direito, são opinativos. Ou seja, eles não têm o poder de vetar as decisões dos conselheiros, que podem acatar ou não suas recomendações, tendo apenas como ferramenta o recurso para que as decisões sejam revistas.

Nunca na história do TCE de Minas, por exemplo, houve reprovação das contas de um governador. Mesmo quando os procuradores de contas alertaram para problemas graves. Em 2013, o Ministério Público de Contas advertiu que o estado não cumpriu o mínimo constitucional para a educação, de 25% da receita, tendo aplicado apenas 23,91%. Isso não impediu, no entanto, que os conselheiros aprovassem as contas do ex-governador Antonio Anastasia, argumentando que o gestor havia cumprido os índices constitucionais.

13 conselheiros afastados em um ano

O descumprimento da aplicação mínima constitucional de 15% da receita para a saúde foi um dos principais argumentos dos conselheiros do TCE do Rio para a rejeição do balanço financeiro de 2016 do governador Luiz Fernando Pezão (MDB). A última vez que o TCE havia emitido parecer contrário às contas do estado fora em 2003. A decisão contrária a Pezão se deu em maio do ano passado. “O colegiado que deliberou pela rejeição das contas em 2016 foi integrado por conselheiros suplentes, tendo em vista o afastamento dos titulares por ordem judicial (IPL 1133/DF – Operação Quinto do Ouro). Note-se que em anos anteriores (2007-2015) o número de inconsistências foi até maior. Ainda assim as contas eram sistematicamente aprovadas com parecer favorável do TCE, numa evidente demonstração de que o controle era meramente formal e de que existia uma estratégia de proteção mútua entre os órgãos”, alertou o Ministério Público Federal (MPF) no documento que justifica a Operação Cadeia Velha, que revelou um esquema de corrupção na Assembleia Legislativa do Rio de Janeiro.

Apesar da recomendação do TCE, a Assembleia do Rio aprovou, em setembro de 2017, a movimentação financeira do governador. A população e os servidores do estado, que convivem com salários atrasados, foram proibidos de participar da votação. À época, o Legislativo fluminense justificou que a decisão foi tomada pela presidência, por recomendação da segurança da Casa, “amparada em informações de que poderia haver atos violentos nos protestos”. Dois meses depois da reunião, Pezão indicou para o conselho da corte Edson Albertassi (MDB), então presidente da Comissão de Orçamento, Finanças, Fiscalização Financeira e Controle da Alerj, que também tinha dado aval à sua prestação de contas.

“Os fatos, no entanto, demonstraram que a argumentação de Albertassi não passou de mera retórica para justificar a proteção ao governo cujas contas, se tivessem sido rejeitadas, poderiam levar à responsabilização pessoal do governador”, observaram os procuradores no documento. Ex-líder do governo na Assembleia, Albertassi foi preso na Operação Cadeia Velha, antes de assumir a vaga no TCE. Ainda de acordo com o MPF, “desde 2007 e durante toda a administração de Sérgio Cabral, houve razões de sobra para a reprovação das contas do governo, contudo, como o processo de fiscalização sempre esteve viciado, em momento algum o ex-governador esteve sob o risco de se ver submetido ao processo político de impedimento”.

Há suspeitas de que durante o governo de Cabral cinco dos sete conselheiros do tribunal – Aloysio Guedes, Domingos Brazão, Marco Antônio de Alencar, José Gomes Graciosa e José Maurício Nolasco – participaram de um esquema de cobrança de propina para fechar os olhos para os contratos entre empreiteiras e o governo. A Operação Quinto do Ouro, da PF, que revelou o esquema, teve como base a delação premiada do ex-presidente do TCE Jonas Lopes. Os cinco conselheiros foram presos temporariamente em 29 de março de 2017 e soltos em 7 de abril, mas seguem afastados de suas funções desde então. O TCE do Rio afirmou, por meio de nota, que não irá comentar sobre o assunto. A reportagem não conseguiu contato com a defesa dos conselheiros afastados.

Apenas no último ano, pelo menos 13 conselheiros foram afastados de seus cargos com suspeitas de estarem envolvidos em esquemas de corrupção.

No Mato Grosso também foram afastados cinco conselheiros. Eles são suspeitos de ter recebido R$ 53 milhões em propinas para não prejudicar o andamento das obras da Copa no estado. O esquema foi revelado em delação do ex-governador Silval Barbosa (MDB) durante a Operação Malebolge, da PF. Os conselheiros Valter Albano, Antônio Joaquim, José Carlos Novelli, Waldir Júlio Teis e Sérgio Ricardo de Almeida foram afastados em setembro do ano passado pelo STF. A Malebolge é uma sequência da Operação Ararath, que desde 2013 investiga um suposto esquema de lavagem de dinheiro público e crimes financeiros no Mato Grosso.

À reportagem, o TCE do Mato Grosso informou, por meio da assessoria de imprensa, que houve uma investigação interna em outubro de 2016. “A investigação foi conduzida por dois conselheiros substitutos e um procurador do Ministério Público de Contas, com conclusão em março de 2017”, observou o órgão. “Não chegou a nenhuma evidência de crime, mas mesmo assim a comissão responsável entendeu por bem encaminhar cópias dos autos para os Ministérios Públicos Federal e Estadual”, diz a nota.

Leia o que dizem os conselheiros

No Espírito Santo, o conselheiro José Antônio Almeida Pimentel foi acusado de receber dinheiro em troca de facilitação e favorecimento para a aprovação de processos perante a corte de contas do Estado. As investigações revelaram também que ele teria oferecido expertise e apoio técnico no direcionamento de processos licitatórios em diversos municípios capixabas. José Antônio é alvo da Operação Moeda de Troca, deflagrada em 2010, que apura fraudes em licitações de municípios no Espírito Santo. Ele saiu do cargo, por decisão do STJ, em junho do ano passado.

A defesa argumentou ao STF que a denúncia contra José Antônio Pimentel seria inepta, principalmente por ausência de justa causa relativa aos crimes de lavagem de dinheiro e organização criminosa. Os fatos imputados ao denunciado, de acordo com a defesa, não estariam especificados.

O conselheiro do TCE do Amapá José Júlio de Miranda Coelho foi igualmente afastado de suas funções em março de 2018 pelo STJ. Ele é acusado de ter cometido 62 vezes o crime de lavagem de dinheiro com uso de terceiros.

José Júlio tinha sido afastado em 2015 e voltou ao cargo em dezembro de 2017 por decisão do STF. Diante do novo processo de afastamento, a defesa de Coelho alegou que, diante da reintegração promovida pela Suprema Corte, não havia fato recente que justificasse o novo pedido de afastamento feito pelo Ministério Público Federal. Mas ele foi afastado mesmo assim.

Bom relacionamento e parentesco

A relação de cumplicidade entre o órgão de controle e seu controlado é um dos principais motivos da corrupção nos tribunais de contas, de acordo com o procurador Júlio Marcelo de Oliveira. “O político que ocupa a cadeira de conselheiro terá, na maioria dos casos, uma visão mais simpática ao seu grupo político. O desenho institucional atual é vulnerável à captura política”, acrescentou.

“É com muita tranquilidade e serenidade que eu afirmo que este governo do estado do Rio de Janeiro, com suas finanças públicas, seus controles públicos, faz uma nova era do estado. Nós que cuidamos das contas do estado sentimos claramente a mudança radical que houve na Secretaria de Fazenda”, afirmou o então presidente do TCE do Rio de Janeiro José Maurício Nolasco durante a abertura do IV Encontro do Conselho Nacional dos Órgãos de Controle Interno, que ocorreu em 2009. Anos depois, ele seria investigado na Operação Quinto do Ouro, já mencionada anteriormente.

“Da parte do Tribunal de Contas de Goiás e do nosso governo, o que tem ocorrido invariavelmente é uma relação harmônica, porque há, acima de tudo, uma identidade de propósitos”, afirmou o então governador de Goiás Marconi Perillo (PSDB) durante a inauguração de uma nova sede do TCE, em agosto de 2016. Perillo é acusado de ter formado uma aliança com o dono da construtora Delta, Fernando Cavendish, e com o bicheiro Carlinhos Cachoeira para receber vantagens indevidas em troca de contratos com o governo goiano que causaram prejuízos aos cofres públicos. Em nota enviada à imprensa quando denunciado ao STJ, em março de 2017, ele negou as acusações. Assim que deixou a vaga para disputar a reeleição, em abril, o governador que o substituiu, José Eliton (PSDB), indicou o cunhado de seu antecessor, Sérgio Cardoso, ao conselho do Tribunal de Contas dos Municípios do Estado de Goiás. (Veja a íntegra da nota do TCE-GO)

O levantamento da ONG Transparência Brasil mostrou também que 32% dos conselheiros têm relações de parentesco com políticos. “As relações são diversas e demonstram, em alguns casos, laços com figuras influentes na política local há diversas gerações. Em um caso, o poder remonta ao período imperial: o clã político cearense Paula Pessoa, ao qual pertence o conselheiro Luís Alexandre Albuquerque Figueiredo de Paula Pessoa, do TCE do Ceará, conta com oito gerações de políticos influentes. O conselheiro, além de ter de pai, irmão e sobrinho na política subnacional, tem como antepassado um senador do Império”, observou a ONG no estudo.

Leia também: Veja o que dizem os mencionados na reportagem

O movimento #MudaTC, criado pela entidade presidida pelo procurador junto ao TCU, Júlio Marcelo de Oliveira, a Ampcon, a Confederação Nacional das Carreiras Típicas de Estado (Conacate) e a Federação Nacional das Entidades dos Servidores dos Tribunais de Contas do Brasil (Fenastc), depois do escândalo no TCE do Rio, apoia a aprovação da PEC 329/2013, que está pronta para ir a plenário.

Gustavo Baxter/Agência Pública
Rachaduras a caminho do Palácio Tiradentes

Entre os principais pontos está a mudança na composição dos tribunais de contas, proibindo indicações políticas. O projeto prevê também que os conselheiros sejam fiscalizados pelo Conselho Nacional de Justiça, assim como todos os juízes, desembargadores e ministros do STF e do STJ.

Já a Associação dos Membros dos Tribunais de Contas do Brasil (Atricon) defende que seja criado um Conselho Nacional dos Tribunais de Contas para fiscalizar as cortes de contas. Em relação à composição dos tribunais, o presidente da entidade, Fábio Nogueira, explica que a associação não é contra a indicação de políticos à vaga. “Nós não temos nenhum preconceito contra aqueles que vêm do Parlamento. O que nós precisamos é ter cautela nas indicações”, defendeu.

A proposta de mudanças da Atricon está na PEC 22/2017. Ela foi formulada e sugerida pela entidade e apresentada pelo senador Cássio Cunha (PSDB-PB). O projeto assegura a maior parte dos assentos aos membros das carreiras técnicas – cinco no TCU e quatro nos outros tribunais. E prevê o fim das indicações livres do chefe do Executivo e a redução das indicações do Legislativo, fixando critérios como quarentena de três anos afastado de mandato eletivo, não ter sido condenado judicialmente nem ter tido contas reprovadas.

Além disso, a PEC determina que os conselheiros deverão ter graduação e experiências nas áreas jurídica, contábil, econômica e financeira ou de administração pública. Atualmente, apesar de a Constituição exigir “notórios conhecimentos jurídicos, contábeis, econômicos, financeiros ou de administração pública”, há conselheiros de diversas áreas e sem ensino superior nas cadeiras de tribunais de contas estaduais. De acordo com estudo do perfil desses tribunais publicado em 2014 pelo contador Alexandre Bossi, que também é professor do Centro Universitário UNA em Belo Horizonte, esse grupo chega a 23% dos conselheiros. A pesquisa dele abrangeu o TCU, os 26 tribunais estaduais e o do Distrito Federal. 

]]>
https://apublica.org/2018/06/quem-fiscaliza-os-tribunais-de-contas/feed/ 0
O que dizem os citados na reportagemhttps://apublica.org/2018/06/o-que-dizem-os-citados-na-reportagem/ https://apublica.org/2018/06/o-que-dizem-os-citados-na-reportagem/#respond Thu, 14 Jun 2018 16:54:47 +0000 http://apublica.org/?p=47872

A reportagem da Pública tentou contato com todos os acusados e mencionados na reportagem. Os TCEs do Rio de Janeiro e Minas Gerais e o TCM da Bahia afirmaram por nota que não se pronunciariam. Abaixo, listamos o posicionamento dos tribunais de contas do Paraná, Rio Grande do Norte e dos conselheiros mencionados:

TCE- PR: O Tribunal de Contas do Paraná informou, por meio de sua assessoria de imprensa, que desde 2011 vem realizando auditorias nas empresas concessionárias de rodovias, já tendo encontrado variações de até 25% a mais no preço cobrado por algumas das empresas. Segundo o TCE-PR, as contas do
governador Carlos Alberto Richa relativas ao exercício de 2016 foram aprovadas em novembro de 2017 com 14 ressalvas, nove determinações e três recomendações ao Poder Executivo estadual. (Veja nota)

TCE-RN: O Tribunal de Contas do Rio Grande do Norte afirmou, por meio de sua assessoria de imprensa, que não houve mudança de entendimento do órgão no processo envolvendo a fiscalização das obras da Arena das Dunas. (Veja nota)

Ex-ministro Mário Negromonte: A defesa de Mário Negromonte alega, no processo, que o inquérito não apresenta conteúdo probatório capaz de demonstrar, de forma definitiva, a existência de ato ilícito por ele praticado.

Senador Agripino Maia: A assessoria de imprensa do senador Agripino Maia não retornou o contato feito pela reportagem. Quando o STF o tornou réu, em dezembro de 2017, ele enviou nota à imprensa dizendo ter causado “estranheza” o fato de não ter sido considerado pelo tribunal o “farto conjunto de provas” de sua “completa inocência”. “Como afirmado por todos os ministros da Primeira Turma, o prosseguimento das investigações não significa julgamento condenatório. E é justamente a inabalável certeza da minha inocência que me obriga a pedir à Corte o máximo de urgência no julgamento final da causa”, afirmou o parlamentar por meio de sua assessoria de imprensa.

Advogado Tiago Cedraz: O advogado Tiago Cedraz, por meio de sua assessoria de imprensa, negou qualquer ilegalidade e reiterou sua tranquilidade quanto aos fatos mencionados por jamais ter participado de conduta ilícita.

Conselheiros afastados do Tribunal de Contas do Mato Grosso:

Valter Albano: Em nota enviada à imprensa quando afastado, o conselheiro Valter Abano afirmou que nunca se omitiu nem agiu de forma ilícita no exercício de suas funções, nem pessoalmente nem por pessoa autorizada por ele. “Em meus 45 anos de vida pública nunca fui condenado em nenhum processo, de qualquer natureza, especialmente por fatos que denegrissem minha honra e minha integridade”, disse. E acrescentou: “Repudio o afastamento do cargo tão somente com base em delações sem nenhuma prova para corroborá-las, confio na Justiça e tenho a certeza de que o tempo e as investigações irão demonstrar a veracidade dos fatos”.

Antônio Joaquim: No processo, a defesa do conselheiro Antônio Joaquim argumentou que seu afastamento foi baseado apenas em delações premiadas e que não há provas contra os conselheiros. “Assim, na tentativa de emplacar sua colaboração premiada, os colaboradores apontam fatos manifestamente inverídicos ao Requerente, sem apresentar quaisquer dados de corroboração, a fim de meramente conferir arrimo à delação ao acusar o Requerente, pessoa que sempre agiu dentro dos ditames da moralidade, da probidade e da honestidade, verificando-se o completo esvaziamento da delação em tela em relação a ele, conforme será a seguir esclarecido”, acrescentou.

José Carlos Novelli: Em nota enviada à imprensa quando afastado, a defesa de José Carlos Novelli afirmou que não foram apresentadas provas de atos ilícitos contra o conselheiro e considerou o afastamento desproporcional. “Não há o que falar sobre recebimento de propina e outros benefícios por parte do conselheiro Novelli. Qualquer afirmação contrária é leviana e criminosa”, diz.

Waldir Júlio Teis: No processo, a defesa de Walter Júlio Teis argumentou que não há provas contra ele. “Ao ler as denúncias aduzidas pelos colaboradores, não encontrou qualquer ato concreto de participação do conselheiro Waldir Julio Teis, nos atos supostamente ilícitos investigados nessa quadra, mas, tão somente, meras declarações unilaterais dos colaboradores, não tendo o condão de albergar uma medida tão drástica, como a aqui vergastada”, afirmou a defesa.

Sérgio Ricardo de Almeida: A reportagem não conseguiu localizar a defesa do conselheiro afastado Sérgio Ricardo de Almeida.

]]>
https://apublica.org/2018/06/o-que-dizem-os-citados-na-reportagem/feed/ 0
================================================ FILE: api/test/data/feed/audiworld.com ================================================ AudiWorld https://www.audiworld.com Audi News and Discussion Sun, 01 Jul 2018 13:40:49 +0000 en-US hourly 1 https://wordpress.org/?v=4.9.6 57070361 Audi A4 Sedan and Audi A4 Avant: Bestselling models in top form https://www.audiworld.com/articles/audi-a4-sedan-and-audi-a4-avant-bestselling-models-in-top-form/ Sun, 01 Jul 2018 13:40:49 +0000 https://www.audiworld.com/?p=36201
A more striking look at the front and rear Ultra-dynamic “S line competition” equipment package Audi makes its successful premium midsize model even more compelling. The 2019 model year will see the A4 Sedan and A4 Avant receive newly designed bumpers, which together with the new wheel design accentuate the sporty character. The equally all-new [...] More »]]>
36201 https://www.audiworld.com/wp-content/uploads/2018/07/Audi-A4-9.jpg https://www.audiworld.com/wp-content/uploads/2018/07/Audi-A4-9-150x150.jpg
Event Information: Waterfest 24 has an all new location!! https://www.audiworld.com/articles/event-information-waterfest-24-has-an-all-new-location/ Thu, 28 Jun 2018 01:38:30 +0000 https://www.audiworld.com/?p=36192
For the first time in a long time, Waterfest will have a new location. Just a hop skip and jump from the former location, this year Atco Dragway in Atco NJ will be the place to be July 21 and 22, for the largest VW and Audi show in the East. As always, AudiWorld will [...] More »]]>
36192 https://www.audiworld.com/wp-content/uploads/2018/06/Event-ad-3.jpg https://www.audiworld.com/wp-content/uploads/2018/06/Event-ad-3-150x150.jpg
Slideshow: Keeping You and Your Car Cool This Summer https://www.audiworld.com/how-tos/slideshows/keeping-you-and-your-car-cool-this-summer-541484 Wed, 27 Jun 2018 06:48:16 +0000 http://www.audiworld.com/?guid=b0b22b25f7eeb547c60adebddff2201e
Warmer weather is finally here, but you need to help your car stay cool in the higher temperatures. If you are wondering how to keep things smooth this summer, there are plenty of things that you can do.]]>
36189 https://www.audiworld.com/wp-content/uploads/2018/06/UF101_-_Audi_R8_6_ebf885a7-df63-4a4a-9751-4b3e93a87ca6_1024x1024-370642.jpg https://www.audiworld.com/wp-content/uploads/2018/06/UF101_-_Audi_R8_6_ebf885a7-df63-4a4a-9751-4b3e93a87ca6_1024x1024-370642-150x150.jpg
Jay Leno’s Garage : Audi R8 RWS https://www.audiworld.com/articles/jay-lenos-garage-audi-r8-rws/ Tue, 26 Jun 2018 13:13:29 +0000 https://www.audiworld.com/?p=36186
It’s usually a good thing to be featured on Jay Leno’s Garage, so we were psyched to learn that Audi’s R8 RWS (Rear Wheel [drive] Series) was going to be featured on the show. You can read about the R8 RWS here. Enjoy the video!]]>
36186 https://www.audiworld.com/wp-content/uploads/2017/09/Audi-R8-RWS-01.jpg https://www.audiworld.com/wp-content/uploads/2017/09/Audi-R8-RWS-01-150x150.jpg
Slideshow: Your Suspension Essentials for Proper Handling https://www.audiworld.com/how-tos/slideshows/your-suspension-essentials-for-proper-handling-540927 Mon, 25 Jun 2018 09:09:56 +0000 http://www.audiworld.com/?guid=f2b5156ca4529cbd15e553c6e6a289e1
Building your perfect suspension system is more than just a good set of wheels or some new shocks. Here is a list of components that create an all-around high-performance suspension. ]]>
36181 https://www.audiworld.com/wp-content/uploads/2018/06/audi-369631.jpg https://www.audiworld.com/wp-content/uploads/2018/06/audi-369631-150x150.jpg
ABT upgrades for the 2018 Audi A4 and S4 Sedan https://www.audiworld.com/articles/abt-upgrades-for-the-2018-audi-a4-and-s4-sedan/ Sun, 24 Jun 2018 13:46:23 +0000 https://www.audiworld.com/?p=36157
The Audi S4 is the benchmark among medium-sized premium cars and will be on top of any situation with upgrades from ABT. With some new aerodynamic add-ons like a front skirt add-on, front grille frame and fender inserts, either made out of ABS plastic or carbon fiber, S4 owners (and A4 drivers too!) are ready [...] More »]]>
36157 https://www.audiworld.com/wp-content/uploads/2018/06/Abt-Audi-A4S4-21.jpg https://www.audiworld.com/wp-content/uploads/2018/06/Abt-Audi-A4S4-21-150x150.jpg
Slideshow: To Boldly Go: Audi’s Mission to the Moon https://www.audiworld.com/how-tos/slideshows/to-boldly-go-audis-mission-to-the-moon-540929 Fri, 22 Jun 2018 06:27:01 +0000 http://www.audiworld.com/?guid=a7bb87fb07d7a495e0a92455b6a7255d
You know the saying that "the sky's the limit?" Audi took that literally.]]>
36153 https://www.audiworld.com/wp-content/uploads/2018/06/audilunar-369869.png https://www.audiworld.com/wp-content/uploads/2018/06/audilunar-369869-150x150.png
Photo Gallery: All new Audi A1 https://www.audiworld.com/articles/photo-gallery-all-new-audi-a1/ Thu, 21 Jun 2018 00:28:51 +0000 https://www.audiworld.com/?p=36150
]]>
36150 https://www.audiworld.com/wp-content/uploads/2018/06/Audi-A1-23.jpg https://www.audiworld.com/wp-content/uploads/2018/06/Audi-A1-23-150x150.jpg
New Audi A1 Sportback – ideal companion for an urban lifestyle https://www.audiworld.com/articles/new-audi-a1-sportback-ideal-companion-for-an-urban-lifestyle/ Thu, 21 Jun 2018 00:14:44 +0000 https://www.audiworld.com/?p=36103
Eye-catching, masculine design with taut lines Infotainment concepts from the Audi full-size class New driver assistance systems for more safety and comfort In 2010, a brand-new Audi model line made its debut in the shape of the A1. And now the second generation of the successful compact car is rolling to the starting line. Its [...] More »]]>
36103 https://www.audiworld.com/wp-content/uploads/2018/06/Audi-A1-35.jpg https://www.audiworld.com/wp-content/uploads/2018/06/Audi-A1-35-150x150.jpg
Slideshow: How Audi’s Rosemeyer Gave us the Veyron https://www.audiworld.com/how-tos/slideshows/how-audis-rosemeyer-gave-us-the-veyron-540129 Wed, 20 Jun 2018 07:05:18 +0000 http://www.audiworld.com/?guid=77c422bb6ea624674537fcd7374c3012
Audi’s Rosemeyer is the granddaddy of all hypercars. Here’s the inside scoop on the car that gave us the ultimate line of speed machines.]]>
36101 https://www.audiworld.com/wp-content/uploads/2018/06/1-369758.jpg https://www.audiworld.com/wp-content/uploads/2018/06/1-369758-150x150.jpg
================================================ FILE: api/test/data/feed/boingboing ================================================ Boing Boing https://boingboing.net Brain candy for Happy Mutants Wed, 06 Jun 2018 10:00:03 +0000 en-US hourly 1 https://wordpress.org/?v=4.9.6 https://i0.wp.com/media.boingboing.net/wp-content/uploads/2018/04/apple-touch-icon-1.png?fit=32%2C32&ssl=1 Boing Boing https://boingboing.net 32 32 87954168 Here's how the Hawai'ian Islands formed https://boingboing.net/2018/06/06/heres-how-the-hawaiian-isl.html https://boingboing.net/2018/06/06/heres-how-the-hawaiian-isl.html#respond Wed, 06 Jun 2018 10:00:03 +0000 https://boingboing.net/?p=601940

Scientific American created this helpful explainer of how the chain of Hawai'ian Islands formed. The tectonic plate is moving northwest over a magma hot spot in the earth's mantle. In fact, there's a new Hawai'ian island named Loihi forming underwater right now. (more…)

]]>

Scientific American created this helpful explainer of how the chain of Hawai'ian Islands formed. The tectonic plate is moving northwest over a magma hot spot in the earth's mantle. In fact, there's a new Hawai'ian island named Loihi forming underwater right now. (more…)

]]>
https://boingboing.net/2018/06/06/heres-how-the-hawaiian-isl.html/feed 0 601940
Super-Fun-Pak Comix, feat. Doug, Everything Bagel, Eastworld, & MORE! https://boingboing.net/2018/06/06/super-fun-pak-comix-feat-dou.html https://boingboing.net/2018/06/06/super-fun-pak-comix-feat-dou.html#comments Wed, 06 Jun 2018 09:00:56 +0000 https://boingboing.net/?p=602782

 

FOR THE KIDS IN YOUR LIFE, AND THEIR SUMMER READING:  Get Ruben Bolling’s hit book series for kids, The EMU Club Adventures.

"The EMU Club inhabits exactly the world I always hoped to live in when I was 12, when the answer to questions like 'Where did I put my toy' led inevitably to alien conspiracies and secret underground tunnels. A book for the curious and adventurous!" -Cory Doctorow, author of "For the Win" and "Little Brother"

"The type of non-stop action and improbably hilarious fun that only a kid could dream up. ... The EMU Club's adventures perfectly capture the intersection of imagination and wonder - the crossroad that's so often found in cardboard boxes, pillow forts and backyards everywhere." -GeekDad

Get Book the First, "Alien Invasion in My Backyard," here.  

Get Book the Second, "Ghostly Thief of Time," here.

--

JOIN Tom the Dancing Bug's INNER HIVE right now.

More Tom the Dancing Bug comics on Boing Boing! (more…)

]]>

 

FOR THE KIDS IN YOUR LIFE, AND THEIR SUMMER READING:  Get Ruben Bolling’s hit book series for kids, The EMU Club Adventures.

"The EMU Club inhabits exactly the world I always hoped to live in when I was 12, when the answer to questions like 'Where did I put my toy' led inevitably to alien conspiracies and secret underground tunnels. A book for the curious and adventurous!" -Cory Doctorow, author of "For the Win" and "Little Brother"

"The type of non-stop action and improbably hilarious fun that only a kid could dream up. ... The EMU Club's adventures perfectly capture the intersection of imagination and wonder - the crossroad that's so often found in cardboard boxes, pillow forts and backyards everywhere." -GeekDad

Get Book the First, "Alien Invasion in My Backyard," here.  

Get Book the Second, "Ghostly Thief of Time," here.

--

JOIN Tom the Dancing Bug's INNER HIVE right now.

More Tom the Dancing Bug comics on Boing Boing! (more…)

]]>
https://boingboing.net/2018/06/06/super-fun-pak-comix-feat-dou.html/feed 1 602782
Salad Cream renamed https://boingboing.net/2018/06/06/salad-cream-renamed.html https://boingboing.net/2018/06/06/salad-cream-renamed.html#comments Wed, 06 Jun 2018 08:14:03 +0000 https://boingboing.net/?p=603185

The Heinz condiment Salad Cream—a homogenous beige slime similar to Miracle Whip that has become a traditional staple of British home cuisine—is to be renamed Sandwich Cream to keep with the times.

Its maker, Heinz, says that only 14% of those who buy the sauce use it on salads, with many more preferring to use it in sandwiches. A spokesman for Heinz told trade magazine the Grocer that the name no longer "fairly represents the product's ingredients or usage occasions." It would be the first name change for the product since its launch in 1914.

Fans of the traditional name went on social media to express their anger.

Even cheap mayo substitutes have aggrieved, entitled fans. ]]>

The Heinz condiment Salad Cream—a homogenous beige slime similar to Miracle Whip that has become a traditional staple of British home cuisine—is to be renamed Sandwich Cream to keep with the times.

Its maker, Heinz, says that only 14% of those who buy the sauce use it on salads, with many more preferring to use it in sandwiches. A spokesman for Heinz told trade magazine the Grocer that the name no longer "fairly represents the product's ingredients or usage occasions." It would be the first name change for the product since its launch in 1914.

Fans of the traditional name went on social media to express their anger.

Even cheap mayo substitutes have aggrieved, entitled fans. ]]> https://boingboing.net/2018/06/06/salad-cream-renamed.html/feed 6 603185 Crayola now has a line of gender-fluid makeup https://boingboing.net/2018/06/06/crayola-now-has-a-line-of-gend.html https://boingboing.net/2018/06/06/crayola-now-has-a-line-of-gend.html#comments Wed, 06 Jun 2018 08:00:01 +0000 https://boingboing.net/?p=602124

I'm not making this up: Crayola is making makeup.

Yep, in a partnership with young adult retail brand ASOS, Crayola now has a line of 58 vegan and cruelty-free beauty products, which includes "face crayons," mascara, highlighters, and eyeshadow palettes. Shades, such as Tumbleweed and Dandelion, match the names of actual Crayola crayons.

Elle notes the collection is "gender fluid," citing a press release about the line from ASOS. They also note that both men and women are shown wearing the product in the campaign's photos.

And no, you can't just use real crayons as makeup. They're not "designed, tested, or approved" for that purpose, according to the crayon giant's website.

(Mashable)]]>

I'm not making this up: Crayola is making makeup.

Yep, in a partnership with young adult retail brand ASOS, Crayola now has a line of 58 vegan and cruelty-free beauty products, which includes "face crayons," mascara, highlighters, and eyeshadow palettes. Shades, such as Tumbleweed and Dandelion, match the names of actual Crayola crayons.

Elle notes the collection is "gender fluid," citing a press release about the line from ASOS. They also note that both men and women are shown wearing the product in the campaign's photos.

And no, you can't just use real crayons as makeup. They're not "designed, tested, or approved" for that purpose, according to the crayon giant's website.

(Mashable)]]> https://boingboing.net/2018/06/06/crayola-now-has-a-line-of-gend.html/feed 3 602124 Foster an Orphan Elephant https://boingboing.net/2018/06/06/foster-an-orphan-elephant.html https://boingboing.net/2018/06/06/foster-an-orphan-elephant.html#respond Wed, 06 Jun 2018 07:42:29 +0000 https://boingboing.net/?p=601118

Just over two years ago I posted a video here titled “I Will Always Remember You.” Among the many pieces I’ve done for Boing Boing both before and after, it remains the piece most read, and the video most watched.

The subject is the poaching of elephants and the orphaned young elephants who are then left alone. Elephants are extremely smart and social creatures, and the young stay with their mothers, for whom they depend on food, for three to four years. When the mother is killed, the youngster often dies.

The poaching of elephants for their tusks is no closer to being stopped than it was two years ago. Few want to look at horrible photographs of slaughtered animals, which is what makes this piece of animation so important and powerful.

Please watch this and consider donating to the David Sheldrick Wildlife Trust, an organization which cares for young elephants whose mothers have been slain. https://youtu.be/yopa2wvHqhQ

If the video doesn’t move you, then you have a heart of stone. For a mere $50 you can foster an orphan elephant.

From The David Sheldrick Wildlife Trust:

Every orphan of poaching once had a family. As Hugo Guinness’ moving animation shows, at our Nursery, we offer hope, a future and a second chance at life to victims of the ivory trade. This is their story. ‪#‎RememberMe‬ - Please share this film far and wide! Survivors, like the orphan elephant in the film, have the opportunity to not only live, but to go on and start their own families back in the wild. Want to be a part of their future? Foster an orphaned baby elephant in our care at: http://dswt.org/foster Our biggest thanks to acclaimed artist Hugo Guinness, Allegra Pilkington and Luisa Crosbie for creating such a powerful animation, with original music by Joe Trapanese and support from J. Crew.

]]>

Just over two years ago I posted a video here titled “I Will Always Remember You.” Among the many pieces I’ve done for Boing Boing both before and after, it remains the piece most read, and the video most watched.

The subject is the poaching of elephants and the orphaned young elephants who are then left alone. Elephants are extremely smart and social creatures, and the young stay with their mothers, for whom they depend on food, for three to four years. When the mother is killed, the youngster often dies.

The poaching of elephants for their tusks is no closer to being stopped than it was two years ago. Few want to look at horrible photographs of slaughtered animals, which is what makes this piece of animation so important and powerful.

Please watch this and consider donating to the David Sheldrick Wildlife Trust, an organization which cares for young elephants whose mothers have been slain. https://youtu.be/yopa2wvHqhQ

If the video doesn’t move you, then you have a heart of stone. For a mere $50 you can foster an orphan elephant.

From The David Sheldrick Wildlife Trust:

Every orphan of poaching once had a family. As Hugo Guinness’ moving animation shows, at our Nursery, we offer hope, a future and a second chance at life to victims of the ivory trade. This is their story. ‪#‎RememberMe‬ - Please share this film far and wide! Survivors, like the orphan elephant in the film, have the opportunity to not only live, but to go on and start their own families back in the wild. Want to be a part of their future? Foster an orphaned baby elephant in our care at: http://dswt.org/foster Our biggest thanks to acclaimed artist Hugo Guinness, Allegra Pilkington and Luisa Crosbie for creating such a powerful animation, with original music by Joe Trapanese and support from J. Crew.

]]>
https://boingboing.net/2018/06/06/foster-an-orphan-elephant.html/feed 0 601118
Judge to EPA: you are legally required to turn over Pruitt's documentary evidence for climate denial https://boingboing.net/2018/06/05/epistemological-smokescreen.html https://boingboing.net/2018/06/05/epistemological-smokescreen.html#comments Wed, 06 Jun 2018 01:41:54 +0000 https://boingboing.net/?p=602929

Embattled EPA Director Scott Pruitt went on national TV to announce on behalf of the US government that "I would not agree [CO2 is] a primary contributor to the global warming that we see... There’s a tremendous disagreement about the degree of the impact [of] human activity on the climate." (more…)

]]>

Embattled EPA Director Scott Pruitt went on national TV to announce on behalf of the US government that "I would not agree [CO2 is] a primary contributor to the global warming that we see... There’s a tremendous disagreement about the degree of the impact [of] human activity on the climate." (more…)

]]>
https://boingboing.net/2018/06/05/epistemological-smokescreen.html/feed 7 602929
John Perry Barlow's memoir, finished weeks before his death, is out https://boingboing.net/2018/06/05/barlovian.html https://boingboing.net/2018/06/05/barlovian.html#comments Wed, 06 Jun 2018 01:26:16 +0000 https://boingboing.net/?p=602924

EFF co-founder, Grateful Dead lyricist and mayor of the internet John Perry Barlow died in February and left an unfillable hole. (more…)

]]>

EFF co-founder, Grateful Dead lyricist and mayor of the internet John Perry Barlow died in February and left an unfillable hole. (more…)

]]>
https://boingboing.net/2018/06/05/barlovian.html/feed 2 602924
Fugitive wanted for attempted murder found at White House, where he worked for National Security Council https://boingboing.net/2018/06/05/nsc-fugitive-caught.html https://boingboing.net/2018/06/05/nsc-fugitive-caught.html#comments Wed, 06 Jun 2018 00:14:27 +0000 https://boingboing.net/?p=602914

Pretty logical place to hide, if you ask me.

Secret Service agents grabbed Martese Maurice Edwards today when he showed up for work at the White House, where he worked as a private contractor for the WH National Security Council.

A man by that same name is wanted for attempted first-degree murder in Prince George’s County, Maryland.

(more…)

]]>

Pretty logical place to hide, if you ask me.

Secret Service agents grabbed Martese Maurice Edwards today when he showed up for work at the White House, where he worked as a private contractor for the WH National Security Council.

A man by that same name is wanted for attempted first-degree murder in Prince George’s County, Maryland.

(more…)

]]>
https://boingboing.net/2018/06/05/nsc-fugitive-caught.html/feed 15 602914
MyHeritage leaks data of 92 million who use the genealogy and family tree website https://boingboing.net/2018/06/05/my-heritage-leaks.html https://boingboing.net/2018/06/05/my-heritage-leaks.html#comments Tue, 05 Jun 2018 23:54:34 +0000 https://boingboing.net/?p=602909

A security breach affected the MyHeritage website, and leaked the personal information of over 92 million users, the Israeli company said Tuesday.

(more…)

]]>

A security breach affected the MyHeritage website, and leaked the personal information of over 92 million users, the Israeli company said Tuesday.

(more…)

]]>
https://boingboing.net/2018/06/05/my-heritage-leaks.html/feed 8 602909
Rot the eyes right out of your head with this collection of 60 free Film Noir classics https://boingboing.net/2018/06/05/rot-the-eyes-right-out-of-your.html https://boingboing.net/2018/06/05/rot-the-eyes-right-out-of-your.html#comments Tue, 05 Jun 2018 23:28:53 +0000 https://boingboing.net/?p=602886

I've been hooked on hard-boiled crime novels and Film Noir since I picked up my first copy (there have been many) of Dashiel Hammett's Red Harvest back in the mid-1990s. It's bleak, entertaining stuff that I find to be a hell of a lot more honest in its portrayal of human desperation, motivation, rage and lust than most of the drivel that's spoon-fed to us in films, television and a whole lot of books these days.

My personal tastes lean towards stories where the bad guy, or at least, a pretty lousy guy, wins. Richard Stark's (a pen name of the late, great Donald E. Westlake) Parker series, anything written by Lawrence Block or Raymond Chandler, and movies like The Big Sleep, The Long Goodbye or more recently, The Drop scratch my need for fatalistic media. Despite their being a glut of crime and detective films out there, set in the city, country or even the future (I'm looking at you, Looper), finding new books to read or movies to veg out to can be a daunting task. Fortunately, the good people at Open Culture have made the latter a whole lot easier. Open Culture's curated a fine collection of 60 Film Noir gems that are free to watch online, and in some cases, free to download. I won't lie to you, there's a number of stinkers in the movies that they've included on their list, but even a bad film can be worth watching. If nothing else, it'll make you appreciate a good movie that much more. Image via Maxpixel      ]]>

I've been hooked on hard-boiled crime novels and Film Noir since I picked up my first copy (there have been many) of Dashiel Hammett's Red Harvest back in the mid-1990s. It's bleak, entertaining stuff that I find to be a hell of a lot more honest in its portrayal of human desperation, motivation, rage and lust than most of the drivel that's spoon-fed to us in films, television and a whole lot of books these days.

My personal tastes lean towards stories where the bad guy, or at least, a pretty lousy guy, wins. Richard Stark's (a pen name of the late, great Donald E. Westlake) Parker series, anything written by Lawrence Block or Raymond Chandler, and movies like The Big Sleep, The Long Goodbye or more recently, The Drop scratch my need for fatalistic media. Despite their being a glut of crime and detective films out there, set in the city, country or even the future (I'm looking at you, Looper), finding new books to read or movies to veg out to can be a daunting task. Fortunately, the good people at Open Culture have made the latter a whole lot easier. Open Culture's curated a fine collection of 60 Film Noir gems that are free to watch online, and in some cases, free to download. I won't lie to you, there's a number of stinkers in the movies that they've included on their list, but even a bad film can be worth watching. If nothing else, it'll make you appreciate a good movie that much more. Image via Maxpixel      ]]> https://boingboing.net/2018/06/05/rot-the-eyes-right-out-of-your.html/feed 16 602886 This man is swimming across the Pacific Ocean to raise awareness about plastic pollution https://boingboing.net/2018/06/05/this-man-is-swimming-across-th.html https://boingboing.net/2018/06/05/this-man-is-swimming-across-th.html#comments Tue, 05 Jun 2018 23:23:38 +0000 https://boingboing.net/?p=602880

Some people are more committed to a cause than others. Ben Lecomte? He’s one of those. In an effort to highlight the stunning amount of damage humanity is doing to the world’s oceans and generate awareness about plastic pollution, the 50-year old adventurer plans on swimming through 1,600km of the Great Pacific Garbage Patch. Lecomte started his swim this morning in Japan. Provided everything goes according to plan, he’ll finish his aquatic ramblings in 180 days, in San Fransisco. This isn’t his first open water rodeo: according to The Guardian, Lecomte swam across the whole damn Atlantic Ocean back in 1998. https://www.youtube.com/watch?v=fnUK0oBI_s4 From The Guardian:
The Great Pacific garbage patch, according to the latest March estimate, is twice the size of France and contains nearly 80,000 tonnes of plastic. Also known as the Pacific trash vortex, the patch is caused by the North Pacific gyre – a circle of currents that keep plastic, waste and other pollution trapped. According to scientists, the patch has been growing “exponentially” in recent years. The March estimate found it was 16 times larger than previously expected.
As Lecomte makes his way through the garbage patch, he and his support team plan on taking water samples and catching fish to test for plastic pollutants and illustrate how plastics have been infiltrating the food chain. This might sound like a a goofy publicity stunt, but if you take a peek at the endeavor's website, you'll see that Lecomte's efforts have the support of some big scientific guns, including NASA, CMER, the Argonne National Labratory and the University of Montana, just to name a few. If you'd like to keep tabs on the progress that Lecomte and his team are making in their trek across the Pacific Ocean or learn more about how badly we've screwed up our oceans, you'll want to check out The Longest Swim. ]]>

Some people are more committed to a cause than others. Ben Lecomte? He’s one of those. In an effort to highlight the stunning amount of damage humanity is doing to the world’s oceans and generate awareness about plastic pollution, the 50-year old adventurer plans on swimming through 1,600km of the Great Pacific Garbage Patch. Lecomte started his swim this morning in Japan. Provided everything goes according to plan, he’ll finish his aquatic ramblings in 180 days, in San Fransisco. This isn’t his first open water rodeo: according to The Guardian, Lecomte swam across the whole damn Atlantic Ocean back in 1998. https://www.youtube.com/watch?v=fnUK0oBI_s4 From The Guardian:
The Great Pacific garbage patch, according to the latest March estimate, is twice the size of France and contains nearly 80,000 tonnes of plastic. Also known as the Pacific trash vortex, the patch is caused by the North Pacific gyre – a circle of currents that keep plastic, waste and other pollution trapped. According to scientists, the patch has been growing “exponentially” in recent years. The March estimate found it was 16 times larger than previously expected.
As Lecomte makes his way through the garbage patch, he and his support team plan on taking water samples and catching fish to test for plastic pollutants and illustrate how plastics have been infiltrating the food chain. This might sound like a a goofy publicity stunt, but if you take a peek at the endeavor's website, you'll see that Lecomte's efforts have the support of some big scientific guns, including NASA, CMER, the Argonne National Labratory and the University of Montana, just to name a few. If you'd like to keep tabs on the progress that Lecomte and his team are making in their trek across the Pacific Ocean or learn more about how badly we've screwed up our oceans, you'll want to check out The Longest Swim. ]]>
https://boingboing.net/2018/06/05/this-man-is-swimming-across-th.html/feed 5 602880
Facebook gave user data to 'at least 4 Chinese companies,' including tech giant ID'd as security threat by U.S. intel https://boingboing.net/2018/06/05/facebook-china.html https://boingboing.net/2018/06/05/facebook-china.html#comments Tue, 05 Jun 2018 23:19:41 +0000 https://boingboing.net/?p=602892

Despite Mark Zuckerberg's internal war on transparency, the Facebook data abuse reveals just keep on coming.

(more…)

]]>

Despite Mark Zuckerberg's internal war on transparency, the Facebook data abuse reveals just keep on coming.

(more…)

]]>
https://boingboing.net/2018/06/05/facebook-china.html/feed 14 602892
Watch a vinyl record spin so fast it disintegrates https://boingboing.net/2018/06/05/watch-a-vinyl-record-spin-so-f.html https://boingboing.net/2018/06/05/watch-a-vinyl-record-spin-so-f.html#comments Tue, 05 Jun 2018 20:10:12 +0000 https://boingboing.net/?p=601060

Playing a vinyl album at 45 or 78 instead of 33.33 is always fun, but what happens at several thousand times that rpm? Let's just say it's record-shattering. (more…)

]]>

Playing a vinyl album at 45 or 78 instead of 33.33 is always fun, but what happens at several thousand times that rpm? Let's just say it's record-shattering. (more…)

]]>
https://boingboing.net/2018/06/05/watch-a-vinyl-record-spin-so-f.html/feed 17 601060
Watch this terrific paper animation of a Japanese monster battle https://boingboing.net/2018/06/05/watch-this-terrific-paper-anim.html https://boingboing.net/2018/06/05/watch-this-terrific-paper-anim.html#comments Tue, 05 Jun 2018 19:49:58 +0000 https://boingboing.net/?p=602865

Shinrashinge created this fantastic one-shot animation entirely out of paper. Below is another classic. (via Waxy)

]]>

Shinrashinge created this fantastic one-shot animation entirely out of paper. Below is another classic. (via Waxy)

]]>
https://boingboing.net/2018/06/05/watch-this-terrific-paper-anim.html/feed 11 602865
Watch Elemental, where beautiful ocean photos become stunning cinemagraphs https://boingboing.net/2018/06/05/watch-elemental-where-beautif.html https://boingboing.net/2018/06/05/watch-elemental-where-beautif.html#comments Tue, 05 Jun 2018 19:46:11 +0000 https://boingboing.net/?p=599868

Water & Light contains astonishing images of waves. Last year, Armand Dijcks turned some of Ray Collins' shots into cinemagraphs. The two collaborated again in Elemental, a languid meditation on the power and beauty of water. (more…)

]]>

Water & Light contains astonishing images of waves. Last year, Armand Dijcks turned some of Ray Collins' shots into cinemagraphs. The two collaborated again in Elemental, a languid meditation on the power and beauty of water. (more…)

]]>
https://boingboing.net/2018/06/05/watch-elemental-where-beautif.html/feed 4 599868
Cutlery from 2001: A Space Odyssey is available on Amazon https://boingboing.net/2018/06/05/cutlery-from-2001-a-space-ody.html https://boingboing.net/2018/06/05/cutlery-from-2001-a-space-ody.html#comments Tue, 05 Jun 2018 19:37:27 +0000 https://boingboing.net/?p=602857

In 1957, Danish architect Arne Jacobson designed a exquisite set of minimalist cutlery that Stanley Kubrick personally selected as the flatware aboard the Discovery One in “2001: A Space Odyssey" (1968). Now you can buy it on Amazon.com for $100/set. This is the future, baby! From the New York Times:

Jacobsen designed (the cutlery) at the height of his career, in his mid-50s, for one of his most prestigious assignments, the SAS Royal Hotel in Copenhagen. Having established his reputation as Denmark’s leading Modernist by designing first houses and then public buildings, Jacobsen sealed it in 1956 by bagging the most coveted position in Danish design, as professor of architecture at the Royal Danish Academy of Fine Arts. The SAS commission offered an opportunity for him to create a new national landmark, a grand hotel for the jet age. This would require him to design not just the building but all of its contents: chairs, furnishings, curtains, lighting, even the cutlery.

Ignoring convention, Jacobsen started from scratch by imagining what eating utensils would be like if they were natural extensions of the human body, and came up with abstractions of the traditional shape for knives, forks and spoons. The light, slender slivers of metal are designed to fit neatly into the hand at one end and the mouth at the other, with wide, flat surfaces for the fingertips to hold on to.

"The Cutting Edge" (New York Times, 2009)

(via Kottke) ]]>

In 1957, Danish architect Arne Jacobson designed a exquisite set of minimalist cutlery that Stanley Kubrick personally selected as the flatware aboard the Discovery One in “2001: A Space Odyssey" (1968). Now you can buy it on Amazon.com for $100/set. This is the future, baby! From the New York Times:

Jacobsen designed (the cutlery) at the height of his career, in his mid-50s, for one of his most prestigious assignments, the SAS Royal Hotel in Copenhagen. Having established his reputation as Denmark’s leading Modernist by designing first houses and then public buildings, Jacobsen sealed it in 1956 by bagging the most coveted position in Danish design, as professor of architecture at the Royal Danish Academy of Fine Arts. The SAS commission offered an opportunity for him to create a new national landmark, a grand hotel for the jet age. This would require him to design not just the building but all of its contents: chairs, furnishings, curtains, lighting, even the cutlery.

Ignoring convention, Jacobsen started from scratch by imagining what eating utensils would be like if they were natural extensions of the human body, and came up with abstractions of the traditional shape for knives, forks and spoons. The light, slender slivers of metal are designed to fit neatly into the hand at one end and the mouth at the other, with wide, flat surfaces for the fingertips to hold on to.

"The Cutting Edge" (New York Times, 2009)

(via Kottke) ]]> https://boingboing.net/2018/06/05/cutlery-from-2001-a-space-ody.html/feed 23 602857 Brian De Palma is making a "horror film" inspired by Harvey Weinstein's downfall https://boingboing.net/2018/06/05/brian-de-palma-is-making-a-h.html https://boingboing.net/2018/06/05/brian-de-palma-is-making-a-h.html#comments Tue, 05 Jun 2018 18:56:26 +0000 https://boingboing.net/?p=602833

Brian De Palma is writing “a horror film" inspired by the downfall of Harvey Weinstein. The movie is about “a sexual aggressor" and takes place "within the context of sexual harassment in Hollywood," he says. It's titled Predator. Shooting will begin next year.

From Deadline Hollywood:

(Saïd) Ben Saïd, who produced De Palma’s 2012 Passion starring Rachel McAdams and Noomi Rapace, will produce Predator with partner Michel Merkt. Separately, De Palma has said he’s using the Toronto Film Festival as a backdrop for the intrigue.

image: David Shankbone/CC]]>

Brian De Palma is writing “a horror film" inspired by the downfall of Harvey Weinstein. The movie is about “a sexual aggressor" and takes place "within the context of sexual harassment in Hollywood," he says. It's titled Predator. Shooting will begin next year.

From Deadline Hollywood:

(Saïd) Ben Saïd, who produced De Palma’s 2012 Passion starring Rachel McAdams and Noomi Rapace, will produce Predator with partner Michel Merkt. Separately, De Palma has said he’s using the Toronto Film Festival as a backdrop for the intrigue.

image: David Shankbone/CC]]> https://boingboing.net/2018/06/05/brian-de-palma-is-making-a-h.html/feed 13 602833 Just look at this manually pixellated banana and apple https://boingboing.net/2018/06/05/just-look-at-this-manually-pix.html https://boingboing.net/2018/06/05/just-look-at-this-manually-pix.html#comments Tue, 05 Jun 2018 18:44:37 +0000 https://boingboing.net/?p=599772

Tokyo based artist Yuni Yoshida created her Layered series by manually cutting out cubed "pixels" of foods that recreate the gestalt of the original. (more…)]]>

Tokyo based artist Yuni Yoshida created her Layered series by manually cutting out cubed "pixels" of foods that recreate the gestalt of the original. (more…)]]>
https://boingboing.net/2018/06/05/just-look-at-this-manually-pix.html/feed 10 599772
This is how you dance (without moving) https://boingboing.net/2018/06/05/this-is-how-you-dance-without.html https://boingboing.net/2018/06/05/this-is-how-you-dance-without.html#comments Tue, 05 Jun 2018 17:40:01 +0000 https://boingboing.net/?p=602151

YouTuber Ryan Higa admits that he can't dance. When one of his viewers asked if he could dance without moving, he put together this amazing stop-motion video with his friends. This is how it was made: https://youtu.be/6e7wxqOo7ps

(Neatorama)]]>

YouTuber Ryan Higa admits that he can't dance. When one of his viewers asked if he could dance without moving, he put together this amazing stop-motion video with his friends. This is how it was made: https://youtu.be/6e7wxqOo7ps

(Neatorama)]]> https://boingboing.net/2018/06/05/this-is-how-you-dance-without.html/feed 2 602151 Who won the horse race? Bofa. Bofa Deez Nutz. https://boingboing.net/2018/06/05/who-won-the-horse-race-bofa.html https://boingboing.net/2018/06/05/who-won-the-horse-race-bofa.html#comments Tue, 05 Jun 2018 17:27:11 +0000 https://boingboing.net/?p=602823

A horse named Bofa Deez Nutz won its first victory on Friday at Oklahoma City's Remington Park. You'll note that the race caller is a master at his craft.

Meanwhile, as the horse crossed the finish line, its owner could be heard exclaiming "GOT EEEEM!" (In my imagination anyway.)

(Thanks, Dean Putney!)

]]>

A horse named Bofa Deez Nutz won its first victory on Friday at Oklahoma City's Remington Park. You'll note that the race caller is a master at his craft.

Meanwhile, as the horse crossed the finish line, its owner could be heard exclaiming "GOT EEEEM!" (In my imagination anyway.)

(Thanks, Dean Putney!)

]]> https://boingboing.net/2018/06/05/who-won-the-horse-race-bofa.html/feed 10 602823 Gender creative kid mocked by James Woods named Pride Parade Grand Marshal https://boingboing.net/2018/06/05/gender-creative-kid-mocked-by.html https://boingboing.net/2018/06/05/gender-creative-kid-mocked-by.html#comments Tue, 05 Jun 2018 17:25:15 +0000 https://boingboing.net/?p=601071

Last year, C.J. Duron and parents attended O.C. Pride, prompting various trolls to mock the family online. This year, C.J. is the youngest grand marshal in Pride Month’s 48-year history. (more…)]]>

Last year, C.J. Duron and parents attended O.C. Pride, prompting various trolls to mock the family online. This year, C.J. is the youngest grand marshal in Pride Month’s 48-year history. (more…)]]>
https://boingboing.net/2018/06/05/gender-creative-kid-mocked-by.html/feed 49 601071
How much is your body worth? https://boingboing.net/2018/06/05/how-much-is-your-body-worth.html https://boingboing.net/2018/06/05/how-much-is-your-body-worth.html#comments Tue, 05 Jun 2018 17:20:12 +0000 https://boingboing.net/?p=602078

From a chemistry standpoint, your body isn't worth a lot, but from an organ standpoint, it can be. AsapSCIENCE does the back-of-the-envelope calculations.

It turns out the question comprises a subgenre with wildly varying quality:

https://www.youtube.com/watch?v=vl3rf-2HHg0

https://www.youtube.com/watch?v=yNOsoe44c40

https://www.youtube.com/watch?v=oSlz7nIeQUk

How much is your body worth? (YouTube / AsapSCIENCE)]]>

From a chemistry standpoint, your body isn't worth a lot, but from an organ standpoint, it can be. AsapSCIENCE does the back-of-the-envelope calculations.

It turns out the question comprises a subgenre with wildly varying quality:

https://www.youtube.com/watch?v=vl3rf-2HHg0

https://www.youtube.com/watch?v=yNOsoe44c40

https://www.youtube.com/watch?v=oSlz7nIeQUk

How much is your body worth? (YouTube / AsapSCIENCE)]]> https://boingboing.net/2018/06/05/how-much-is-your-body-worth.html/feed 13 602078 Redditor claims Chinese border guards installed malware on his phone https://boingboing.net/2018/06/05/universal-uighurification.html https://boingboing.net/2018/06/05/universal-uighurification.html#comments Tue, 05 Jun 2018 17:16:48 +0000 https://boingboing.net/?p=602820

BigTyPB: "I saw the installation process, an icon appear on the home screen, the police ran the application and then the icon hid itself. Not sure if it rooted my phone or what. I know something was running on my phone because they used a handheld device to confirm our phones were communicating with their system before letting us go." (more…)

]]>

BigTyPB: "I saw the installation process, an icon appear on the home screen, the police ran the application and then the icon hid itself. Not sure if it rooted my phone or what. I know something was running on my phone because they used a handheld device to confirm our phones were communicating with their system before letting us go." (more…)

]]>
https://boingboing.net/2018/06/05/universal-uighurification.html/feed 30 602820
Facebook is the hub of the global trade in endangered species: can securities law be used to force the company into action? https://boingboing.net/2018/06/05/animal-parts.html https://boingboing.net/2018/06/05/animal-parts.html#comments Tue, 05 Jun 2018 17:04:18 +0000 https://boingboing.net/?p=602811

Stephen Kohn, a highpowered whistleblower lawyer (he repped both Linda Tripp and the UBS Leaks whistleblower) showed Wired his heretofore confidential SEC complaint against Facebook, which details the undercover sting operations undertaken by his clients to investigate Facebook's role as a platform for the illegal trade in the remains of endangered species, such as rhino horn, elephant tusks, and lion claws. (more…)

]]>

Stephen Kohn, a highpowered whistleblower lawyer (he repped both Linda Tripp and the UBS Leaks whistleblower) showed Wired his heretofore confidential SEC complaint against Facebook, which details the undercover sting operations undertaken by his clients to investigate Facebook's role as a platform for the illegal trade in the remains of endangered species, such as rhino horn, elephant tusks, and lion claws. (more…)

]]>
https://boingboing.net/2018/06/05/animal-parts.html/feed 8 602811
What inspired the Hamilton stage "turntables" https://boingboing.net/2018/06/05/what-inspired-the-hamilton.html https://boingboing.net/2018/06/05/what-inspired-the-hamilton.html#comments Tue, 05 Jun 2018 17:04:14 +0000 https://boingboing.net/?p=602094

If you've seen Hamilton (and I haven't, not live anyway... I've only seen a bootleg on YouTube of it), you've probably marveled at its incredible stage and how they used it to propel the story. I was particularly impressed with the staging in the "Satisfied" scene when the floor's "turntables" started rotating -- in coordination with the actors and music -- to relay that the character's are "rewinding" to another place and time.

Well, in anticipation of the show's run at the Kennedy Center, The Washington Post talked with the Hamilton set designer David Korins to learn some secrets of its stage, including what inspired the circular, moving "turntables":

Built into the floor of the set is a spinning circle of wood, with another, independently spinning ring of wood around it. These “turntables” — which allow the actors to stand still and move at the same time — were inspired by the whirlwind of history that sweeps up Hamilton, as well as the literal hurricane that hits the Caribbean island where he was born. “There’s also this cyclical relationship between Aaron Burr and Hamilton, where they were basically spiraling around each other their entire careers and lives,” Korins says.

Head to the Post to learn more obscure facts about the Hamilton stage. https://www.instagram.com/p/BZdul8WBb8J/?taken-by=davidkorins

photo by Peter Dutton

(Coudal Partners) ]]>

If you've seen Hamilton (and I haven't, not live anyway... I've only seen a bootleg on YouTube of it), you've probably marveled at its incredible stage and how they used it to propel the story. I was particularly impressed with the staging in the "Satisfied" scene when the floor's "turntables" started rotating -- in coordination with the actors and music -- to relay that the character's are "rewinding" to another place and time.

Well, in anticipation of the show's run at the Kennedy Center, The Washington Post talked with the Hamilton set designer David Korins to learn some secrets of its stage, including what inspired the circular, moving "turntables":

Built into the floor of the set is a spinning circle of wood, with another, independently spinning ring of wood around it. These “turntables” — which allow the actors to stand still and move at the same time — were inspired by the whirlwind of history that sweeps up Hamilton, as well as the literal hurricane that hits the Caribbean island where he was born. “There’s also this cyclical relationship between Aaron Burr and Hamilton, where they were basically spiraling around each other their entire careers and lives,” Korins says.

Head to the Post to learn more obscure facts about the Hamilton stage. https://www.instagram.com/p/BZdul8WBb8J/?taken-by=davidkorins

photo by Peter Dutton

(Coudal Partners) ]]> https://boingboing.net/2018/06/05/what-inspired-the-hamilton.html/feed 2 602094 Watch a great primer on the physics of skateboarding https://boingboing.net/2018/06/05/watch-a-great-primer-on-the-ph.html https://boingboing.net/2018/06/05/watch-a-great-primer-on-the-ph.html#comments Tue, 05 Jun 2018 17:03:44 +0000 https://boingboing.net/?p=599945

Dianna Cowern, aka YouTube's Physics Girl, recruited skateboarding legend Rodney Mullen and a couple of friends with a high-speed camera for this look at the physics of skateboarding. (more…)

]]>

Dianna Cowern, aka YouTube's Physics Girl, recruited skateboarding legend Rodney Mullen and a couple of friends with a high-speed camera for this look at the physics of skateboarding. (more…)

]]>
https://boingboing.net/2018/06/05/watch-a-great-primer-on-the-ph.html/feed 5 599945
"Be yourself. Unless 'yourself' is an asshole": David Sedaris delivers Oberlin's commencement speech https://boingboing.net/2018/06/05/be-yourself-unless-yourse.html https://boingboing.net/2018/06/05/be-yourself-unless-yourse.html#comments Tue, 05 Jun 2018 17:02:45 +0000 https://boingboing.net/?p=601993

Last Monday, David Sedaris was granted an honorary doctorate in fine arts from Oberlin College in Ohio. Then, he gave the keynote address for the school's 2018 commencement ceremony. It was, of course, perfectly hilarious and full of spot-on, no-holds-barred advice for the new grads.

On May 24, just prior to giving the speech, the humorist and essayist appeared on The Late Show with Stephen Colbert (video above) and discussed how he picked the advice he was going to share, "Well, it kind of makes you wonder, 'What do I know? What wisdom do I have?' So I started keeping a list of my wisdom. Part of it is, you have to be really careful about scented candles. There's really only two kinds worth having... Diptyque or Trudon."

That was the first piece of advice he shared with Oberlin's graduating class. There are seven more, all gems, including "Be yourself. Unless 'yourself' is an asshole." Watch.

Also, Sedaris has a new book. It's called Calypso. [vimeo 273356233]]]>

Last Monday, David Sedaris was granted an honorary doctorate in fine arts from Oberlin College in Ohio. Then, he gave the keynote address for the school's 2018 commencement ceremony. It was, of course, perfectly hilarious and full of spot-on, no-holds-barred advice for the new grads.

On May 24, just prior to giving the speech, the humorist and essayist appeared on The Late Show with Stephen Colbert (video above) and discussed how he picked the advice he was going to share, "Well, it kind of makes you wonder, 'What do I know? What wisdom do I have?' So I started keeping a list of my wisdom. Part of it is, you have to be really careful about scented candles. There's really only two kinds worth having... Diptyque or Trudon."

That was the first piece of advice he shared with Oberlin's graduating class. There are seven more, all gems, including "Be yourself. Unless 'yourself' is an asshole." Watch.

Also, Sedaris has a new book. It's called Calypso. [vimeo 273356233]]]> https://boingboing.net/2018/06/05/be-yourself-unless-yourse.html/feed 13 601993 Watch this hilarious dismantling of Jordan Peterson's philosophical woo https://boingboing.net/2018/06/05/watch-this-hilarious-dismantli.html https://boingboing.net/2018/06/05/watch-this-hilarious-dismantli.html#comments Tue, 05 Jun 2018 17:01:45 +0000 https://boingboing.net/?p=602054

Natalie Wynn, creator of the Contrapoints YouTube channel, is a lapsed academic well-versed in the lingo of both 4chan and Tumblr, making her the perfect person to construct an entertaining takedown of Jordan Peterson. (more…)

]]>

Natalie Wynn, creator of the Contrapoints YouTube channel, is a lapsed academic well-versed in the lingo of both 4chan and Tumblr, making her the perfect person to construct an entertaining takedown of Jordan Peterson. (more…)

]]>
https://boingboing.net/2018/06/05/watch-this-hilarious-dismantli.html/feed 136 602054
Little Bighorn's victors on the bravest man they fought https://boingboing.net/2018/06/05/bighorn.html https://boingboing.net/2018/06/05/bighorn.html#comments Tue, 05 Jun 2018 16:59:55 +0000 https://boingboing.net/?p=602731

In this week's episode of the Futility Closet podcast we'll explore some more curiosities and unanswered questions from Greg's research, including a misplaced elephant, a momentous biscuit failure, a peripatetic ax murderer, and the importance of the 9 of diamonds.

We'll also revisit Michael Malloy's resilience and puzzle over an uncommonly casual prison break.

Show notes Please support us on Patreon!]]>

In this week's episode of the Futility Closet podcast we'll explore some more curiosities and unanswered questions from Greg's research, including a misplaced elephant, a momentous biscuit failure, a peripatetic ax murderer, and the importance of the 9 of diamonds.

We'll also revisit Michael Malloy's resilience and puzzle over an uncommonly casual prison break.

Show notes Please support us on Patreon!]]> https://boingboing.net/2018/06/05/bighorn.html/feed 1 602731 Watch the huge drone lightshow that just broke the world record https://boingboing.net/2018/06/05/watch-the-huge-drone-lightshow.html https://boingboing.net/2018/06/05/watch-the-huge-drone-lightshow.html#comments Tue, 05 Jun 2018 16:54:04 +0000 https://boingboing.net/?p=600390

Intel and Chinese tech firm Ehang UAV have been locked in a battle over the world record for largest drone lightshow, and Ehang recently took the lead with 1,374 drones as voxels.

Here's a behind-the-scenes of Intel's worthy entry at PyeongChang 2018 Winter Olympics:

https://www.youtube.com/watch?v=fCd6P7Ya160

EHang Egret’s 1374 drones dancing over the City Wall of Xi’an, achieving the Guinness World Records” (YouTube / EHANG)]]>

Intel and Chinese tech firm Ehang UAV have been locked in a battle over the world record for largest drone lightshow, and Ehang recently took the lead with 1,374 drones as voxels.

Here's a behind-the-scenes of Intel's worthy entry at PyeongChang 2018 Winter Olympics:

https://www.youtube.com/watch?v=fCd6P7Ya160

EHang Egret’s 1374 drones dancing over the City Wall of Xi’an, achieving the Guinness World Records” (YouTube / EHANG)]]> https://boingboing.net/2018/06/05/watch-the-huge-drone-lightshow.html/feed 1 600390 ================================================ FILE: api/test/data/feed/bookshadow.com ================================================ 书影 - 最新日志http://bookshadow.com/weblog/The latest entries on the site 书影zh-CNZinniaMon, 18 Jun 2018 13:58:13 +0800[LeetCode]K-Similar Strings http://bookshadow.com/weblog/2018/06/17/leetcode-k-similar-strings/ <h2>题目描述:</h2> <p><a href="https://leetcode.com/problems/k-similar-strings/" target="_blank"><strong>LeetCode 854. K-Similar Strings</strong></a></p> <p>Strings&nbsp;<code>A</code> and <code>B</code> are <code>K</code>-similar (for some non-negative integer <code>K</code>) if we can swap the positions of two letters in <code>A</code> exactly <code>K</code>&nbsp;times so that the resulting string equals <code>B</code>.</p> <p>Given two anagrams <code>A</code> and <code>B</code>, return the smallest <code>K</code>&nbsp;for which <code>A</code> and <code>B</code> are <code>K</code>-similar.</p> <p><strong>Example 1:</strong></p> <pre> <strong>Input: </strong>A = <span id="example-input-1-1">&quot;ab&quot;</span>, B = <span id="example-input-1-2">&quot;ba&quot;</span> <strong>Output: </strong><span id="example-output-1">1</span> </pre> <div> <p><strong>Example 2:</strong></p> <pre> <strong>Input: </strong>A = <span id="example-input-2-1">&quot;abc&quot;</span>, B = <span id="example-input-2-2">&quot;bca&quot;</span> <strong>Output: </strong><span id="example-output-2">2</span> </pre> <div> <p><strong>Example 3:</strong></p> <pre> <strong>Input: </strong>A = <span id="example-input-3-1">&quot;abac&quot;</span>, B = <span id="example-input-3-2">&quot;baca&quot;</span> <strong>Output: </strong><span id="example-output-3">2</span> </pre> <div> <p><strong>Example 4:</strong></p> <pre> <strong>Input: </strong>A = <span id="example-input-4-1">&quot;aabc&quot;</span>, B = <span id="example-input-4-2">&quot;abca&quot;</span> <strong>Output: </strong><span id="example-output-4">2</span></pre> </div> </div> </div> <p><strong>Note:</strong></p> <ol> <li><code>1 &lt;= A.length == B.length &lt;= 20</code></li> <li><code>A</code> and <code>B</code> contain only lowercase letters from the set <code>{&#39;a&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;, &#39;f&#39;}</code></li> </ol> <h2>题目大意:</h2> <p>给定字符串的两个&ldquo;变位词&rdquo;(anagram)A和B,求最少调换多少次字符次序可以从A得到B。</p> <h2>解题思路:</h2> <p>记忆化搜索(Memoization)</p> <h2>Python代码:</h2> <pre> <code class="language-python">class Solution(object): def kSimilarity(self, A, B): """ :type A: str :type B: str :rtype: int """ self.memo = {} return self.solve(A, B) def solve(self, A, B): diff = [A[i] != B[i] for i in range(len(A))] simplify = lambda S: ''.join(c * d for c, d in zip(S, diff)) A, B = simplify(A), simplify(B) if not A: return 0 if (A, B) in self.memo: return self.memo[(A, B)] ans = 0x7FFFFFFF for i, x in enumerate(A): if A[i] == B[0]: C = A[1:i] + A[0] + A[i+1:] ans = min(ans, self.solve(C, B[1:])) self.memo[(A, B)] = ans + 1 return ans + 1 </code></pre> <p>&nbsp;</p> qinjiannet@sina.com (在线疯狂)Sun, 17 Jun 2018 23:19:00 +0800http://bookshadow.com/weblog/2018/06/17/leetcode-k-similar-strings/LeetCode[LeetCode]Exam Room http://bookshadow.com/weblog/2018/06/17/leetcode-exam-room/ <h2>题目描述:</h2> <p><a href="https://leetcode.com/problems/exam-room/" target="_blank"><strong>LeetCode 855. Exam Room</strong></a></p> <p>In an exam room, there are <code>N</code> seats in a single row, numbered <code>0, 1, 2, ..., N-1</code>.</p> <p>When a student enters the room, they must sit in the seat that maximizes the distance to the closest person.&nbsp; If there are multiple such seats, they sit in the seat with the lowest number.&nbsp; (Also, if no one is in the room, then the student sits at seat number 0.)</p> <p>Return a class <code>ExamRoom(int N)</code>&nbsp;that exposes two functions: <code>ExamRoom.seat()</code>&nbsp;returning an <code>int</code>&nbsp;representing what seat the student sat in, and <code>ExamRoom.leave(int p)</code>&nbsp;representing that the student in seat number <code>p</code>&nbsp;now leaves the room.&nbsp; It is guaranteed that any calls to <code>ExamRoom.leave(p)</code> have a student sitting in seat <code>p</code>.</p> <p><strong>Example 1:</strong></p> <pre> <strong>Input: </strong><span id="example-input-1-1">[&quot;ExamRoom&quot;,&quot;seat&quot;,&quot;seat&quot;,&quot;seat&quot;,&quot;seat&quot;,&quot;leave&quot;,&quot;seat&quot;]</span>, <span id="example-input-1-2">[[10],[],[],[],[],[4],[]]</span> <strong>Output: </strong><span id="example-output-1">[null,0,9,4,2,null,5]</span> <span><strong>Explanation</strong>: ExamRoom(10) -&gt; null seat() -&gt; 0, no one is in the room, then the student sits at seat number 0. seat() -&gt; 9, the student sits at the last seat number 9. seat() -&gt; 4, the student sits at the last seat number 4. seat() -&gt; 2, the student sits at the last seat number 2. leave(4) -&gt; null seat() -&gt; 5, the student​​​​​​​ sits at the last seat number 5.</span> </pre> <p><strong>Note:</strong></p> <ol> <li><code>1 &lt;= N &lt;= 10^9</code></li> <li><code>ExamRoom.seat()</code> and <code>ExamRoom.leave()</code> will be called at most <code>10^4</code> times across all test cases.</li> <li>Calls to <code>ExamRoom.leave(p)</code> are guaranteed to have a student currently sitting in seat number <code>p</code>.</li> </ol> <h2>题目大意:</h2> <p>房间里有一排N个座位,编号为0, 1, 2, ..., N-1。</p> <p>学生进入房间时选择距离最近的人最远的位置就坐。当存在多个满足条件的座位时,选择标号最小的。</p> <p>学生也可以离开座位。</p> <p>求每一位学生就坐时的位置。</p> <h2>解题思路:</h2> <p><strong>TreeSet</strong></p> <p>将每两个座位之间的位置视为&ldquo;区间&rdquo;</p> <p>利用一个TreeSet维护这样的区间,记为pq</p> <p>用另一个TreeSet维护当前被占用的座位标号,记为seats。</p> <p>对于leave操作,seats可以用O(log n)的代价找到某座位相邻的座位。并将两个区间合二为一。</p> <p>对于seat操作,可以通过pq获取当前的最大区间,将区间一分为二。</p> <h2>Java代码:</h2> <pre> <code class="language-java">import java.awt.Point; import java.util.TreeSet; class ExamRoom { private int N; private TreeSet&lt;Integer&gt; seats = new TreeSet&lt;&gt;(); private TreeSet&lt;Point&gt; pq = new TreeSet&lt;&gt;( (Point p1, Point p2) -&gt; { int d1 = getDistance(p1); int d2 = getDistance(p2); if (d1 == d2) { return p1.x - p2.x; } return d2 - d1; }); public ExamRoom(int N) { this.N = N; seats.add(-1); seats.add(N); pq.add(new Point(-1, N)); } private int getDistance(Point p) { int mid = getMid(p.x, p.y); if (p.x &lt; 0) { return p.y - mid; } else if (p.y == this.N) { return mid - p.x; } return Math.min(p.y - mid, mid - p.x); } private int getMid(int left, int right) { if (left &lt; 0) return 0; if (right == this.N) return this.N - 1; return (left + right) / 2; } public int seat() { Point p = pq.pollFirst(); int left = p.x, right = p.y; int mid = getMid(left, right); seats.add(mid); pq.add(new Point(left, mid)); pq.add(new Point(mid, right)); return mid; } public void leave(int p) { int left = seats.lower(p); int right = seats.higher(p); seats.remove(p); pq.remove(new Point(left, p)); pq.remove(new Point(p, right)); pq.add(new Point(left, right)); } } /** * Your ExamRoom object will be instantiated and called as such: * ExamRoom obj = new ExamRoom(N); * int param_1 = obj.seat(); * obj.leave(p); */ </code></pre> <p>&nbsp;</p> qinjiannet@sina.com (在线疯狂)Sun, 17 Jun 2018 21:51:00 +0800http://bookshadow.com/weblog/2018/06/17/leetcode-exam-room/LeetCode[LeetCode]Car Fleet http://bookshadow.com/weblog/2018/06/17/leetcode-car-fleet/ <h2>题目描述:</h2> <p><a href="https://leetcode.com/problems/car-fleet/" target="_blank"><strong>LeetCode 853. Car Fleet</strong></a></p> <p><code>N</code> cars are going to the same destination along a one lane road.&nbsp; The destination is <code>target</code>&nbsp;miles away.</p> <p>Each car <code>i</code>&nbsp;has a constant speed <code>speed[i]</code>&nbsp;(in miles per hour), and initial position <code>position[i]</code>&nbsp;miles towards the target along the road.</p> <p>A car can never pass another car ahead of it, but it can catch up to it, and drive bumper to bumper at the same speed.</p> <p>The distance between these two cars is ignored - they are assumed to have the same position.</p> <p>A <em>car fleet</em> is some non-empty set of cars driving&nbsp;at the same position and same speed.&nbsp; Note that a single car is also a car fleet.</p> <p>If a car catches up to a car fleet right at the destination point, it will&nbsp;still be&nbsp;considered as one car fleet.</p> <p>How many car fleets will arrive at the destination?</p> <p><strong>Example 1:</strong></p> <pre> <strong>Input: </strong>target = <span id="example-input-1-1">12</span>, position = <span id="example-input-1-2">[10,8,0,5,3]</span>, speed = <span id="example-input-1-3">[2,4,1,1,3]</span> <strong>Output: </strong><span id="example-output-1">3</span> <strong>Explanation</strong>: The cars starting at 10 and 8 become a fleet, meeting each other at 12. The car starting at 0 doesn&#39;t catch up to any other car, so it is a fleet by itself. The cars starting at 5 and 3 become a fleet, meeting each other at 6. Note that no other cars meet these fleets before the destination, so the answer is 3. </pre> <p><strong>Note:</strong></p> <ol> <li><code>0 &lt;= N &lt;= 10 ^ 4</code></li> <li><code>0 &lt; target&nbsp;&lt;= 10 ^ 6</code></li> <li><code>0 &lt;&nbsp;speed[i] &lt;= 10 ^ 6</code></li> <li><code>0 &lt;= position[i] &lt; target</code></li> <li>All initial positions are different.</li> </ol> <h2>题目大意:</h2> <p>x轴有若干车辆,坐标为整数数组position,每个车辆的速度为speed。</p> <p>当后车追上前车时,两车为一组,以前车的速度继续前进;多车的情况以此类推。</p> <p>求车辆在到达target时,会有多少组。</p> <h2>解题思路:</h2> <p>排序(Sort)</p> <p>按照起点倒序,到达目标的预计时间(不考虑多车相遇)为正序对车辆进行排序,记为status。</p> <p>初始令时间ctime为0,计数器ans为0</p> <p>遍历status,当时间t &gt; ctime时(表示后车不会与前车相遇):更新ctime,并令ans+1</p> <h2>Python代码:</h2> <pre> <code class="language-python">class Solution(object): def carFleet(self, target, position, speed): """ :type target: int :type position: List[int] :type speed: List[int] :rtype: int """ status = [(-p, float(target - p) / s) for p, s in zip(position, speed)] status.sort() ctime = 0 ans = 0 for p, t in status: if t &gt; ctime: ans += 1 ctime = t return ans </code></pre> <p>&nbsp;</p> qinjiannet@sina.com (在线疯狂)Sun, 17 Jun 2018 21:11:00 +0800http://bookshadow.com/weblog/2018/06/17/leetcode-car-fleet/LeetCode[LeetCode]Shortest Path Visiting All Nodes http://bookshadow.com/weblog/2018/06/03/leetcode-shortest-path-visiting-all-nodes/ <h2>题目描述:</h2> <p><a href="https://leetcode.com/problems/shortest-path-visiting-all-nodes/" target="_blank"><strong>LeetCode 847. Shortest Path Visiting All Nodes</strong></a></p> <p>An undirected, connected graph of N nodes (labeled&nbsp;<code>0, 1, 2, ..., N-1</code>) is given as <code>graph</code>.</p> <p><code>graph.length = N</code>, and <code>j != i</code>&nbsp;is in the list&nbsp;<code>graph[i]</code>&nbsp;exactly once, if and only if nodes <code>i</code> and <code>j</code> are connected.</p> <p>Return the length of the shortest path that visits every node. You may start and stop at any node, you may revisit nodes multiple times, and you may reuse edges.</p> <ol> </ol> <p><strong>Example 1:</strong></p> <pre> <strong>Input: </strong>[[1,2,3],[0],[0],[0]] <strong>Output: </strong>4 <strong>Explanation</strong>: One possible path is [1,0,2,0,3]</pre> <p><strong>Example 2:</strong></p> <pre> <strong>Input: </strong>[[1],[0,2,4],[1,3,4],[2],[1,2]] <strong>Output: </strong>4 <strong>Explanation</strong>: One possible path is [0,1,4,2,3] </pre> <p><strong>Note:</strong></p> <ol> <li><code>1 &lt;= graph.length &lt;= 12</code></li> <li><code>0 &lt;= graph[i].length &lt;&nbsp;graph.length</code></li> </ol> <h2>题目大意:</h2> <p>给定无向图graph,求可以遍历所有点的最短路径</p> <h2>解题思路:</h2> <p>Floyd + 动态规划(Dynamic Programming)</p> <p>时间复杂度 O(2^n * n^2)</p> <pre> 利用Floyd求出每对顶点i, j之间的最短距离,记为dp[i][j],代价为O(N^3) 利用status[s][i]记录:状态为s,当前所在节点为i时的最小路径长度 状态s是二进制,表示各节点是否被访问过,1表示已访问,0表示未访问 状态转移方程: status[ns][j] = min(status[ns][j], status[s][i] + dp[i][j]) 其中ns表示从状态s的i点出发到达j点时的新状态</pre> <h2>Python代码:</h2> <pre> <code class="language-python">class Solution(object): def shortestPathLength(self, graph): """ :type graph: List[List[int]] :rtype: int """ INF = 0x7FFFFFFF N = len(graph) dp = [[INF] * N for x in range(N)] for i, e in enumerate(graph): dp[i][i] = 0 for j in e: dp[i][j] = dp[j][i] = 1 for z in range(N): for x in range(N): for y in range(N): dp[x][y] = min(dp[x][y], dp[x][z] + dp[z][y]) status = {(0, i) : 0 for i in range(N)} for s in range(1 &lt;&lt; N): for i in range(N): if (s, i) not in status: continue v = status[(s, i)] for j in range(N): ns = s | (1 &lt;&lt; j) if status.get((ns, j), INF) &gt; v + dp[i][j]: status[(ns, j)] = v + dp[i][j] return min(status[((1 &lt;&lt; N) - 1, i)] for i in range(N)) </code></pre> <p>比赛时只想到了Floyd + DFS + 剪枝的解法</p> <p>由于该解法的时间复杂度为O(N!),因此TLE</p> <h2>Python代码:</h2> <pre> <code class="language-python">class Solution(object): def shortestPathLength(self, graph): """ :type graph: List[List[int]] :rtype: int """ INF = 0x7FFFFFFF N = len(graph) dp = [[INF] * N for x in range(N)] for i, e in enumerate(graph): dp[i][i] = 0 for j in e: dp[i][j] = dp[j][i] = 1 for z in range(N): for x in range(N): for y in range(N): dp[x][y] = min(dp[x][y], dp[x][z] + dp[z][y]) self.best = INF visits = set() def dfs(s, c, t): if t &gt;= self.best: return if c == N: self.best = min(self.best, t) return for n in range(N): if n in visits: continue visits.add(n) dfs(n, c + 1, t + dp[s][n]) visits.remove(n) for n in range(len(graph)): visits.add(n) dfs(n, 1, 0) visits.remove(n) return self.best </code></pre> <p>&nbsp;</p> qinjiannet@sina.com (在线疯狂)Sun, 03 Jun 2018 18:19:00 +0800http://bookshadow.com/weblog/2018/06/03/leetcode-shortest-path-visiting-all-nodes/LeetCode[LeetCode]Longest Mountain in Array http://bookshadow.com/weblog/2018/06/03/leetcode-longest-mountain-in-array/ <h2>题目描述:</h2> <p><a href="https://leetcode.com/problems/longest-mountain-in-array/" target="_blank"><strong>LeetCode 845. Longest Mountain in Array</strong></a></p> <p>Let&#39;s call any (contiguous) subarray B (of A)&nbsp;a <em>mountain</em> if the following properties hold:</p> <ul> <li><code>B.length &gt;= 3</code></li> <li>There exists some <code>0 &lt; i&nbsp;&lt; B.length - 1</code> such that <code>B[0] &lt; B[1] &lt; ... B[i-1] &lt; B[i] &gt; B[i+1] &gt; ... &gt; B[B.length - 1]</code></li> </ul> <p>(Note that B could be any subarray of A, including the entire array A.)</p> <p>Given an array <code>A</code>&nbsp;of integers,&nbsp;return the length of the longest&nbsp;<em>mountain</em>.&nbsp;</p> <p>Return <code>0</code> if there is no mountain.</p> <p><strong>Example 1:</strong></p> <pre> <strong>Input: </strong>[2,1,4,7,3,2,5] <strong>Output: </strong>5 <strong>Explanation: </strong>The largest mountain is [1,4,7,3,2] which has length 5. </pre> <p><strong>Example 2:</strong></p> <pre> <strong>Input: </strong>[2,2,2] <strong>Output: </strong>0 <strong>Explanation: </strong>There is no mountain. </pre> <p><strong>Note:</strong></p> <ol> <li><code>0 &lt;= A.length &lt;= 10000</code></li> <li><code>0 &lt;= A[i] &lt;= 10000</code></li> </ol> <h2>题目大意:</h2> <p>求数组中的最长&ldquo;山峰&rdquo;的长度</p> <p>&ldquo;山峰&rdquo;的定义为:存在 0 &lt; i &lt; B.length - 1 使得 B[0] &lt; B[1] &lt; ... B[i-1] &lt; B[i] &gt; B[i+1] &gt; ... &gt; B[B.length - 1]</p> <h2>解题思路:</h2> <p>分别从左往右、从右往左遍历数组</p> <p>辅助数组left记录某数字左侧的最长递增子串的长度</p> <p>辅助数组right记录数字右侧的最长递减子串的长度</p> <h2>Python代码:</h2> <pre> <code class="language-python">class Solution(object): def longestMountain(self, A): """ :type A: List[int] :rtype: int """ SA = len(A) left, right = [0] * SA, [0] * SA for x in range(1, SA): if A[x] &gt; A[x - 1]: left[x] = left[x - 1] + 1 ans = 0 for x in range(SA - 2, -1, -1): if A[x] &gt; A[x + 1]: right[x] = right[x + 1] + 1 if left[x] and right[x]: ans = max(ans, left[x] + right[x] + 1) return ans </code></pre> <p>&nbsp;</p> qinjiannet@sina.com (在线疯狂)Sun, 03 Jun 2018 18:09:00 +0800http://bookshadow.com/weblog/2018/06/03/leetcode-longest-mountain-in-array/LeetCode[LeetCode]Hand of Straights http://bookshadow.com/weblog/2018/06/03/leetcode-hand-of-straights/ <h2>题目描述:</h2> <p><a href="https://leetcode.com/problems/hand-of-straights/" target="_blank"><strong>LeetCode 846. Hand of Straights</strong></a></p> <p>Alice has a hand of cards, given as an array of integers.</p> <p>Now she wants to rearrange the cards into groups so that each group is size W, and consists of W consecutive cards.</p> <p>Return true if and only if she can.</p> <ol> </ol> <p><strong>Example 1:</strong></p> <pre> <strong>Input: </strong>hand = [1,2,3,6,2,3,4,7,8], W = 3 <strong>Output: </strong>true <strong>Explanation:</strong> Alice&#39;s hand can be rearranged as [1,2,3],[2,3,4],[6,7,8].</pre> <p><strong>Example 2:</strong></p> <pre> <strong>Input: </strong>hand = [1,2,3,4,5], W = 4 <strong>Output: </strong>false <strong>Explanation:</strong> Alice&#39;s hand can&#39;t be rearranged into groups of 4.</pre> <p><strong>Note:</strong></p> <ol> <li><code>1 &lt;= hand.length &lt;= 10000</code></li> <li><code>0 &lt;= hand[i]&nbsp;&lt;= 10^9</code></li> <li><code>1 &lt;= W &lt;= hand.length</code></li> </ol> <h2>题目大意:</h2> <p>给定一副扑克牌,判断其是否可以分成若干组,使得每一组包含W张连续排列的牌。</p> <h2>解题思路:</h2> <p>时间复杂度:O(N^2 / W)</p> <p>用字典handDict统计各张牌的个数</p> <p>每次从handDict中最小的key开始枚举W个元素,若发现不存在的元素,则返回False</p> <p>否则返回True</p> <h2>Python代码:</h2> <pre> <code class="language-python">class Solution(object): def isNStraightHand(self, hand, W): """ :type hand: List[int] :type W: int :rtype: bool """ handDict = collections.Counter(hand) while handDict: mink = min(handDict.keys()) for y in range(mink, mink + W): if not handDict[y]: return False handDict[y] -= 1 if not handDict[y]: del handDict[y] return True </code></pre> <p>&nbsp;</p> qinjiannet@sina.com (在线疯狂)Sun, 03 Jun 2018 18:03:00 +0800http://bookshadow.com/weblog/2018/06/03/leetcode-hand-of-straights/LeetCode[LeetCode]Backspace String Compare http://bookshadow.com/weblog/2018/06/03/leetcode-backspace-string-compare/ <h2>题目描述:</h2> <p><a href="https://leetcode.com/problems/backspace-string-compare/" target="_blank"><strong>LeetCode 844. Backspace String Compare</strong></a></p> <p>Given two&nbsp;strings&nbsp;<code>S</code>&nbsp;and <code>T</code>,&nbsp;return if they are equal when both are typed into empty text editors. <code>#</code> means a backspace character.</p> <div> <p><strong>Example 1:</strong></p> <pre> <strong>Input: </strong>S = <span id="example-input-1-1">&quot;ab#c&quot;</span>, T = <span id="example-input-1-2">&quot;ad#c&quot;</span> <strong>Output: </strong><span id="example-output-1">true </span><span><strong>Explanation</strong>: Both S and T become &quot;ac&quot;.</span> </pre> <div> <p><strong>Example 2:</strong></p> <pre> <strong>Input: </strong>S = <span id="example-input-2-1">&quot;ab##&quot;</span>, T = <span id="example-input-2-2">&quot;c#d#&quot;</span> <strong>Output: </strong><span id="example-output-2">true </span><span><strong>Explanation</strong>: Both S and T become &quot;&quot;.</span> </pre> <div> <p><strong>Example 3:</strong></p> <pre> <strong>Input: </strong>S = <span id="example-input-3-1">&quot;a##c&quot;</span>, T = <span id="example-input-3-2">&quot;#a#c&quot;</span> <strong>Output: </strong><span id="example-output-3">true </span><span><strong>Explanation</strong>: Both S and T become &quot;c&quot;.</span> </pre> <div> <p><strong>Example 4:</strong></p> <pre> <strong>Input: </strong>S = <span id="example-input-4-1">&quot;a#c&quot;</span>, T = <span id="example-input-4-2">&quot;b&quot;</span> <strong>Output: </strong><span id="example-output-4">false </span><span><strong>Explanation</strong>: S becomes &quot;c&quot; while T becomes &quot;b&quot;.</span> </pre> <p><span><strong>Note</strong>:</span></p> <ol> <li><code><span>1 &lt;= S.length &lt;= 200</span></code></li> <li><code><span>1 &lt;= T.length &lt;= 200</span></code></li> <li><span><code>S</code>&nbsp;and <code>T</code> only contain&nbsp;lowercase letters and <code>&#39;#&#39;</code> characters.</span></li> </ol> <h2>题目大意:</h2> <p>给定字符串S和T,其中的#表示退格</p> <p>求S是否和T相等</p> <h2>解题思路:</h2> <p>栈(Stack)</p> <h2>Python代码:</h2> <pre> <code class="language-python">class Solution(object): def backspaceCompare(self, S, T): """ :type S: str :type T: str :rtype: bool """ def toString(S): ans = [] for c in S: if c == '#': ans and ans.pop() else: ans.append(c) return ''.join(ans) return toString(S) == toString(T) </code></pre> <p>&nbsp;</p> </div> </div> </div> </div> qinjiannet@sina.com (在线疯狂)Sun, 03 Jun 2018 17:33:00 +0800http://bookshadow.com/weblog/2018/06/03/leetcode-backspace-string-compare/LeetCode[LeetCode]Unique Letter String http://bookshadow.com/weblog/2018/05/06/leetcode-unique-letter-string/ <h2>题目描述:</h2> <p><a href="https://leetcode.com/problems/unique-letter-string/" target="_blank"><strong>LeetCode 828. Unique Letter String</strong></a></p> <p>A character is unique in string <code>S</code> if it occurs exactly once in it.</p> <p>For example, in string <code>S = &quot;LETTER&quot;</code>, the only unique characters are <code>&quot;L&quot;</code> and <code>&quot;R&quot;</code>.</p> <p>Let&#39;s define <code>UNIQ(S)</code> as the number of unique characters in string <code>S</code>.</p> <p>For example, <code>UNIQ(&quot;LETTER&quot;) =&nbsp; 2</code>.</p> <p>Given a string S, calculate the sum of <code>UNIQ(substring)</code> over all non-empty substrings of <code>S</code>.</p> <p>If there are two or more equal substrings at different positions in <code>S</code>, we consider them different.</p> <p>Since the answer can be very large, retrun the answer&nbsp;modulo&nbsp;<code>10 ^ 9 + 7</code>.</p> <p><strong>Example 1:</strong></p> <pre> <strong>Input: </strong>&quot;ABC&quot; <strong>Output: </strong>10 <strong>Explanation: </strong>All possible substrings are: &quot;A&quot;,&quot;B&quot;,&quot;C&quot;,&quot;AB&quot;,&quot;BC&quot; and &quot;ABC&quot;. Evey substring is composed with only unique letters. Sum of lengths of all substring is 1 + 1 + 1 + 2 + 2 + 3 = 10</pre> <p><strong>Example 2:</strong></p> <pre> <strong>Input: </strong>&quot;ABA&quot; <strong>Output: </strong>8 <strong>Explanation: </strong>The same as example 1, except uni(&quot;ABA&quot;) = 1. </pre> <p><strong>Note:</strong> <code>0 &lt;= S.length &lt;= 10000</code>.</p> <h2>题目大意:</h2> <p>给定字符串S,求其各子串中包含的不重复字母的个数。</p> <h2>解题思路:</h2> <p>字符统计</p> <pre> 分别统计每个字母出现的下标 假设字母letter的下标数组为idx,将-1和len(S)插入idx的头部和尾部 则sum((idx[i] - idx[i - 1]) * (idx[i + 1] - idx[i]))为letter出现的总次数</pre> <h2>Python代码:</h2> <pre> <code class="language-python">class Solution(object): def uniqueLetterString(self, S): """ :type S: str :rtype: int """ letterIdx = collections.defaultdict(list) for i, c in enumerate(S): letterIdx[c].append(i) ans = 0 for letter, idx in letterIdx.items(): idx = [-1] + idx + [len(S)] for x in range(1, len(idx) - 1): ans += (idx[x] - idx[x - 1]) * (idx[x + 1] - idx[x]) return ans </code></pre> <p>朴素解法(Time Limit Exceeded)</p> <h2>Python代码:</h2> <pre> <code class="language-python">class Solution(object): def uniqueLetterString(self, S): """ :type S: str :rtype: int """ q = [(set([c]), set([c]), i) for i, c in enumerate(S)] ans = len(S) while q: q0 = [] for c, p, i in q: if i + 1 == len(S): continue if S[i + 1] not in c and S[i + 1] not in p: c.add(S[i + 1]) elif S[i + 1] in c: c.remove(S[i + 1]) p.add(S[i + 1]) q0.append((c, p, i + 1)) ans += len(q0[-1][0]) q = q0 return ans </code></pre> <p>&nbsp;</p> qinjiannet@sina.com (在线疯狂)Sun, 06 May 2018 19:53:00 +0800http://bookshadow.com/weblog/2018/05/06/leetcode-unique-letter-string/LeetCode[LeetCode]Consecutive Numbers Sum http://bookshadow.com/weblog/2018/05/06/leetcode-consecutive-numbers-sum/ <h2>题目描述:</h2> <p><a href="https://leetcode.com/problems/consecutive-numbers-sum/" target="_blank"><strong>LeetCode 829. Consecutive Numbers Sum</strong></a></p> <p>Given a positive integer&nbsp;<code>N</code>, how many ways can we write it as a sum of&nbsp;consecutive positive integers?</p> <p><strong>Example 1:</strong></p> <pre> <strong>Input: </strong>5 <strong>Output: </strong>2 <strong>Explanation: </strong>5 = 5 = 2 + 3</pre> <p><strong>Example 2:</strong></p> <pre> <strong>Input: </strong>9 <strong>Output: </strong>3 <strong>Explanation: </strong>9 = 9 = 4 + 5 = 2 + 3 + 4</pre> <p><strong>Example 3:</strong></p> <pre> <strong>Input: </strong>15 <strong>Output: </strong>4 <strong>Explanation: </strong>15 = 15 = 8 + 7 = 4 + 5 + 6 = 1 + 2 + 3 + 4 + 5</pre> <p><strong>Note:</strong>&nbsp;<code>1 &lt;= N &lt;= 10 ^ 9</code>.</p> <h2>题目大意:</h2> <p>给定正整数N,将其表示为若干连续整数之和。求可以找到多少种这样的组合。</p> <h2>解题思路:</h2> <p>枚举连续整数的个数c</p> <pre> 当c为奇数时, floor(N / c) 为第(c + 1) / 2个数 当c为偶数时,floor(N / c)为第c / 2个数 综上,floor(N / c)为第c / 2 + c % 2个数,并且floor(N / c) &ge; c / 2 + c % 2</pre> <p>c符合下列两种情况时,存在一组长度为c的连续整数和为N</p> <pre> c为奇数,并且N可以整除c c为偶数,并且floor(N / c) * c + c / 2 == N</pre> <h2>Python代码:</h2> <pre> <code class="language-python">class Solution(object): def consecutiveNumbersSum(self, N): """ :type N: int :rtype: int """ ans = c = 0 while True: c += 1 if N / c &lt; c / 2 + c % 2: break if c % 2 and N % c == 0: ans += 1 elif c % 2 == 0 and (N / c) * c + c / 2 == N: ans += 1 return ans </code></pre> <p>&nbsp;</p> qinjiannet@sina.com (在线疯狂)Sun, 06 May 2018 19:42:00 +0800http://bookshadow.com/weblog/2018/05/06/leetcode-consecutive-numbers-sum/LeetCode[LeetCode]Masking Personal Information http://bookshadow.com/weblog/2018/05/06/leetcode-masking-personal-information/ <h2>题目描述:</h2> <p><a href="https://leetcode.com/problems/masking-personal-information/" target="_blank"><strong>LeetCode 831. Masking Personal Information</strong></a></p> <p>We are given a&nbsp;personal information string <code>S</code>, which may represent&nbsp;either <strong>an email address</strong> or <strong>a phone number.</strong></p> <p>We would like to mask this&nbsp;personal information according to the&nbsp;following rules:</p> <p><u><strong>1. Email address:</strong></u></p> <p>We define a&nbsp;<strong>name</strong> to be a string of <code>length &ge; 2</code> consisting&nbsp;of only lowercase letters&nbsp;<code>a-z</code> or uppercase&nbsp;letters&nbsp;<code>A-Z</code>.</p> <p>An email address starts with a name, followed by the&nbsp;symbol <code>&#39;@&#39;</code>, followed by a name, followed by the&nbsp;dot&nbsp;<code>&#39;.&#39;</code>&nbsp;and&nbsp;followed by a name.&nbsp;</p> <p>All email addresses are&nbsp;guaranteed to be valid and in the format of&nbsp;<code>&quot;name1@name2.name3&quot;.</code></p> <p>To mask an email, <strong>all names must be converted to lowercase</strong> and <strong>all letters between the first and last letter of the first name</strong> must be replaced by 5 asterisks <code>&#39;*&#39;</code>.</p> <p><u><strong>2. Phone number:</strong></u></p> <p>A phone number is a string consisting of&nbsp;only the digits <code>0-9</code> or the characters from the set <code>{&#39;+&#39;, &#39;-&#39;, &#39;(&#39;, &#39;)&#39;, &#39;&nbsp;&#39;}.</code>&nbsp;You may assume a phone&nbsp;number contains&nbsp;10 to 13 digits.</p> <p>The last 10 digits make up the local&nbsp;number, while the digits before those make up the country code. Note that&nbsp;the country code is optional. We want to expose only the last 4 digits&nbsp;and mask all other&nbsp;digits.</p> <p>The local&nbsp;number&nbsp;should be formatted and masked as <code>&quot;***-***-1111&quot;,&nbsp;</code>where <code>1</code> represents the exposed digits.</p> <p>To mask a phone number with country code like <code>&quot;+111 111 111 1111&quot;</code>, we write it in the form <code>&quot;+***-***-***-1111&quot;.</code>&nbsp; The <code>&#39;+&#39;</code>&nbsp;sign and the first <code>&#39;-&#39;</code>&nbsp;sign before the local number should only exist if there is a country code.&nbsp; For example, a 12 digit phone number mask&nbsp;should start&nbsp;with <code>&quot;+**-&quot;</code>.</p> <p>Note that extraneous characters like <code>&quot;(&quot;, &quot;)&quot;, &quot; &quot;</code>, as well as&nbsp;extra dashes or plus signs not part of the above formatting scheme should be removed.</p> <p>Return the correct &quot;mask&quot; of the information provided.</p> <p><strong>Example 1:</strong></p> <pre> <strong>Input: </strong>&quot;LeetCode@LeetCode.com&quot; <strong>Output: </strong>&quot;l*****e@leetcode.com&quot; <strong>Explanation:&nbsp;</strong>All names are converted to lowercase, and the letters between the &nbsp; first and last letter of the first name is replaced by 5 asterisks. &nbsp; Therefore, &quot;leetcode&quot; -&gt; &quot;l*****e&quot;. </pre> <p><strong>Example 2:</strong></p> <pre> <strong>Input: </strong>&quot;AB@qq.com&quot; <strong>Output: </strong>&quot;a*****b@qq.com&quot; <strong>Explanation:&nbsp;</strong>There must be 5 asterisks between the first and last letter &nbsp; of the first name &quot;ab&quot;. Therefore, &quot;ab&quot; -&gt; &quot;a*****b&quot;. </pre> <p><strong>Example 3:</strong></p> <pre> <strong>Input: </strong>&quot;1(234)567-890&quot; <strong>Output: </strong>&quot;***-***-7890&quot; <strong>Explanation:</strong>&nbsp;10 digits in the phone number, which means all digits make up the local number. </pre> <p><strong>Example 4:</strong></p> <pre> <strong>Input: </strong>&quot;86-(10)12345678&quot; <strong>Output: </strong>&quot;+**-***-***-5678&quot; <strong>Explanation:</strong>&nbsp;12 digits, 2 digits for country code and 10 digits for local number. </pre> <p><strong>Notes:</strong></p> <ol> <li><code>S.length&nbsp;&lt;=&nbsp;40</code>.</li> <li>Emails have length at least 8.</li> <li>Phone numbers have length at least 10.</li> </ol> <h2>题目大意:</h2> <p>给定电子邮箱或者电话号码,将其中的部分数字按照一定规则转化为*,只保留末尾的4位数字</p> <h2>解题思路:</h2> <p>字符串处理</p> <h2>Python代码:</h2> <pre> <code class="language-python">class Solution(object): def maskPII(self, S): """ :type S: str :rtype: str """ if '@' in S: left, right = S.lower().split('@') return left[0] + '*****' + left[-1] + '@' + right digits = re.sub('\D*', '', S) countryCode = len(digits) - 10 return (countryCode and '+' + '*' * countryCode + '-' or '') + '***-***-' + digits[-4:] </code></pre> <p>&nbsp;</p> qinjiannet@sina.com (在线疯狂)Sun, 06 May 2018 14:38:00 +0800http://bookshadow.com/weblog/2018/05/06/leetcode-masking-personal-information/LeetCode[LeetCode]Positions of Large Groups http://bookshadow.com/weblog/2018/05/06/leetcode-positions-of-large-groups/ <h2>题目描述:</h2> <p><a href="https://leetcode.com/problems/positions-of-large-groups/" target="_blank"><strong>LeetCode 830. Positions of Large Groups</strong></a></p> <p>In a string&nbsp;<code>S</code>&nbsp;of lowercase letters, these letters form consecutive groups of the same character.</p> <p>For example, a string like <code>S = &quot;abbxxxxzyy&quot;</code> has the groups <code>&quot;a&quot;</code>, <code>&quot;bb&quot;</code>, <code>&quot;xxxx&quot;</code>, <code>&quot;z&quot;</code> and&nbsp;<code>&quot;yy&quot;</code>.</p> <p>Call a group <em>large</em> if it has 3 or more characters.&nbsp; We would like the starting and ending positions of every large group.</p> <p>The final answer should be in lexicographic order.</p> <p><strong>Example 1:</strong></p> <pre> <strong>Input: </strong>&quot;abbxxxxzzy&quot; <strong>Output: </strong>[[3,6]] <strong>Explanation</strong>: <code>&quot;xxxx&quot; is the single </code>large group with starting 3 and ending positions 6. </pre> <p><strong>Example 2:</strong></p> <pre> <strong>Input: </strong>&quot;abc&quot; <strong>Output: </strong>[] <strong>Explanation</strong>: We have &quot;a&quot;,&quot;b&quot; and &quot;c&quot; but no large group. </pre> <p><strong>Example 3:</strong></p> <pre> <strong>Input: </strong>&quot;abcdddeeeeaabbbcd&quot; <strong>Output: </strong>[[3,5],[6,9],[12,14]]</pre> <p><strong>Note:&nbsp;</strong>&nbsp;<code>1 &lt;= S.length &lt;= 1000</code></p> <h2>题目大意:</h2> <p>给定字符串S,求其中所有连续出现次数大于3次的字母的起止位置。</p> <h2>解题思路:</h2> <p>双指针法(Two Pointers)</p> <p>遍历S,前后&ldquo;指针&rdquo;维护连续字符的起止下标</p> <h2>Python代码:</h2> <pre> <code class="language-python">class Solution(object): def largeGroupPositions(self, S): """ :type S: str :rtype: List[List[int]] """ j = -1 d = '' ans = [] for i, c in enumerate(S + '#'): if c != d: if i - j &gt;= 3: ans.append([j, i - 1]) j = i d = c return ans </code></pre> <p>&nbsp;</p> qinjiannet@sina.com (在线疯狂)Sun, 06 May 2018 14:35:00 +0800http://bookshadow.com/weblog/2018/05/06/leetcode-positions-of-large-groups/LeetCode[LeetCode]Making A Large Island http://bookshadow.com/weblog/2018/04/29/leetcode-making-a-large-island/ <h2>题目描述:</h2> <p><a href="https://leetcode.com/problems/making-a-large-island/" target="_blank"><strong>LeetCode 827. Making A Large Island</strong></a></p> <p>In a 2D grid of <code>0</code>s and <code>1</code>s, we change at most one <code>0</code> to a <code>1</code>.</p> <p>After, what is the size of the largest island?&nbsp;(An island is a 4-directionally connected group of <code>1</code>s).</p> <p><strong>Example 1:</strong></p> <pre> <strong>Input: </strong>[[1, 0], [0, 1]] <strong>Output:</strong> 3 <strong>Explanation:</strong> Change one 0 to 1 and connect two 1s, then we get an island with area = 3. </pre> <p><strong>Example 2:</strong></p> <pre> <strong>Input: </strong>[[1, 1], [1, 0]] <strong>Output:</strong> 4 <strong>Explanation: </strong>Change the 0 to 1 and make the island bigger, only one island with area = 1.</pre> <p><strong>Example 3:</strong></p> <pre> <strong>Input: </strong>[[1, 1], [1, 1]] <strong>Output:</strong> 4 <strong>Explanation:</strong> Can&#39;t change any 0 to 1, only one island with area = 1.</pre> <p>Notes:</p> <ul> <li><code>1 &lt;= grid.length = grid[0].length &lt;= 50</code>.</li> <li><code>0 &lt;= grid[i][j] &lt;= 1</code>.</li> </ul> <p>Notes:</p> <p>1 &lt;= grid.length = grid[0].length &lt;= 50.<br /> 0 &lt;= grid[i][j] &lt;= 1.</p> <h2>题目大意:</h2> <p>给定二维01矩阵,其中互相连通的1表示岛屿。</p> <p>求最大的岛屿面积。</p> <h2>解题思路:</h2> <p>广度优先搜索(BFS)</p> <pre> 利用辅助二维数组mark记录grid中的元素属于哪个岛屿 遍历grid,利用BFS标记其中的岛屿,将非0元素替换为其连通区域的大小,并在mark中记录其标号,记录并更新最大值 再次遍历grid,尝试将0元素上下左右的岛屿进行加和,记录并更新最大值</pre> <h2>Python代码:</h2> <pre> <code class="language-python">class Solution(object): def largestIsland(self, grid): """ :type grid: List[List[int]] :rtype: int """ h, w = len(grid), len(grid[0]) mark = [[0] * w for x in range(h)] def neighbors(x, y): for dx, dy in zip((1, 0, -1, 0), (0, 1, 0, -1)): nx, ny = x + dx, y + dy if 0 &lt;= nx &lt; h and 0 &lt;= ny &lt; w and grid[nx][ny]: yield (nx, ny) def calcAndMarkArea(sx, sy, mk): q = [(sx, sy)] vset = set(q) ans = 0 while q: x, y = q.pop(0) ans += 1 for nx, ny in neighbors(x, y): if (nx, ny) not in vset: vset.add((nx, ny)) q.append((nx, ny)) for x, y in vset: mark[x][y] = mk grid[x][y] = ans return ans maxArea = 0 mk = 0 for x in range(h): for y in range(w): if grid[x][y] and not mark[x][y]: mk += 1 maxArea = max(calcAndMarkArea(x, y, mk), maxArea) for x in range(h): for y in range(w): if grid[x][y] == 0: area = 0 mkset = set() for nx, ny in neighbors(x, y): if mark[nx][ny] not in mkset: mkset.add(mark[nx][ny]) area += grid[nx][ny] maxArea = max(maxArea, area + 1) return maxArea </code></pre> <p>&nbsp;</p> qinjiannet@sina.com (在线疯狂)Sun, 29 Apr 2018 15:44:00 +0800http://bookshadow.com/weblog/2018/04/29/leetcode-making-a-large-island/LeetCode[LeetCode]Most Profit Assigning Work http://bookshadow.com/weblog/2018/04/29/leetcode-most-profit-assigning-work/ <h2>题目描述:</h2> <p><a href="https://leetcode.com/problems/most-profit-assigning-work/" target="_blank"><strong>LeetCode 826. Most Profit Assigning Work</strong></a></p> <p>We have jobs: <code>difficulty[i]</code>&nbsp;is the difficulty of the&nbsp;<code>i</code>th job, and&nbsp;<code>profit[i]</code>&nbsp;is the profit of the&nbsp;<code>i</code>th job.&nbsp;</p> <p>Now we have some workers.&nbsp;<code>worker[i]</code>&nbsp;is the ability of the&nbsp;<code>i</code>th worker, which means that this worker can only complete a job with difficulty at most&nbsp;<code>worker[i]</code>.&nbsp;</p> <p>Every worker can be assigned at most one job, but one job&nbsp;can be completed multiple times.</p> <p>For example, if 3 people attempt the same job that pays $1, then the total profit will be $3.&nbsp; If a worker cannot complete any job, his profit is $0.</p> <p>What is the most profit we can make?</p> <p><strong>Example 1:</strong></p> <pre> <strong>Input: </strong>difficulty = [2,4,6,8,10], profit = [10,20,30,40,50], worker = [4,5,6,7] <strong>Output: </strong>100 <strong>Explanation: W</strong>orkers are assigned jobs of difficulty [4,4,6,6] and they get profit of [20,20,30,30] seperately.</pre> <p><strong>Notes:</strong></p> <ul> <li><code>1 &lt;= difficulty.length = profit.length &lt;= 10000</code></li> <li><code>1 &lt;= worker.length &lt;= 10000</code></li> <li><code>difficulty[i], profit[i], worker[i]</code>&nbsp; are in range&nbsp;<code>[1, 10^5]</code></li> </ul> <h2>题目大意:</h2> <p>给定一组任务的难度difficulty及其收益profit,有一组工人最多可以处理难度为worker的任务。</p> <p>每一个任务可以执行多次,每一个工人只能执行一个任务,求最大总收益。</p> <h2>解题思路:</h2> <p>贪心(Greedy Algorithm)</p> <p>每个工人都选择不大于其难度上限的最大收益的任务</p> <p>问题即转化为求范围内的最大值</p> <h2>Python代码:</h2> <pre> <code class="language-python">class Solution(object): def maxProfitAssignment(self, difficulty, profit, worker): """ :type difficulty: List[int] :type profit: List[int] :type worker: List[int] :rtype: int """ diffPro = collections.defaultdict(int) for diff, pro in zip(difficulty, profit): diffPro[diff] = max(diffPro[diff], pro) maxVal = 0 for x in range(min(difficulty + worker), max(difficulty + worker) + 1): diffPro[x] = max(diffPro[x], maxVal) maxVal = max(diffPro[x], maxVal) return sum(diffPro[w] for w in worker) </code></pre> <p>&nbsp;</p> qinjiannet@sina.com (在线疯狂)Sun, 29 Apr 2018 15:38:00 +0800http://bookshadow.com/weblog/2018/04/29/leetcode-most-profit-assigning-work/LeetCode[LeetCode]Friends Of Appropriate Ages http://bookshadow.com/weblog/2018/04/29/leetcode-friends-of-appropriate-ages/ <h2>题目描述:</h2> <p><a href="https://leetcode.com/problems/friends-of-appropriate-ages/" target="_blank"><strong>LeetCode 825. Friends Of Appropriate Ages</strong></a></p> <p>Some people will make friend requests. The&nbsp;list of their ages is given and&nbsp;<code>ages[i]</code>&nbsp;is the age of the&nbsp;ith person.&nbsp;</p> <p>Person A will NOT friend request person B (B != A) if any of the following conditions are true:</p> <ul> <li><code>age[B]&nbsp;&lt;= 0.5 * age[A]&nbsp;+ 7</code></li> <li><code>age[B]&nbsp;&gt; age[A]</code></li> <li><code>age[B]&nbsp;&gt; 100 &amp;&amp;&nbsp;age[A]&nbsp;&lt; 100</code></li> </ul> <p>Otherwise, A will friend request B.</p> <p>Note that if&nbsp;A requests B, B does not necessarily request A.&nbsp; Also, people will not friend request themselves.</p> <p>How many total friend requests are made?</p> <p><strong>Example 1:</strong></p> <pre> <strong>Input: </strong>[16,16] <strong>Output: </strong>2 <strong>Explanation: </strong>2 people friend request each other. </pre> <p><strong>Example 2:</strong></p> <pre> <strong>Input: </strong>[16,17,18] <strong>Output: </strong>2 <strong>Explanation: </strong>Friend requests are made 17 -&gt; 16, 18 -&gt; 17.</pre> <p><strong>Example 3:</strong></p> <pre> <strong>Input: </strong>[20,30,100,110,120] <strong>Output: </strong> <strong>Explanation: </strong>Friend requests are made 110 -&gt; 100, 120 -&gt; 110, 120 -&gt; 100. </pre> <p>Notes:</p> <ul> <li><code>1 &lt;= ages.length&nbsp;&lt;= 20000</code>.</li> <li><code>1 &lt;= ages[i] &lt;= 120</code>.</li> </ul> <h2>题目大意:</h2> <p>给定一组人的年龄,尝试为每个人匹配朋友,规则如下。</p> <p>如果出现下列情况之一,则A和B不可以成为朋友:</p> <pre> age[B] &lt;= 0.5 * age[A] + 7 age[B] &gt; age[A] age[B] &gt; 100 &amp;&amp; age[A] &lt; 100</pre> <p>求最多可以匹配多少组朋友关系</p> <h2>解题思路:</h2> <p>观察题设条件 1 &lt;= ages[i] &lt;= 120,年龄的范围很小</p> <p>统计每一个年龄的人数</p> <p>遍历每个人,统计符合其年龄条件约束的人数之和</p> <h2>Python代码:</h2> <pre> <code class="language-python">class Solution(object): def numFriendRequests(self, ages): """ :type ages: List[int] :rtype: int """ cnt = collections.Counter(ages) ans = 0 for age in ages: cnt[age] -= 1 left, right = age / 2 + 8, age ans += sum(cnt[age] for age in range(left, right + 1)) cnt[age] += 1 return ans </code></pre> <p>&nbsp;</p> qinjiannet@sina.com (在线疯狂)Sun, 29 Apr 2018 15:33:00 +0800http://bookshadow.com/weblog/2018/04/29/leetcode-friends-of-appropriate-ages/LeetCode[LeetCode]Goat Latin http://bookshadow.com/weblog/2018/04/29/leetcode-goat-latin/ <h2>题目描述:</h2> <p><a href="https://leetcode.com/problems/goat-latin/" target="_blank"><strong>LeetCode 824. Goat Latin</strong></a></p> <p>A sentence <code>S</code> is given, composed of words separated by spaces. Each word consists of lowercase and uppercase letters only.</p> <p>We would like to convert the sentence to &quot;<em>Goat Latin&quot;</em>&nbsp;(a made-up language similar to Pig Latin.)</p> <p>The rules of Goat Latin are as follows:</p> <ul> <li>If a word begins with a vowel (a, e, i, o, or u), append <code>&quot;ma&quot;</code>&nbsp;to the end of the word.<br /> For example, the word &#39;apple&#39; becomes &#39;applema&#39;.<br /> &nbsp;</li> <li>If a word begins with a consonant (i.e. not a vowel), remove the first letter and append it to the end, then add <code>&quot;ma&quot;</code>.<br /> For example, the word <code>&quot;goat&quot;</code>&nbsp;becomes <code>&quot;oatgma&quot;</code>.<br /> &nbsp;</li> <li>Add one letter <code>&#39;a&#39;</code>&nbsp;to the end of each word per its word index in the sentence, starting with 1.<br /> For example,&nbsp;the first word gets <code>&quot;a&quot;</code> added to the end, the second word gets <code>&quot;aa&quot;</code> added to the end and so on.</li> </ul> <p>Return the&nbsp;final sentence representing the conversion from <code>S</code>&nbsp;to Goat&nbsp;Latin.&nbsp;</p> <p><strong>Example 1:</strong></p> <pre> <strong>Input: </strong>&quot;I speak Goat Latin&quot; <strong>Output: </strong>&quot;Imaa peaksmaaa oatGmaaaa atinLmaaaaa&quot; </pre> <p><strong>Example 2:</strong></p> <pre> <strong>Input: </strong>&quot;The quick brown fox jumped over the lazy dog&quot; <strong>Output: </strong>&quot;heTmaa uickqmaaa rownbmaaaa oxfmaaaaa umpedjmaaaaaa overmaaaaaaa hetmaaaaaaaa azylmaaaaaaaaa ogdmaaaaaaaaaa&quot; </pre> <p>Notes:</p> <ul> <li><code>S</code> contains only uppercase, lowercase and spaces.&nbsp;Exactly one space between each word.</li> <li><code>1 &lt;= S.length &lt;= 100</code>.</li> </ul> <h2>题目大意:</h2> <p>将句子S中的单词按照如下规则进行转换:</p> <pre> 如果单词首字母是元音,在单词末尾添加ma 否则,将单词首字母移动至末尾,并添加ma 对于第i个单词,在其末尾添加i个a</pre> <h2>解题思路:</h2> <p>字符串模拟</p> <h2>Python代码:</h2> <pre> <code class="language-python">class Solution(object): def toGoatLatin(self, S): """ :type S: str :rtype: str """ ans = [] for idx, word in enumerate(S.split()): latin = word if word[0].lower() not in 'aeiou': latin = word[1:] + word[0] latin += 'ma' + 'a' * (idx + 1) ans.append(latin) return ' '.join(ans) </code></pre> <p>&nbsp;</p> qinjiannet@sina.com (在线疯狂)Sun, 29 Apr 2018 15:27:00 +0800http://bookshadow.com/weblog/2018/04/29/leetcode-goat-latin/LeetCode ================================================ FILE: api/test/data/feed/dingxiaoyun555.blog.163.com ================================================ <![CDATA[丁小云的野鸟星空]]> http://dingxiaoyun555.blog.163.com zh-CN Tue, 3 Jul 2018 00:16:07 +0800 Tue, 3 Jul 2018 00:16:07 +0800 http://blogs.law.harvard.edu/tech/rss 120 <![CDATA[丁小云的野鸟星空]]> http://img.bimg.126.net/photo/RI9fMndMZMF_C1cDfROuvA==/217580156998391405.jpg http://dingxiaoyun555.blog.163.com <![CDATA[论底层青年如何逆袭到中上阶层:什么是命?如何革你的命?]]> http://dingxiaoyun555.blog.163.com/blog/static/1218700502015615563513

李白曾说自己是李暠九世孙,郭沫若对此考证一番之后,认为李白在吹牛。先不说此事真伪,单说李暠,他是李广十六世孙,东晋年间在敦煌酒泉一带称王,他的两个儿子先后继位后一个战死,一个战败自杀。后来,李暠七世孙李渊建立唐朝。很多改变历史的大人物的出现不是因为祖坟冒青烟,他们做成的那些大事可能是一个家族几代人、十几代人乃至几十代人奋斗不息的结果。


有些事,即使你选对策略,竭尽全力,直到死你也做不成,你儿子也做不成,直到你孙子长大成人了才有可能做成。也有可能还是做不成,需要你孙子的儿子、孙子们继续为之奋斗不息……


一件可能至少要三代人才能做成的事,你家上两代人几乎没有给你打下任何基础,你想靠自己的努力奋斗在短时间内完成,结果很可能是把你自己活活逼疯。


很多年轻人今天想做这个,明天想做那个,少年头转眼就白了,人生就这么蹉跎了。只是这蹉跎也是因人而异的。例如有些人出身于上层社会,他们出生后直接就在所谓的马斯洛需求第四层嬉戏玩耍,他们纵使蹉跎,只要不犯大错,最后直到死也还是会停留在上层社会。而社会最底层的年轻人,可能一直很努力,但却始终只能在社会最底层垂死挣扎。


盲目的努力,其实也是一种蹉跎。只是这盲目可能并不是盲目者的错。如果按过去的说法,他们盲目是因为盲目就是他们的命。如果按现在的说法,他们盲目是因为信息不对称,信息不对称是万恶之源。


如果将上述两种说法综合一下,可以得出这样一个结论:一个人所谓的命,在某种程度上,取决于他接收到的信息,以及他是否拥有善于甄别、利用重要信息的能力。


什么是命?看过一个纪录片,介绍一种海鸟,雌鸟下了俩蛋,孵出两只小鸟。其中个儿大一些的小鸟猛啄个儿小一些的小鸟,并将后者推出妈妈的怀抱。其实后者也没被推出多远,只是被推出二三十厘米远,还在它妈妈眼皮底下。但它妈妈对它完全视而不见,任由它活活饿死在自己面前。而那只个儿大的小鸟则得到了很好的喂养。动物的命就是这样,人类的命亦大抵如此。人类不过是所谓的高级动物而已,而这个“高级动物”的称号还是自封的。


什么是命?那些基因特别优秀的男人,女人会倒贴钱想方设法跟他结婚生孩子。说到这儿我想起一个女孩儿,长相非常一般,身高一米五左右,她最大的优势是她父亲是副县长。十几年前,这个女孩儿“娶”了这样一个老公,身高一米八五左右,长相和周润发有一拼,有时我甚至觉得他比周润发还要更帅一些,但就是家里穷得一塌糊涂。最近我还见过他,他依旧那么帅,现在也混成一个不大不小的领导了。


什么是命?我曾跟别人开玩笑说外表如村上春树、郭敬明或安妮宝贝那样的人会去写小说,你觉得外表如金城武那样的人会去写小说吗?外表如金城武那样的人,没时间写小说,因为他们的生活本身就是小说。


什么是命?杜甫说文章憎命达。其实在杜甫生活的那个年代,一个人能写文章,这已经不是一般“命达”了,这可能是其祖上几代人努力奋斗的结果。在那个年代,大多数人都是文盲。李白如果出身于唐朝平民家庭,他可能连认字的机会都没有。李白一生到处漫游,你知道那要花多少钱吗?很大程度上,物质基础决定了精神境界。而所谓的精神境界,某种意义上,其实亦是一种善于甄别、利用重要信息的能力。


什么是命?陈胜曾问天:“王侯将相宁有种乎?”陈胜可能不知道,他要干的事,需要他的上几代人为之蓄势。盖世功名恰如绝世美人,均在云端之上,从来都是有势者得之。无势可依者欲得之必须谋势,而谋势之术可能同样需要至少两三代人学习摸索并且传承给子孙。当然,肯定也有人用几年或十几年的时间通过自学慢慢学会了谋势之术,只是这需要大量阅读史书或其他领域的经典,同时也需要他们在青少年时代得到过相对较好的教育。也就是说,他们要有条件做很长一段时间的有闲阶层(这个条件通常需要其家庭或家族直接给予或间接给予,这个条件就是所谓的“种”,或者也可以被称之为“命”),进而充分学习,充分尝试,然后再去谋求充分发展的机会,即谋势。而所谓的谋势,究其本质,同样需要借助善于甄别、利用重要信息的能力。


什么是命?高富帅用多年时间追求一个美女是情深似海的痴情;穷矮丑用多年时间追求一个美女是臭不要脸的纠缠。高富帅挑逗美女,会被视为调情;穷矮丑挑逗美女,则会被视为骚扰或猥亵。


什么是命?众所周知,屌丝有男亦有女,都说男屌丝几乎不可能和白富美在一起,女屌丝和高富帅在一起的可能性会大很多吗?很多女屌丝最大的错觉就是以为自己只要鄙视男屌丝就可以证明自己不是屌丝了。但现实却是,女屌丝十有八九最终还是只能和男屌丝相亲然后结婚。这就是残酷的真相,这就是命。很多女屌丝说高富帅结婚后对老婆更好,既浪漫又专一,然后把自己身边的男屌丝贬得一文不值,说他们low到极点。唉,屌丝何苦鄙视屌丝?这种鄙视,究其本质,是在潜意识里自己鄙视自己。


什么是命?为什么很多女人或男人总是抱怨自己的前任都是极品烂人?是因为天真纯朴所以遇人不淑?可能主要还是因为物以类聚吧。只是很少有人愿意承认这一点。纵使他们在日后某一天终于自以为是地醒悟了,就能遇见自己心目中所谓的理想伴侣了?除非他们能在自己身上找原因并有所改变……


年少轻狂时,不知所谓的“命”为何物。最初满脑袋都是情啊爱啊,其实就是被流行文化彻底洗脑了。后来从爱情梦中惊醒了,想要彻底改变自己的命,读了几本心灵鸡血书,就妄想扼住命运的喉咙,完全没意识到自己就是一个“心比天高,命比纸薄”的人,被命运压在身下各种蹂躏。


某种程度上洞悉自己的命以及某些死都无法突破的局限后,比原来轻松快乐了很多,大概是因为不再满脑袋只想未来了,可以从当下眼前发现一些让身心沉醉的奇妙情境或诗意瞬间。只是还是不甘心,还是想革自己的命。


“革命”这个词,最早见于《周易》。读《周易》时,发现很多名人的名字都取于本书,而且冥冥中似乎真的影响或改变了他们的命运或气质。例如蒋介石,他这名应源于“介于石”。再例如莫文蔚,她这名应源于“君子豹变,其文蔚也”,“文蔚”大意是像豹纹一样美丽神秘,这和莫文蔚的气质还真挺契合的。


读完《周易》后,又粗读了一遍命学经典《滴天髓》,对于天干地支、五行五气什么的肯定不可能一下就研究明白了,但对清气、浊气、真神、假神什么的似乎还能粗浅理解一点点。读《滴天髓》和读《周易》感觉差不多,用这类书算命我不知道是否靠谱儿,我也无意用这类书里的理论给自己算命,我研究这类书,更像是研究一种行为心理学。我只是想了解一下除了那些例如出身这种个人无法选择的因素之外,我能通过哪些行为在某种程度上改变自己的命运。

还有很多奇书,类似于《周易》和《滴天髓》。读这类书时,会很想革自己的命,运用一些看似很神秘其实特质朴的道德方法论,运用一些所谓的霹雳手段。


一个人想要革自己的命,首先要在最大程度上认清自己的命。这就好像一个屌丝青年想要逆袭成功,首先要坦然面对自己就是一个屌丝这一事实。坦然承认自己就是一个屌丝,只是一定不要因此而同情自己,不要自怜自伤,自怨自艾。
所谓认清自己的命,主要就是搞清楚你最想干什么,你能干什么。全力去干那件你最想干且能干的事,你可以将其视为你的理想。当你为了干这件事而奋斗不息,你的命自然而然会发生改变。


除此之外,想要认清自己的命,还需要不断读书,大量读书,大量阅读经典书籍,尤其是大量阅读经典史书。大量阅读经典史书可以让你更深刻地认清自己的命,让你知道做什么事以及如何做才能革自己的命。

想要革自己的命,一定要有超越物质的自由心态。只是这种自由心态,通常需要在很坚实的物质基础上慢慢习得。还是那句话,很大程度上,物质基础会决定精神境界。当你的物质基础有了较大改变之后,你的心胸、眼界、社交圈以及你的一些重要能力自然随之而改变。也就是说,你会获得更多有价值的信息,而你甄别、利用重要信息的能力也会不断增强。

在中国古代,很多看似轻视物质的“圣人”,其实都过着妖童美妾酒肉臭的生活。还有古代的僧人,他们也会轻视物质。但事实却是,古代很多佛寺占有大量土地,其佃农妻女的初夜权甚至亦归僧人所有。那些在物质层面和精神层面上都很贫乏的人,假模假式地在轻视物质的同时空谈精神,可体验如压迫者般附庸风雅的乐趣,只是其两腿间的生殖器却是事实意义上的“被压迫者的生殖器”。

美国南北战争爆发后,马克思因异常焦虑而彻夜失眠,他担忧的不是美国人民的命运,而是担忧因为这场战争的爆发,会让美国人在很长一段时间内只关心美国国内形势,不再关注欧洲新闻。这可能会导致马克思收入锐减,因为他当时是受雇于美国《纽约论坛报》的自由撰稿人,负责为之提供欧洲新闻……

很多时候,想要缓解焦虑进而让内心宁静,物质财富比精神财富更管用。北京国家图书馆里精神财富够多了吧,如果一个年轻人在北京过着极端穷困的生活,估计国图里浩如烟海的精神财富也很难让他获得内心的宁静。

物质财富不仅能让一个人获得内心的宁静,也能让一个人的身心获得更大的自由。什么是自由?自由不是你想干什么就干什么,自由是你想不干什么就不干什么。这也是有钱最大的好处。有钱不能让你为所欲为,但却能让你想不干什么就不干什么。简而言之,有钱能让你自由……

怎样才能不再因为钱而烦恼?有这样两个方法:第一个方法是实现财务自由,第二个方法是自杀。

估计你对自杀应该没什么兴趣,所以我们还是谈谈财务自由吧。某种程度上,财务自由是所有自由的基础。如果说自由是能力要比欲望大很多,那么财务自由就是赚钱能力要比消费欲望大很多。所以想要实现财务自由,可以朝这样两个方向努力:一是不断提高自己的赚钱能力,二是不断减少自己的消费欲望。也就是说,财务自由不一定需要赚很多钱,如果你能深刻了解消费社会的各种骗局,如果你能摆脱消费社会强加给你的那些虚假欲望,只关注你内心最真实的欲望,那么你并不需要太多的钱,你就能实现财务自由了。

或者我们也可以这样说,想要实现财务自由,最重要的不是赚钱,而是修炼心性,最重要的就是不断给你的欲望做减法。否则即使你资产过亿,你依然会感到心烦意乱。欲壑难填的人永无自由之日。巨额财富不会让你感到自由,真正让你感到自由的是虚假欲望很少的生活。

其实一个世人眼中的所谓穷人也能实现财务自由,只要他是一个人格独立、精神自由的人,只要他能运用自己的独特智慧超越盲目愚蠢的物欲以及那些让人付出高昂代价的世俗偏见。事实上,如果你无法超越这两个无形的敌人,无论你赚多少钱,你都不会感到自由。

想要革自己的命,很有必要做到所谓的“当下不杂”,这可以让你最大程度上避免自身资源的无谓浪费。因为当下不杂,所以内心宁静。内心宁静是最强大的人生之力。

想要内心宁静,一方面正如上文所述的那样,需要一定的物质基础;另一方面则需要一个极简的人生最主要目标,或者你也可以将这个目标称之为理想。

你为什么痛苦焦虑?很重要的一个原因是你什么都想要。都说“理想丰满,现实骨感”,其实想让现实丰满,很有必要让理想骨感,最好骨感到只剩一副骷髅骨架,或者只剩一个骷髅头骨,静静凝视着它,在心里对自己说:怕什么,你会一直活到死的。

人这一生,能干好一件事就已经很了不起了。例如专注于研究唐史,研究宋词,搞摄影,研究哲学,写侦探小说,写影评,写书评,搞营销,搞设计,做川菜等等。什么都想干,什么都干不好。趁年轻,尝试很多事,然后选定一件事,将其干到极致。当然前提是乐在其中,如果感觉很受罪那就算了,感觉很受罪必然会拖延。将一件事干到极致,不是说只干这件事,别的就不干了。只是在人生的某个阶段有一个最主要的目标,把大多数时间、精力集中于此。干其他事就当陶冶性情,或是寻找他山之石,或者只是为了放松神经。将一件事干到极致之后,必然会有所成就,有所成就后可能会有如贼入空室般的空虚。只是那空虚,是令人愉悦的空虚……

需要提醒你的就是,对于你视之为人生理想的那件事,如果你只是去做,你可能永远都做不好,但如果你用游戏者心态去玩,却有可能玩得很好。一旦你玩到极致,还有可能会名利双收,虽然这名利可能是你原来根本不想要的。

对于一个真正的理想青年来说,用游戏者心态去实现理想是人世间最快乐的事。

还有就是价值观的问题。如果你一个人独自生活,想超越世俗价值观,其难度相对而言要小一些。但如果你结婚生子了,想超越世俗价值观就很难了。只是如果你想革你自己的命,革你家人的命,为了让他们能过上更好的生活,你想获得世俗意义上的成功,那么选择运用超越世俗价值观的方法,要比选择运用遵循世俗价值观的方法更有效。这就是所谓的以出世之心做入世之事。

以出世之心做入世之事,这是屌丝青年通过自我革命完成逆袭的必由之路。

(本文节选于丁小云新书《就像没有明天那样去生活》) *转载此文请注明此出处

 

论底层青年如何逆袭到中上阶层:什么是命?如何革你的命? - 丁小云 - 丁小云的博客

 

]]>
http://dingxiaoyun555.blog.163.com/blog/static/1218700502015615563513 4 http://dingxiaoyun555.blog.163.com/blog/static/1218700502015615563513 Wed, 1 Jul 2015 17:58:12 +0800 2015-07-01T17:58:12+08:00
<![CDATA[女神就是男人永远无法真正追到的女人]]> http://dingxiaoyun555.blog.163.com/blog/static/121870050201462012350344 太容易被男人追到的女人,很难得到男人长久的爱。当然,某些女权主义者可能会说:“女人不需要男人长久的爱。”不需要吗?需要吗?你自己想去吧。

女人可以尽可能长时间地故意不跟追自己的那个男人上床,戏耍他,玩弄他,欺骗他,挑逗他,拒绝他……这个被折磨的过程,会成为他一生中最珍贵的记忆。那个曾折磨过他的女人,会成为他心中至死难忘的人……

就算女人和追求自己的男人上床了,这并不意味着她被那个男人追到了。很多时候,女人和追求自己的男人上床,只是想给他一点甜头而已,也许只是想把他变成自己的众多备胎之一而已。这种想法无可指责,这本来就是女人得天独厚的先天优势。

为什么很多女人在和自己喜欢的男人上过几次床之后就被对方无情抛弃了?原因肯定有很多。其中有些女人,可能是因为这个原因被抛弃的:对于抛弃她们的男人来说,她们只在床上才有一点点价值。

以色事他人,能得几时好?一个女人如果只是在床上才有价值,纵使她很美,她的命运十有八九会很悲惨。

现在无数人把女神这个词挂在嘴边,给人这样一种印象:满大街都是女神,女神随处可见。

其实真正的女神极少极少。真正的女神,是男人永远无法真正追到的那些女人。她们中的一些人看上去高傲冷艳,但其中亦有很多人看上去亲切随和,活泼爽快,只是无论是哪一种,男人都永远无法真正追到她们,因为她们一直在向前走,她们心中始终有所追求。她们可能看上去很能作,也有可能看上去异常沉静温柔。只是万变不离其宗的是,她们一直在向前走。因为她们一直向前走,这使得她们的肉身渐渐有了神性,闪烁着一种不可言说的、自由诗意的奇异光彩……

请你一直向前走,否则我会杀死你。
]]>
http://dingxiaoyun555.blog.163.com/blog/static/121870050201462012350344 7 http://dingxiaoyun555.blog.163.com/blog/static/121870050201462012350344 Sun, 20 Jul 2014 13:23:50 +0800 2014-07-20T13:23:50+08:00
<![CDATA[如何利用性欲的力量治愈拖延症]]> http://dingxiaoyun555.blog.163.com/blog/static/121870050201311198520105 人类的某些本能会让我们患上拖延症,但它们同样也有可能帮助我们战胜拖延症,因为人类的本能永远是一个人去做一件事的最根本动力。例如人类关于性的本能就是一把双刃剑,它既有可能导致拖延,同样也能帮助我们治愈拖延症。
天上掉下来一个绝色狐仙,每天晚上都跑来跟你做爱。后来因为你很穷,被绝色狐仙的家人看不起。绝色狐仙对你说:“你丫也是一个男子汉,就不能为你的另一半争口气?”绝色狐仙送了你一面镜子,然后离你而去。你发现如果你好好学习,她就在镜中笑;如果你不好好学习,她就在镜中哭。你因为不忍看她伤心流泪,于是你苦学了两年,考取了功名,然后绝色狐仙又回到了你的身边,你们从此过上了快乐美满的生活。异史氏曰:如果天上能掉下来很多很多绝色美女,鼓励男人奋发进取,人世间也会因此少很多因拖延症而穷苦绝望的男人……
这是《聊斋志异》里一个名为《凤仙》的故事。可惜,这颗星球上的绝大多数年轻男孩都不会碰到这样的好事儿,他们只能深陷于拖延症的泥沼中不能自拔。
很多年轻男孩之所以会成为拖延症患者,主要是因为他们满脑袋里都是性,都是色情信息碎片,这使得他们的大脑变成了像精液一样的浆糊。
还有很多年轻男孩,他们将自己的性欲升华成一个理想。因为心里有一个特想实现的理想,所以他们能做到用自制力克服自己的拖延心理,进而完成自我实现。

在塔斯曼尼亚曾有过这样一个风俗,如果一个男人死了,他的遗孀必须切去他的小弟弟,在经过防腐风干处理后做成项链,挂在自己的脖子上,直至找到新的男人为止。但她绝对不可以用挂在脖子上的小弟弟自慰,因为这么做就是对死者的侮辱了。
如果你是一位男性读者,我们现在做这样一个假设:假如有一个富豪愿意跟你签一个合同,合同上写着只要你愿意挥刀切掉自己的小弟弟,将其防腐风干后做成项链送给他,他就给你100亿美元,你愿意签这个合同吗?我相信你肯定不愿意,除非你早就想给自己做变性手术了。
这说明什么?这说明你的性欲至少价值100亿美元。
当然,这只是一个类似于玩笑的假设。只是对于男性来说,性欲的确是个人奋斗的最强大动力。
据统计,一个男人一生中射出的精液大概也就能装满一辆轿车的油箱,所以如果说睾丸是一个男人的生命发电站,那他的这一油箱精液就是驱动他奋斗一生的燃料。
曾有记者问Coldplay乐队主唱Chris Martin为什么会选择玩摇滚?后者给出的答案是:“21岁时我喜欢的女孩子当我是朋友,没有人肯跟我上床,所以我想成为摇滚明星!”这是一个将性欲转换成追求事业成功的欲望的绝佳范例。关于这一点,拿破仑?希尔解释得很清楚:“性欲是人类最强烈的一种欲望。被这种欲望驱使时,人们会产生强烈的想象力、勇气、意志力、毅力以及在其他时候所没有的创造力。性接触的欲望非常强烈和冲动,往往使人沉溺其中,甚至甘冒失去生命和名誉的冒险。如果加以控制,并向其他方向引导,这股激发力就保持其强烈的想象力和勇气等性质,成为一股应用在文学、艺术或其他专业或工作上(其中当然也包括积累财富)的强大创造力。”
美国心理学家通过心理测试发现,当戴劳力士的丑男和穿快餐店制服的帅哥同时追求一个女孩,这个女孩十有八九会选择戴劳力士的丑男。说到这儿,我想起了英国的《泰晤士报》曾介绍过这样一条人类性行为研究结果:女性的性高潮频密程度和性伴侣的身家基本上成正比。女性为什么更喜欢和有钱的男人一起享受性爱?关于这个问题,喜欢和富豪约会的27岁英国女律师卡茜在接受《泰晤士报》采访时这样回答道:“有钱的男人有权有势,他们更自信,更有魅力,他们知道自己想要什么,然后努力争取直至成功,这种性格会让他们在床上表现得特别优秀。”
看来这还真是:男人要有钱,和谁都有缘。不过你千万不要认为女人喜欢有钱的男人是一种浅薄的“时代病”,事实上,女人喜欢有钱的男人是天经地义的事,它和男人为什么最迷恋那些腰臀比例为0.7左右的女人基本上是一个道理。对于这两种现象,科学家给出的解释是:男人之所以迷恋那些腰臀比例为0.7左右的女人,是因为基因在作祟,他们的基因会对他们说:这样的女人生育能力很强;而女人之所以喜欢有钱的男人,同样是基因在作祟,她们的基因会对她们说:和这样的男人一起繁衍后代,后代的养育会得到更好的保障。
英国哲学家培根把肉体之爱看成是精神十分贫乏和意志薄弱的表现,他说:“可以看到,在所有伟大的和受尊敬的人物中,没有一个人会疯狂地沉湎于情欲:这说明伟大的智慧和伟大的事业确实不会容许这种为弱者所特有的激情发展起来。”
对于培根的上述观点,瓦西列夫在他的著作《情爱论》中予以了驳斥,他说:“在意志力坚强、精神力强大的伟大人物身上,性本能通常也是高度发展的。一个人的创造性活动同他的爱的能力,同他深切地体验到肉体和精神的这种渴求的能力往往是联系在一起的。歌德、拜伦、普希金、巴尔扎克、雨果、裴多菲等人的生活和创作就是例证。”
在我的书架上有一本名为《名人隐私录》的书,作者是美国作家欧文·华莱士,这本书的英文名是《The Intimate Sex Lives of Famous People》,所以如果将这本书的书名译为《名人性爱隐私录》似乎更合适一些。在这本将近八百页的书中,作者记录了几百位男女名人的性爱隐私,这些名人中有作家、画家、政治家、歌星、演员等等,其中绝大多数都是在某种程度上改变了这个世界的伟大人物。这些伟大人物的性爱隐私印证了这样一个规律:一个人所能取得的成就的大小和他的性欲旺盛程度基本上是成正比的。
接下来我们一起探讨一下如何让性欲变成一种可以帮助我们战胜拖延症的动力。
叔本华曾说:“你只能做你想做的,但不能要你想要的。”在我看来,这是极具人生智慧的一句话。
如果一个人一味地追求自己想要的,他十有八九会死得很难看(举个例子,很多没钱的男人最想要的就是声色犬马的放荡生活,但如果他们将绝大多数精力都用在这件事上,那他们就会成为老罗所说的那种人类能想到的最愚蠢的组合体:花花公子+没有钱);而如果一个人坚持做自己想做的,一旦他做成了,他想要的那一切会不请自来。很多人都明白这个道理,他们以这样一种方式将自己的性欲转化成个人奋斗的动力。
我回顾我自己以往的经历,我发现很多时候,我之所以会不断拖延,就是因为我只想着要自己想要的,然后为此急功近利地去做一些我打心眼儿里不喜欢做的事,结果越做越烦,并因此成为拖延症患者。而当我在做我打心眼儿里最想做的事的时候,我会干劲十足,我会高度自觉地去完成每日工作计划,新想法和新创意会源源不断地涌进我的大脑。拖延?我恨不得夜以继日地拼尽全力呢。
顺便说一嘴,当你将性欲转化成个人奋斗动力时,不要过度压抑你的性欲,因为正如瓦西列夫所说的那样:“大量研究材料表明,长期节制‘下流’的性生活会使人智力停滞,精神受到创伤,如果再有其他因素,就会引起神经官能症及其他神经心理病症。”

(摘自《7天治愈拖延症》,这本书最近出了纸质版,但这篇文章未被收入)
]]>
http://dingxiaoyun555.blog.163.com/blog/static/121870050201311198520105 25 http://dingxiaoyun555.blog.163.com/blog/static/121870050201311198520105 Thu, 19 Dec 2013 08:05:20 +0800 2013-12-20T14:23:49+08:00
<![CDATA[洗碗是爱情的死敌]]> http://dingxiaoyun555.blog.163.com/blog/static/12187005020137126415541 我母亲总嫌宝宝吃得少,总是皱着眉跟宝宝说多吃点,她这可能是为了补偿她心里“内在的小孩”,就像她跟我说她小时经常挨饿,跟我说那滋味有多难受……

我总是对着宝宝笑啊笑,生怕他不开心,我这可能同样也是为了补偿我心里“内在的小孩”,因为我小时的记忆里只有我父亲暴戾的神情,或是那种没有一丝感情的神情,而我母亲的脸上则总是充满了焦虑或怨恨……

也就是说,我母亲希望宝宝多吃点,我生怕宝宝不开心所以总是对着他笑啊笑,这些可能都只是爱的表象。就像有时我看着宝宝无敌可爱萌的笑容,我会在心里对他说:“只是因为你笑的样子,爸爸愿意为你做任何事。哪怕为你而死,爸爸也愿意。”只是随后我又想,我这其实只是瞬间的感动而已。

仅靠这种心血来潮式的瞬间感动是无法让宝宝快快乐乐长大成人的。

宝宝真正需要的,不是这种瞬间的感动,而是真正的爱和付出。

我估计很多父亲心里都有过这种瞬间的感动,然后把自己感动得一塌糊涂,并因此觉得自己是一个伟大的父亲,觉得自己为孩子付出了太多太多。哪怕他远未承担起做父亲的责任,但只因这瞬间的感动,就觉得孩子欠他的永远都还不完。

在情天欲海里,有很多痴男怨女,同样也有过类似的瞬间的感动,也偶尔觉得自己可以为对方而死。一旦发觉对方并不买账,他们会一脸哀怨地对对方说:“对你付出了那么多,你怎么舍得我难过?”还有一些更狠的人,他们会选择用硫酸或菜刀来表达自己的爱。

在我很年轻时,我最向往的是那种轰轰烈烈的爱情。只是后来我渐渐发现,很多轰轰烈烈的爱情很快都输给了像洗碗这样的小事。

现在的我,愈发觉得“爱情”和“爱”其实是两码事。这两年我经常会有这样一种想法:就本质而言,女人都是神经病,男人都是色情狂。所谓爱情,就是神经病和色情狂在一起纠缠肉搏,互相欺骗,互相利用,互相温暖,互相伤害。造物主他老人家到底有多恨人类呢?

除了上面这种残酷且盲目的爱情,还有一种徒有虚名的爱情,一种可以被称为现代宗教的爱情,一种具有“社会压迫工具”功能的爱情。这种爱情可以不停刺激年轻人的消费欲,让年轻人主动选择统治阶层为他们设计好的程式化生活。

虽然我把爱情说得挺恶心的,但我依旧认为爱情是人世间最好玩的事。

爱情很多时候只是源于生理冲动,而爱却是知的极致,是无尽的宽容,是“近乎于滥情的悲悯”……

只是人为什么会去爱?归根到底,还是为了让自己快乐。孔子的学生颜回为什么箪食瓢饮在陋巷?耶稣为什么心甘情愿被钉在十字架上?高僧为什么年复一年面壁苦修?因为做这些事能让他们感到快乐。

人无论做什么,都是为了让自己快乐,甚至连自杀也不例外。
]]>
http://dingxiaoyun555.blog.163.com/blog/static/12187005020137126415541 15 http://dingxiaoyun555.blog.163.com/blog/static/12187005020137126415541 Mon, 12 Aug 2013 18:41:55 +0800 2013-08-13T08:07:13+08:00
<![CDATA[好女人得到好评,坏女人得到一切]]> http://dingxiaoyun555.blog.163.com/blog/static/1218700502013679287987 我的一个豆友在看了恩格斯的《家庭、私有制和国家的起源》之后这样总结道:在恩格斯他老人家看来,婚姻不过是性交易的一种批发形式。
这让我想起了张爱玲曾说过的一句话:老婆其实比情人和妓女贱。
另外关于婚姻,伍迪·艾伦也说了一句看似戏谑但却值得玩味的话:免费的性其实是最昂贵的。
上述观点中哪一个才是正确的?这是一个见仁见智的问题。
可能直到现在依旧有人会这样认为,对于一个在经济上严重依赖于别人的女孩来说,无论她选择结婚,还是选择从事性交易工作,这两者可能没什么区别。
我个人觉得这种说法有待商榷,因为在现代社会,一个女孩如果选择从事性交易工作并且做得很好的话,她可以很快就不用在经济上依赖于任何人了,而如果她善于投资理财,那她还有可能实现财务自由。
也许有人会说,靠这种工作赚来的钱很脏。关于这种说法,我的看法是这样的:在中国,那些被称为“小姐”的女性性工作者可能是无数家庭的经济支柱,她们可能要承担弟弟妹妹的学费,可能要承担父母的生活费和医药费。就算她们挣钱只是为了自己,她们挣的钱也比贪官们靠贪污搞到手的钱干净一万倍。而且她们也在某种程度上推动了这个国家的经济发展。

总的来说,对于一个女人来说,生活在现代社会,这既是非常幸运的一件事,同时也是非常残酷的一件事。
先说说幸运的一面。有效的现代避孕技术绝对是具有革命性的发明,它让现代女性不用再像以前的大多数女性那样一次接一次地怀孕,除了怀孕什么都干不了。现在好了,受益于有效的现代避孕技术,现代女性也可以走出家门像男人一样工作,像男人一样赚钱,像男人一样实现经济独立乃至财务自由,进而更自由地去爱,去生活。当然,现代社会给予女性的好处肯定不仅限于有效的现代避孕技术,但正因为它使得现代女性有了走出家门工作的机会,现代女性才有了争取一系列社会权利的机会,这是一个连锁反应。
再说说残酷的一面,现代女性走出家门开始工作后,她们会发现,现在很多公司都是把女的当男的用,把男的当畜生用,把畜生当领导用。很多女孩在公司里工作的时候要跟男人竞争,如果总是在竞争中落后,她们就有可能被领导骂,还有可能失业。她们中的很多人在上下班的时候可能需要挤公交或挤地铁。那些公交和地铁在上下班高峰期有多挤你知道吗?据说它们不仅能把怀孕的女孩给挤流产了,还有可能把没怀孕的女孩给挤怀孕了。很多女孩下班回到家之后一照镜子,会觉得自己看上去就像是一个失魂落魄的女疯子。
说到这儿我想起了某人编的这样一个段子:“毕业工作难寻觅,文理都已不景气。富家子弟出国去,女同学们靠身体。”我把它转发到了我的微博上,有一个女孩这样评论道:“除了最后一点作为女同学完全不能认同,前三点全中。”而我给她的回复则是:“其实靠身体也不一定都是跟‘潜规则’有关,也可以理解为靠身体疲于奔命地去工作,那感觉有点像:小姐的身子,丫鬟的命……”
的确,在现在的中国,大学生毕业后工作很难找,女大学生毕业后工作更难找。据某机构调查,中国女大学生普遍求职难。于是一些女大学生会像美国某作家所说的那样,她们之所以假装性高潮,只是为了得到一份工作。所以我们会听到另外一些女孩发“门门功课都得A,不如人家一对C”等诸如此类的牢骚。其实也没有必要发这样的牢骚了,因为对于一个很年轻、很年轻的女孩来说,她的身体本身就是一件武器,而她的床则可能变成一个战场。

有些女孩会这样利用自己的身体,即让自己的身体变得像一只肉鸡一样被别人圈养起来,还有一些女孩则利用自己的身体赢得足够的资本,然后全力活出一个真我。这是她们自己的选择,每个女孩都有权利选择自己的活法儿。但总的来说,做一只肉鸡的感觉肯定不如活出一个真我的感觉好,因为肉鸡永远无法自己主宰自己的命运,只能任人宰割。
是什么使得有些女孩活得就像一只肉鸡,又是什么使得某些女孩可以活出一个真我?这是一个问题。
很多年轻的女孩可能一无所有,她们拥有的只是自己年轻的身体。在豆瓣上曾看到一个女孩说了这么一句话:“最聪明的猎人往往以猎物的姿态出现”。很多女孩可能在没步入社会之前就明白了这个策略,而当她们身体力行这一策略的时候,她们就成了某些人眼中的坏女人。
关于坏女人,女性学者邓艳珍曾写过一篇很有趣的文章。在邓艳珍看来,坏女人的生活方式看似是一种“异类的生存状态”,但实际上它是“一种高明的经营方式”。而邓艳珍对于所谓的“好女人”的定义则是:“好女人是男性霸权世界利益分配机制和原动力的产物,淑女、贞女、烈女便是好女人的具体表现形式”。在传统社会中,女人如果想要获得社会财富和社会地位,除了靠各种自我牺牲进而成为男人眼中的“好女人”之外,几乎没有更好的途径了。随后邓艳珍进一步分析道:“然而,残酷的现实是,做传统的好女人,实在是成本太高,成功的机遇太少,过程太长,这跟女性天生红颜易老相矛盾……聪明的女人倒看透了这一点,于是舍弃装腔作势、扭捏作态那一套,离弃对男性群体的依榜和男性安排的秩序,直取具体男人,直接引爆男人对女人肉体的急切占有,从而挑战两性世界既定的利益分配体制,颠覆现实的价值观,以坏女人的形象吸引男人眼球,进而在另一个利益分配流程上大快朵颐,大获全胜……”
随后邓艳珍还举了这样一个例子,著名艺术家艾敏年轻时过着极度贫穷的生活,后来她靠这样两个作品改变了自己的命运:其中第一个作品名为《那些与我睡过觉的人》,该作品是一顶帐篷,艾敏在上面绣了和她做过爱的一百零二个男人的名字;第二个作品《床》则是一张真正的床,床上摆着这样一些东西:“懒得整理的被子、依稀可见的体液渍印、枕头上模糊的口水痕迹以及裹在被子里乱七八糟的浴巾和丝袜。床边则是用过的避孕套、酒瓶、药盒、脏内裤、卫生巾”。艾敏的第二个作品获得了美国艺术界最具权威的一项大奖,后来那张床据说被人以10万英镑的价格买走了,而艾敏也因此成了一个世界知名的艺术家。

这颗星球上最有名的坏女人是谁?我相信会有无数人说出这个名字:麦当娜。
麦当娜17岁的时候孤身一人离开家乡去纽约闯荡,那天是她第一次乘坐飞机,第一次乘坐出租车。她当时并不知道乘坐出租车去哪里,当时她的口袋里只有35美元。麦当娜最初居住的那间公寓里爬满了蟑螂,而她的邻居大多数都是酒鬼,整个公寓楼道弥漫着腥臭难闻的味道。那段时期,麦当娜显然没有赚到能够维持温饱的钱,而且也得不到任何帮助。但随后的一切却变得更加糟糕,那时麦当娜连最廉价的公寓都住不起了,于是她只能露宿街头;为了避免饿死,她甚至曾吃过在垃圾桶里找到的食物。
至于后来,麦当娜所获得的巨大成功,相信不用我说你也知道。当年露宿街头在垃圾桶里找食物吃的小女孩,现在已经拥有超过5亿美元的巨额资产。
某种意义上,麦当娜就是将自己的身体当成武器进而不断前进的,在她前进的道路上,有很多帮助过她的男人,也有很多爱过她的男人,但后来都被她抛弃了。
麦当娜总是会像丢垃圾一样抛弃那些对她来说不再有利用价值的男人,哪怕她曾经深爱过他们。这并不意味着麦当娜冷酷无情、没心没肺,因为如果她想继续前进,并且变得越来越强大,就必须这样做。被麦当娜淘汰的经纪人巴博恩曾这样说道:“麦当娜是一块海绵,她总能把你吸干。一旦你变得没用了,她就会把你一脚踢开,去寻找新的猎物。”

如果一个女人将自己的身体当成是一件武器,也许有人就会说:这样做等于是将自己的身体“工具化”了。关于这一点,台湾女性学者何春蕤曾这样剖析道:“……‘女性身体的工具化’听起来是个令人气愤填膺的说法,但是,工具化有它另一面的解放意义需要我们去开发扩散。例如,身体不再是家族血脉所寄,而被视为可以切割出卖的东西时,女人才会肯外出工作出卖劳力或脑力,而在其中形成独立自主的物质基础;身体(性)不再是女人生命价值之所寄,而被视为可以由主体决定如何使用的东西时,女人才不会因为身体的一时闪失或暂时交付,而觉得必须和某个男人厮守一生或者活在一生的羞愧中……”
德国著名导演法斯宾德年轻时很穷,为了赚钱进而完成导演专业的学业,他曾经做过男妓,他这样做是不是等于将自己的身体工具化了呢?
那些为了某项工作而出生入死的男人,如果他们只是表面上为了所谓的“光荣使命”,但实际上只是为了谋求社会财富和社会地位,他们这样做是不是也等于将自己的身体工具化了呢?
还有那些为了应酬几乎天天都要陪别人喝酒的中国男人,他们喝坏了肝,喝坏了胃,甚至喝得连自己的小弟弟都不太好用了,他们的身体是不是也已经工具化了呢?
男人可以将自己的身体工具化,女人当然也可以这样干了。
如果一个女人将自己的身体工具化是一个主动选择的结果,而不是被工具化,那她的这一选择也可能成为实现精神独立和财务自由的一条路径。

有些女人天生就拥有如女王般的身体,但她们却活得就像肉鸡一样,只能任由社会宰割。由此可见,对于一个女人来说,身体是很强大的武器,而比身体更强大的武器是思想。正如那句著名的电影台词所说的那样,思想是刀枪不入的。
尤其是坏女人的思想,它能让一个女人拥有越来越强大的气场,直至拥有女王气场。
在那部多年前曾烂大街的电视剧《奋斗》中,有这样一句台词我一直记得:“坏事就是你怎么忘也忘不了的事。”
其实坏女人也是一样,在我看来,坏女人就是男人死都忘不了的那些女人。
当然,这里所说的坏女人的“坏”不是违法犯罪,更多的只是离经叛道,特立独行;或者就是不想自欺欺人,只想活出一个宁静超然、无忧无惧的真我;稍微狠一点的就是很会耍手段,善于表演、布局、勾魂和偷心。
其实一个女人只要足够勇敢,并且对自己绝对诚实,她的性魅力和气场就会直线上升。而一个性魅力和气场都很大的女人,其私生活必然丰富多彩,而她也会因此成为某些人眼中的坏女人,由此可见,这种敌视的背后隐藏的其实是我们常说的羡慕嫉妒恨。

女人有这样一种天生的优势,即她们拥有与生俱来的沟通能力和社交能力,她们更擅长处理各种人际关系,这是一种基因本能。因为在原始社会,当时人类是群居的,男人们整天都要外出打猎,他们在打猎的时候很少说话,因为这会把猎物吓跑的,所以男人的沉默是生存的需要;而女人们则留在洞穴里,她们会说很多话,想办法和周围的人建立很亲密的关系,这同样是生存的需要。你也知道,在现代社会中,沟通能力和社交能力有多重要,从这个角度来看,女人其实比男人更能适应现代社会。
如果你很年轻且一无所有,如果你决定做一个坏女人,除了要好好利用你的沟通能力和社交能力之外,你同样需要用好你的头脑和你的心。说到这儿,我想起了在一个ID为“微博的艺术”的微博上曾看到这样一段话:“女性可能有一颗高创造力的大脑,唯一的缺憾是女人常受困于自身的‘繁殖本能’,容易纠缠在‘狭小’的格局里。女人们如果拥有了更广泛的兴趣爱好与知识结构,她们取得成绩就易如反掌,偶尔一个极聪明的女性有时能抵得上好几个男性。女人真的智慧起来男人摸不到边……”
聪明的头脑当然很重要,但更重要的是你的心的格局。一个女人如果拥有很聪明的头脑,但她的心的格局却很狭小,那她就有可能越活越纠结,或者是越活越痛苦。
如何拥有一颗大格局的心?你可以多读一些拥有一颗大格局的心的人写的书,多结交一些拥有一颗大格局的心的人,主动地去多经历一些事儿……
总之,你一定不能完全屈从于你身上的“繁殖本能”,因为那是一种动物性本能,而你是一个人。

只要你稍微观察一下你身边的世界,你就会发现好人大多都没什么好报,尤其是那些所谓的好女人,她们中的很多人都在过着无聊无趣的生活,而那些有能力、有资本帮助你不断前进的男人十有八九都不是什么好男人。
另外你还会发现,很多所谓的坏女人偶尔好一下可能马上就会魅力倍增,而很多所谓的好女人偶尔坏一下则可能立刻形象全毁。
其实在这个世界上,很多所谓的坏女人反倒更有真性情,更有勇气、活力和创造力,她们敢于打破世俗常规,她们善于运用各种手段,所以她们更有可能成为情场和职场里的女王,更有可能实现精神独立和财务自由,进而可以泡有趣的男人,过有趣的生活。而很多所谓的好女人则过着自欺欺人的生活,因为伪善、软弱且枯燥无趣的性格,使得她们不得不面对这样一种无解的困境:她们离了男人就活不了,而男人却觉得和她们一起生活还不如去死。

(本文摘自博主新书《论文艺女青年如何培养女王气场》,长江文艺出版社2013年7月出版)]]>
http://dingxiaoyun555.blog.163.com/blog/static/1218700502013679287987 70 http://dingxiaoyun555.blog.163.com/blog/static/1218700502013679287987 Sun, 7 Jul 2013 21:28:07 +0800 2013-07-07T22:07:13+08:00
<![CDATA[只有自由相爱时的吉光片羽是真的]]> http://dingxiaoyun555.blog.163.com/blog/static/12187005020135193049859 在网上经常会看到一些奔三的女人装萝莉,但看到真正的萝莉为了爱而做一些她们当初曾做过的、或是当初想做却不敢做的蠢事的时候,她们要么变得道德感特强烈,要么变得极其恶毒且苛刻。
某种意义上,上述两种面目其实是一枚硬币的前后两面。
有一天,她们可能会发现,那些为爱而做的蠢事是她们此生最美的记忆……
什么都是假的,只有自由相爱时的吉光片羽是真的。
很多女孩直到分手的那一天才发现,原来自己是用一公升的眼泪换得了对方一公升的精液……
开个玩笑啊,我相信她们从那些最终分手的爱情中还是能得到其他东西的,例如上文所说的那些吉光片羽,例如心智的成长……

一位美国作家曾写过一本书,书名大概是《那些人生中最重要的道理我在幼稚园里都学过了》,因为书名很长,记得不太准确,大意如此吧。
在幼稚园里的确能学到很多人生中最重要的道理。只是对于年轻女孩来说,恋爱是一所大学。因为恋爱使人进步。因为恋爱是一场心的革命。在恋爱中你能不断成长,渐渐进化成一个内心强大的女王。
弗洛伊德曾说:“在某一类情况下,爱无非是性本能以直接的性满足为目的的对象性情感贯注。当目的达到后,这种情感贯注便消失了。这就是人们所说的普通的、感性的爱。”
除了这种普通的、感性的爱,还有另外一种很特别的爱,这种爱更深刻、更深沉,这种爱会让你变得更勇敢,对自己更诚实。
或者我们也可能这样说,这种爱其实是一种爱的能力。

一个女人要爱过多少男人,才能变成一个女王?答案在风中飘……
这个问题肯定是因人而异,没有标准答案的。有人说一个女人至少要跟几十个男人恋爱过,才能修炼出魅力和气场。
这听上去有些夸张,但女人的确只有多恋爱几次才能真正成长。当然,前提是你没有因为曾受过伤害就封闭了你的心。
另外多恋爱几次,你看男人的眼光也会变得更准一些,相对更容易认清谁才是你的真命天子,进而将其泡到手。

想一想,人类成年以后,其内心都有丑陋肮脏的一面。人类都是虚荣懦弱且患得患失的,可一旦身陷爱情之中,原本那么自私的人类,却可以为了爱,去做一些看上去很高尚甚至可以称之为伟大的事。
爱情能让一个人变得更有趣,更强大,更有人格魅力。
当然,肯定也有人会说爱情会让一个人变得更无趣,更怯懦,直至魅力全无。说到这儿我想起了辜鸿铭曾写过这样一首小诗:“当初你不爱我,你的声音是那么甜美,你的眼里充满了笑意,你的双手纤细温柔。后来你爱上了我,你的声音变得苦涩,你的眼里充满了泪水,你的双手僵硬干涸。这是多么的令人悲伤,因为爱使你变得不再可爱。”
为什么爱有可能会让一个女人变得不再可爱?我想这可能是因为这个女人本来就是一个很无趣且不够独立的人,因为缺乏安全感和归属感,所以她想以“爱”的名义控制、苛求、榨取对方,而其手段则可能是哭和闹,甚至还会假装寻死觅活,当她这样做了,她自然会变得不再可爱。但问题的实质就是,这个女人的爱并不是真正的爱,而是一种徒有虚名的爱。
真正的爱不会让一个女人变得不再可爱,只有徒有虚名的爱才会让一个女人变得不再可爱。

当然,你还需要了解男人的本性,即使你的爱是真正的爱,即使这爱已经让你变得更可爱,你深爱的他依旧有可能对你负心。
因为男人这动物的基因设置决定了他们的身心不可能同时且长久地忠诚于一个女人,男人至多也就能做到长久地迷恋一个女人,或是因为和一个女人的爱情变成了难舍的亲情和友情所以长相厮守。
男人会长久迷恋什么样的女人?说到这儿想起木心说过的一句话:“偏偏是你的薄情,使我回味无尽。”这就是男人,男人只会长久迷恋那些永远无法真正追到手的女人。
当然,你也可以换一个思路,即为什么非要被男人这动物迷恋呢?那感觉就像不怕贼偷就怕被贼惦记着。
总想着如何取悦男人,结果却委屈了自己,把自己的人生搞得很无趣,并因此老得飞快。所以与其花心思取悦男人,还不如把心思花在如何让自己的生活变得更有趣这件事上。如果你因此变成了一个有趣的女人,那些好玩的人、事、物自然会被你吸引过来,例如能让你整个人宛如新生的的爱情,例如可以持续一生的友情,例如可以来去自由的生活。


(本文摘自博主新书《论文艺女青年如何培养女王气场》,此前在豆瓣阅读上架的同名电子书是本书的一小部分内容,大概3万字,而此次由长江文艺出版社出版的纸质版全书有8万多字 )
]]>
http://dingxiaoyun555.blog.163.com/blog/static/12187005020135193049859 3 http://dingxiaoyun555.blog.163.com/blog/static/12187005020135193049859 Wed, 19 Jun 2013 15:00:49 +0800 2013-06-20T14:37:38+08:00
<![CDATA[痴情是一种心理疾病]]> http://dingxiaoyun555.blog.163.com/blog/static/12187005020130623013977 这几天读胡适写的《中国禅学之发展》,胡适在讲解印度禅的方法时,他说印度禅的第二个法门是"不净观"。随后胡适这样解释道:"所谓'不净观',就是用智慧想到一切都不干净。譬如当我们想到某某漂亮的小姐的时候,我们可以想到她身上如何的不洁净,鼻子里都是鼻涕,嘴里都是唾沫,肚子里都是腥血不洁之物;并且到她死后,桃色的脸庞也瘦成白皮夹腮了,乌云般的头发也干枯了,水汪汪的眼睛也陷落了;到了尸体烂了之后,更是怎样的腐臭,怎样的变成骷髅。如此,我们也就不想她了。漂亮的小姐、金钱、地位,都是如是观,自然都会消除净尽。"

胡适的这段文字写得还挺生动的,只是在我个人看来,胡适说的这个办法不太管用。

那种因爱恋而相思的痛苦,我相信你肯定经历过,那是一种求生不得、求死不能的感觉。

在我很年轻的时候,我也搞不明白为什么爱情会让我痛苦得想要自杀。现在的我,倾向于认为爱情的痛苦主要源于基因设置的诡计。这就好像人类爱情中的很多行为,其实都挺盲目而机械的。例如一个女孩同时被三个男孩追求,一个很英俊,一个很强壮,一个很幽默。最后,这个女孩选择了三个男孩中最有钱的那个。又例如一个男孩对三个女孩有好感,一个很温柔,一个很聪明,一个很有个性。最后,这个男孩决定去追三个女孩中胸最大的那个……

上面这段话多少有开玩笑的成分。爱情要是真这么简单就好了。

有时想想,明明是一种混杂着纯真、世故、虚荣、欺骗、自欺、性欲、占有欲、自我牺牲欲、控制欲、表演欲、施虐欲、受虐欲等等等等的复杂情感,却被人类称之为“爱情”……

还有一些时候,我会认为性欲很纯净,反倒是爱情,有可能变得特肮脏,特残酷。

只是肮脏残酷的爱情反而可能更迷人,更能让情天欲海中的痴男怨女深陷其中,不能自拔。

如何让一个男人爱你一生?让他与你经历一次肮脏残酷的爱情,挑逗他,满足他,拒绝他,温暖他,玩弄他,虐待他,给他戴几顶绿帽子,然后无情地抛弃他。这样他就会爱你一生,就像电影《如果爱》中金城武对周迅那样念念不忘。只是,希望自己被某人惦念一生,这事有何意义?只是极度自恋而已。而所谓的痴情,很多时候只是一种心理疾病。
]]>
http://dingxiaoyun555.blog.163.com/blog/static/12187005020130623013977 21 http://dingxiaoyun555.blog.163.com/blog/static/12187005020130623013977 Sun, 6 Jan 2013 14:30:13 +0800 2013-01-06T14:30:13+08:00
<![CDATA[那些只会性交不会做爱的中国男人]]> http://dingxiaoyun555.blog.163.com/blog/static/121870050201232981238387   今天下午读完了娄烨的电影《花》的原著小说,感觉挺唏嘘的。这是一个去法国留学的北京电影学院女教师和一个法国社会最底层的市场搬运工之间的爱情故事,看到这样的题材,估计肯定有很多爱国愤青狂骂本书,或是骂根据这本书改编的同名电影。就好像前一段时间在豆瓣上看到一个帖子,说老外在中国泡妞儿太轻松了,然后列举了一大堆事例,下面也是一堆人疯狂谩骂跟老外轻易上床的中国女人。
  说实话,虽然作为一个中国男人,我有时也会嫉妒那些在中国几乎夜夜做新郎的老外,但我肯定不会因此去骂那些跟老外上床的中国女人。
  那些看老外在中国夜夜做新郎就狂骂中国女人的人,其实你们也可以去泡外国女人啊,没人拦着你们。
  也许有人会这样对我说:废话!你以为我不想泡外国女人吗?你以为外国女人是那么好泡的吗?
  外国女人很难泡吗?看外国的电影或小说,好像也没那么难泡啊。只是对于很多中国男人来说,外国女人的确是可望不可即的。
  说到这儿我想起了杜拉斯写的《情人》,众所周知,这是一个华裔富二代和法国小女生之间的爱情故事。
  我估计现在很多中国富二代去欧美留学时应该也没少泡洋妞儿(关于这一现象的爱情动作片越来越多了)。另外曾看过一篇文章说最近几年,中国工人去非洲工作,搞大了很多非洲少女的肚子……
  很多时候,男女问题说白了就是经济问题。我们可以设想一下,如果中国的人均收入是美国的十倍,中国男人去美国泡妞儿肯定会变得比现在容易很多,而美国男人到中国泡妞儿则会比现在难很多。
  可惜,这样的设想在未来一百年内可能无法变成现实。
  说到这儿我又想起有人在微博上曾对我说,华人男演员去好莱坞拍电影,好莱坞是不会赋予他们扮演的角色以性魅力的。
  我想了想,成龙,李连杰,还有前年去美国拍了部《青蜂侠》的周杰伦,还真就是只能在好莱坞电影中傻乎乎地打来打去。
  
  当然,男女问题肯定不只是经济问题,它同样也是文化问题和本能问题。
  看过一个上海女孩儿写的帖子,大意是说跟外国男人上过床之后,才知道什么是“做爱”。
  可想而知,这样的帖子肯定会招来一片骂声。只是我们却很难否认这样一个事实:在中国,的确有无数只会性交不会做爱的男人。
  为什么会这样?首先这应该是一个文化问题。
  在西方,有骑士精神这样一种传统,骑士精神在某种程度上塑造了现代西方的民族性格,而骑士精神是讲究尊重女性甚至崇拜女性的。
  而在中国呢,先是孔子说“唯小人与女子难养也”,也许这句话只是孔子作为一个男人发的一句牢骚,但它似乎成了中国古代男人歧视女性的“理论依据”。然后就是“红颜祸水”或“男尊女卑”这样的糟粕思想大行其道。说到这儿我想起前几天听别人说,泰坦尼克号沉没时船上有几个中国男人跟女人和孩子争夺逃命机会,然后成功逃生。对此有西方人给予了“理解”,西方人说在中国,在生死攸关的时刻,男人可以最先逃生,然后才是孩子和女人,因为男人在中国的地位很高。
  
  关于女性崇拜,在西方有很多这样的神话、传说或故事,即男主人公历尽千辛万苦,冒着生命危险,翻雪山,过大河,斩恶龙,才能赢得某个女人的芳心。
  而中国的很多神话、传说或故事,反倒是女主人公历尽千辛万苦,冒着生命危险去追求一个很普通的男人,例如《聊斋》里的很多故事,董永和七仙女的故事,以及《白蛇传》等等。
  另外某些女性因天性善良或一种神秘的神性跟很多男人上床(该怎么形容这种神性呢?也许它有些类似于“众生饥渴,我看在眼里,疼在心里”这样一种心理吧),对于这样的女性,在西方肯定也会被一些人骂,但肯定也会有很多人认为她们是如歌德所说的那种可以引领人类前进的“永恒之女性”,给予她们尊重乃至崇拜。而在中国呢,这样的女性估计会被骂死吧。
  一种不尊重女性、拼命压制女性本能的文化必然会变得衰弱腐朽,而这样的文化也会让一个男人乃至一个社会变得越来越落后,越来越疲软无力。
  说回到《花》这部小说,这个爱情故事写得挺真实的,这本小说的作者完全没有掩饰自己的“贱”(反思了一下,“贱”这个词不太好,因为与“贱”相对的是“贵”,“贱”这个词同样是源于对于女性身体的物化,但因为没有找到其他更合适的词,只能用“贱”这个词了,还好“贱”这个词应该也衍生出一些其他的涵义,例如情欲本能的释放),这可能是因为真爱最大的特征就是让人变得很贱。看过一些女性作者写的三流爱情小说,这些女性作者在恋爱的时候,还是会特要脸,从来不会为爱犯贱,这只能说明她们的爱根本不是真爱,而是虚假的爱。
  跟真爱相比,脸算什么呢?所谓爱的勇气,很大程度上就是敢于犯贱的勇气,不敢犯贱的人活该寂寞至死……
  当然,人类不是没有真爱就不能活的动物,更何况真爱还有可能把人搞得求生不得、求死不能,所以很多人像逃避自由一样逃避真爱。这是个人选择问题,无论如何选择都无可厚非。只是敢于追求自由和真爱的人可能会活得更精彩一些,更尽兴一些。
  上文已经说过了,《花》这部小说讲述了一个去法国留学的北京电影学院女教师和一个法国社会最底层的市场搬运工之间的爱情故事。这个名叫马蒂欧的市场搬运工来自法国农村,按中国人的说法,他是一个“农民工”。只是在法国没有这样一种说法,因为法国没有中国那种臭名昭著的户籍制度,所以马蒂欧应该算是一个法国蓝领工人吧。
  这个马蒂欧小学没毕业,在巴黎的一个市场从事重体力工作;而书中的“我”,一个名叫花的中国女人则是北京电影学院的教师,在法国攻读一种被一些人称为“预备博士”的电影DEA学位。
  两个人属于完全不同的两个阶层。你可以想象一下,假如在中国,一个被称为“农民工”的年轻男人追求一个北京电影学院教师,这样的事会被如何看待?
  这是我很欣赏书中的那个名叫花的中国女人的一个原因,她是在用一颗开放的心去爱,她的爱跨越了国界、种族和阶层。
  当然花之所以会爱上马蒂欧,同样也是因为后者有可爱之处,首先后者拥有一张如天使般漂亮的脸(娄烨在同名电影中找的那个扮演马蒂欧的男演员的脸明显不够天使),其次这家伙的老二貌似很粗很大。这两个可爱之处算是先天的优势吧,这两种优势可以刺激女性的爱欲本能。
  马蒂欧后天的优势有什么呢?虽然这家伙身处法国社会最底层,但在某种程度上,他身上有西方男人特有的绅士精神,西方男人的绅士精神是骑士精神的一种演变。何谓绅士?最常听到的定义是这句戏谑之语:所谓绅士,就是有耐心的狼。这句虽是戏谑之语,但也有值得反思之处,即想成为绅士,就要同时拥有耐心和狼性。
  先说说耐心,在爱情世界里,很多时候,男女之间的性和爱都不太合拍。例如在性交时,女人可能刚刚感觉有点爽,男人却在一哆嗦之后完事儿了。又例如恋爱时,男人猛烈追求女人,女人最初可能会表现得矜持且谨慎,后来女人彻底深陷爱情之中,男人可能已经准备变心了。也许你会问,这跟耐心有什么关系呢?是这样的,如果一个男人是有耐心的绅士,他在性交时会充分尊重对方的感受,该温柔缓慢时温柔缓慢,该野蛮快速时野蛮快速,与此同时做足前戏和后戏,充满耐心地慢慢点燃女性慢热的身体,这样的性交就不是单纯的性交了,它可以称之为“做爱”了。而在恋爱的时候,有耐心的绅士会不断地向女人献殷勤。向女人不断献殷勤是西方骑士精神的传统,也是现代绅士的拿手好戏。顺便说一嘴,在西方社会,男女离婚后,男人向女人长期支付赡养费,这应该也是绅士精神的一种体现。从这个角度来看,中国的《婚姻法》貌似很缺乏绅士精神。
  说过了耐心,再说说狼性。绅士精神中的狼性,其源头应该是骑士精神中的尚武精神。这种尚武精神虽然有其野蛮的一面,但也有着这样一些具有理想主义色彩的原则:保护弱小和无助的人,勇敢地对抗强暴和邪恶,尊重女性,绝不伤害任何女性等等。
  胡适在他1926年记的一篇日记中曾记述了孟真写给他的一封长信中的这样一段话:“我方到欧洲时,是欣赏他的文明。现在却觉得学欧洲人的文明,甚易学而不足贵;学欧洲人的野蛮,甚难学而大可贵。一旦学得其野蛮,其文明自来;不得,文明不来。”胡适说“此话甚透辟”,这段话的确很值得玩味。
  我想孟真所说的“欧洲人的野蛮”和西方骑士精神传统多少有些关系吧。
  另外西方人具有理想主义色彩的尚武精神会使得西方男人更热衷于体育锻炼,努力锻炼出健美的身体,一方面是为了更有力地参与社会竞争,另一方面也是为了吸引、取悦女性。反观中国男性,尚武精神基本上丧失殆尽,大多数中国男人对锻炼健美的身体进而吸引女性这件事没什么兴趣,他们觉得只要自己有权或有钱就可以吸引女性。男性缺乏体育锻炼,整个人会缺乏热情和活力,缺乏最纯粹的性魅力,与此同时,其性能力可能也会在中年之后急速衰弱,甚至早早失去性能力。
  在中国,有很多男人,除了床上运动之外,几乎什么运动都不做,这也使得他们在做床上运动的时候越来越力不从心。
  说回到《花》这部小说的男主人公马蒂欧,这家伙有着近乎于无赖的性格,但正如上文所述,在某种程度上,他身上有西方男人特有的绅士精神,我想这应该也是女主人公花会一度爱他爱得死去活来的一个原因。
  另外马蒂欧这家伙在追女人时从来不会吝惜自己的甜言蜜语,他会喋喋不休地对女人说那种在旁人听来近乎于肉麻的情话,不停赞美对方,而大多数中国男人都不善此道。
  女人是这个星球上最需要赞美的动物,尤其是在床上。大多数女人都对自己的身材缺乏自信,举一个例子,拥有全球最美臀部的詹妮弗·洛佩兹曾自曝她更喜欢关灯做爱,因为她同样对自己的身材缺乏自信。
  在床上,男人的赞美不仅能让女人变得更自信、更妩媚,也能让女人变得更动情,进而分泌出更多的阴道润滑液……
  在21世纪的今天,西方男人的人均收入比中国男人高很多,这无疑是西方男人更抢手的主要原因之一。但另一方面,但西方男人更“狡猾”,他们知道女人更喜欢被如何对待,更喜欢听到怎样的赞美,更想要什么样的性和爱。
  在我上学的时候,我被青春期特有的旺盛性欲折磨得生不如死的,那时我误以为女孩儿和男孩儿一样,也是满脑袋想的都是性,这让我一度在追女孩儿时屡战屡败(当然,这肯定也跟我长得不帅、个儿也不高有很大关系)。后来我渐渐明白,女孩儿更想要的是爱,准确地说是被爱。女孩儿的性欲远没有男孩儿那么强烈,但很多善良且聪明的女孩儿还是会用性来取悦男孩儿,而很多男孩儿却不会用爱来取悦女孩儿。现在看来,这不仅是一种自私的表现,同样也是一种愚蠢的表现。
]]>
http://dingxiaoyun555.blog.163.com/blog/static/121870050201232981238387 482 http://dingxiaoyun555.blog.163.com/blog/static/121870050201232981238387 Sun, 29 Apr 2012 20:12:38 +0800 2012-04-30T22:23:58+08:00
<![CDATA[《黄金大劫案》:一般一般,内地第二第三]]> http://dingxiaoyun555.blog.163.com/blog/static/12187005020123258254414   今天冒着大雨去看了期待已久的《黄金大劫案》,看完后比较失望。为什么会失望呢?大致有这样两个原因:
  
  首先是故事情节太粗制滥造了。宁浩上两部公映的电影的故事情节还挺精巧的,而这部《黄金大劫案》的很多情节倒是在意料之外,但也在情理之外。尤其是电影的后半部分,有些情节完全就是胡乱意淫。
  
  其次就是宁浩在这部电影里竟然也开始贩卖起民族主义了。在我看来,在21世纪的今天,在电影中贩卖民族主义是很卑劣的一件事。当然,这只是我个人的看法。每个人都可以卑劣行事,只要承担后果就可以了。而且在中国,贩卖民族主义还常常能让一个人名利双收,甚至成为所谓的“国师”。关于所谓的“抗日题材电影”,我最喜欢的是姜文的《鬼子来了》,这部电影彻底超越了民族主义,没有一丁点意淫的成分,它剖析了这个民族最隐秘、最致命的劣根和病灶,可惜这部电影在内地被禁了。作为宁浩的影迷,我当然不希望宁浩继《无人区》之后再拍一部禁片。只是宁浩这次的转向转得太“惊人”了,使得这部《黄金大劫案》竟然隐隐有些“伟光正”的味道了。
  
  这两年内地电影市场越来越好,所谓的第五代导演和第六代导演现在基本上都专心在内地电影市场捞钱了,有这样的想法很正常,完全可以理解。只是众所周知,现在的内地电影市场很畸形,套用一位豆友的比喻,内地电影导演可能同样不得不被3P,即“嘴里含着市场的睾丸,肛门上横着政治的阴茎”。
  
  宁浩算是第七代导演?貌似第七代导演在内地还很不成气候。
  
  原来喜欢看宁浩的电影,原因非常简单,因为他拍的电影很好玩。
  
  前一段时间读杨宪益访谈集,一位访问者发现杨宪益总是把“好玩”这个词挂在嘴边,杨宪益对于一件事物的最高评价就是好玩。
  
  宁浩的喜剧电影好玩吗?一般一般,内地第二第三吧。没办法,好玩的内地电影导演太少了。宁浩的这部《黄金大劫案》虽然拍得挺失败的,但比《举起手来》等诸如此类的纯意淫电影肯定还是好看一万倍左右的。
  
  如果你问我谁是我心目中内地最好玩的喜剧电影导演,其实答案就在本文中。
]]>
http://dingxiaoyun555.blog.163.com/blog/static/12187005020123258254414 9 http://dingxiaoyun555.blog.163.com/blog/static/12187005020123258254414 Wed, 25 Apr 2012 08:02:54 +0800 2012-04-25T08:02:54+08:00
<![CDATA[合餐制相当于你和每位同桌就餐者都舌吻了]]> http://dingxiaoyun555.blog.163.com/blog/static/121870050201212254226361

刚才看到我的一个同学在微博上说跟一群领导去某饭店吃饭,桌上有一道该饭店的招牌菜,因为其他人都是我同学的领导,所以餐桌转第一圈时,他没动那道菜。等转到第二圈,我同学发现那道菜就剩点菜渣儿了。

我同学说的这事儿让我想起我今天上午在思考的一个问题:最近几个月,无论什么东西到了我的宝宝眼前,他是能塞进嘴里的就塞进嘴里,不能塞进嘴里的就用小舌头舔啊舔。我想简单研究一下口欲期,于是看了一篇相关的长文,其大意就是无数中国人都会出现“口欲期固结”的状况,进而从小到老都无法摆脱口欲期人格,此种人格最典型特征就是爱无能,贪吃,无独立人格,喜欢不停地占有掠夺”……

如此说来,我同学的那群领导中的一些人可能都还没有摆脱口欲期人格。

而这也让我开始思考中国人的饭桌上存在着怎样一种不平等。众所周知,中国人吃饭是合餐制。在合餐制的饭桌上,不平等是显而易见的,在这样的饭桌上,大家表面上看似客客气气,但事实却是:谁的权力更大,谁的地位更高,谁就可以更肆意地多吃多占。

从这个角度来看,中国人的合餐制饭桌应该也这个国家所有不平等现象的起源之一呢。

说到这儿我又想起在中国,有些地方还存在着这样一种特别落后的陋习:家里如果来了很多客人,吃饭时,女人和孩子是不能上桌的。

当然,还有一些中国家庭的合餐制餐桌上,孩子拥有着如“小皇帝”般的地位,他们看到自己喜欢吃的菜就猛吃,结果养成了偏食的坏习惯。另外还有很多“小皇帝”在合餐制的饭桌上总是吃得过饱,把自己吃成了肥胖儿,其中有些孩子甚至小小年纪就因此得了糖尿病。

另外中国的合餐制还有一个显而易见的缺点,那就是不卫生,你想象一下吧:合餐制饭桌上的菜和汤里面,满是大家的口水……

也就是说,合餐制相当于你和每位同桌就餐者都舌吻了……

这事儿真不能细想,越想越恶心。

据考证,中国人原来也是分餐制,现在中国的合餐制是从落后的游牧民族那里学来的。

放眼全球,当今世界的现代民主国家十有八九都是分餐制,而搞合餐制的国家十有八九都尚未步入现代民主国家的行列之中。

有人说中餐不适合分餐,对于这种观点,一位名叫王晓华的作家这样反驳道:“日本人的食物有许多类似于中餐,可日本人在明治维新后开始全面推广分餐制(使用公共餐具),在聚餐时不使用公共餐具被视为粗野之举。欧美国家的人普遍以分餐的方式吃中餐,这都说明中餐并非与分餐制不共戴天。”

从王晓华的上述文字中我们也能得到这样的启发,即如果中国官方大力推广分餐制,告知公众在聚餐时不使用公共餐具的行为是一种粗野之举,那分餐制在中国应该也能较快地普及开来。

只是中国官方到目前为止似乎无意推广分餐制这种现代就餐制,是担心分餐制的推广会对中国的GDP产生巨大的影响?还是因为别的什么原因?这我就不得而知了。反正我已经初步打算在我的宝宝上桌吃饭之前,先将我家的合餐制变成分餐制。

某种意义上,吃什么和怎么吃,是可以决定一个国家的命运和未来的,对于个人来说同样如此。

]]>
http://dingxiaoyun555.blog.163.com/blog/static/121870050201212254226361 11 http://dingxiaoyun555.blog.163.com/blog/static/121870050201212254226361 Wed, 22 Feb 2012 17:42:26 +0800 2012-02-22T17:42:26+08:00
<![CDATA[论小三和真爱]]> http://dingxiaoyun555.blog.163.com/blog/static/121870050201211484229720
忽然在想这样一个问题,假如一个女孩的男朋友被小三抢走了,后来她继续纠缠小三的男朋友,也就是自己的前男友,那她这会儿是不是等于也变成小三了?    
对于男人来说也是一样,王菲在《不留》中曾这样唱道:“我把心给了你,身体给了他。”这句歌词是王菲自己写的,你说得到王菲的心的那个男人是小三,还是得到王菲的身体的那个男人是小三?    
所以我想,也许在爱情世界里,根本就没有什么小三,只有妄想占有别人的身体和心的痴男怨女。    
只是,谁又能占有谁的身体和心呢?退一万步说,就算你真能占有一个人的身体和心,这游戏还会有意思吗?你占有这样一个人,对方极度依赖你,用一种充满奴性的方式深深地“爱”着你,这种感情是非常恐怖的,因为它极有可能吞噬你,毁灭你……    
以前我曾说过,万一某人和小三是真爱呢?是不是这就可以被原谅了?后来我意识到,就算是真爱,它也不是什么高尚的概念,它可能只是一种生理反应,即身体在对方信息素的作用下产生的一种化学反应。    
再后来,我意识到还有另外一种真爱,这种真爱一方面是基于如兽性般的生理反应,另一方面则基于人性的人文思想,这两者缺一不可。而关于后者,我个人认为它是不断趋近于知与行的极致的一种尝试,因为这样一种尝试,人类才会变得越来越宽容,人类文明才会不断进步。    
说到这儿我又想萨特在《存在与虚无》中的这段话:“恋爱者不想像人们占有一个物件那样占有被爱者;他祈求一种特殊类型的化归己有。他想占有一个作为自由的自由。”     
在我看来,这段话最接近于我刚才说的另外一种真爱:一方面有基于兽性的占有欲,另一方面又有充满人性意味的美好愿望,即希望对方是“一个作为自由的自由”。    
昨天我在微博上说了这样一段话:男求欢,女求爱,了解了这两点,就能基本了解男人和女人这两种截然不同的动物了。欢与爱之间存在着无数矛盾,但如果没有这些矛盾,人类恐怕早就灭绝了。最美妙的欢与爱不会像天上掉馅饼一样掉在你头上哦,因为最美妙的欢与爱是知与行的极致,为此你需要付出巨大的努力哦……    
如果一个人彻底沉溺于兽性层面的各种欲望,他心中自然满是痴怨和妄想,这会让他的身心囿于自设的囚笼之中,这是人类痛苦的源泉。说到这儿顺便说一嘴,女人总认为男人的“好色”是一种兽性的欲望,却常常没有意识到自己的“贪爱”也是一种兽性的欲望。    
当然,人类无论如何都不能摒弃自己的兽性,否则人类就会灭绝了。正如刘慈欣在《三体》 中所说的那样:“失去人性,失去很多。失去兽性,失去一切。”中国古代的某些“圣人”和统治者倒是联手尝试过让人丧失兽性,但他们更多的是想要被统治者丧失兽性,进而让统治者能够以穷尽想象力的无数种方式来满足自己的各种兽欲。而中国古代的“圣人”和统治者这样做的结果就是,中国这个东方大国一度变得极度孱弱,几乎孱弱到了任人宰割的地步。从这个角度来看,失去兽性,还真是有可能失去一切的。    
对于个人来说也是一样,一个人失去兽性同样也会失去一切的,除非他是想真心皈依某种宗教,或者就是彻底看破红尘了。    
说回到真爱,我曾说过真爱就是希望自己爱的那个人活得更快乐、更自由,并且为此付出实际行动,除此之外都是虚假的爱。另外我在一篇关于《爱情与灵药》的影评中曾这样写道:爱一个人爱到想让那个人活得更自由的程度,是不是还是希望那个人自由地飞走然后还会飞回来?就算那个人不回来,是不是自己也会获得自我牺牲的快感?    
看到这儿,你也许会说,你所说的真爱同样是一种手段,而非目的。你说对了,彻底超越人类自私本性的真爱肯定是不存在的,只有最卑劣的伪善者和野心家才会别有用心地宣扬这种本不存在的“爱”。坦白承认自己的真爱是手段,但却不以这种手段来要挟自己爱的人,或以此强迫对方做自己不愿意做的事,而只是努力让对方能够活得更快乐,更自由。如果有越来越多的人能以这样的态度去爱,去生活,没准儿世界和平就真有希望了。  
]]>
http://dingxiaoyun555.blog.163.com/blog/static/121870050201211484229720 23 http://dingxiaoyun555.blog.163.com/blog/static/121870050201211484229720 Tue, 14 Feb 2012 20:42:29 +0800 2012-02-14T20:43:34+08:00
<![CDATA[关于“大叔”这种动物]]> http://dingxiaoyun555.blog.163.com/blog/static/1218700502012020114353198 亲爱的丁小云先生:
  时间过去很久,再次给你写信。人越成长,生活里各种问题就一样样来。把烦恼抛给你,因为莫名而来的信任,因为没有人可以诉说 也无法开口诉说。
  如所有学生一样,随着毕业季的到来,哗啦啦地投入了找工作的大军,进入了一家公司成了一名小职员,参加工作一年半。
  就这样,我认识了我现在的老板,50岁出头,外籍华人,初次见他,他面试我,印象里是个和蔼幽默的老头,很简短的面试,我被录用了。
  他第一次约我喝咖啡,聊工作,我什么都没想,欣然前往,他问了我的职业规划,对自己的期待等等。他介绍了公司的情况,介绍了他个人的经历,我觉得还蛮好,老板很可亲,聊得也很好。回来的路上,他说,我这样的女孩,需要被保护起来。临下车,他居然笑着问我,say bye bye的时候,可不可以亲我一下。我愣了,一时间,有两种想法:也许,人家国外待很久,礼节性的?另一种想法当然是不好的,我巧妙地化解过去……
  再然后,工作开始扑面而来,工作上,他有向我提要求、也有批评我的时候。在磨合之中度过了半年,期间,他带我见外商、参展、参加公司的聚会……
  我也已经不再去思忖那次索吻。
  时间到了夏天,他约我谈工作,吃饭、喝咖啡,我现在想想,自己有点后知后觉了,他断断续续地介绍自己的经历、公司、工作、喜好……最后,他企图亲我……我被吓到了,果断拒绝,委婉的,理性的……他很尴尬,他说,你也知道的,我很喜欢你……最后,起身,离开,我要打车离开,他说送我回家,说带我出来了,就要把我安全送回去,路上,他安抚我,向我道歉,让我把这忘了。
  从此,开始对他设防,也思考,自己是不是不该再继续在这公司待下去……
  日子一天一天过,工作中,渐渐有了更多了解,毋庸置疑,可以做一家公司老总的人,个人魅力,不可否认,风度翩翩,工作上严谨,性情上,很大男人很绅士。撇开别的看待我老板,是个非常不错的人。
  有时候,他会叫我去听他讲话。我明白,他希望工作伙伴,可以更了解他的脾性、他对事物的要求和标准。他说他喜欢有悟性的、聪明的、有灵性的。他告诉我,他对事对人,还是很有职业性,他说让我以后慢慢验证,他对公司的付出和努力。
  他多次让我用公司的政策去买车,说不希望我每天起那么早来上班,有车,感觉会好一些。带我去金茂大厦,试图给我买礼物,我拒绝了;带我去出差,找我谈话、谈工作,谈自己,谈我……
  我就这么客气地应对着,躲避着。他说如果我们生在一个年代,他一定会追到我做老婆,对他现在的家庭,他是老黄牛式的贡献型人物,他说爱的预感太明显,而我就在他身边,他说,他很想保护我。
     他的老婆是他高中时就开始的恋人,他说,他很给她面子,他老婆感觉很良好。但实际上,他在海外的时候,有过短期的情人。在国内,他说他刚回国的时候,很多女人自己想跟他,但他看得中的,屈指可数。他说自己年少时,因格外调皮但又功课很好,在学校是个风云人物,很多漂亮女孩和他玩在一起,他说他18岁开始谈恋爱,他说很多人在看着他和他女朋友能走多久,他硬是把她变成了自己的老婆。而且,至今为止,就一个老婆……
     他说,他是有梦的人……他说,他外面看来,是摆得很正的人,事实上也是摆得比较正的……
     我下面该怎么办?我知道,我应该让自己不同,我的世界,才会不同。
     我害怕这样下去,终于有一天会受不了这人的温情脉脉,万一,也许,日久,会生情呢?
  该何去何从很困惑,离开这张大网,重新去找份工作,重新开始?

                                                                         M


------------------------------------------------------------------------------------------------------------------


M你好:
不好意思,收到你的信已经有段时间了,今天才回。回信前再次看完你的信,我就在想,你给我写信其实就是想倾诉一下吧,也许你心里早就已经有答案了。

我始终认为,关于个人情感的问题,问谁都不如问自己的心。但既然已经决定给你写回信,我总得说点什么,那我就简单帮你分析一下老男人这种动物吧。

很多年前,总能听到有人说这句俗语:老牛吃嫩草。但现在,“嫩草”吃“老牛”的情形越来越常见了。现在总能听到一些很年轻的女孩说我只喜欢老男人,不喜欢和自己同龄的年轻男孩,因为后者太不成熟了。

这几年,老男人通常会被称为“大叔”。而且现在由大叔和美少女主演的影视作品也越来越多了,这样的影视作品会让两类人产生角色代替的快感,老男人们会幻想自己“一树梨花压海棠”,小女生们则会幻想“大叔底下好温暖”……

话说年轻女孩更喜欢大叔真的只是因为年轻男孩太不成熟了?从表面上看,这是个情感问题,但实际上,它更有可能是一个经济问题。在很多喜欢大叔的年轻女孩的潜意识里,可能都会有这样的想法:大树底下好乘凉。

前几天我写了这样一个段子:她众里寻他千百度,蓦然回首,那人五十还是处……

年轻女孩会喜欢这样的大叔吗?答案不言而喻。当然,如此极端的例子肯定很少见。某种意义上,钱越多,性体验就越多。但考虑到男人的性能力会随着年龄的增长不断下降,年轻女孩喜欢的,多半还是那种相对比较有钱且看上去不太花心的大叔。关于女人喜欢有钱的男人这件事,我从来不会对此进行道德评判,我一直都说女人喜欢有钱的男人是天经地义的一件事,这是一种基因的本能,女人需要足够的资源来保证自己的孩子能够健康成长,而有钱的男人能相对更好地做到这一点。

有时想一想,男人为了射一下爽几秒,可谓做尽天下蠢事。女人会为了什么做尽天下蠢事?想来想去,答案有两个:一是为了被爱,二是为了购物……

绝大多数年轻男人总是火急火燎地想跟女孩上床,很多老男人却是一副无欲则刚的样子,这使得他们看上去似乎比年轻人更聪明一些,也让女性觉得他们相对更可靠一些。殊不知,老男人的聪明和可靠可能只是因为他们的荷尔蒙日益衰败,他们的不应期也变得越来越长了……

一个留学日本的朋友跟我说,很多日本大叔在公司里感到很压抑,回家也感到很压抑,于是他们会在上下班的路上放纵一小会儿,在公交车或地铁上骚扰女性,他们就是传说中的电车痴汉。另外我曾经看过一个视频,一位北京大叔在四号线地铁里旁若无人地、还带舞蹈动作地唱《隐形的翅膀》,感觉这个比日本的电车痴汉更荒诞一些……

年轻男人和老男人,谁更蠢一些?因为中国从古到今,话语权基本上都是被老男人把持着,所以老男人认为年轻男人更蠢的看法被广泛传播。在中国,老男人总会这样自吹自擂:我走过的桥比你走的路还长,我吃过的盐比你吃过的米还多。但事实上,我在这个国家见过的很多老男人,他们都蠢得不可救药了,他们同时拥有压迫者的口气和被压迫者的生殖器,他们所谓的“人生智慧”,不过是一些关于如何蝇营狗苟地活得更久的“人生智慧”。

年轻男人的蠢,是一种生机勃勃的蠢;而老男人的蠢,却可能是一种死气沉沉的蠢。

当然,肯定还有少数老男人,他们掌握着财富或权力,他们看上去很聪明的样子。例如你的老板就是这样的老男人,看你的描述,你的老板还挺有绅士精神的。当然,关于绅士,曾有人这样剖析道:所谓绅士就是相对而言更有耐心的狼。

而关于绅士精神,前几天我在微博上说过的这样一段话:对一个被自己约出来的女性说“我可以吻你吗”,很多好男人最喜欢这样问,这反倒是没有绅士精神的一种表现,因为这等于是让女性来承担让情感关系更进一步的责任。真正有绅士精神的坏男人会直接将对方按在墙上一顿强吻,这才是对对方最好的尊重……当然,前提是男人要确定对方对自己至少有点意思……

你的老板先是向你索吻,半年后,他才试图强吻你。从这件事能看出,他的确一头很有耐心的狼。都说老男人陷入情网,就像老房子着了火,但你的老板似乎还挺理智的。但也许在他看来,他和你在一起的那些言行已经是丧失理智的表现了?

关于爱,我一直都认同张爱玲的这句话:“爱就是不问值得不值得”。在我看来,不问值得不值得几乎可以算是检验是否是真爱的唯一标准。当然,就算是真爱,它也不是什么高尚的概念,它可能只是一种生理反应,即身体在对方信息素的作用下产生的一种化学反应。

你说你害怕对这个老男人日久生情,要真是生情了,问题倒也简单了,因为那时你就不会如此纠结,不会不断问自己到底值得不值得了。既然你现在还没有生情,我还是句话,问谁都不如问你的心。顺便说一嘴,无论是在情场还是在职场,都不要太拘泥于世俗道德,我不想跟你说什么被世俗道德拘泥住的人都是庸人等诸如此类的话,只是如果被世俗道德彻底拘泥住了,很容易成为那种只能任由社会宰割的“好女人”倒是真的。

                                                                               丁小云]]>
http://dingxiaoyun555.blog.163.com/blog/static/1218700502012020114353198 19 http://dingxiaoyun555.blog.163.com/blog/static/1218700502012020114353198 Fri, 20 Jan 2012 11:43:53 +0800 2012-01-20T11:43:53+08:00
<![CDATA[民主是一种生理需要]]> http://dingxiaoyun555.blog.163.com/blog/static/121870050201201885921444

原来总说“娱乐至死”什么的,其实换个角度来看,娱乐化也是可以推动民主的。假如电视、杂志、报纸这样的媒体可以像它们现在报道娱乐圈和足球圈一样报道政治圈里的那点事儿,那中国想不民主都很难。为什么内地现在有那么多关于微博的管理条例?肯定也有这层原因在里面,你看那些社会各界名人要是上了电视,他们会嬉笑怒骂地畅所欲言吗?就算他们这样做了,编导肯定也会后期加工的。但你看他们中的很多人在微博上都变成了什么样子?这些人整天用戏谑的态度调侃政治,调侃官方意识形态,就像他们调侃影视明星和足球明星一样。虽然他们可能也是一些既得利益者,但他们却要表现出很有良知的样子。我不想说这只是一种表演,因为这同样有可能是基于一种很真诚的直觉,一种要说人话、做人事的直觉。

 

我反思了一下,我从小到大之所以一看到官方意识形态的东西就反胃,还有这样一个原因,那就是我父亲在家里也会用带有官方意识形态色彩的那一套道德说教来教育我,但他却只能做到言传,却无法做到身教,例如他嘴上说什么要艰苦奋斗,实在上却过着吃喝嫖赌的生活,另外他还有一个上了锁的小抽屉,里面装的全都是他珍藏的录像带,录像带里都是一些欧美爱情动作电影。我记得我上大学时还写过一首诗,大意就是像我父亲这样言行如此分裂的男人真像这个国家呀。

 

现在我已经可以理解我父亲了,我想他小时候肯定被禁锢得更厉害,所以当他有了点钱之后,他会加倍弥补自己。还好,他完全不具备自我反省能力,否则他肯定会觉得言行如此分裂是极痛苦的一件事。

 

我父亲开始过吃喝嫖赌的生活是在上个世纪90年代,现在再看这个国家的那个时代,会发现那就像一场有门路的人瓜分国家利益的盛宴的开始。我父亲那时也曾凭借“敢作敢为”分得一杯羹,前一阵儿我才从我母亲那儿得知,我父亲这一杯羹是如何失去的。我父亲那时认识了一个黑社会大哥,这位黑社会大哥天天拍我父亲马屁,还请我父亲去最高档的色情场所去体验特殊服务。后来黑社会大哥开口跟我父亲借钱,他还为此将他的轿车送给我父亲开,于是我父亲借给了黑社会大哥几十万。后来的某天,黑社会大哥对我父亲说:“这车好像出了点问题,我帮你修修。”结果他将车开走后再也没还给我父亲。再后来,我父亲要黑社会大哥还钱,后者肯定是不会还了。我父亲也不甘心就此被骗,于是就找其做警察的所谓“朋友”帮忙,而警察肯定也不会白帮忙的,他们两头吃,于是我父亲只要回了十万元,然后这十万元很快被他吃喝嫖赌挥霍一空了。后来我父亲又买断工龄,将买断工龄的钱也吃喝嫖赌挥霍一空。如果说我父亲原来勉强算是既得利益者,经过他这几番折腾,他成功地将自己折腾到社会最底层了。

 

如果我说我父亲后来落得这样一个下场主要是被官方意识形态害的,肯定有人会说,那还有一些满嘴官方意识形态言论的人混得风生水起春风得意呢。对于这些人的这种“成功”,我在理性层面上从未羡慕过——这是我最鄙视的一种“成功”,因为在我看来这种“成功”是以阉割掉灵魂的蛋蛋为代价的。就算是潜意识层面,我羡慕的可能也只是有很多年轻漂亮的人跟这些人上床这件事,我不想否认我也有类似的欲望。小时候,我总是接受到这样的教育,说这样的欲望是不道德的,是思想长毛儿了的表现。我用了很多年,读了很多书,看了很多电影,听了很多音乐,这才渐渐和我的欲望达成和解,同时也和一个更真实的我自己达成和解。这就像是一个重新学习说人话、做人事的过程。

 

说到欲望,这就像是一种博弈,这背后可能隐藏着这样的疑问:凭什么只许领导包二奶,不许百姓看毛片儿?话说原来一个所谓的百姓在家里看毛片儿,警察也可以以此作为一项罪名将其抓走的。现在警察基本上不会这么干了,因为大家都在看,警察已经抓不过来了。这算不算是时代的一种进步?我认为这算是。说到这儿我又想起我父亲珍藏的那些爱情动作电影,如果他能在我性成熟之后,很坦诚地和我分享那些爱情动作电影,那他在我眼里就会是一个具有人格魅力的父亲了。某种意义上,学会分享,是变得具有人格魅力的第一步。而在这个国家,特权阶层中的很多人却是恨不得垄断所有一切资源,尤其是年轻漂亮的身体。说到这儿我又想起我上中学时读屠格涅夫的小说《初恋》,当时我就隐隐觉得这其实是一个批判父权的小说……

 

再举个例子,前几天看到一个女性媒体人在微博上说她实在不需要某些“女权工作者”帮她争取一个她用不着的权利,即“合法卖淫权”。我对她说:不知道现在有没有这事儿了,但就在几年前,如果你跟一个异性去宾馆开房,警察可能会突然破门而入,只要你拿不出结婚证,警察就会说你是在卖淫,然后把你抓走……没有孤立的权利,正如没有人是一座孤岛一样,公权力今天可以任意侮辱那些性工作者,明天也可以任意侮辱你……

 

某种意义上,一切专制都是对于身体的专制,所谓思想,它同样也是身体的一种生理功能。从这个角度来看,民主其实就是一种生理需要,它源于自由处置自己的身体的权利。现在这个国家某些掌握公权力的人还在妄想重新拥有对于个体身体的绝对处置权;而作为个体人,要争取的则是对于自己的身体的自由处置权。当然,没准儿有人会说:“我不需要对于自己的身体的自由处置权,因为我要以大局为重。”这种人的人生通常会有这样两种可能,一种是成为在饲养场里被圈养的肉猪,另一种就是成为在饲养场里被圈养的种猪。

 

]]>
http://dingxiaoyun555.blog.163.com/blog/static/121870050201201885921444 6 http://dingxiaoyun555.blog.163.com/blog/static/121870050201201885921444 Wed, 18 Jan 2012 20:59:21 +0800 2012-01-18T21:00:19+08:00
<![CDATA[为拯救地球而穿秋裤]]> http://dingxiaoyun555.blog.163.com/blog/static/12187005020120121636793

当话题渐渐向下半身转移之后,看着桌对面那个已经半醉的女孩媚眼如丝的样子,根据以往的经验,L君知道今晚的性生活十有八九不用自理了。L君心想:一会儿不管是去你家、我家还是如家,或者直接在酒吧的洗手间里解决战斗,我现在这会儿都必须去做一件事……

L君对那个女孩说我去一趟洗手间。在洗手间里,L君先是脱下了自己的长裤,然后又脱掉了自己的秋裤,并将其丢弃在洗手间的纸篓里。然后他穿上长裤,回到了那个女孩身边。

那天晚上,他们是在酒吧洗手间里解决战斗的。战斗结束后,那个女孩对L君说:“咦?为什么这个纸篓里会有两条秋裤……”

我的朋友L君向我转述了上述经历后,他对我说:“看来除了我之外,还有别人也将秋裤丢到那里了……可惜我那条秋裤了,Armani牌的……”

我说:“你就鬼扯吧,Armani牌秋裤?Armani要是推出秋裤了,世界和平就有希望了。”

我的朋友L君是一个时尚编辑,目前单身,按他自己的说法,他已经失恋333天左右了。在这333天,L君看上去过得还挺滋润的,但就是有一点,他愈发意识到,性生活一定不能长期自理。虽说单身男青年每隔几天自理一下性生活有益于个人健康,能有效预防前列腺炎等男性疾病。但就是性生活一直自理实在是很寂寞、很寂寞的一件事,所以L君每到周末,他都会强迫自己走出家门,在北京的黑夜里四处猎艳。

按说L君也算是混北京时尚圈的,我们都知道,时尚人士据说都是不穿秋裤的。L君是南方人,他刚来北京那年,北京最冷那阵儿,他也曾坚持不穿秋裤,结果被冻得生不如死。后来,L君决定不硬抗了,这些年他都会穿秋裤过冬。而L君之所以会在ONS之前偷偷丢掉自己身上的秋裤,则是因为这样一次惨痛的经历:那次他和一个陌生女孩去酒店开房,一番激情法式热吻之后,两人滚到了床上。那个女孩火急火燎地解开了L君的腰带,然后她就笑喷了,因为她看到了L君长裤内的那条紧身秋裤。那一夜,L君深刻地明白了,原来床上的笑场是勃起的大敌……

如有美腿,勿穿长裤,很多美女都是这句话的信徒。每次看到那些短裙美女在北京冬日的寒风中瑟瑟发抖,涕泗横流,我就特想把我的秋裤脱下来给她们穿上。

为什么现在有这么多中国年轻人如此嫌弃秋裤?这股风儿应该主要还是从西方那边儿刮过来的。例如中国的一位“美女作家”曾这样说道:“天啊!我实在想象不出冬天还要穿秋裤,在欧美上流社会是从不穿秋裤的。”对于她的这句话,有人这样揶揄道:原来不穿秋裤就算是上流社会的入场券了。

在微博上曾看到一个女孩儿说了这样一段话:“出门有车,回家有暖气,进公司有空调。饭店酒店也都不冷。这样过冬我甚至可以一直穿丝袜短裙,所以秋裤不秋裤的,不是时尚问题,而是经济问题。”

的确,秋裤问题其实就是一个经济问题。但与此同时,它还是一个环保问题。

为什么很多北美人反对消减碳排放量?我个人认为有这样一个原因,消减碳排放量就得在冬天降低室温并且少开车,这使得他们为了御寒就必须穿上秋裤,而这就等于要了他们的亲命了。从这个角度来看,穿秋裤其实是特环保的一件事。所谓环保即时尚,如果穿秋裤也能变成一种风靡全球的时尚,以后像我的朋友L君这样的时尚人士在酒吧找到ONS对象之后,就不用跑到洗手间偷偷脱掉并丢弃自己的秋裤了。

事实上,现在一些西方国家已经意识到秋裤与环保之间的关系了。例如我身边有一个人去西方某国,回来对我说,她在那个国家看到过这样的电视公益广告,即号召大家在冬天穿上秋衣秋裤,然后降低室温,以这种方式节约能源,促进环保。

如上文所述,我对L君说Armani要是推出秋裤了,世界和平就有希望了。其实这句话也是半开玩笑半当真的。因为穿秋裤有助于节约能源,而能源是什么?能源是现代社会赖以生存和发展的基础。如果这颗星球发生了第三次世界大战,其起因必然是愈发严重的全球能源危机。曾有人问爱因斯坦,如果发生了第三次世界大战,人类会用什么武器?爱因斯坦说他不知道人类在第三次世界大战会使用什么武器,他只知道人类在第四次世界大战中使用的武器将是石头。我想爱因斯坦的潜台词就是:第三次世界大战会毁灭人类的现代文明,将人类社会打回到石器时代。在我看来,爱因斯坦的预测可能还是太乐观了,因为我们都知道,现在地球上已有的核武器据说至少可以灭绝人类几百次。如果在第三次世界大战中,各国大量使用核武器,你猜会出现什么样的结果?

从这个角度来看,如果你所在的城市冬天很寒冷,而你因此穿上了有助于节约能源、促进环保的秋裤,这就等于你在用一种类似于蝴蝶效应的方式拯救地球、拯救人类哦。

]]>
http://dingxiaoyun555.blog.163.com/blog/static/12187005020120121636793 30 http://dingxiaoyun555.blog.163.com/blog/static/12187005020120121636793 Thu, 12 Jan 2012 13:06:36 +0800 2012-01-12T13:07:04+08:00
<![CDATA[我需要好好想一想]]> http://dingxiaoyun555.blog.163.com/blog/static/1218700502012064028169

上大学时,有人搞来一个据说是军用的望远镜,于是大家用这个偷窥女生宿舍。我们系的一个学生会干部看到我们整天偷窥女生宿舍,便教育我们,说这样偷窥很不道德。大家也没人听他的,依旧乐此不疲。后来有一晚,我去隔壁寝室,推门进去,屋里没开灯,我以为屋里没有人。这时,借着窗外路灯照进屋里的那一点暗淡的光,我看到一个很娇小的身影从桌子上异常敏捷地跳了下来——这人不是别人,正是那个跟我们说偷窥很不道德的学生会干部,然后我看到了他手里拿着那个军用望远镜……

 

这些年,我经常会想起这件事,每次想起这位独自一人在黑暗中站在桌子上偷窥女生寝室的学生会干部,再想想他对大家说偷窥很不道德时一脸严肃的样子,我都会沉静一笑。现在这哥们儿据说任职于中央某机关,据说他在那个机关混得还不错。

 

从小到大,我最讨厌的就是那种具有内地官方意识形态色彩的道德,这就像是一种直觉。想一想,我上小学的时候,我肯定是完全不懂什么官方意识形态等诸如此类的说法,但现在回想起来,从那时开始,只要是带有内地官方意识形态色彩的文艺作品,我都会对其产生一种似乎发自于本能的反感。所以小时候,我看春晚,基本上只对其中的那两三首港台歌曲感兴趣。另外我那时买了上百盘港台流行音乐的磁带,看了无数部港台电影。结果后来,很多港台艺人也争相向内地官方献媚了,当时就想这算“戏子无义”吗?对此,有人对我说行行都一样,你也别苛责别人了。我是这样回答他的:这个也不算什么苛责了,纯是我主观的看法,每个人都可以有自己主观的看法……

 

说到官方意识形态,我昨天在微博上还说了与此相关的这样两段话:

 

我看电影、听歌儿经常掉眼泪,但看书极少掉眼泪,去年只有一本书让我看哭了,而且是眼泪流干那种,这本书就是《一句顶一万句》,本来我对茅盾文学奖这奖项非常反感,因为觉得它可能会有官方意识形态色彩。这本《一句顶一万句》原本就想随便看看,结果它要了我的亲命了……

 

想一想,我喜欢郭德纲的最主要原因就是,他到目前为止的相声作品,以及他主持电视节目时的语言风格,完全没有官方意识形态色彩。至于周立波,因表演过一个挖苦某人的单口相声,曾被某“公知”认为是“跨时代的笑匠”,结果他现在颇有官方意识形态代言人范儿了……

 

现在想一想,我为什么会如此讨厌那些具有官方意识形态色彩的东西呢?我想归根结底是因为这样两个原因:一是因为那些东西不好玩,没意思,而我只喜欢那些好玩的、有意思的东西;二是因为我知道那些东西之说以被搞出来,就是为了给大家洗脑,作为一个人,我讨厌被别人就像洗内裤一样给我洗脑。

 

例如看央视的《朝闻天下》,总有这样一种感觉:欧美人民的生活是一天不如一天,马上就要民不聊生了,而世界形势更是云波诡谲,甚至世界大战也是一触即发;而中国呢,那叫一个安居乐业,一派和谐盛世景象,你能投胎到现在的中国,那是你丫的福气呢……

 

再例如今天我本打算去看刚刚在内地首映的电影《那些年,我们一起追的女孩》,结果有同时看过港台版和内地版的人说这部电影的内地版已经被阉割得乱七八糟了,很多有点色的情节都被删掉或篡改了,这使得我很犹豫是否该去电影院看这部电影。

 

原来我一直搞不懂,不就是男欢女爱那点事儿嘛,为什么有关部门对此如此紧张呢?而且其实也根本管不住。直到后来我渐渐明白了,他们其实也不在乎能不能管得住,他们就是要管,以此显示他们有权去管个人的身体。简而言之,他们真正在乎的只是手中的权力,并用权力去压制一些天赋的权利,尤其是那些和个人的身体有关的权利。因为他们很清楚:只要我有权管你的身体,我自然也就有权管你的一切。

 

看耶林的著作《为权利而斗争》的时候,我发现他所说的权利主要是指利益,尤其是物质利益。当我意识到这一点之后,我不禁摇头苦笑,要知道,《为权利而斗争》这本书是写于1872年,而在2012年的中国,权利问题很大程度上还是人身权利的问题。也就是说,在整整140年后的今天,我们还停留在为人身权利而斗争的阶段。人身权利是最基本、最重要的权利,连这个权利都保障不了,个人的物质利益被任意损害肯定是再自然不过的事了。

 

以前我一说这类问题,我身边总有人跟我说诸如此类的话:“你丫还真是‘生年不满百,常怀千岁忧’,你丫操心这个干什么?你丫操心这个有用吗?”我心想:“你们这样说也对,谁让我投胎到了中国呢,我还是及时行乐吧。”然后我就淡定了许多。但最近我又无法淡定了,因为就在去年9月,我的儿子也投胎到了中国,一想到他以后上内地的学校,也要接受我曾经接受过的那些洗脑教育,也要和一群孩子一起合唱那些红色歌曲,也要小小年纪就变得跟小大人似的,承受应试教育特有的各种压力,我心里就特别难受。我该怎么做呢?这是个问题,我需要好好想一想。

]]>
http://dingxiaoyun555.blog.163.com/blog/static/1218700502012064028169 22 http://dingxiaoyun555.blog.163.com/blog/static/1218700502012064028169 Fri, 6 Jan 2012 16:00:28 +0800 2012-01-06T16:00:47+08:00
<![CDATA[为什么“好人”没人爱?]]> http://dingxiaoyun555.blog.163.com/blog/static/121870050201203115253218

刚才看到有人在微博上转了这样一句话:“区别‘爱’和‘喜欢’很简单。你喜欢花会去摘,爱花则会去浇水。”——想了想,好像有点道理,以此类推,你喜欢一个人就想去占有她(他),而爱一个人则希望她(他)能自由快乐地生活,这个说法成立吗?

 

在豆瓣上问了上述问题,豆友“沉默的流氓”说:“喜欢是摘花。爱是连花带盆一并搬到家里,然后浇花。都是占有。一个只图一时占有,一个追求天长地久。PS:你会上别人家的阳台上浇花吗?”

 

关于这一点,我想可能是因为用花来比喻有个局限:花不能四处走动,花的自由就是扎根在泥土里好好生长。要是换成动物或人呢?

 

随后我又看到了豆友“aeRofLoyD”的回复:“自由这个东西,是个基础吧。但是我想要的是在这基础上的互相依靠依赖,是一个归宿。其实不存在谁把谁限制住。是互相内发的一个寄托吧。懂得尊重人,自然就有自由了。如果跟一个人在一起,感受到的是被控制,那么就考虑清楚,那个人是不是尊重你。”

 

细想一想,这位豆友说的是一种相处的智慧。但一看到“尊重”这个字眼,我又想起大家常说的“好人卡”,很多时候,一个男人或女人过于尊重其心仪的异性,往往就会被发一张“好人卡”,然后将其拒之于千里之外,这又是为什么呢?原来我想不通这个道理,直到后来我渐渐明白了,这是因为所谓“好人”的“尊重”,很多时候,其实隐藏着更为功利的目的。很多“好人”都想要用自己伪装出来的服从性换取更多的利益,例如从对方那里获得性欢愉、物质回报以及所谓的“责任感”等诸如此类的东西。而且这种服从性因为挂着一层“好”的面具,在道德上又具有一定的自我欺骗性,这使得“好人”通常先把自己感动了,觉得自己已经牺牲了很多,付出了很多,如果对方不肯为自己放弃对于生活的自由选择权,如果对方想要挣脱被“好人”占有的状态,那对方就是一个没心没肺的“坏人”。

 

这说明什么?这说明很多“好人”的所谓“尊重”完全是虚假的尊重,它带有极强的功利性,所以这个世界上真正聪明的男人和女人会凭借天生的直觉识破“好人”的这套把戏,进而给他们发一张“好人卡”,然后将他们拒之于千里之外。

 

说过了“好人”,再说所谓的“坏人”。人们常说,男人不坏,女人不爱。其实细想想,女人不坏,男人不爱,这句话同样也是成立的。为什么人们会喜欢坏男人和坏女人?我想最根本的原因就在于,那些所谓的坏男人和坏女人只是在用更诚实、更自由、更勇敢、更开放的态度对待自己和别人,在我看来,这才是真正的爱和尊重。事实上,也正是因为他们能给予别人这样的爱和尊重,使得他们可以很轻易地偷走别人的心。但由于这些坏男人和坏女人用这样一种态度去生活,使得他们的情感生活通常会比常人丰富很多、精彩很多,这使得所谓的“好人”可能会因为无法占有他们,故气急败坏,于是在道德层面上污蔑他们。

 

但与此同时,这些所谓的“好人”也会发现这一点:所谓的坏男人和坏女人就是人们死都忘不了的那些人。

 

为什么坏男人和坏女人的“坏”具有如此大的魅力?归根到底,还是我刚刚说过的那个原因,因为他们更诚实、更自由、更勇敢、更开放。

 

顺便说一嘴,那些玩够了的坏女人反倒有可能成为更好的妻子和母亲,这可能是因为她们见多识广,更懂得什么才是真正的爱和尊重吧。

]]>
http://dingxiaoyun555.blog.163.com/blog/static/121870050201203115253218 36 http://dingxiaoyun555.blog.163.com/blog/static/121870050201203115253218 Tue, 3 Jan 2012 11:52:53 +0800 2012-01-03T15:33:50+08:00
<![CDATA[如何挣脱人生的枷锁]]> http://dingxiaoyun555.blog.163.com/blog/static/121870050201111310121119

早上不到6点就醒了,躺在床上,想再睡一会儿,却睡不着了。于是用手机看别人发的微博,然后我意识到这是2011年的最后一天,因为在昨天晚上,微博上很多失眠的人都在说着“2011年有我想念的人等诸如此类的话。

 

后来我看到我的一个豆友转发了一个网名是张秋飚的女孩说的这样一段话:感谢所有诋毁你的人,让误解你的人继续误解,不试图穿越几层接近他人的思想,玩儿高级有质感的暧昧,脱离寒喧和虚情假意充盈的圈子,积极有效地浪费掉该浪费的青春,睁大眼睛看清世界沉沦的美好,停止将时间和视线虚掷在机械的屏幕上……”

 

我在微博上也转了这段话,转的时候,我说:这段话对我有触动……

 

一到年底,大家都变得深沉了。尤其是一想到明天就是2012年了,可能还会有一点末世之感。小的时候,我特害怕世界末日会忽然到来,但现在的我已经不会像小时候那么怕了,可能是有一点点活腻了?或者可能是因为,我越来越意识到,人生是毫无意义的一件事。

 

今年我又重读了毛姆的《人生的枷锁》,毛姆写了那么厚一本书,最后得出的结论也是:人生毫无意义。就像书中毛姆讲述的那个关于东罗马帝国国王的故事,故事里的哲人说人类所有历史可以归结成这样一段话:人降生到世上,便受苦受难,最后双目一闭,离世而去。生活没有意义,人活着也没有目的。出世还是不出世,活着还是死去,均无关紧要。这本是极度消极的一段话,但是这段话却让《人生的枷锁》男主人公菲利普感到狂喜,因为他意识到自己因此挣脱了所有人生的枷锁,他平生第一次感到自己彻底自由了。随后毛姆是这样叙述道,原先菲利普以为自己人微言轻,无足轻重,而眼下却觉得自己顶天立地,强大无比。陡然间,他仿佛觉得自己同一直迫害着他的残酷的命运势均力敌,不相上下了。既然生活毫无意义,尘世也就无残忍可言。不论是做过的还是没来得及做的事,一概都无关宏旨。失败毫不足奇,成功也等于零……”当菲利普想明白这一点之后,他开始以一种奇异的力量面对人生,后来他和一个丰乳肥臀、单纯善良的小美女开始了全新的生活,小说也以此为结尾。

 

至于《人生的枷锁》作者毛姆本人,当他明白了人生毫无意义之后,他过着一种坦然放荡的双性恋生活,但他似乎更喜欢小男孩,他和他的同性情人哈克斯顿周游世界。哈克斯顿不仅是毛姆的情人,他还是毛姆的皮条客,每到不同的国家,他就会为毛姆找来一些漂亮的小男孩,他们一起寻欢作乐。与此同时,哈克斯顿和毛姆彼此相爱了30年,一直爱到他死的那一天。对于他们的爱情,有人曾这样评价道:这是毛姆一生中最伟大的爱情。

 

很多年前,当我看到《人生的枷锁》里关于人生毫无意义的那段话之后,我也是感到一阵狂喜。我也在试图挣脱掉所有人生的枷锁,但到目前为止尚未成功。很显然,仅仅想明白了人生毫无意义是远远不够的。在想明白了这一点之后,接下来要做的就是更勇猛、更坦荡地前进。而且这些年我所经历的也让我渐渐明白了,绕开浴火之路不会让生活变轻松,因为庸碌生活如钝刀杀人。平心静气地过危险的生活,不断蜕变成更自由的自己。与此同时不断做减法,减到只做我想做的,不要我想要的。当然,我必须坦白承认,我心里还在打着这样的小算盘:如果我能做成我想做的,我想要的那些会不请自来。

 

]]>
http://dingxiaoyun555.blog.163.com/blog/static/121870050201111310121119 9 http://dingxiaoyun555.blog.163.com/blog/static/121870050201111310121119 Sat, 31 Dec 2011 12:12:11 +0800 2011-12-31T12:12:34+08:00
<![CDATA[韩寒是这个体制的既得利益者吗?]]> http://dingxiaoyun555.blog.163.com/blog/static/121870050201111269296221  

刚才看到一位豆友说:“韩少三篇文看似大题目一个个压死人,其实细读读嘛,字里行间就两个词:一安全,二稳定。笑而不语啊。”

 

想一想,韩寒其实也算是这个体制的既得利益者吧,他想要安全和稳定,这也不算奇怪吧。人无论做什么,肯定都是为了自己的利益,否则反倒有可能别有用心。而利益这东西也大致可分为两种:一种是物质利益,这个谁都明白;另一种是精神利益,这个其实也很简单,就是精神层面的愉悦和快乐。

 

孔子说:“君子喻于义,小人喻于利。”我个人觉得,他说的“义”其实也是一种“利”。因为你想啊,所谓的君子追求“义”是为了啥呀?说白了就是这么做能让自己感到快乐。一个人只要是做自己想做的事,其最终极的目的只有一个,那就是为了让自己感到快乐,甚至连自杀亦是如此。从这个角度来看,所谓的君子其实也是“喻于利”的,只不过这“利”是精神层面的“利”。

 

中国人看到别人做什么事,总喜欢分析对方的动机。就因为中国人的这种国民性格,使得很多人可以心安理得地打着好心的名义干坏事。当然,也有一些人,他们可能真的是一腔好心,但由于不尊重客观规律,还是会办坏事。例如很多中国老人看孩子,他们听不进别人的建议,就觉得按自己的老方法养孩子才是爱孩子的表现,结果他们的某些做法可能会害了孩子的一生。所以我现在经常这样提醒自己:你爱一个人就得尽量依据客观规律去爱,不能只是依据主观喜好去爱,而且某种程度上,理解其实是更高层次的爱。

 

说回到韩寒,他最大的问题就是他的小说写得太烂了,当然你也可以说他的本行是赛车手。话说韩寒要不是当初得了那个什么萌芽奖,他的那本《三重门》肯定也成不了畅销书,那他很有可能会像大多数城乡结合部青年那样老老实实读完中学,老老实实养家糊口。而韩寒的第二个机遇就是新浪博客的出现,本来很多人都快要对韩寒写小说很烂这件事达成共识了,恰好新浪博客出于造星的需要,造出了韩寒这个博客明星。在刚成为博客明星的那段时期,韩寒最喜欢做的就是跟一些名人掐架。后来,就在很多人愈发觉得他的博客写得很没劲的时候,因为一些机缘巧合,让韩寒有意或无意地走上了民粹的路线,结果再一次登上了时代的风口浪尖。

 

就因为上述三次机遇,韩寒拥有了巨大的影响力。韩寒用这个影响力卖他那些写得很烂的小说赚钱,拍广告赚钱,这没什么,因为这是他应得的。韩寒最近连写三篇文章,先后谈革命、民主以及自由,他说得肯定有对有错,但鉴于他激起了关于革命、民主和自由的全民大讨论,这应该也算是好事一件吧。

 

所谓革命、民主和自由,在我看来,说白了就是对更好的社会规则的向往。而说到“好”,普通公民眼中某些好的规则,例如官员财产状况公开这样一条规则,在某些官员看来可谓“坏”得不能再“坏”了,所以他们会说现在让中国的官员公开财产状况还不太现实。如果你问他们:”为什么不现实?”他们可能会说:“怕吓死你!”开个玩笑啊,他们肯定不会这么说了,只是很多官员的财产数目肯定很吓人就是了。

 

胡适曾说:“一个肮脏的国家,如果人人讲规则而不是谈道德,最终会变成一个有人味儿的正常国家,道德自然会逐渐回归;一个干净的国家,如果人人都不讲规则却大谈道德,谈高尚,天天没事儿就谈道德规范,人人大公无私,最终这个国家会堕落成为一个伪君子遍布的肮脏国家。”

 

虽然韩寒也算是这个体制的既得利益者,但至少到目前为止,韩寒还没有变成那种整天大谈道德的老混蛋。虽然他的小说依旧写得很难看,但他还有一些少年心气,他还很年轻,他和很多中国年轻人一样,都在某种程度上为了让这个国家能有更好的社会规则而努力。你可以怀疑他的动机,你可以说他这么做是为了自利,但不要忘了,那些相对更好的社会规则只能是基于自利原则产生的,如果有越来越多的中国人都可以为了自己的利益,尽可能地平等协商,并且都有很强的契约精神,那时肯定就不会有那么中国人想要移民到其他国家了。

 

最后再说说关于道德的几句题外话,在我上大学的时候,我最讨厌的就是“道德”这个词,因为就像阴三儿在《北京晚报》里所唱的那样,我发现有“太多神经病和大傻B进大学当教授”。除了极少数老师之外,大多数老师都伪善得要死,而这些伪善的家伙最喜欢把道德挂在嘴边了。后来,我渐渐意识到,我讨厌的只是伪善的、反人性的道德,而我对这种道德的痛恨只是基于另外一种道德。说到这儿我想起我最近看阿城的书,他说:“道家的‘道’,是不以人的意志为转移的自然秩序,所谓‘天地不仁’。去符合这个秩序,是为‘德’,违犯这个秩序,就是‘非德’。”虽然阿城在这里说的是道家的道德,但我个人认为,这样的道德才是真正的道德。从这个角度来看,真正的道德和真正的爱一样,必须不断前进,不断趋近于知的极致。

 

看了回复,补充三点:

 

1. 关于中国的既得利益者,以前看过一个观点,说中国目前的既得利益阶层除了特殊利益集团外,知识阶层因为叫得欢,受益于会哭的孩子有奶吃原理,故也成为既得利益者了。韩寒算是知识阶层吗?我个人认为应该算是吧。

 

2. 有些人揣度我写本文的动机,那我就直说好了,我写本文主要是表达我对韩寒的羡慕嫉妒恨之情,尤其是嫉妒路金波透露的韩寒找了很多女朋友并且给每个女朋友都发一张银行卡这事儿……不开玩笑了,我的动机你可以任意揣度,没事儿……我只是觉得,无论如何,像韩寒这样拥有巨大影响力的人一个劲儿说民主应该也算是好事一件吧……

 

3. 真奇怪,我说韩寒是基于自利原则谈民主,有些人气得就像尾巴被踩了似的。他们似乎认为我这样将民主和利益扯到一起就是玷污了民主,玷污了韩寒。民主是什么?民主不是理想主义,民主其实就是对于个人权利的斤斤计较,而对个人合法利益的争取和捍卫,是个人最重要的权利之一。

 

 

]]>
http://dingxiaoyun555.blog.163.com/blog/static/121870050201111269296221 11 http://dingxiaoyun555.blog.163.com/blog/static/121870050201111269296221 Mon, 26 Dec 2011 21:29:06 +0800 2011-12-30T17:03:52+08:00
<![CDATA[告别2011,展望2012]]> http://dingxiaoyun555.blog.163.com/blog/static/1218700502011112013510964
这两天,貌似全国的电影院就放俩电影,一个《龙门飞甲》,一个《金陵十三钗》,我不知道这算不算垄断,只是对此感到有点腻歪。    
国产电影,基本上就那么几个老头子,霸占着最优资源。当然,你也可以说,在这个国家的大多数领域,同样也是这鸟样儿。    
关于《龙门飞甲》和《金陵十三钗》,我都第一时间看了,主要就是为了凑个热闹。两个早就没有了艺术追求的老头子,调动那么多资源拍摄并放映的电影,其目的很纯粹,就是为了攫取更多的名利,垄断更多的资源。基于这样一种前提,他们又能把电影拍出什么新意呢?    
在这颗星球上,对于一切资源的争夺,归根结底,都是为了性资源。从这个角度来看,中国的那些老头子们都这把岁数了,他们的身体吃得消吗?    
话说最近邻国有个老头子的身体终于吃不消了,这个老头子姓金名正日,据说他的死让朝鲜的肥胖人口少了一半……据说他是因日里万机操劳过度故69而亡……    
说到这儿又想起那个老段子了,即一老农跑到北京后说“我十分想见李万姬”的老段子。    
昨晚《新闻联播》说中国人民会永远怀念金正日。永远个头啊?怀念个屁啊?    
再过一阵儿就过年了,小时候贼期盼过年,主要是因为过年能得点儿压岁钱。现在很多年轻人都贼讨厌过年,其原因还是跟钱有关,因为过年就得见各路亲戚,而世界上最无聊的聚会可能就是中国人的亲戚聚会,因为除了个别亲戚可能会真的很关心你,大多数亲戚其实根本互不关心,他们只关心一个问题,那就是你能赚多少钱。我估计老外也关心这个问题,但他们不会直接问,而中国人会直接问。在中国的亲戚聚会,你经常能看到这样两个奇观:阔亲戚装穷,穷亲戚装阔。    
现在的中国人真是想钱快想疯了。前一段时间看到一个新闻,好像是发生在四川,说一个笨贼,一手拿着一锤子,一手拎着一麻袋,走到银行的自动取款机前,用锤子猛砸之。看来他预想的是能通过这种方式搞到一麻袋钱。虽然他的方法极笨,但不得不说他是一个很有尝试精神和行动力的人。他的行为能折射出无数想钱想疯了的中国人的某种潜意识。    
虽然势利的亲戚很讨厌,但一定不要因此假装跟钱有仇哦。豆瓣上很多文艺青年都会假装跟钱有仇,这是一种病,得治。王尔德曾是这个星球上的文艺之王,关于金钱,他说过这样一段名言:一个人小时候会误认为金钱是万能的,直到他长大成人后,他才会明白:原来金钱还真他娘的是万能的。    
只要不是想钱想疯了,公开谈钱倒也没什么不好,这比心口不一好多了。有些人表面上看上去就像跟钱有仇似的,保持着一种清静凛冽的文艺范儿,但他们心中却有可能隐藏着这样的梦想:发一笔横财,然后买很多很多海景房,包养很多很多男大学生或女大学生……    
告别2011,展望2012,还是努力多赚点儿钱吧。钱要是挣够了,就把理想买到了?这个还真不好说,但很大程度上,没有钱就没有爱情,没有钱就没有自由。而且最关键的是,钱可以帮助年轻的你冲破那些老头子对于你的生活的各种限制。另外有钱的最大好处就是可以少听很多废话。因为没钱的人通常需要花很多时间来听别人对自己说一些关于“你应该如何,不应该如何”的人生大道理。在我看来,世界上最悲催的事莫过于此。
 
]]>
http://dingxiaoyun555.blog.163.com/blog/static/1218700502011112013510964 8 http://dingxiaoyun555.blog.163.com/blog/static/1218700502011112013510964 Tue, 20 Dec 2011 13:35:10 +0800 2011-12-20T14:04:40+08:00
<![CDATA[《龙门飞甲》:有什么是不能卖的?]]> http://dingxiaoyun555.blog.163.com/blog/static/1218700502011111574120945   在《龙门飞甲》上映的第一天,就去看了,可能是因为对徐克还是没死心吧。结果看完后,我苦笑着走出电影院。平心而论,其实这部电影的前半段还凑合,但后半段却变成了乱炖的闹剧。
  看完这部电影,我最大的感慨就是,原来这世上无论什么都可以拿出来卖的,青春的肉体,最初的梦想,对艺术满满一公车的执念,反正就是诸如此类的东西,只要有人肯出高价,就可以拿出来卖。
  有什么是不能卖的?我想了半天,一个答案都没想出来。有些东西可能的确是无价的,但那只是因为没有人肯出高价,例如一个35岁的老处男或老处女可以宣称自己的初夜是无价的,例如一个一身怪臭的酸儒可以宣称自己的人格是无价的。
  
  其实艺术工作者想卖也没什么,因为反正大家都在卖呢,只要卖得有个性,或者卖得很好玩,更高级的则是卖得很有情怀,这样欣赏者就会沉醉其中,觉得自己的心灵享受了一次酣畅淋漓的大保健。很久以前的徐克就曾经卖得很有个性,卖得很好玩。但在这部《龙门飞甲》中,他想卖的心已经昭然若揭了,那感觉就像一个徐娘半老但却风韵无存的女人冲着你嚷嚷:你快来上我吧,只要80元人民币就可以了,周二还可以打五折。
  徐克很久以前拍的那些武侠电影里的某些人物,给我的感觉是真逍遥,真自在,真至情至性。而现在的徐克,只能让电影里的人物不停地用嘴说逍遥、自在等诸如此类的台词,但那些人物看上去一点都不逍遥自在,而且跟至情至性大概只有几毛钱的关系了。
  在国外,有些电影导演年轻的时候为了名利,可能会做一些投机的事,但当他们有了一定的资本之后,反而可能会变得越老越有艺术追求。而中国的电影导演却大多都是越老越投机,疯狂攫取更多的资源。
  
  当然,这也不都是他们的错,因为在当下的中国,电影审查制度依旧很变态。宁浩的《无人区》据说有点艺术追求,结果被一次又一次地阉割,都已经被割成《无鸟儿区》和《无蛋区》了,还是没法公映。
  说到这儿我想起今天让我苦笑的另一件事,早上看新闻,说有关部门搞出了个意见稿,要求中国的电影不得含有煽动抗拒或者破坏宪法、法律、行政法规实施等13项内容,并且“已明确我国电影市场不搞分级”。另外该意见稿还规定,未获许可的电影不得参加电影节,不得进行网络传播。
  
  上大学时看一本关于毕加索的书,其中关于艺术,毕加索有这样两个观点:一个观点是艺术家是最不需要自由的,因为艺术家天生的使命就是反抗;另一个观点是想表现革命不用画一个拿枪的战士,画一个绿色的苹果同样也有可能表现出革命这个主题。
  原话记不清了,大意如此吧。我琢磨了一下,毕加索说的似乎有点道理。从这个角度来看,中国的艺术工作者算是赶上了一个好时代了。
]]>
http://dingxiaoyun555.blog.163.com/blog/static/1218700502011111574120945 5 http://dingxiaoyun555.blog.163.com/blog/static/1218700502011111574120945 Thu, 15 Dec 2011 19:41:20 +0800 2011-12-15T23:19:27+08:00
<![CDATA[没什么比你年轻时的单身时光更珍贵]]> http://dingxiaoyun555.blog.163.com/blog/static/1218700502011101192453539

因为今天是2011年11月11日,百年一遇的光棍节,所以分别在昨晚和今天写了两条应景的微博:

微博一:在2011年11月11日这个百年一遇的超级光棍节,估计很多光棍小伙儿都想听到有一个姑娘能这样安慰他们:感情的事呢,是不能强求的。所谓吉人自有天相,做人最要紧的就是开心。饿不饿?我下面给你吃……

微博二:单身男女如何告别单身状态?秘诀有三个:不要脸;不要脸;不要脸。要脸的十有八九都找不到自己的真爱,最后只能一次又一次的相亲……

其实说这个主要是为了逗乐儿,因为对于单身这种状态,我羡慕还来不及呢,我现在越来越深刻地意识到:好多事只有单身时才能做成,好多快乐只有单身时才能体验。

如果单身时再有点钱,那就更妙了。你想去哪玩就去哪玩,你想追谁就追谁,你可以随时随地,拔腿就走。王尔德曾说:有钱的单身者应该课以重税,因为他们太快活了。

即使单身时没钱,这也没什么。你想想,你年轻,还单身,这意味着你的未来拥有无限的可能性。你无牵无挂,你一个人吃饱全家不饿,你怕什么?你可以一意孤行,你可以百无禁忌,你可以就算撞到南墙也不回头。

在单身的时候,对于你最想实现的那个梦想,你可以一丝不苟地去实现它,你也可以一丝不挂地去实现它。

有时想一想,每个小孩儿都是光彩夺目的,都是充满个性的,但为什么后来他们中的绝大多数人都变成了灰头土脸且平庸无趣的大人?我想很重要的一个原因就是因为这些人告别了单身状态,他们开始追求徒有虚名的“爱情”,那“爱情”正如法斯宾德所说的那样,是最狡猾、最有效的社会压迫工具。不信你现在就打开电视,你会看到中国的都市青春爱情电视剧里有这样一类年轻人:他们干着朝不保夕的工作,却租住在上海或北京的高级公寓里;他们嘴上说要努力奋斗,但看上去似乎在用百分之九十以上的精力谈恋爱。都说活在《新闻联播》里是最幸福的事,其实活在中国的都市青春爱情电视剧里才是最幸福的事……

还有婚姻,这个更可怕。前几天我跟朋友一起吃饭时,我说我要是离婚了,绝对不会再结婚了。回来后我把这句话也跟我老婆说了,她说为什么啊。我心想我为什么要说这个啊,后来我灵机一动,我说这是因为曾经巫山难为水,我老婆说少来这套。

培根说:“有妻儿者实已向命运押了人质,从此难成大事,无论善恶。”其实也不一定非要做成什么大事,只是想拒绝苟且的安逸和可耻的成熟,但这也是极难做到的。我最近经常会想,如果当初我没结婚,我现在会过怎样一种生活。也许我会如David Bowie 在那首《The Man Who Sold The World》中所唱的那样,在很久很久以前死于孤寂?谁知道呢,原来我怕死怕得要命,现在我还是很怕,但不像从前那么怕了,因为我知道有一种生活,它比死更可怕。

不说了,说多了都是眼泪,好好珍惜你年轻时的单身时光吧。有一天你会意识到,没什么比你年轻时的单身时光更珍贵。

]]>
http://dingxiaoyun555.blog.163.com/blog/static/1218700502011101192453539 24 http://dingxiaoyun555.blog.163.com/blog/static/1218700502011101192453539 Fri, 11 Nov 2011 21:24:53 +0800 2011-11-11T21:33:31+08:00
<![CDATA[为自由而乱搞]]> http://dingxiaoyun555.blog.163.com/blog/static/121870050201171241544931

人在很年轻的时候其实本该尽情乱搞的,然后搞着搞着可能就搞腻了,于是就开始想:有什么比乱搞更有意思的事儿呢?进而通过思考和不停尝试找到了这件事儿,然后为了把这件事儿做成了而奋斗终生,并因此觉得生而无憾……

 

人在很年轻的时候,如果尽情乱搞过了,也会变得相对单纯一些,心态也更健康一些,更容易拥有独立的人格和自由的思想,更容易成为一个社会好公民,以后结婚了,也更容易成为好伴侣,成为好父母。

 

我经常会有这样一个想法,中国的腐败问题这么严重,很重要的一个原因就是现在的那些贪官在青春期的时候太压抑了。所以他们要在自己有权有钱后,拼命补偿自己,拼命霸占各种资源,尤其是像年轻且性感的身体这样的性资源(这里的不是一个名词哦)。

 

所以我就在想,如果年轻时已经尽情乱搞过的80后和90后日后成了中国社会的中坚力量,这个国家肯定会比现在好很多。当然,很多80后和90后在青春期的时候也活得挺压抑的,这些人日后成为社会中坚力量,其中很多人也许还会走上一代的腐败之路。

 

中国人已经性压抑几千年了,现在想改变这种性压抑的文化,可能需要几代人的努力。最近看一本书,说中国不少专家学者都预测说中国会在2040年左右完成社会转型,实现较高水平的政治民主。2040年?还有29年,看一看中国现状,我也没法确定这种预测是不是过于乐观了。

 

不过话说回来,权利这东西不是等来的——正如我前一段时间看过的一本书的书名:《为权利而斗争》——很多权利只能通过斗争来获得。

 

中国人一说到斗争,总觉得这是你死我活的事儿,其实斗争有很多种啊,例如年轻人的乱搞其实某种意义上也是一种斗争,为什么这么说呢?答案很简单,什么是专制?专制就是掌握公权力的人什么都想管,但实际上他们最想管的是人的身体,因为如果能把身体管住了,他们就等于拥有了对于被管制者的绝对处置权。有些人可能会说还有灵魂的自由呢,在我看来所谓灵魂的自由只是一种意淫,身体的自由才是最根本的自由,很多时候被人们挂在嘴边的灵魂只是被某种意识形态扭曲的超我,它更像是身体的无形枷锁。所以想要谋求个人的自由,首先就要谋求身体的自由,这种自由就是在没有伤害他人的权利这一前提下,和有情人或无情人做快乐事的自由。

 

经常把文艺片拍成三级片的意大利导演帕索里尼曾说:身体始终具有革命性。从这个角度来看,年轻人通过乱搞去寻求身体的自由,这其实也是一种革命哦。顺便说一嘴,本文中的“乱搞是一种广义的乱搞,而在进行狭义的乱搞的时候,亲们最好尽量戴套做好安全措施哦。

 

]]>
http://dingxiaoyun555.blog.163.com/blog/static/121870050201171241544931 66 http://dingxiaoyun555.blog.163.com/blog/static/121870050201171241544931 Fri, 12 Aug 2011 16:15:44 +0800 2011-08-13T08:01:08+08:00
<![CDATA[所谓旅行、偷情、青春和成熟]]> http://dingxiaoyun555.blog.163.com/blog/static/1218700502011618112024518

 

如果说所谓旅行,就是从你活腻了地方去别人别人活腻了的地方。

 

那么所谓偷情,则可能是你很努力地干一个别人早已经干腻了的男人或女人。

 

这就是人性,你什么办法都没有……

 

如果说所谓青春就是特把自己当回事儿,特在乎别人怎么看自己。

 

那么所谓成熟,就是发现在这个世界上除了你自己之外根本没人把你当你回事儿,即使是你的父母、你的恋人或爱人也不例外,于是你明白了你根本没必要把别人对你的看法当回事儿……

 

当然,肯定是有例外的,因为你可能会遇到一些在你看来爱你就像爱生命的人,但你更不能因此放慢你向前走的脚步哦,因为那些人可能给予了你真正的爱。

 

而真正的爱,只是为了让你活得更自由……

 

写到这儿又出现了一个问题,因为你也许会说:既然他们爱我就像爱生命了,所以我也要为他们有所牺牲。

 

我明白你的这种想法,就像毛姆说的,人在自我牺牲的时候,快感会特别强烈,因为人会觉得自己在自我牺牲时比上帝更伟大。

 

我说的不是毛姆的原话,我记得大意如此吧。至于为什么人在自我牺牲时会觉得自己比上帝更伟大?因为上帝是无所不能且永生不死的,所以上帝没有自我牺牲的能力……

 

如果你这样想,那么你想自我牺牲就自我牺牲吧。

 

这就是人性,上帝什么办法都没有……

 

]]>
http://dingxiaoyun555.blog.163.com/blog/static/1218700502011618112024518 28 http://dingxiaoyun555.blog.163.com/blog/static/1218700502011618112024518 Mon, 18 Jul 2011 23:20:24 +0800 2011-07-19T08:50:38+08:00
<![CDATA[用买一平米房子的钱完成一次壮游]]> http://dingxiaoyun555.blog.163.com/blog/static/1218700502011613741652

我曾在豆瓣上看到一篇题为《放大你的格局,人一辈子要有一次壮游》的文章,它的第一段是这么写的:有一种旅行,方法很贫穷,却可以改变人的一生。这种旅行,西方从16世纪末传承至今;中国却已失落数百年。那就是Grand Tour──壮游。培养独自的能力,才能开创个人与国家的竞争力。
  当时看了这篇文章我还挺兴奋的,我跟我老婆说:我也要出去壮游一次。我老婆说:想去就去呗,不过我建议你出发前不要带钱,你在路上边打零工边旅行,这才是真正的壮游……”呃,老婆,你好狠的心啊……
  我刚才搜索了一下这篇文章,它是一位豆友在200912月时写的一篇豆瓣日记,这说明我有了想去壮游的念头大概也是在那个时候。转眼时间过去了一年半,我的壮游依旧未能成行,而且我马上就要做爸爸了,有了孩子,想壮游就更难了。说到这儿我想起了在韩松落的《我们的她们》这本书中看到他转引的培根的一句话:有妻儿者实已向命运押了人质,从此难成大事,无论善恶。
  原来我觉得培根的上述观点很有道理,但后来我觉得这句话有待商榷,因为所谓的大事本来就是很难做成的,而且在做成大事的那些人之中,已婚男人的数量显然要比单身汉多很多。为什么会这样呢?这是个问题。顺便说一嘴,众所周知,现在做成所谓的大事的女人也越来越多了。
  
  说回到壮游这个话题,什么是壮游?我在网上搜索了一下,看到了这样一个定义:壮游,指的是胸怀壮志的游历,包括三个特质:旅游时间长、行程挑战性高、与人文社会互动深、特别是经过规划,以高度意志彻底执行。壮游不是流浪,它怀抱壮志,具有积极的教育意义。它与探险也不太相同,壮游者不局限于深入自然,更深入民间,用自己的筋骨去体验世界之大。
  壮游就是胸怀壮志的游历?可能是因为我躲避崇高躲习惯了,看到胸怀壮志这个大词,感觉稍微有一点点别扭,不过壮游大概就是这个意思吧。
  
  我之所以又想起壮游这事儿,是因为这两天我看了一本书,书名是《三十岁的成人礼:搭车去柏林》,说的是两年前美籍中国小伙儿谷岳耗时三个多月搭车去柏林去看他的德国女友那事儿,估计这事儿你肯定也听说过,当时还挺轰动的。我看的这本书不是谷岳写的,是跟他一起搭车去柏林的同伴刘畅写的。不得不说刘畅的精神很可贵啊,他陪谷岳搭车16000多公里,历尽千辛万苦到了目的地,然后他立刻化身成一枚闪亮无比的电灯泡……开个玩笑啊……
  看完这本书,我特意翻到书的开头,我想看看他们是哪天出发的——200968日。那天我在做什么?想了半天什么也没想起来,这倒也正常,毕竟时间已经过去两年多了。于是我去翻我的豆瓣日记,结果我发现在200968日那天我没有写日记,倒是67日我写了一篇日记,在那篇日记中我写了这样一段话:这几天我只要在连着网线的电脑前坐着,我就会立刻处于一种半机械的状态,在如恒河沙数般不可计数的网页上点来点去,然后如春宵般美丽的时光就会迅速飞逝,该做的事儿几乎都被丢到了脑后。唉,再上几分钟我就给我的电脑断网,否则几小时后我又会变成一个满脸是油的腰酸腿疼人。
  后来我想起我那时应该开始玩饭否了,于是我又去翻我的饭否主页,然后我看到我在200968日那天说:北京从昨夜到现在淫雨不断,据说下雨是天地在交合,它们这次交合的时间还挺长……”
  看来那段时间,我基本上每天都坐在电脑前荒废时光闲扯淡来着。
  不过通过我的这一番考证,可以确定200968日的北京的确一直在下雨,就像刘畅在书中所描述的那样。就在那一天,谷岳和刘畅开始了一次壮游,虽然他们这次旅行的目的并不是为了什么壮志
  
  平心而论,刘畅写的这本书跟他极其推崇的杰克·凯鲁亚克的《在路上》那肯定是没法比了。这本书的开头部分,关于他为什么答应了谷岳一起搭车去柏林那部分内容,刘畅写得还挺动情的,但后来就写得有点像流水账了。不过好在他和谷岳的这次旅行经历很好玩,所以读起来还是挺轻松愉快的。
  接下来大概说一下这本书中比较好玩的或是让我印象深刻的几个片段:
  话说谷岳和刘畅到了乌兹别克斯坦之后,因为那里的钱一千块钱只能换人民币四块钱,而他们随身携带的是面额比较大的美元,这使得他们只用几张美元就换了一兜子钱,为了数清这一兜子钱,他们一直数到天黑,一起体验了一把数钱数到手抽筋的感觉。
  在乌兹别克斯坦,谷岳和刘畅去看咸海,咸海曾经是一个比中国的青海湖更大的内陆湖,但由于在上个世纪六七十年代,搞计划经济的前苏联在乌兹别克斯坦地区大量种植棉花,水源被劫走,咸海的绝大部分因此变成了沙漠,十五年后它会彻底消失,这是一个著名的生态灾难。伟大的社会主义国家能让海枯石烂这样的事迅速变成现实,可见社会主义计划经济的优越性无可比拟哦。
  当他们到了罗马尼亚,刘畅说那里满街都是美女,那些美女各个倾国倾城,让他目瞪口呆。真的假的啊?有机会我一定要去见证一下……
  
  当他们终于完成了这次壮游之后,他们算了一下账,谷岳大概花了两万多块钱,刘畅大概花了三万多块钱。我们都知道,在2011年的今天,两三万块钱在北京五环以内也就能买一平米房子。说到儿我想起了在微博上被很多人转发的专栏作家秋风说的一段话:中国的高房价,毁灭了年轻人的爱情,也毁灭了年轻人的想象力。他们本可以吟诵诗歌、结伴旅行、开读书会。但现在,年轻人大学一毕业就成为中年人,像中年人那样为了柴米油盐精打细算。他们的生活,从一开始就是物质的、世故的,而不能体验一段浪漫的人生,一种面向心灵的生活方式。
  据说很多改变了这个世界的伟大人物都曾经完成过至少一次壮游,而这种壮游时光在欧洲也被称为间隔年The Gap Year——通过壮游,他们变得更擅长与人沟通,更擅长解决问题,更敢于冒险,另外他们也因此拥有了更强大的自我克制力、更开阔的视野、更自由的思想以及更独立的精神。
  用买一平米房子的钱,完成一次壮游,接下来没准儿你也能做成那种改变中国甚至改变世界的大事哦。

]]>
http://dingxiaoyun555.blog.163.com/blog/static/1218700502011613741652 13 http://dingxiaoyun555.blog.163.com/blog/static/1218700502011613741652 Wed, 13 Jul 2011 19:04:16 +0800 2011-07-13T23:15:49+08:00
<![CDATA[《武侠》终结武侠:血迷宫的出口]]> http://dingxiaoyun555.blog.163.com/blog/static/12187005020116710226955   看《武侠》的时候,我一直在想,它和我想象中的武侠世界还真挺像的。
  在我看来,假如真的存在一个武侠世界,我相信在那个世界里,也许的确会存在侠骨和柔肠,但更常见的肯定是黑暗和杀戮,就像一个血迷宫。
  而中国人想象出来的武侠世界,某种意义上它完全就是现实世界的投射。武侠世界里的武功,其实就是权力的隐喻,正因为如此,武侠世界里的人物很多都是越老越厉害,很显然,这是违背自然规律的。
  例如《武侠》里的大反派,王羽饰演的那个武功高强、刀枪不入的老头儿,看着他,我首先想到的是崔健的那句歌词:老头儿更有力量;其次,这个老头儿作为甄子丹饰演的唐龙的父亲,它让我再次想起我很久以前的一个想法:中国传统文明的奥秘就在于仁善其表,而其真正的内核则是一个恐怖的、黑暗的、无法无天的、嗜杀成癖的父亲
  也许正因为中国传统文明有着这样一个内核,所以中国历史上才会发生那么多次大屠杀。有时看中国历史,会觉得那就是杀戮的历史,杀几千、几万、几十万、几百万甚至几千万人,满眼都是杀、杀、杀,一个人杀的人越多,他的功业就越大,他在历史上的地位就越高。
    
  在传统的武侠电影里,那些邪恶的暴力最强者,那些无法无天的父亲,他们通常最终都会死于所谓的大侠手里,而这所谓的大侠,换个更通俗的说法,就是好人
  而在《武侠》里,陈可辛已经借金城武饰演的徐百九传达了这样一个结论:好人是不存在的,因为人性是不可靠的。
  村民们都认为刘金喜(这是唐龙的化名)是一个好人,甚至看上去还有点像大侠(虽然这个大侠有着罪孽深重的过去)。如果按传统的武侠电影的那套路数,肯定应该是由他来完成弑父。但在电影里,你会发现,他根本就不是父亲的对手,他不仅无法完成弑父,还差点儿被他的父亲杀死。
  为什么会这样呢?我想这可能是因为刘金喜这个人物是世俗道德的化身(金喜是一个极具世俗幸福色彩的名字),而世俗道德这东西,它从来都不是暴力最强者的对手。不仅如此,很多时候,它反而会成为暴力最强者的帮凶,成为暴力最强者的统治工具。
  从这个角度来看,妄图用世俗道德打败暴力最强者,这是一种纯粹的意淫。
    
  陈可辛显然不想拍一部纯意淫的电影,于是我们就看到了金城武饰演的徐百九这个人物。在我看来,这个人物是科学和法律的化身(在影片中,看他破案的过程,能看出他是一个很有科学精神的人,并且像一根筋一样依法办案)。虽然徐百九杀死本片中暴力最强者的科学方法看上去过于小概率,但却隐约传达了这样一个意思:只有依靠科学和法律,才能杀死那个恐怖的、黑暗的、无法无天的、嗜杀成癖的父亲
  而徐百九这个名字显然别有深意,行百里路半九十,科学之路和法制之路尤其如此。中国想成为真正意义的现代国家,这个目标看似不远,但我们要面对的可能恰恰是最难走的最后十里路
  
  以上是我前天看完《武侠》后回来写的,昨天路过国贸的一个电影院,在那儿又看了一遍《武侠》。
  我之所以想再看一遍《武侠》,主要有两个原因:一个原因是我想重新体验一下这部电影的整体氛围,该怎么形容它的整体氛围呢?感觉它既像是一座血迷宫,又像是一场黑梦;另一个原因则是王羽的吸引力,王羽在本片中的表演太出色了,他饰演的那个大反派气场奇大,他将中国传统社会中的父亲的种种抽象的邪恶完美地表演出来了,他演活了我说的那种恐怖的、黑暗的、无法无天的、嗜杀成癖的父亲
  重新看《武侠》,我对这样两个情节印象深刻,一个情节是汤唯饰演的阿玉哭着划上两道门闩,她想用这样一种方式保住自己的家,但这显然是徒劳的,无法无天的暴力之手可以摧毁一切(在电影中,后来就有这样一个情节:王羽饰演的那个大反派一拳击碎了阿玉家的房门),说到这儿我想起那句西谚:风能进,雨能进,国王不能进”——直到今天,中国人的房子依旧无法为中国人提供这样一种安全感。
  重看《武侠》,另一个让我印象深刻的情节是王羽饰演的大反派对他的儿子唐龙说:你的命是我的!然后又指着唐龙的儿子说:他的命也是我的!看完电影后回家,我跟张胖儿复述这段情节,然后我说:在中国,肯定还有很多父亲认为孩子的命是他给的。张胖儿听了后说:父亲就提供了一个小蝌蚪,就说孩子的命是他给的,这不是扯淡嘛。但如此扯淡的事儿,偏偏就有人信,还信了两千年。
  西方传统文明有一种弑父情结,中国传统文明却有一种弑子情结。在这个星球上,几乎所有动物都是幼本位,而中国人却是一种长本位的动物。
  在中国古代,皇权至高无上的主要理论依据就是:孩子的命是父亲给的,所以父要子亡,子不亡不孝。而皇帝是所有人的父亲,所以所有人的命都是皇帝的,皇帝想上谁就上谁,想阉谁就阉谁,想杀谁就杀谁……
  在现在的中国,依旧有无数人在做着这样的皇帝梦,电视里整天在放的那些宣扬皇权至高无上的电视剧就是最好的例证。另外还有一些官员,因缺乏有效的监管,所以他们在自己所管辖的部门或地区肆无忌惮、一手遮天,就像土皇帝一样……
  
  以往的很多武侠电影,它们其实是在变相宣扬皇权思想。还有一些武侠电影,片中的大侠最终杀死了无法无天的暴力最强者,这看似很解气,但最根本的东西一点都没有变,很快又会出现另一个无法无天的暴力最强者。这既像是一个死循环,又像是一个没有出口的血迷宫。
  而《武侠》这部电影想要探讨的就是,如何为这个血迷宫找一个出口?答案就是依靠科学和法律,只有这两样东西,才能终结这个国家黑暗蒙昧的状态。
  金庸说侠之大者,为国为民,但他让他笔下的那些大侠都生活在古代,所以他们至多只能除暴安良,当他们发现怎么除都除不完的时候,他们可能就会隐匿山林,独自逍遥去了。
  而将时间背景设置于1917年的《武侠》探讨的是终结一个黑暗蒙昧时代的可能,同时也是终结自身的可能,因为在一个真正现代的国家,是不需要武侠的。
  从这个角度来看,《武侠》还有这样一个主题:启蒙。今年是辛亥革命100周年,100年了,这个国家却依旧需要最基本的启蒙,对此你能说什么好呢?在当下的中国,《武侠》作为一部商业大片儿却跟主旋律对着干,费力不讨好地探讨启蒙这个主题,就因为这个原因,我给这部电影打五星。
]]>
http://dingxiaoyun555.blog.163.com/blog/static/12187005020116710226955 9 http://dingxiaoyun555.blog.163.com/blog/static/12187005020116710226955 Thu, 7 Jul 2011 10:22:06 +0800 2011-07-26T11:26:31+08:00
<![CDATA[肥肚腩是拒绝被爱的暗示吗]]> http://dingxiaoyun555.blog.163.com/blog/static/1218700502011530115220442

晚上出去吃饭,旁边坐着两女一男。从他们聊天的内容可以判断他们似乎是网友聚会,只是他们看上去肯定四十五岁以上了。后来那男的说“咱们三个都属虎”,我掐指一算,他们仨现在应该都是四十九岁。

这个岁数的人的网友聚会,我还真是第一次遇到呢。从他们聊天的内容判断,他们目前应该都是单身,可能都离婚了吧。

那两个女人都挺胖的,她们的经济状况应该还不错,而她们主要聊的都是情啊、爱啊等诸如此类的话题。

其中一个女人很大声地说她和一个男网友的交往状况,后来忽然说了这样一句话:“我们还没见面呢就要结束了!”

另一个女人也在说她最近在网上认识一男的,她和对方通电话,对方说自己不是帅哥,她说自己最不喜欢的就是帅哥了……

看着这两个女人,我想起了耳熟能详的一句中国俗语:“三十如狼,四十如虎,五十坐地能吸土。”这两个女人马上就要到“坐地能吸土”的年龄了,时代还真是进步了一点点,年近五十的女人也在为网恋苦恼呢,看来北京也有成为“欲望都市”的趋势哦。

只是这两个女人明显都是没有自制力的那种人,她们的嘴完全没法闲下来,她们不停地用吵嚷的方式聊天,不吵嚷的时候则一个劲儿地往嘴里塞东西。我相信现在在中国有很多这种缺乏自制力的中年女人,脑满肠肥的她们早早地就完全丧失了女性魅力,她们离了男人就像活不了了似的,而男人却会觉得跟她们一起生活还不如去死。

写到这儿我想起前天在一篇文章中我写了这样一段半开玩笑半当真的话:

刚才有豆友问我:“求泡妞终极技巧,谢谢。”我这样回复道:“泡妞终极技巧就是‘少吃一块糖’,我不是开玩笑,我是认真的……”这个也是泡帅哥、泡大款的终极技巧,就像那个最近的微博红人郭MM,你看她的泳装照,她小腹平坦且隐约有腹肌,这说明什么?这说明她是一个有“职业道德”的人,是一个有较强自制力的人,是一个能“少吃一块糖”的人。少吃一块糖,最好的帅哥和大款任你上……

同样是前天,我在微博里说:忽然想起一个奥利弗·斯通导演的《The Doors》中的一个情节,成名后体形走样的The Doors主唱吉姆·莫里森悲伤地看着自己的肥肚腩。摇滚明星和二爷、二奶的相似之处就是都不能有肥肚腩,否则就意味着在走下坡路了。25岁以后,想要没有肥肚腩需要很强的自制力啊。平坦的腹部是青春的标志……

王尔德曾说:“自恋是一生浪漫的开始。”原来我很喜欢这句话,但现在,我更倾向于认为,懂得自制才是一生浪漫的开始。

很多人都说外表是肤浅的,作为一个外表一般的人,我很希望每个人都认同以貌取人肤浅的这个观点,但这显然是不可能的。一个人所谓的内涵隐藏在哪里?隐藏于人的外表之中。在外表在这件事上,的确存在着不公平,不过天生外表不凡的人一方面是运气好,另一方面则要感谢他的所有先辈为了优化基因所做的各种努力。我们已经来到这个世界了,有些事是天生注定的,但还有一些事我们却可以着手去做,例如重塑身心的尝试。

]]>
http://dingxiaoyun555.blog.163.com/blog/static/1218700502011530115220442 11 http://dingxiaoyun555.blog.163.com/blog/static/1218700502011530115220442 Thu, 30 Jun 2011 23:52:20 +0800 2011-07-01T22:28:34+08:00
<![CDATA[有爱的性是最好的嫩肤霜]]> http://dingxiaoyun555.blog.163.com/blog/static/121870050201154112340536
很多年前,我上大学那会儿,我们学校里有一个“巡逻队”,是学校组织的,这个“巡逻队”成员都是学校的学生,他们每天晚上就在学校里巡逻,他们主要是晚上在学校里的树林和花园里巡逻,碰到那些在黑暗中野合的男女,他们就会如神兵天降般出现在他们眼前。
我的一个同学当时就是“巡逻队”的,参加这个“巡逻队”,学校每个月还会给他们补助一点钱,他曾给我讲过一些他“巡逻”时的见闻。
上大学时没觉得这有什么,现在想一想,会觉得这是很操蛋的一件事。因为这个“巡逻队”就像是那个喜欢监视和窥淫的老家伙们的一个人肉摄像头,我想那些老家伙之所以喜欢这么干,归根到底还是为了想要占有更多的性资源吧。
好像有部电影的名字是《交配后动物感伤》,那自诩为“高级动物”的人类呢?肯定多少会有些感伤吧,与此同时,人类的攻击性似乎也会在交配后减弱很多。而长期的性压抑,则可能会让人的内心不断分泌出“黑色的毒汁”(莫洛亚语)。在中国,这“黑色的毒汁”会被看作是一种东方的智慧,甚至变成了一种道德……
那些喜欢监视和窥淫的老家伙们最喜欢宣扬这种黑色的道德了。
在连大学都严重行政化的中国,不仅很多所谓的领导将占有更多性资源这件事作为炫耀的资本,即使是大学里的很多教授,私下里也以潜规则更多女大学生为荣。
有爱的性当然是最美好的,估计在某些人看来,为之流干最后一滴体液也是值得的,而无爱的性也并非全无是处。
无论是有爱的性,还是无爱的性,它们都是一种自我解放的手段,它们能帮助一个人认清自我,进而全力去做那些比性更好玩的事,然后完成自我实现。另外它们能帮助一个人释放压力,保持身体健康,它们还有可能成为爱臭美男女的嫩肤霜(很多事实都证明,有爱的性是最好的嫩肤霜)。你看那些脸色蜡黄的男孩儿和女孩儿,他们十有八九都长期处于性压抑状态,如果他们结束了这种状态,你会发现他们的脸色很快就会变好起来的。
很多和性有关的道德和谎言,究其本质,无非就是因为某些老家伙们想让年轻人变得更听话、更好管,进而大力宣扬——而更听话、更好管背后隐藏的则是更好上。
那些掌握权力的老家伙们对于年轻的肉体从来都是贪得无厌的……
所以呢,让自己束缚于那些老家伙们大力宣扬的道德和谎言,把自己压抑成一个脸色蜡黄的年轻人,这是很不划算的一件事。
崔健在《春节》里曾这样唱道:老人不再年轻,年轻人会老的,年轻人慢慢会老的……
年轻人慢慢会老的?在我看来,年轻人变老其实是很快的一件事,尤其是那些性压抑的年轻人,他们可能从未真正年轻过,就已经不可挽回地变老了。  
]]>
http://dingxiaoyun555.blog.163.com/blog/static/121870050201154112340536 19 http://dingxiaoyun555.blog.163.com/blog/static/121870050201154112340536 Sat, 4 Jun 2011 11:23:40 +0800 2011-06-04T11:49:22+08:00
<![CDATA[论单身男青年定期打飞机之必要性]]> http://dingxiaoyun555.blog.163.com/blog/static/12187005020114279639764
有时,我会有这样一种想法,即每一次打飞机都是一次大屠杀。同理,戴套儿嘿咻也是大屠杀。当然,如果细究的话,即使是以受孕为目的的嘿咻,也只有那些精子世界里的菲尔普斯们有可能成为幸运儿,而对于其他精子来说,那同样是一次必死的征程……
但是,如果你一直禁欲,精子也不会一直活着,它们可能会死在你的身体里,变成死精,而长期禁欲的后果就是会增加你患上前列腺炎的概率。
在《北京青年报》上曾看到一位男科专家说:“长期禁欲可能是导致慢性前列腺炎的原因之一。从这点上也可以证明规律的性生活对保护前列腺的重要性。”这位男科专家进一步指出:那些在外打工的男性,如果性压力长期得不到释放,患上慢性前列腺炎,也就没有什么可奇怪的了。
我想了想,在我认识的人中,有几个人的父亲常年在外工作,可能一年只能回一两次家,现在基本都饱受前列腺炎之苦。当然,从另一个角度来看,这也能证明他们在外工作的那些年没有“乱搞”?他们可能对定期打飞机这样的事都会有罪恶感,他们的确是标准的“好男人”。但问题就是,“好男人”就活该得前列腺炎吗?
他们之所以会有这样的人生,跟他们年轻时所接受的那种阴险或愚昧的“性教育”息息相关。
我始终认为,关于性的真相并不会毒害年轻人,最毒害年轻人的是那些关于性的谎言,在这个世界上,有很多别有用心的人最喜欢编织种种关于性的谎言,其中“手淫有害论”就是最恶毒的谎言之一。例如很多人都将“一滴精,十滴血”这一陈腐谬论搬出来,并说年轻人如果打飞机就会大伤元气,身体就会一点点垮掉,而某些年轻人也因此悔恨焦虑、惊恐不安。众所周知,健康男性一次射精约射出5毫升左右的精液,而现代医学对于精液的研究结果是:精液的98%左右是水分,其余2%左右是蛋白质和核糖核酸,还有极少的微量元素,如锌等。
只要不是过度频繁且毫无节制,定期适度打飞机不仅无害,反而有益。
孙云晓和张引墨合著的关于校园性问题的著作《藏在书包中的玫瑰》中有这样一段话:“在现实生活中,也确有一些青少年因手淫而精神萎靡,学习成绩下降,甚至悔不欲生。其实,手淫的害处并不在于手淫本身,而在于‘手淫有害论’带来的心理挫伤。手淫后的恐惧心理、犯罪感、自我谴责、悔恨心理才是一切手淫危害的真正根源。”
在本文开头,我说每一次打飞机都是一次大屠杀,这只是一个玩笑。如果你是一个没有固定性伴侣的单身男青年,或者你是一个搞异地恋的男青年,为了你的前列腺的健康,你还是定期适度打飞机吧,让你的精子带着希望出征,这本来就是它们期待的宿命,同时也是它们存在的意义之一……
]]>
http://dingxiaoyun555.blog.163.com/blog/static/12187005020114279639764 328 http://dingxiaoyun555.blog.163.com/blog/static/12187005020114279639764 Fri, 27 May 2011 09:06:39 +0800 2011-05-27T11:41:38+08:00
<![CDATA[贪爱是比好色更高级的欲望吗]]> http://dingxiaoyun555.blog.163.com/blog/static/12187005020114221074354
在一个标题为《没品笑话集》的帖子里看到这样一个笑话:我打飞机被老婆撞见了。她说:“哎呀,早知道你这么饥渴,我就跟你爱爱了啦。”我说:“假如我真的饥渴到了那种程度,我会告诉你的。”
今天下午我看了很多笑话,这个对我最有杀伤力……
在我上大学的时候,看《美国美人》,其中的男主角也是宁肯自己打飞机也不跟他老婆做。当时觉得那是一个黑色幽默的笑点,许多年以后,我意识到那可能是无数已婚男人都会做的很平常的一件事。
男人背着老婆看爱情动作片打飞机算出轨吗?我怎么觉得这个问题这么悲凉呢。
对于婚姻,很多女人的看法是,婚姻就像签合约,男人签了就必须遵守合约,不能违约。说到这儿我想起黄子华说的一句话:“我们结婚时会发好多誓,但从来不说做不到会怎样。”你看看,男人狡猾着呢。
那么女人呢,她们中的很多人的身体里可能潜伏着一个包法利夫人。
男人最致命的弱点就是好色,女人最致命的弱点就是贪爱。其实这两者的本质并无区别,都是如兽性般的本能,都为了填充自己内心中的那个无底的黑洞,那黑里面有什么?
但女人总认为贪爱是比好色更高级的欲望,所以她们会觉得哪怕有一天自己婚后出轨了,那也是她们的老公的错,因为她们会觉得自己在老公那里没有得到应得的爱。
小时候,总能看到电视里的男人想尽各种方法向女人求婚,当时就觉得大多数男人在现实生活中也会这样做吧。后来我渐渐明白这类情节只是为了满足女人的幻想,因为我发现在现实生活中,那样求婚的男人其实挺少的——当然,大多数女人肯定也不会向男人求婚了,但她们会运用各种手段,逼男人跟自己结婚。
前几天我说过这样一段话:若非青春苦短,谁愿来日方长?如果女人能永葆青春,估计女人也不愿意结婚……
可惜,女人不可能永葆青春,但还有一种情形会让女人对结婚的愿望不再那么迫切,甚至不愿意结婚,那就是当她们实现精神独立和经济独立后(当然,如果能实现财务自由那就更好了)。因为绝大多数人的婚姻,说白了就是一种资源的交换。例如现在依旧有很多女人实际上是将自己与生俱来的子宫当成一种资源,而很多男人则是将自己的财产当成一种资源,而他们的婚姻不过是这两种资源的交换。而如果一个女人在精神上和经济上都不用依赖男人,她自己既有子宫,又有实现经济独立甚至财务自由的能力,那她何必死乞白赖地想要结婚呢。从这个角度来看,随着社会的不断进步,当女人的经济地位和男人渐趋平等后,现在这种反人性的婚姻制度必然会走向衰落的。
我说绝大多数人的婚姻不过是资源的交换,很多人反对。其实换个角度来看,无论男女,长得好看、人聪明等等都是资源,因为这些都基因优秀的表象。试问,在这个世界上,还有什么比优秀的基因更抢手的资源?
现在的婚姻制度,对于很多有权或有钱的人来说,是事实意义的一夫多妻制或一妻多夫制,甚至多夫多妻制。但这些人又会控制主流舆论,让普通人遵循一夫一妻制的道德约束。他们为什么这么做?原因你自己去想吧。
顺便说一嘴,关于婚姻的很多传统价值观是基于当时的女性没有经济独立能力这一前提而产生的,如果一个现代女人已经经济独立了,却还遵守那个,那不是傻吗?而如果一个男人要求一个经济独立的现代女人遵循那些束缚女性身心的传统价值观,那他不是傻,他这是无耻……
]]>
http://dingxiaoyun555.blog.163.com/blog/static/12187005020114221074354 169 http://dingxiaoyun555.blog.163.com/blog/static/12187005020114221074354 Sun, 22 May 2011 22:07:04 +0800 2011-05-23T18:09:19+08:00
<![CDATA[关于秀恩爱这件事]]> http://dingxiaoyun555.blog.163.com/blog/static/121870050201141694533564
几个月前,关于秀恩爱这件事,我的看法是:看到很多到处秀恩爱的女孩儿最后都分了,看来除了要像某人说的那样要闷声发大财之外,还要闷声谈恋爱…… 

后来,我的想法变了。秀恩爱,分得快?周迅恋爱的时候倒是也都特高调的,当然,她之前那些高调的结果是都分了,但是,她起码享受了爱的过程了……

经常看到我的某些女性豆友今天秀恩爱,明天伤分手。按某知名化妆师的观点,女人不跟五十或八十个男人谈过恋爱,是不可能有魅力的。如果这个说法是正确的,女人的魅力之路还真挺漫长的。不过恋爱谈得多的女人看上去相对而言更聪明且更有活力倒是真的……

今天看到豆友陈小疯在说起了秀恩爱这件事,于是我回了这样一句:人生的本来面目就是无限荒凉,所以秀恩爱必然是没有好下场,但不秀也不会有好下场,所以秀或不秀其实没什么区别的……

我将上面这句话发到我的微博上,一个昵称为“吴蒋俊”的微博友邻这样回复道:“这是一个意外身亡和自然死亡的区别,都是死,可否不要死得那么四肢残缺内脏破裂身首异处屎尿横流……”

看到她的这句话,我又回了这样一句:但问题是,一个人如果选择一种可能会意外死亡的活法儿,获得的回报会远超过那些贪生怕死的普通人,正所谓“富贵险中求”,爱情也是要险中求的……

其实想一想,有时候狂秀恩爱,无形中就能把对方抓得更牢,于是更有可能来日方长,更有可能长相厮守。

但爱情就是“天长地久求一个安稳”?很显然,在很多时候,答案是否定的……

若非青春苦短,谁愿来日方长?如果女人能永葆青春,估计女人也不愿意结婚……

爱无永恒,偶有例外?
]]>
http://dingxiaoyun555.blog.163.com/blog/static/121870050201141694533564 51 http://dingxiaoyun555.blog.163.com/blog/static/121870050201141694533564 Mon, 16 May 2011 21:46:38 +0800 2011-05-22T10:27:30+08:00
<![CDATA[当我们谈论车震时我们谈些什么]]> http://dingxiaoyun555.blog.163.com/blog/static/12187005020114117344980   不知道为什么这次顾长卫没有找李樯来做《最爱》的编剧,是因为李樯作为编剧的《孔雀》和《立春》都是叫好不叫座的票房失利之作,所以他想有所改变?
  我估计《最爱》的票房过亿应该没什么问题,因为本片的看点、噱头以及各种可炒作的相关话题还是挺多的。
  所以我相信《最爱》下线后,想找顾长卫车震的女演员肯定会越来越多。
  顾长卫会因此志得意满吗?这个问题当然只有他自己心里清楚了,只是我估计他心里可能也会有一点点怅然若失的感觉。
  前几天我看一本关于艺术批评的书,其中有个外国艺术评论家提出一个观点,其大意是一个艺术家如果去搞庸俗艺术,这是一种“道德的堕落”,这意味着“他的意志完全是邪恶的”。
  我之所以想起这个观点,倒不是说顾长卫现在是有意识地开始搞所谓的“庸俗艺术”,只是相对于《立春》和《孔雀》,这部《最爱》出现了一定程度的庸俗化倾向却是不争的事实。
  我个人觉得这部《最爱》的结尾的表现手法是最大的败笔,它一方面过度煽情,一方面又在贩卖软色情,与此同时,它似乎还在赞颂着女主角的自我牺牲,这样几种情绪杂糅在一起,一切瞬间就变得浅薄了,感觉就像吃了一只苍蝇。我始终觉得,即使是主动的自我牺牲,也要用批判的眼光去看待……
  但我想这应该也不完全是顾长卫的错,因为既然他选择了拍这种投资相对较多的“大片”,那么很多事就不是他能说了算的了,资本的意志会自然而然地发挥作用,让这部电影变得更平庸一些,更保守一些,更滥情一些。
  另外这部电影之所以被拍成这样,同样还要归功于畸形的国内电影市场。而国内电影市场之所以畸形,原因显而易见,因为政治的干涉。由于没有电影分级制,导致一个内地导演除非彻底放弃国内的票房收入,否则他必须在拍片之前先自我审查一番,然后在拍片的时候不断自我阉割。
  说到这儿我想起曾有人总结出法国新浪潮电影的规范:“小规模,反传统,而且具备商业竞争力”。想一想,国内依旧还有一些电影导演坚持着这些规范(他们主要赚外国人的钱,其中有几位早已经名利双收了)。希望在不久的将来,他们可以在坚持自己的独立原则和个人风格的同时,在中国内地的电影院也能赚到钱。
]]>
http://dingxiaoyun555.blog.163.com/blog/static/12187005020114117344980 14 http://dingxiaoyun555.blog.163.com/blog/static/12187005020114117344980 Wed, 11 May 2011 19:34:49 +0800 2011-05-16T10:07:47+08:00
<![CDATA[哪吒为什么要自杀?]]> http://dingxiaoyun555.blog.163.com/blog/static/121870050201131875052102   前天看完了《爱情与灵药》,然后在微博上写了这样两段话:
  看了《爱情与灵药》,还挺好看。片中女主人公要跟男主人公分手的理由是:“我需要你胜过你需要我……这样不公平……”这句台词打动了我,但后来我想,爱一个人爱到想让他自由的地步,是不是还是希望他自由地飞走然后还会飞回来?就算那个人不回来,自己也会获得自我牺牲的快感……
  总能看到这样一类男人或女人,这些人会有这样一种想法:我如此爱你,所以我有权要求你为我有所牺牲。他们的这种想法是爱吗?如此丑陋的“爱”,竟然也能让他们沉溺于自我感动之中……
  
  上大学时,我翻完了萨特的那部状似板儿砖的著作《存在与虚无》,结果后来只对这一句话印象深刻:“恋爱者不想像人们占有一个物件那样占有被爱者;他祈求一种特殊类型的化归己有。他想占有一个作为自由的自由。”
  当时我看到这句话之后有一种豁然开朗的感觉,原来爱就是想占有“一个作为自由的自由”,我喜欢这种爱的方式。
  
  现在看电视,经常会看到一些古装剧依旧会有意或无意地灌输一种很腐朽的价值观,即将女性的身体物化。另外在现在的中国,有处女情结的男人依旧有很多,他们在潜意识里同样会物化女性的身体。
  而另一方面,现在有无数中国女人也总想通过限制男人的自由来换取婚姻的长久,而且她们可能也会在潜意识里将男人物化,即将他们物化成长期饭票儿、赚钱机器或提款机等诸如此类的东西。
  
  还好,除了这些电视剧之外,我们还可以看到像《爱情与灵药》这样的电影,另外我们还可以看到一些爱情动作片。
  今天早上我还在想,在我青春期的时候,像《爱情与灵药》这样的R级电影以及更刺激的爱情动作片中的那些丰腴肉身,曾在某种程度上解放过我的思想。她们让我明白了,即使她们和众多男人乱搞的视频被无数人看到了,她们也不用去寻死觅活,而且她们依旧可以过很正常的生活,很正常地和别人恋爱乃至结婚。
  也就是说,并不是一个女人跟男人上床了,她的身体就等于被“占有”了。
  在现代社会,“占有”别人的身体是一种很可笑、很无知的说法。
  在现代社会,没有任何一个人有资格、有权利去“占有”别人的身体。
  原因很简单,在现代社会,我们的身体是我们自己的。
  在人类进入现代社会之前,专制的那一套之所以行得通,其根源就在于掌权者会向人们灌输这样一种理论:你的身体不属于你自己。
  例如如果你生在中国古代,你就会被告知:你的身体不是你自己的,你的身体是属于生育你的父母,而皇帝则是所有臣民的父亲,那些官员也被称为“父母官”(在现代社会则正好相反,因为现代社会中的纳税人已经明白了他们才是政府和官员的衣食父母)。
  哪吒为什么要自杀?他可能就是想表达这样一个意思:父亲,你说我的身体是你给的,那好,我自杀!我将我的身体还给你!这样可以了吧?
  而如果哪吒是一个现代人,那他就可以对他父亲说:你说我的身体是你给的?你脑子有问题吧?你让我来到这个世界,你征求过我的意见吗?在我未成年之前,你可以遗弃我,但你也要承担相应的法律责任。
  
  为什么过去的皇帝总喜欢制定那么多关于性的戒律和禁令?因为他们要通过这样一种方式控制你的身体,他们要通过这样一种方式告知你,你的身体不属于你自己。这样他们就可以拥有对你的身体的绝对处置权——如果你是女人,他们想上你就上你,他们连“朕射你无罪”这样一句话都懒得说,因为他们会觉得他们上你那是看得起你;而如果你是男人,他们想阉你就阉你,你被阉了还得“谢主隆恩”,当然,他们同样也有可能上你,并且毫不在乎你的性取向是什么,也不在乎你愿不愿意。
  
  现在你知道那些作家、艺术家为什么拼命想要搞出一些被掌权者认定是“低俗”、“堕落”、“下流”的作品了吧?因为这和个人的自由息息相关——我们的身体是我们自己的,在没有伤害别人的前提下,我们和别人你情我愿地做爱做的事,你有什么权利忽然破门而入把我们抓走,然后把我们关进监狱?
  一个国家的公民能活得多自由,和这个国家的性开放程度几乎从来都是成正比的。而身体所承受的所有压抑,都源于政治的压抑。所以不要小看或鄙视90后搞出的这个“门”或那个“门”,那些“门”某种程度上也能推动时代的进步。]]>
http://dingxiaoyun555.blog.163.com/blog/static/121870050201131875052102 13 http://dingxiaoyun555.blog.163.com/blog/static/121870050201131875052102 Mon, 18 Apr 2011 07:50:52 +0800 2011-04-18T07:50:52+08:00
<![CDATA[在中国,谁是所谓的Loser]]> http://dingxiaoyun555.blog.163.com/blog/static/12187005020112761611735

在中国,如果你经常上网,你十有八九会遭遇这样的事儿:某些人可能会对你说你跟谁谁谁比算个屁啊。而他们说的谁谁谁通常可能是一些名人,也可能是一些很有钱或很有权的人。总之,他们想以这样一种方式打击你的自尊,提醒你是一个连屁都不如的东西。大概是出于一种“谦虚的美德”,这些人通常不会说:“你跟我比算个屁啊。”当然,这也可能是因为他们隐隐觉得自己其实同样也是一个连屁都不如的东西。

 

另外他们很喜欢从物质层面上打击你,虽然他们自己可能也正在过着一种“手停口就停”的生活。例如如果你没房没车,他们可能会说你就是一个Loser;而如果你有房有车,他们可能会说你不就有个小破房子小破车嘛,跟那些住别墅的人比你算个屁啊;如果你住上了别墅,他们可能会说你跟比尔·盖茨比算个屁啊……

 

除此之外他们还很喜欢地域攻击,举个例子,这是我的亲身经历,昨天有一个无聊的人跑去看我的微博,一条一条地看,然后他终于找到了一个“破绽”来攻击我,然后他这样回复我写的一个帖子:“你自己不过是一个在北京打工的外地乡下人,户口也没有,被北京房产限购政策搞得鸡飞狗跳的……”我回了他这样一句:“我想问问,你有北京户口吗?如果你有,OK,那如果你去上海,某些上海人照样也会像你说的那样,说你是在上海打工的‘外地乡下人’,你觉得用这个攻击别人很有意思吗?”

 

当我还在上大学的时候,当我看到一个所谓的Loser,我会这样想:这是因为这个人不够努力。当我大学毕业步入社会后,我发现在这个国家,所谓的Loser数以亿计。而现在的我更倾向于这样看待这个问题:如果一个社会缺乏自由和公正,那这个社会中绝大多数人都是Loser,这个不是努力还是不够努力的问题,而只是一个单纯的概率问题……

 

现在,在这个国家,既得利益者们为了共同的利益倒是能相对紧密地团结起来,除此之外,而社会底层则基本完全碎片化了,大家互相歧视,甚至互相仇视。很多人通过看不起别人来维持自己的“优越感”,他们最擅长用压迫者的口气说话,但却拥有着被压迫者的生殖器。

 

有时候我也觉得很奇怪,为什么这个神奇的国家会诞生出那么多互残文化?例如中国的酒文化,很多人似乎非要将同桌的人喝吐血或是直接喝进医院,才能获得心理满足感。再例如在中国的学校里,有些老师打击学生的自尊和自信的时候,几乎可以用丧心病狂来形容。甚至在家庭里也是一样,有些家长在教育自己的孩子的时候,同样会想方设法摧毁孩子的自尊和自信。由于从小经历了这样的教育,使得很多孩子在长大后,可能连某些最基本、最正当的权利都不敢去争取。

 

前一段时间,《人民日报》搞出这么一句“名言”:“我们不能脱离现实发展水平去盲目追求社会公正。”社会公正很难追求吗?的确很难追求,因为某种意义上,社会不公正的根源只有一个,那就是权力压制权利。而权力这东西,它肯定不会自己跑进笼子里。

 

曾经有一个豆友问我为什么一直咬住户籍问题这么长时间,觉得我挺没劲的。我的回复是:这个问题和我的切身利益息息相关,我想发出一点我自己的声音,虽然这声音可能很小很小,但我还是想发出我自己的声音。很多时候,如果大家都能发出自己的声音,去争取那些本该属于自己的权利,那么这个不公正的社会就会发生一点一滴的改变,同时那种自身权利每天都被权力损害,却还喜欢用压迫者的口气去侮辱和自己同样身处社会底层的人的蠢货应该也会变得越来越少了吧。

]]>
http://dingxiaoyun555.blog.163.com/blog/static/12187005020112761611735 20 http://dingxiaoyun555.blog.163.com/blog/static/12187005020112761611735 Mon, 7 Mar 2011 18:16:11 +0800 2011-03-07T18:57:27+08:00
<![CDATA[我们天上人间见]]> http://dingxiaoyun555.blog.163.com/blog/static/1218700502011259151534   在看《观音山》之前,我回想了一下,忽然发现李玉此前拍的三部剧情片我竟然都看过,但每部看完都比较失望,尤其是《苹果》,当时看完我还说过那部电影就像一个“打擦边球的怪胎”。
  今天去看了《观音山》,也许是因为我对李玉这位导演的期待值比较低,所以看完这部《观音山》之后,我发现它比我想象的要好那么一点点。
  我想李玉可能是想把自己定位为一位艺术片导演,但她对于自己的导演水平也挺有自知之明的,估计她也知道自己的电影很难像国内的某些艺术片导演那样拿个金棕榈、金狮或金熊之类的大奖,然后通过赚老外的钱来帮投资人先收回成本再大赚一笔,所以她只能在拍艺术片的同时瞄准国内电影市场。但你也知道,大多数国产艺术片想要在国内电影市场收回成本几乎比登天还难。所以李玉将自己最近的两部电影都搞成了话题之作,而她的立场则是伪文化精英式的擦边球立场。当然,这也没什么可指责的,要怪只能怪现在的国内电影市场太畸形了,而李玉的这种尝试,某种意义上也给国产艺术片导演指出了一条新路,即拍一种中国特色的国产商业艺术片,然后想办法用相对比较省钱但又很管用的方式大力营销。
  《观音山》在公映之前,营销工作做得还挺成功的,尤其是本片的主题曲由范晓萱作曲,韩寒作词,他们的这一招儿狠狠地扼住了无数豆瓣文艺青年的七寸,由此产生的话题效应还挺大的。说到这儿我想起今天看完电影,我还跟张胖儿开玩笑说:高考落榜何处去,韩寒遥指观音山……
  
  在看《观音山》的时候,我对于这样一个问题有些疑惑不解:为什么不让片中的人说方言呢?听着陈柏霖和范冰冰扮演的外省青年操着一口多少有些港台腔和北京腔的普通话,感觉就像是这样一种暗示:这是一个乱编的故事。
  看《观音山》的前半段,感觉导演讲述的那个残酷青春的故事实在有些小儿科,这个故事被讲述得既不够真实,也不够深刻。而张艾嘉在本片中的“绝望表演”也因为过于用力而有煽情之嫌。如果你看过很多非常经典的艺术片,你会发现那些艺术片导演在叙事的时候几乎从来都是隐忍而节制的,他们更倾向于让观影者自己去想象生活中真正残酷且绝望的那些东西,这就好像海明威的“冰山法则”。而李玉在本片中过于用力且不知节制的叙事,也让本片丧失了成为经典艺术片的可能。
  
  如果说《观音山》这部电影和国内同类电影相比有什么新意的话,那就要说本片最后通过宗教完成了一次还算是比较成功的升华。对于本片的这种升华,我在看完电影后跟张胖儿开玩笑说:“蒋雯丽拍了一部《我们天上见》,我觉得李玉的这部电影也可以命名为《我们天上人间见》,这个‘天上人间’不是北京朝阳区的那个‘天上人间’,而是天上的极乐世界,估计这部电影里张艾嘉演的那个人最后就去了我说的这个天上人间了,在那儿她就能跟她死去的儿子以及她老公团聚了……”
  都说当下的中国人缺乏信仰,导致自己的心灵居无定所,道德体系分崩离析,现在政府的做法是把孔子又给搬出来了,看来当初的新文化运动是白搞了。爱因斯坦曾说佛教是最契合现代科学的一种宗教,真是这样吗?不过不管怎么说,作为一部国产商业艺术片,将残酷青春和佛教嫁接在一切,倒也算搞出了一点新意。
  
  另外在《观音山》的结尾,导演让男主人公和自己的父亲达成了和解,并暗示观影者:被过去那个时代洗脑的父辈现在过得也很苦啊,他们也是受害者。
  一个人一旦原谅了他的父亲,某种意义上也就意味着他告别了自己的青春。
  希望这一代告别了青春的人在当了父亲之后,能更合格一点,想办法让自己的孩子活得更快乐一点,更自由一点,这样他们的孩子在长大之后,应该就能如陈丹青所说的那样长着一张“没受过欺负的脸”了吧。
  
  最后再说几句题外话,你看李玉虽然到目前为止,电影拍得还是不怎么样,但你想一想,她现在才37岁,在她不到27岁的时候,她就已经拍出了自己的第一部剧情长片,然后一部接一部地拍到现在。她这么拍下去,在未来的某一天她没准儿真能成为一个电影大师也说不定。估计每一个文艺青年都有自己的梦想,其中大多数人会苦苦思索所谓的实现梦想的秘诀,他们可能会一直思索到自己大小便不能自理的那一天。还有一些人,则像李玉那样,他们不会像大多数人那样把自己的梦想给供起来,他们对待梦想的方式是霸王硬上弓,不管三七二十一,扑上去就开始乱搞,没准儿搞着搞着就把梦想给搞定了。]]>
http://dingxiaoyun555.blog.163.com/blog/static/1218700502011259151534 8 http://dingxiaoyun555.blog.163.com/blog/static/1218700502011259151534 Sat, 5 Mar 2011 09:15:15 +0800 2011-03-05T09:15:15+08:00
<![CDATA[如何成为富二代他妈的老公]]> http://dingxiaoyun555.blog.163.com/blog/static/121870050201111074020174   今天我和张胖儿一起去看了电影《青蜂侠》,在看之前我对本片的期望并不高。在买票的时候,我发现本片的票价比其他电影要贵一些,便问售票员为什么会这样,售票员对我说:“这部电影是数字3D的。”在此之前我还真不知道这部电影是数字3D的,当时我心想:“原来这鸟片儿还是3D的。”而当我看完本片之后,我对张胖儿说:“这鸟片儿还不错,至少比前一阵儿看的那部鸟3D片儿创什么战纪的要好看一些。”
  话说我对这种商业大片的要求一向不高,由于我在电影院看电影的时候经常会睡着,所以一部商业大片对于我来说只要没有“睡点”,即看的时候没有让我昏昏欲睡,那我就会认为这部电影还不错。说到这儿我想起前一段时间看那部鸟3D片儿创什么战纪的我就睡着了,另外这两年让我看睡着的商业大片还有《变形金刚2》和《爱丽丝梦游仙境》。
  
  说回正题,继续说《青蜂侠》。众所周知,《青蜂侠》主演之一周杰伦有成为“烂片之王”的趋势,估计这也是很多人在没看本片之前就开始痛骂本片的原因之一吧。
  说到周杰伦,我不禁想起前一段时间我的饭友莫筱涵说的这样一句话:“我其实好想看周杰伦不戴假发的样子,虽然我是他的粉,但这个邪恶的想法不是我的错。”很久以前我也看到过一些关于周杰伦戴假发的八卦,而今天看《青蜂侠》,第一次看到3D版的周杰伦,感觉他的头发果然有些怪怪的,希望这只是因为我的某种心理作用在作祟。
  
  除了周杰伦传说中的假发,在看《青蜂侠》的时候,我一直在想这样一个问题:在全球化的时代,无数现代男人都有一个渴望反体制的超级英雄梦,而现代社会对于个人的控制越来越加强了,想要靠个人的力量反体制,这几乎是一件不可能的事了,于是西方的电影导演们就一次又一次地拍这种超级英雄电影。
  我相信很多中国电影人也想拍一些和中国社会现状息息相关的超级英雄电影,但不用我说你也知道,这样的电影在现在的中国是很难通过审查的,于是中国电影人就只能另辟蹊径,于是他们会去拍一些将历史背景设置在近代或古代的超级英雄电影,如果他们中的一些人的心里还有一些情怀的话,这些人就会借古讽今,例如姜文的《让子弹飞》,我个人认为《让子弹飞》是中国迄今为止最成功同时也是最好看的一部超级英雄电影。
  而《青蜂侠》作为一部超级英雄电影,我个人认为它还算是比较好看的一部了,里面笑点还挺多的。另外看本片的时候,我最大的感慨就是:当一个超级富豪或是当一个富二代真爽啊,因为他不禁可以和一群大长腿九头身美女开群P派对,他还有可能成为一个替天行道、惩恶扬善甚至拯救地球的超级英雄,最典型的几个例子就是蝙蝠侠和钢铁侠,另外还有本片中的青蜂侠。
  也就是说,如果你是一个穷二代,你还想成为一个有能力拯救地球的超级英雄,那你基本上就只能去找那只曾经咬过蜘蛛侠的超级毒蜘蛛,然后冒着生命危险让它也咬你一口。
  
  说到这儿我想起我父亲在上个世纪90年代中期不知道用什么办法曾搞到过100万人民币,他本来有很大的机会用这笔钱作为本钱然后赚到更多的钱,进而让我和我弟弟成为富二代,可那100万人民币很快被他吃喝嫖赌挥霍一空,后来他更是欠了一屁股债,这使得我和我弟弟彻底丧失了成为富二代的可能性。
  我曾经对张胖儿说:“现在,我最大的梦想就是让你成为富二代他妈,而我则是富二代他妈的老公。”当我看完《青蜂侠》,我就在想,如果我实现了我的这个梦想,那我的那个尚未出生的孩子就有可能成为一个可以替天行道、惩恶扬善甚至拯救地球的超级英雄了,太帅了……
  
  说回到《青蜂侠》,关于本片,我还有这样一个感悟,那就是像本片中的那个跟黑帮勾结的检察官那样掌握权力的人想方设法搞出来的信息不对称是这个世界上的万恶之源,某种意义上,那些见不得人的罪恶乃至极权或专制之所以能存在于这个世界上,靠的就是这种信息不对称。
  所以在老外拍的无数部电影中,我们总能看到主人公为了让罪恶的真相公布于众而万死不惜这样一种主题,这在西方几乎都快成了一种陈词滥调了。
  我希望有一天,这样的主题在中国也能成为一种陈词滥调,而这也是我除了想成为富二代他妈的老公之外的另一个梦想。]]>
http://dingxiaoyun555.blog.163.com/blog/static/121870050201111074020174 8 http://dingxiaoyun555.blog.163.com/blog/static/121870050201111074020174 Thu, 10 Feb 2011 19:40:20 +0800 2011-02-10T21:13:34+08:00
<![CDATA[如何像人一样彼此相爱]]> http://dingxiaoyun555.blog.163.com/blog/static/121870050201116093962
有些女人在爱的时候可能会因为自己相对较少考虑下半身的问题,就会拥有这样一种虚妄的道德优越感,即认为自己是在用心去爱,而男人则是在用自己的小弟弟去爱……

都是受生殖本能的驱使,谁的爱天生就能更高尚一些啊?看穿了其实都是一回事儿……

女人受生殖本能驱使,可能会渴望她爱的那个男人一生一世只想睡她一个人,而那个男人受生殖本能驱使,却可能会想睡一万个女人。这真是一个矛盾,但如果这个矛盾不存在,估计人类现在还在茹毛饮血,甚至有可能已经灭绝了。

既然男人拥有总想着到处“播种”这样一种基因本能,那他们为什么会心甘情愿守在某一个女人的身旁呢?估计是因为如果他们天天出去乱搞,那别的男人就可能会趁虚而入,去他们家和他们的女人乱搞,这样他们日后辛辛苦苦养大的就有可能是别人的孩子。

中国古代男人为了解决这一难题,他们殚精竭虑想出了很多办法。例如他们中的一些人如果当上了皇帝,就会把自己的女人都关在后宫,并将有可能接触到这些女人的男人都阉了。不过鉴于能当上皇帝的中国男人就那么几个,皇帝有办法看住自己的女人,那普通老百姓怎么办呢?于是一些极度伪善的“圣人”又想出了“饿死事小,失节事大”或三从四德等诸如此类的道德价值观来压制中国女性。

很显然,在中国古代,男人对女人的全面压制搞得挺成功的。但这个国家也因此付出了巨大的代价,为什么这么说呢?因为某种意义上,男女之间的冲突和摩擦是推动人类社会进步的最强大动力,我想这也许可以用来解释为什么中国从明清开始不断退步,到了清末更是孱弱到不堪一击,也许就是因为那时的中国男权文化对女性的彻底压制,扼杀了中国男女间的大多数冲突和摩擦。

也许上述说法有些抽象,如果往具体了说,我们可以这样解释这个问题,一个男人受生殖本能的驱使,他想去追求他喜欢的女人,那他肯定就要想各种办法去吸引他喜欢的女人,例如他要想办法让自己的身体变得更强壮,他要想办法讨得他喜欢女人的欢心,他要想办法拥有足够多的资源进而让他喜欢的女人相信自己能好好地养她以及他们的孩子。简而言之,他要想方设法让自己进化得更强进而吸引他喜欢的女人。而如果在一个社会中,绝大多数女性的身体完全被物化,被商品化,可能就会使得绝大多数男人觉得自己根本没有必要花心思去思考如何吸引女性,也没有必要去想如何讨女人的欢心,甚至都不用去想如何不断增强自己的男性魅力。

另外你也知道,在中国古代,资源分配方式又极度不公平,使得无数社会最底层中国古代男性即使拼命努力,还是无法改变自己贫贱的命运,这也使得命贱如草的他们根本没有机会拥有足够多的资源进而去吸引女性,所以他们也就不思进取进而让自己进化得更强了,因为他们想要养活自己可能就已经需要他们流尽血汗了。说到这儿我又想起了胡适曾说过的这样一段话:“人世的大悲剧是无数的人们终身做血汗的生活,而不能得着最低限度的人生幸福,不能避免冻与饿。人世的更大悲剧是人类的先知先觉者眼看着无数人们的冻饿,不能设法增进他们的幸福,却把‘乐天’、‘安命’、‘知足’、‘安贫’种种催眠药给他们吃,叫他们自己欺骗自己,安慰自己。”

也就是说,在中国古代,绝大多数社会底层的男人和女人一样,都活在一个巨大的谎言之中,他们被侮辱,被伤害,活得毫无尊严。由于历史拥有巨大的惯性,使得这个巨大的谎言在21世纪的中国依旧很有市场,使得一些很腐朽、很肮脏的道德价值观依旧在这个国家大行其道。这也使得无论是中国男人,还是中国女人,想要在21世纪的今天像人一样活着,像人一样彼此相爱,同样需要付出巨大的努力。还好,我们要比中国古代的男人和女人幸运一些,因为我们拥有了改变自己进而实现精神独立和财务自由的可能性,而如果我们努力改变自己,这也意味我们在一点一滴地改变着这个国家,进而让更多的中国人可以像人一样活着,像人一样彼此相爱。
]]>
http://dingxiaoyun555.blog.163.com/blog/static/121870050201116093962 60 http://dingxiaoyun555.blog.163.com/blog/static/121870050201116093962 Sun, 6 Feb 2011 12:09:03 +0800 2011-02-06T12:09:03+08:00
<![CDATA[子宫不是少年宫]]> http://dingxiaoyun555.blog.163.com/blog/static/1218700502011020101358752
昨天看到有人在微博上转了连岳说的这样一句话:“我总觉得,那种老派的想法,女性一到分手,就觉得自己吃了亏,是标准的自我野鸡化。”刚看到这句话的时候,我沉静一笑,觉得这句话有点儿意思。但后来我又仔细反思了一下,我个人觉得这句话有待商榷。

例如对于很多除了自己年轻的身体之外几乎一无所有的年轻女孩儿来说,恋爱某种意义上可能就是一种性投资,而如果分手了,就意味着她们的性投资失败了。很多女孩儿都很喜欢说这句话:长痛不如短痛。另外女孩儿凭借直觉和男朋友分手的时候通常特别冷酷且决绝,这其实是一种繁殖本能,而女性的直觉则是用上百万年时间进化出来的一种基于繁殖本能的智慧。因为对于一个20多岁的女孩儿来说,从生育的角度来看,她最好的时光也就那么几年了。所以她知道自己耗不起的,耗来耗去就成黄脸婆了。女性依靠直觉冷酷而决绝的迅速分手,十有八九都是明智的选择,否则真有可能会很吃亏。

再例如很多女孩儿在恋爱的过程中曾一次或多次做流产手术,有些女孩儿因此得了妇科病,还有一些女孩儿甚至因此永远丧失了生育能力,这肯定应该也算是吃了亏了吧。说到这儿我又想起在豆瓣某小组里看到的这样一句话:子宫不是少年宫,不是谁的孩子都能进来。原话记不清了,大意如此吧。所以说呢,避孕这件事,尤其是买套儿这件事,女人要比男人更上心,因为子宫没长在男人身上,而男人为了爽那么一下,什么事都能做出来,这就好像李碧华所说的那样,“男人在黑暗中特别勇敢”,这应该也是男人的繁殖本能吧。

在上文中,我多次提到了繁殖本能,但人类之所以有别于其他动物,最主要的区别就在于人类可以让自己的生活不必完全受困于繁殖本能,这也是一个人有可能活得很有意思的最重要原因之一。尤其是对于现代女性来说,受益于有效的现代避孕技术,使得现代女性的生活拥有了更多的可能性,例如靠自己的努力实现精神独立和财务自由。

如果一个女人实现了精神独立和财务自由,那她就能更好地保护自己,而且在结束一段恋情的时候,估计吃亏的感觉也不会太强烈吧。但你也知道,一个女人想要实现精神独立和财务自由肯定很难。还好,女人的繁殖本能也使得很多女人只要能成为一个贤妻良母就会觉得自己活得很有成就感,所以如果你凭借你的直觉嫁给了一个对的人,生了一个或几个健康漂亮的小宝宝,那你同样也能活得很开心。只是请原谅我再罗嗦一句,如果你能成为精神独立且财务自由的贤妻良母,估计你会活得更开心吧,只是想做到这一点更是难上加难啊。
]]>
http://dingxiaoyun555.blog.163.com/blog/static/1218700502011020101358752 13 http://dingxiaoyun555.blog.163.com/blog/static/1218700502011020101358752 Thu, 20 Jan 2011 10:13:58 +0800 2011-01-20T10:39:21+08:00
<![CDATA[卡门永远是自由的]]> http://dingxiaoyun555.blog.163.com/blog/static/121870050201101262029798 刚才看到天涯上的一个帖子,其大意是一个男人在他老婆身上花了很多钱(这里所说的“很多”主要是参照这个男人的收入状况),投入了很多“爱”(我必须在这句话中的“爱”这个字上打引号),然后他通过偷看他老婆的日记的方式发现他老婆一直处于精神出轨状态,就连跟他亲热时有时也会把他假想成另一个男人,于是这个男人毒打了他老婆四小时……

如此变态的“爱”,竟然也有很多人叫好,这只能说明这个国家其实还没有真正开化。

当然有人也许会说:爱就是自私的,不自私就不是爱。

对于持这种观点的人,倒不一定非要将王小波的这个观点扣到他们头上,即爱一个人要爱到不自私的地步。因为如果一直反思下去,我们可能就会发现:我们在爱一个人的时候假装自己不自私,甚至假装到连自己都被骗了,其目的可能只是为了能得到对方的心,或是让自己看上去像是一个“好男人”,并因此获得精神层面的愉悦和满足(当然,他这么做的结果将十有八九要以失败而告终,因为一个女人很难发自内心地爱上一个“好男人”,男人不坏,女人不爱,这句话虽然已经烂大街了,但很多时候,事实就是如此)。

从这个角度来看,所有的“爱”其实都是可疑的,就像我前几天在我的微博上说的那样:很多人在说“我会爱你一生”时,其真实意图可能是:我想占有你一生;我想折磨你一生;我想靠吸你的血活完这一生……当然,还有一些人说这句话可能只是为了骗得几夜温存或几沓钞票……

所以这非常可疑的“爱”绝对无法成为一个人可以向他自以为深爱的另一个人实施暴力的借口,不管是真爱还是假爱,只要他是一个生活在现代社会中的现代人,无论他多爱那个人,他都没有对那个人实施暴力的权利。

同样的道理,所谓的“道德”同样不能成为一个人对另一个人实施暴力的理由……

写到这儿,我又想起了《卡门》,卡门如果是一个生活在现代社会的现代女孩儿,那她可能不会任由她昔日的爱人那么轻易地杀死她。但这是她自己的选择,而杀死她的人则必须承担相应的代价。

我不知道是不是每个女孩儿的心里都活着一个卡门。

我只知道,卡门永远是自由的。]]>
http://dingxiaoyun555.blog.163.com/blog/static/121870050201101262029798 42 http://dingxiaoyun555.blog.163.com/blog/static/121870050201101262029798 Wed, 12 Jan 2011 18:20:29 +0800 2011-01-13T04:10:02+08:00
<![CDATA[在下一个十年,你想做什么?]]> http://dingxiaoyun555.blog.163.com/blog/static/1218700502010113044456108 十多年前,朴树出了一张新专辑《我去2000年》,他这样唱道:“新世纪来得像梦一样……我们的未来该有多酷……”

现在这新世纪转眼已经过去十年了,现在这生活就是我当初所幻想的那种很酷的未来吗?

在2010年11月的时候,我发了这样一条微博:点开《无极》的豆瓣主页,先是看到该片的豆瓣评分,不禁沉静一笑。随后又看本片的上映时间,心里一惊,这片是2005年上映的?太可怕了,已经过去五年了?我怎么觉得看到满大街都是《无极》广告好像是两三年前的事呢?什么是白驹过隙,也许这就是白驹过隙……

五年如白驹过隙,十年如白驹过隙,时间真的存在吗?是不是只有人类这时间的囚徒才会思考这该死的问题:那些过去的时光都流逝到哪里去了?

在上学的时候,我们动不动就对别人说,我永远喜欢你,我要永远和你在一起。现在想一想,那时我们所说的永远可能比十年还短。

想一想这过去的十年,我都做了什么?似乎做得最多就是在网上点来点去。今天早上我写了一首打油诗:“显示器前一群猪,每天上网不看书。青春易逝梦易碎,早晚有天呜呜哭。”其实我自己就是这样的一头猪,我在网上看过无数的信息,无数的八卦,我还在网上下过无数部爱情动作片,但每一部我都是快进着看完的……

关于下一个十年,我还没有定好明确一些的计划。但我已经想好了,在下一个十年,我一定要尽可能少在网上点来点去浪费时间,因为现在从岁数来看,我已经不算很年轻了。杨德昌说:“年轻是一种品质,而不是数量,一旦拥有就不会失去。”从这个角度来看,有些人可能从未真正年轻过,有些人却能永远不老。我曾经真正年轻过吗?这还真不好说。而年轻,或者说青春,它又是怎样一种品质呢?这个问题我要想一想。

王尔德曾说我们想要重返青春其实非常简单,只要我们不停地做蠢事就可以了。这似乎是他的一句戏谑之语,但我发现这可能的确是一条重返青春之路。不停地做蠢事,这有些类似于美国苹果公司创始人斯蒂夫·乔布斯挂在嘴边的那句:“保持饥饿,保持愚蠢。”

为什么要保持饥饿,保持愚蠢?某种意义上,如果一个人贪图安逸,放弃战斗,害怕冒险,这意味着青春已逝。从这个角度来看,青春最重要的品质也许就是不贪图安逸,不放弃战斗,不害怕冒险。

在下一个十年,我要想方设法活得更有意思一些,我要去战斗,去冒险,就像GALA在《飞行员之歌》中所唱的那样:“我一定穷尽所有力气坚持到底……在世界末日之前你是我的唯一……”

在下一个十年,你想做什么?]]>
http://dingxiaoyun555.blog.163.com/blog/static/1218700502010113044456108 9 http://dingxiaoyun555.blog.163.com/blog/static/1218700502010113044456108 Thu, 30 Dec 2010 04:44:56 +0800 2010-12-30T04:47:10+08:00
<![CDATA[比死更可怕的事]]> http://dingxiaoyun555.blog.163.com/blog/static/12187005020101127112415333 有没有人像我一样,看《非诚勿扰2》后半部分的时候哭得就像个傻逼一样啊?
前几天就在网上看到某女说她看到她身边有几个老男人看此片看得一把鼻涕一把泪的,她对此表示非常不屑。不屑就不屑吧,男人自己哭爽了才是真的,N年前我就发现,有时哭真的比做爱更爽,哭完会有心旷神怡的感觉,特减压,特舒服……
另外据说哭还能排毒呢,为什么女人普遍比男人长寿?女人更爱哭、更爱宣泄自己的情绪据说也是原因之一。
今天去看完《非2》后回来看此片的豆瓣评论,发现恶评如潮,这倒也在我意料之中,看本片前半段的时候我也觉得特没劲。还好,孙红雷扮演的那个叫李香山的人得的那个绝症在某种程度上挽救了这部电影。
如果你是一个男人,如果你看《非2》后半部分没有哭,我觉得可能是因为这样两个原因,一是因为你还很年轻,二是因为你还没结婚,或者两者兼而有之。
今天看完这部电影后,我和我老婆走出放映厅的时候,看到过道边儿的座位坐着一对儿大概60岁左右的老夫妻,男的还坐在那儿默默抽泣,女的则轻轻地拍着她老公的手……

冯小刚和王朔在《非2》这部贺岁片里简单探讨了一下婚姻与死亡。在某些人看来,这两者其实是有相似之处的,就像某饭友说的那样:“送人进坟墓的买卖钱都特别好赚,比如说丧葬行业,比如说婚庆行业。”
据说想要让婚姻长久,就要让爱情变成亲情,对此我曾这样戏谑道:爱情变亲情,做爱像乱伦。话可以说得很轻松,但在这两年,我的确渐渐发现我和我老婆变成了一种亲情关系了,几个月前我在微博上曾写过这样一段话:老婆在家的时候,有时她会跟我吵架,吵得天昏地暗的,她说现在就离婚,我心里甚至会想:好啊,求之不得呢,烦都被你烦死啦;最近一周,老婆不在家,忽然才发现,原来她已经成为这个世界上我最亲的亲人了……
记得美国有一个女性人类学家曾说:很多男人努力赚钱,进而让自己变成女人最喜欢的那种平庸男人。原话记不清了,大意如此吧。在我非常非常年轻的时候,我特别特别害怕我会成为那样的平庸男人。而现在,虽然我还是不甘平庸,但我接下来要做的还真就是要像一个偏执狂那样去赚钱,就像《非2》中孙红雷扮演的李香山说的那样,成为一个“跟钱着了大急”的“钱串子”。
我现在越来越觉得,在这样一个时代,你只是用一些好听的话来表达你所谓的爱是不道德的,甚至是可耻的,你只能用物质来表达你的爱,你只能用实际行动来表达你的爱。你可以说这很浅薄,但我宁愿浅薄,也不愿意给我爱的人灌那种教人如何克服虚荣和物欲的心灵鸡汤。
孙红雷扮演的李香山这个角色,你可以说他玩世不恭,你也可以说他游戏人间,但他毕竟用实际的行动以及足够的物质保障让他爱的人活得更快乐、更自由……

我相信王朔在过去的十来年没少思考死亡,你就看他这几年写的那些东西吧。而在《非2》中,王朔也借孙红雷扮演的李香山这一角色简单探讨了死亡这一主题。
某种意义上,只要我们来到人世间,我们都是身患不治之症的生物,这种不治之症就是死亡,大家有所不同的是早死还是晚死,反正早晚都得死。孙红雷扮演的李香山说他不怕死,就怕生不如死。生不如死是怎样一种感觉?我是这么想的,每天为了生存不得不去做自己打心眼儿里就不想做的事,并因此郁闷得要死,我觉得这就是生不如死。某种意义上,这可能是比死更可怕的事。
既然如此,那我们就去做那些我们打心眼儿里想去做的事呗。你可能会说,哪他妈那么容易啊,做我打心眼儿里想去做的事,那就等于是去追求我的理想了,理想能是那么容易实现的吗?在2010年的平安夜,豆友张百万说了这样一句话:“圣诞快乐,生活不会因为你放弃理想而变得简单一点点的。共勉之。”而他的这句话也让我想起了中国某著名房地产商说的一句话:“全世界赚钱最多的人是谁?恰好是追求理想,顺便赚钱的人;而不是追求赚钱,顺便谈理想的人。”真是这样吗?我觉得我们至少可以试一下,趁我们还年轻。]]>
http://dingxiaoyun555.blog.163.com/blog/static/12187005020101127112415333 9 http://dingxiaoyun555.blog.163.com/blog/static/12187005020101127112415333 Mon, 27 Dec 2010 23:24:15 +0800 2010-12-27T23:34:58+08:00
================================================ FILE: api/test/data/feed/django ================================================ The Django webloghttps://www.djangoproject.com/weblog/Latest news about Django, the Python Web framework.en-usFri, 01 Jun 2018 10:32:48 -0500Django bugfix release: 2.0.6https://www.djangoproject.com/weblog/2018/jun/01/bugfix-release/<p>Today we've issued the <a class="reference external" href="https://docs.djangoproject.com/en/stable/releases/2.0.6/">2.0.6</a> bugfix release.</p> <p>The release package and checksums are available from <a class="reference external" href="/download/">our downloads page</a>, as well as from the Python Package Index. The PGP key ID used for this release is Carlton Gibson: E17DF5C82B4F9D00.</p> Carlton GibsonFri, 01 Jun 2018 10:32:48 -0500https://www.djangoproject.com/weblog/2018/jun/01/bugfix-release/Django 2.1 alpha 1 releasedhttps://www.djangoproject.com/weblog/2018/may/17/django-21-alpha-1/<p>Django 2.1 alpha 1 is now available. It represents the first stage in the 2.1 release cycle and is an opportunity for you to try out the changes coming in Django 2.1.</p> <p>Django 2.1 has a smorgasbord of new features which you can read about in <a class="reference external" href="https://docs.djangoproject.com/en/dev/releases/2.1/">the in-development 2.1 release notes</a>.</p> <p>This alpha milestone marks the feature freeze. The <a class="reference external" href="https://code.djangoproject.com/wiki/Version2.1Roadmap#schedule">current release schedule</a> calls for a beta release in about a month and a release candidate about a month from then. We'll only be able to keep this schedule if we get early and often testing from the community. Updates on the release schedule are available <a class="reference external" href="https://groups.google.com/d/topic/django-developers/IEWIfNyXdV4/discussion">on the django-developers mailing list</a>.</p> <p>As with all alpha and beta packages, this is <strong>not</strong> for production use. But if you'd like to take some of the new features for a spin, or to help find and fix bugs (which should be reported to <a class="reference external" href="https://code.djangoproject.com/newticket">the issue tracker</a>), you can grab a copy of the alpha package from <a class="reference external" href="/download/">our downloads page</a> or on PyPI.</p> <p>The PGP key ID used for this release is Tim Graham: 1E8ABDC773EDE252.</p> Tim GrahamThu, 17 May 2018 20:11:36 -0500https://www.djangoproject.com/weblog/2018/may/17/django-21-alpha-1/DjangoCon Europe 2019 - where will it be?https://www.djangoproject.com/weblog/2018/may/10/djangocon-europe-2019-where-will-it-be/<p>Each year, a new volunteer team in the European Django community plans, organises and hosts a DjangoCon Europe.</p> <p>Hosting a DjangoCon is an ambitious undertaking. It's hard work, but each year it has been successfully run by a team of community volunteers, not all of whom have had previous experience - more important is enthusiasm, organisational skills, the ability to plan and manage budgets, time and people - and plenty of time to invest in the project.</p> <p>You'll find plenty of support on offer from previous DjangoCon organisers, so you won't be on your own.</p> <div class="section" id="s-how-to-apply"> <h3>How to apply</h3> <p>If you're interested, we'd love to hear from you.</p> <div class="section" id="s-if-you-re-ready-to-submit-a-proposal"> <h4>If you're ready to submit a proposal</h4> <p>If you're ready to submit a proposal, please do so. The more detailed and complete your proposal, the better. Things you should consider, and that we'd like to know about, are:</p> <ul class="simple"> <li>dates</li> <li>numbers of attendees</li> <li>venue(s)</li> <li>accommodation</li> <li>transport links</li> <li>budgets and ticket prices</li> <li>committee members</li> </ul> <p>We'd like to see (if you have these already):</p> <ul class="simple"> <li>timelines</li> <li>pictures</li> <li>prices</li> <li>draft agreements with providers</li> <li>alternatives you have considered</li> </ul> <p>They will all help show that your plans are serious and thorough, and that you have the organisational capacity to make it a success.</p> <p><a class="reference external" href="https://www.djangoproject.com/foundation/conferences/">Find out and tell us more</a>.</p> </div> <div class="section" id="s-if-you-re-thinking-about-it"> <h4>If you're thinking about it</h4> <p>If you're still considering the feasibility, don't hesitate to get in touch with us to discuss your ideas. We can help in numerous ways, including by putting you in touch with others who'd like to be involved.</p> <p>Just <a class="reference external" href="https://www.djangoproject.com/contact/foundation/">drop us a line</a>.</p> </div> </div> Daniele ProcidaThu, 10 May 2018 09:52:46 -0500https://www.djangoproject.com/weblog/2018/may/10/djangocon-europe-2019-where-will-it-be/DjangoCon US 2018 Update: CFP Open, Financial Aid App Open, and Tickets On Sale!https://www.djangoproject.com/weblog/2018/may/09/djangocon-us-2018-update/<p>In case you missed the news, <a class="reference external" href="https://2018.djangocon.us/sponsors/information/">DjangoCon US 2018</a> will take place in sunny San Diego, California, from October 14-19, 2018! We’re pleased to announce the following items.</p> <div class="section" id="s-early-bird-tickets-on-sale"> <h3>Early Bird Tickets On Sale</h3> <p>Early bird tickets are <a class="reference external" href="https://ti.to/defna/djangocon-us-2018">on sale now</a>! You can also pre-register for tutorials and register for (free!) sprints. If you need to buy several tickets and assign them to your employees later, check out the Corporate Concierge Service. Early bird tickets are gone when they’re gone, so don’t wait to get yours.</p> </div> <div class="section" id="s-call-for-proposals-cfp"> <h3>Call for Proposals (CFP)</h3> <p>Our <a class="reference external" href="https://www.papercall.io/djangocon-us-2018">CFP</a> for talks and tutorials is now open! The deadline for submissions is June 3, 2018. We’re looking for speakers of all experience levels and backgrounds. Talk and tutorial presenters also receive free admission to DjangoCon US.</p> </div> <div class="section" id="s-financial-aid-application"> <h3>Financial Aid Application</h3> <p>Grants to assist with travel and lodging expenses are available as well. Our <a class="reference external" href="https://goo.gl/forms/0rgo8yT72CFMuGCx1">Financial Aid application</a> is also now open. The deadline is June 3, 2018.</p> </div> <div class="section" id="s-you-can-still-sponsor"> <h3>You can still sponsor!</h3> <p>We have some great sponsorship opportunities available and plenty of room for your organization. Take a look at our <a class="reference external" href="https://2018.djangocon.us/sponsors/information/">sponsorship opportunities</a> or email us at <a class="reference external" href="mailto:sponsors&#64;djangocon.us">sponsors&#64;djangocon.us</a> so we can craft a special package for you.</p> <p>See you in San Diego!</p> </div> Lacey Williams Henschel, Rebecca Kindschi, and Jeff TriplettWed, 09 May 2018 09:00:00 -0500https://www.djangoproject.com/weblog/2018/may/09/djangocon-us-2018-update/Django bugfix releases: 2.0.5 and 1.11.13https://www.djangoproject.com/weblog/2018/may/01/bugfix-releases/<p>Today we've issued the <a class="reference external" href="https://docs.djangoproject.com/en/stable/releases/2.0.5/">2.0.5</a> and <a class="reference external" href="https://docs.djangoproject.com/en/stable/releases/1.11.13/">1.11.13</a> bugfix releases.</p> <p>The release package and checksums are available from <a class="reference external" href="/download/">our downloads page</a>, as well as from the Python Package Index. The PGP key ID used for this release is Tim Graham: 1E8ABDC773EDE252.</p> Tim GrahamTue, 01 May 2018 21:05:15 -0500https://www.djangoproject.com/weblog/2018/may/01/bugfix-releases/Django bugfix releases: 2.0.4 and 1.11.12https://www.djangoproject.com/weblog/2018/apr/02/bugfix-releases/<p>Today we've issued the <a class="reference external" href="https://docs.djangoproject.com/en/stable/releases/2.0.4/">2.0.4</a> and <a class="reference external" href="https://docs.djangoproject.com/en/stable/releases/1.11.12/">1.11.12</a> bugfix releases.</p> <p>The release package and checksums are available from <a class="reference external" href="/download/">our downloads page</a>, as well as from the Python Package Index. The PGP key ID used for this release is Tim Graham: 1E8ABDC773EDE252.</p> Tim GrahamMon, 02 Apr 2018 22:09:33 -0500https://www.djangoproject.com/weblog/2018/apr/02/bugfix-releases/Django security releases issued: 2.0.3, 1.11.11, and 1.8.19https://www.djangoproject.com/weblog/2018/mar/06/security-releases/<p>In accordance with <a class="reference external" href="https://docs.djangoproject.com/en/dev/internals/security/">our security release policy</a>, the Django team is issuing <a class="reference external" href="https://docs.djangoproject.com/en/dev/releases/1.8.19/">Django 1.8.19</a>, <a class="reference external" href="https://docs.djangoproject.com/en/dev/releases/1.11.11/">Django 1.11.11</a> and <a class="reference external" href="https://docs.djangoproject.com/en/dev/releases/2.0.3/">Django 2.0.3</a>. These release addresses the security issues detailed below. We encourage all users of Django to upgrade as soon as possible.</p> <div class="section" id="s-cve-2018-7536-denial-of-service-possibility-in-urlize-and-urlizetrunc-template-filters"> <h3>CVE-2018-7536: Denial-of-service possibility in <tt class="docutils literal">urlize</tt> and <tt class="docutils literal">urlizetrunc</tt> template filters</h3> <p>The <tt class="docutils literal">django.utils.html.urlize()</tt> function was extremely slow to evaluate certain inputs due to catastrophic backtracking vulnerabilities in two regular expressions (one regular expression for Django 1.8). The <tt class="docutils literal">urlize()</tt> function is used to implement the <tt class="docutils literal">urlize</tt> and <tt class="docutils literal">urlizetrunc</tt> template filters, which were thus vulnerable.</p> <p>Thanks James Davis for reporting this issue.</p> </div> <div class="section" id="s-cve-2018-7537-denial-of-service-possibility-in-truncatechars-html-and-truncatewords-html-template-filters"> <h3>CVE-2018-7537: Denial-of-service possibility in <tt class="docutils literal">truncatechars_html</tt> and <tt class="docutils literal">truncatewords_html</tt> template filters</h3> <p>If <tt class="docutils literal">django.utils.text.Truncator</tt>'s <tt class="docutils literal">chars()</tt> and <tt class="docutils literal">words()</tt> methods were passed the <tt class="docutils literal">html=True</tt> argument, they were extremely slow to evaluate certain inputs due to a catastrophic backtracking vulnerability in a regular expression. The <tt class="docutils literal">chars()</tt> and <tt class="docutils literal">words()</tt> methods are used to implement the <tt class="docutils literal">truncatechars_html</tt> and <tt class="docutils literal">truncatewords_html</tt> template filters, which were thus vulnerable.</p> <p>Thanks James Davis for reporting this issue.</p> </div> <div class="section" id="s-affected-supported-versions"> <h3>Affected supported versions</h3> <ul class="simple"> <li>Django master branch</li> <li>Django 2.0</li> <li>Django 1.11</li> <li>Django 1.8</li> </ul> <p>Per our <a class="reference external" href="https://www.djangoproject.com/download/#supported-versions">supported versions policy</a>, Django 1.10, 1.9, and Django 1.7 and older are no longer supported.</p> </div> <div class="section" id="s-resolution"> <h3>Resolution</h3> <p>Patches to resolve the issue have been applied to Django's master branch and the 2.0, 1.11, and 1.8 release branches. The patches may be obtained from the following changesets:</p> <p>On the development master branch:</p> <ul class="simple"> <li><a class="reference external" href="https://github.com/django/django/commit/8618271caa0b09daba39ff3b46567d33ae1e1d3a">urlize</a></li> <li><a class="reference external" href="https://github.com/django/django/commit/97b7dd59bb8d6163239061e2022153c3415d146d">truncate</a></li> </ul> <p>On the 2.0 release branch:</p> <ul class="simple"> <li><a class="reference external" href="https://github.com/django/django/commit/e157315da3ae7005fa0683ffc9751dbeca7306c8">urlize</a></li> <li><a class="reference external" href="https://github.com/django/django/commit/94c5da1d17a6b0d378866c66b605102c19f7988c">truncate</a></li> </ul> <p>On the 1.11 release branch:</p> <ul class="simple"> <li><a class="reference external" href="https://github.com/django/django/commit/abf89d729f210c692a50e0ad3f75fb6bec6fae16">urlize</a></li> <li><a class="reference external" href="https://github.com/django/django/commit/a91436360b79a6ff995c3e5018bcc666dfaf1539">truncate</a></li> </ul> <p>On the 1.8 release branch:</p> <ul class="simple"> <li><a class="reference external" href="https://github.com/django/django/commit/1ca63a66ef3163149ad822701273e8a1844192c2">urlize</a></li> <li><a class="reference external" href="https://github.com/django/django/commit/d17974a287a6ea2e361daff88fcc004cbd6835fa">truncate</a></li> </ul> <p>The following releases have been issued:</p> <ul class="simple"> <li>Django 1.8.19 (<a class="reference external" href="https://www.djangoproject.com/m/releases/1.8/Django-1.8.19.tar.gz">download Django 1.8.19</a> | <a class="reference external" href="https://www.djangoproject.com/m/pgp/Django-1.8.19.checksum.txt">1.8.19 checksums</a>)</li> <li>Django 1.11.11 (<a class="reference external" href="https://www.djangoproject.com/m/releases/1.11/Django-1.11.11.tar.gz">download Django 1.11.11</a> | <a class="reference external" href="https://www.djangoproject.com/m/pgp/Django-1.11.11.checksum.txt">1.11.11 checksums</a>)</li> <li>Django 2.0.3 (<a class="reference external" href="https://www.djangoproject.com/m/releases/2.0/Django-2.0.3.tar.gz">download Django 2.0.3</a> | <a class="reference external" href="https://www.djangoproject.com/m/pgp/Django-2.0.3.checksum.txt">2.0.3 checksums</a>)</li> </ul> <p>The PGP key ID used for these releases is Tim Graham: 1E8ABDC773EDE252.</p> </div> <div class="section" id="s-general-notes-regarding-security-reporting"> <h3>General notes regarding security reporting</h3> <p>As always, we ask that potential security issues be reported via private email to <tt class="docutils literal">security&#64;djangoproject.com</tt>, and not via Django's Trac instance or the django-developers list. Please see <a class="reference external" href="https://www.djangoproject.com/security/">our security policies</a> for further information.</p> </div> Tim GrahamTue, 06 Mar 2018 08:44:23 -0600https://www.djangoproject.com/weblog/2018/mar/06/security-releases/Django security releases issued: 2.0.2 and 1.11.10https://www.djangoproject.com/weblog/2018/feb/01/security-releases/<p>In accordance with <a class="reference external" href="https://docs.djangoproject.com/en/dev/internals/security/">our security release policy</a>, the Django team is issuing <a class="reference external" href="https://docs.djangoproject.com/en/stable/releases/1.11.10/">Django 1.11.10</a> and <a class="reference external" href="https://docs.djangoproject.com/en/stable/releases/2.0.2/">Django 2.0.2</a>. These release addresses the security issue detailed below. We encourage all users of Django to upgrade as soon as possible.</p> <div class="section" id="s-cve-2018-6188-information-leakage-in-authenticationform"> <h3>CVE-2018-6188: Information leakage in <tt class="docutils literal">AuthenticationForm</tt></h3> <p>A regression in Django 1.11.8 made <tt class="docutils literal">django.contrib.auth.forms.AuthenticationForm</tt> run its <tt class="docutils literal">confirm_login_allowed()</tt> method even if an incorrect password is entered. This can leak information about a user, depending on what messages <tt class="docutils literal">confirm_login_allowed()</tt> raises. If <tt class="docutils literal">confirm_login_allowed()</tt> isn't overridden, an attacker enter an arbitrary username and see if that user has been set to <tt class="docutils literal">is_active=False</tt>. If <tt class="docutils literal">confirm_login_allowed()</tt> is overridden, more sensitive details could be leaked.</p> <p>Thanks Jack Cushman for reporting this issue.</p> </div> <div class="section" id="s-affected-supported-versions"> <h3>Affected supported versions</h3> <ul class="simple"> <li>Django master branch</li> <li>Django 2.0 and 2.0.1</li> <li>Django 1.11.8 and 1.11.9</li> </ul> <p>Per our <a class="reference external" href="https://www.djangoproject.com/download/#supported-versions">supported versions policy</a>, Django 1.10 and 1.9 are no longer supported (but aren't affected). Django 1.8 LTS (for which security support ends on April 1) is unaffected.</p> </div> <div class="section" id="s-resolution"> <h3>Resolution</h3> <p>Patches to resolve the issue have been applied to Django's master branch and the 2.0 and 1.11 release branches. The patches may be obtained from the following changesets:</p> <ul class="simple"> <li>On the <a class="reference external" href="https://github.com/django/django/commit/af33fb250e9847f1ca8c0ba0d72671d76659704f">master branch</a></li> <li>On the <a class="reference external" href="https://github.com/django/django/commit/c37bb28677295f6edda61d8ac461014ef0d3aeb2">2.0 release branch</a></li> <li>On the <a class="reference external" href="https://github.com/django/django/commit/57b95fedad5e0b83fc9c81466b7d1751c6427aae">1.11 release branch</a></li> </ul> <p>The following releases have been issued:</p> <ul class="simple"> <li>Django 1.11.10 (<a class="reference external" href="https://www.djangoproject.com/m/releases/1.11/Django-1.11.10.tar.gz">download Django 1.11.10</a> | <a class="reference external" href="https://www.djangoproject.com/m/pgp/Django-1.11.10.checksum.txt">1.11.10 checksums</a>)</li> <li>Django 2.0.2 (<a class="reference external" href="https://www.djangoproject.com/m/releases/2.0/Django-2.0.2.tar.gz">download Django 2.0.2</a> | <a class="reference external" href="https://www.djangoproject.com/m/pgp/Django-2.0.2.checksum.txt">2.0.2 checksums</a>)</li> </ul> <p>The PGP key ID used for these releases is Tim Graham: 1E8ABDC773EDE252.</p> </div> <div class="section" id="s-general-notes-regarding-security-reporting"> <h3>General notes regarding security reporting</h3> <p>As always, we ask that potential security issues be reported via private email to <tt class="docutils literal">security&#64;djangoproject.com</tt>, and not via Django's Trac instance or the django-developers list. Please see <a class="reference external" href="https://www.djangoproject.com/security/">our security policies</a> for further information.</p> </div> Tim GrahamThu, 01 Feb 2018 09:11:25 -0600https://www.djangoproject.com/weblog/2018/feb/01/security-releases/2017 Malcolm Tredinnick Memorial Prize awarded to Claude Parozhttps://www.djangoproject.com/weblog/2018/jan/22/2017-malcolm-tredinnick-prize-claude-paroz/<p>The Board of the Django Software Foundation is pleased to announce that the 2017 <a class="reference external" href="https://www.djangoproject.com/foundation/prizes/">Malcolm Tredinnick Memorial Prize</a> has been awarded to Claude Paroz.</p> <p>Claude has been a contributor to Django since 2012. He was selected for the prize by the board from amongst the nominees on the basis of his long-term, consistent contribution. Claude has given service to Django though code and also by enabling others to contribute effectively.</p> <p>His work represents a less-visible but essential aspect of contribution to Django. It's not the kind of work that will be publicly applauded at a conference, or stand out as news, but it's of enormous importance to the project. Claude is owed a debt of thanks for it.</p> <p>Tim Graham wrote in his nomination:</p> <blockquote> <p>I nominate Claude Paroz for five years of tireless and unheralded contributions to Django, including shepherding the GeoDjango project and serving as the Django translations manager. He's the primary answering authority on the geodjango and django-i18n mailing lists.</p> <p>While his contributing began in 2012, Claude is the most active volunteer contributor based on number of commits since 2008. He regularly offers his expertise by triaging tickets and reviewing pull requests. If I ask Claude for some advice in an area of Django in which I'm less versed, his responses are quick, respectful, and helpful.</p> </blockquote> <p>Several other people were also nominated for this prize. The Malcom Tredinnick prize could once again have deservedly been awarded several times over. It is an enduring pleasure to observe that there is no shortage of members of our community who, like Claude, exemplify the spirit of generosity and support that the prize celebrates.</p> <p>The other nominees were:</p> <ul class="simple"> <li>Ifunanya Ikemma, for her work teaching and encouraging women in to programming, through PyLadies and Django Girls in Nigeria</li> <li>Katie McLaughlin, for her work in open source projects as a contributor and mentor</li> <li>Melanie Crutchfield, for her work with PyLadies and Django Girls</li> <li>Jeff Triplett, for his huge contribution to the running of DjangoCon US, and the consistently warm, supportive attitude he brings to this and to his other work in the world of Django</li> <li>Veronica Munro, for her work organising Django Girls events in Australia</li> <li>Lacey Williams Henschel, for her work in DjangoCon US (including her magnificent work as the 2017 conference chair), and helping to build the Django community in the US</li> <li>Tim Graham, for being an ever-responsive and valuable point of technical contact for Django.</li> </ul> <p>Many congratulations to Claude, and our sincere thanks to all the nominees for their continued work in Django. Thanks are also due to all who took the trouble to nominate someone.</p> Daniele ProcidaMon, 22 Jan 2018 16:53:58 -0600https://www.djangoproject.com/weblog/2018/jan/22/2017-malcolm-tredinnick-prize-claude-paroz/The DSF Welcomes Carlton Gibson as its Newest Fellowhttps://www.djangoproject.com/weblog/2018/jan/12/dsf-welcomes-carlton-gibson-its-newest-fellow/<p>On November 16, 2017, the DSF made a call for Django Fellow applicants. On behalf of the Django Software Foundation, the DSF Fellowship Committee is pleased to announce Carlton Gibson as the newest Django Fellow. Carlton is joining Tim Graham who recently announced his scale back of hours. Tim will be transitioning to part-time but remaining as a Fellow.</p> <p>Carlton has been involved in the Django community since 2009. He has been a core team member of the Django REST Framework for several years. He's a major contributor to Django Filter, Django Crispy Forms and Django AppConf as well as Django Compressor and many others. He is also an instructor for Django Girls in Barcelona.</p> <p>The DSF received 15 applicants, all of which were reviewed by the Fellowship Committee before coming to a consensus decision on Carlton. The level of talent and professionalism in the applicant pool made the decision process a difficult one. We are grateful for all who applied and their desire to participate in this important initiative.</p> <p>The Fellowship program has been a great success for the past three years and is only possible through generous support of the Django Software Foundation. If you or your organization benefit from Django and the work of the Fellowship program, please consider a <a class="reference external" href="/fundraising/">donation</a>. Every dollar amount, large or small, makes an impact.</p> Brian MoloneyFri, 12 Jan 2018 11:07:35 -0600https://www.djangoproject.com/weblog/2018/jan/12/dsf-welcomes-carlton-gibson-its-newest-fellow/ ================================================ FILE: api/test/data/feed/douban.com ================================================ 元气河马赵小笼 的收藏 http://www.douban.com/people/52041165/ zh-cn &copy; 2013, douban.com. Sat, 08 Mar 2014 14:36:29 GMT 想读Excel 2010操作与技巧 https://book.douban.com/subject/5380977/ Excel 2010操作与技巧 ]]> 元气河马赵小笼 Sat, 08 Mar 2014 14:36:29 GMT http://www.douban.com/people/52041165/interests/784226991 想读Word排版艺术 https://book.douban.com/subject/1193565/ Word排版艺术 ]]> 元气河马赵小笼 Sat, 08 Mar 2014 14:35:24 GMT http://www.douban.com/people/52041165/interests/784226517 想读美味欺诈 https://book.douban.com/subject/4857026/ 美味欺诈 ]]> 元气河马赵小笼 Thu, 21 Jul 2011 07:18:46 GMT http://www.douban.com/people/52041165/interests/416486270 想读王家卫的映画世界 https://book.douban.com/subject/1394855/ 王家卫的映画世界 ]]> 元气河马赵小笼 Wed, 15 Jun 2011 05:33:42 GMT http://www.douban.com/people/52041165/interests/403350618 想读日本电影100年 https://book.douban.com/subject/1837549/ 日本电影100年 ]]> 元气河马赵小笼 Wed, 15 Jun 2011 05:33:23 GMT http://www.douban.com/people/52041165/interests/403350498 最近在听Graceland https://music.douban.com/subject/1419291/ Graceland

推荐: 推荐

备注: 87年经典的民谣专辑

]]>
元气河马赵小笼 Wed, 15 Jun 2011 03:39:56 GMT http://www.douban.com/people/52041165/interests/403310732
听过The Joshua Tree https://music.douban.com/subject/1486113/ The Joshua Tree

推荐: 力荐

备注: 不可替代的U2

]]>
元气河马赵小笼 Wed, 15 Jun 2011 03:39:10 GMT http://www.douban.com/people/52041165/interests/403310434
听过Faith https://music.douban.com/subject/1414835/ Faith

推荐: 力荐

]]>
元气河马赵小笼 Wed, 15 Jun 2011 03:38:54 GMT http://www.douban.com/people/52041165/interests/403310334
最近在听Nick of Time https://music.douban.com/subject/1432871/ Nick of Time

推荐: 力荐

备注: 90年的。blues

]]>
元气河马赵小笼 Wed, 15 Jun 2011 03:38:46 GMT http://www.douban.com/people/52041165/interests/403310284
================================================ FILE: api/test/data/feed/empty ================================================ ================================================ FILE: api/test/data/feed/geektopia.es ================================================ Geektopia.es - Tecnología y entretenimiento https://www.geektopia.es/es/ Geektopía.es - Noticias de tecnología y entretenimiento es Mon, 02 Jul 2018 18:00:00 +0200 15 Tesla prepara su mayor granja de baterías en California con una capacidad de hasta 1100 GWh https://www.geektopia.es/es/technology/2018/07/02/noticias/tesla-prepara-su-mayor-granja-de-baterias-en-california-con-una-capacidad-de-hasta-1100-gwh.html https://www.geektopia.es/es/technology/2018/07/02/noticias/tesla-prepara-su-mayor-granja-de-baterias-en-california-con-una-capacidad-de-hasta-1100-gwh.html Mon, 02 Jul 2018 18:00:00 +0200 Noticias

Elon Musk está apostando por la energía solar para la generación de energía eléctrica, con un respaldo de baterías para almacenar la generada durante el día. Eso ha llevado a la creación de una planta de baterías de 315 MWh de capacidad y 129 MWh de suministro en el sur de Australia para hacer frente a los apagones de la región, pero se va a quedar pequeña con respecto a la granja de baterías que está planeando para California junto a PG&E.

]]>
david
Apple cambiaría el conector Lighthning por un USB tipo C en los iPhone de este año https://www.geektopia.es/es/technology/2018/07/02/noticias/apple-cambiaria-el-conector-lighthning-por-un-usb-tipo-c-en-los-iphone-de-este-ano.html https://www.geektopia.es/es/technology/2018/07/02/noticias/apple-cambiaria-el-conector-lighthning-por-un-usb-tipo-c-en-los-iphone-de-este-ano.html Mon, 02 Jul 2018 17:25:00 +0200 Noticias

Apple siempre ha ido por libre en el terreno de los conectores de los iPhone, haciendo la vida un poco más complicado a sus usuarios en los países en los que no están tan extendidos. Pero con la continua expansión del conector USB tipo C, es solo cuestión de tiempo que Apple lo adopte en los iPhone e iPad, y parece que podría ser este mismo año.

]]>
david
El hundimiento de la criptominería haría bajar hasta un 20 % el precio de las gráficas en julio https://www.geektopia.es/es/technology/2018/07/02/noticias/el-hundimiento-de-la-criptomineria-haria-bajar-hasta-un-20-el-precio-de-las-graficas-en-julio.html https://www.geektopia.es/es/technology/2018/07/02/noticias/el-hundimiento-de-la-criptomineria-haria-bajar-hasta-un-20-el-precio-de-las-graficas-en-julio.html Mon, 02 Jul 2018 16:00:00 +0200 Noticias

La criptominería echó el freno en marzo y se hizo muy evidente en abril, arrastrando en el proceso al sector de las tarjetas gráficas. No inmediatamente, pero entre abril y junio han bajado significativamente sus precios, si bien los fabricantes han querido mantener un margen de beneficios mayor sin bajar demasiado los precios. Sin embargo, parece que Digitimes advierte de que los precios de las tarjetas gráficas podrían bajar en julio hasta un 20 %.

]]>
david
Aparecen las primeras pruebas del Ryzen 3 2300X que llegará próximamente https://www.geektopia.es/es/technology/2018/07/02/noticias/aparecen-las-primeras-pruebas-del-ryzen-3-2300x-que-llegara-proximamente.html https://www.geektopia.es/es/technology/2018/07/02/noticias/aparecen-las-primeras-pruebas-del-ryzen-3-2300x-que-llegara-proximamente.html Mon, 02 Jul 2018 15:35:00 +0200 Noticias

AMD está pendiente de poner a la venta nuevos procesadores Ryzen 2000, lo que incluirá al menos el Ryzen 3 2300X y el Ryzen 5 2500X. Estos son modelos más interesantes que las versiones que no están pensadas para overclocking porque tienen mayor potencia mononúcleo y su resultado en juegos con tarjetas gráficas más potentes es mejor. Ahora han aparecido imágenes e información del Ryzen 3 2300X, incluida una prueba de rendimiento en Cinebench R15.

]]>
david
DeepCool presenta la refrigeración Fryzen para los procesadores Ryzen https://www.geektopia.es/es/technology/2018/07/02/noticias/deepcool-presenta-la-refrigeracion-fryzen-para-los-procesadores-ryzen.html https://www.geektopia.es/es/technology/2018/07/02/noticias/deepcool-presenta-la-refrigeracion-fryzen-para-los-procesadores-ryzen.html Mon, 02 Jul 2018 14:40:00 +0200 Noticias

DeepCool ha presentado a través de su serie de productos para jugones, GamerStorm, una refrigeración por aire un poco especial ya que está pensada exclusivamente para procesadores de AMD. La refrigeración Fryzen —tarde o temprano alguien iba a hacer ese juego de letras con Ryzen— está pensado sobre todo para placas base con zócalo AM4 pero también el TR4 que usan los Ryzen Threadripper, por lo que será bienvenido para los que quieran cambiar a uno de los próximos Ryzen Threadripper 2000 de hasta 32 núcleos físicos.

]]>
david
Los mejores ratones del momento (gaming, inalámbricos, julio 2018) https://www.geektopia.es/es/technology/2016/05/02/articulos/mejores-ratones-mouse-gaming-juegos-inalambricos.html https://www.geektopia.es/es/technology/2016/05/02/articulos/mejores-ratones-mouse-gaming-juegos-inalambricos.html Mon, 02 Jul 2018 14:00:00 +0200 Artículos

Los ratones han evolucionado bastante en la última década, desde aquellos que usaban sobre todo una bola para realizar el seguimiento del movimiento, a los actuales ratones con sensor láser y óptico que funcionan, según su calidad, bastante bien sobre casi cualquier superficie.

]]>
david
Intel prepara nuevos NUC con procesadores Coffee Lake que incluyen una Iris Plus 655 https://www.geektopia.es/es/technology/2018/07/02/noticias/intel-prepara-nuevos-nuc-con-procesadores-coffee-lake-que-incluyen-una-iris-plus-655.html https://www.geektopia.es/es/technology/2018/07/02/noticias/intel-prepara-nuevos-nuc-con-procesadores-coffee-lake-que-incluyen-una-iris-plus-655.html Mon, 02 Jul 2018 13:30:00 +0200 Noticias

Intel se ha centrado por ahora en la actual octava generación en presentar sus mini-PC, a los que llama NUC, con los procesadores Kaby Lake G con unidad gráfica dedicada Radeon. Pero también presentó en abril, junto con otra miríada de procesadores Coffee Lake, dos versiones de bajo consumo con gráficos integrados Iris Plus, la serie más potente de unidades gráficas integradas de Intel.

]]>
david
Una tienda vietnamita publica la supuesta entrada de la GTX 1180 https://www.geektopia.es/es/technology/2018/07/02/noticias/una-tienda-vietnamita-publica-la-supuesta-entrada-de-la-gtx-1180.html https://www.geektopia.es/es/technology/2018/07/02/noticias/una-tienda-vietnamita-publica-la-supuesta-entrada-de-la-gtx-1180.html Mon, 02 Jul 2018 12:55:00 +0200 Noticias

Los rumores sobre las próximas tarjetas gráficas de Nvidia va en aumento, y parece que no pasa un solo día sin que se hable de ellas en el mundo de la tecnología. Aunque entre tanto hablar de Nvidia, también ha llegado algún rumor sobre AMD. En esta ocasión, parece que una tienda vietnamita ha publicado una entrada de la GTX 1180 que presentaría Nvidia, dando alguna supuesta información sobre la misma.

]]>
david
Los nuevos videojuegos de la semana (2 a 8 de julio) https://www.geektopia.es/es/videogames/2018/07/02/noticias/los-nuevos-videojuegos-de-la-semana-2-a-8-de-julio.html https://www.geektopia.es/es/videogames/2018/07/02/noticias/los-nuevos-videojuegos-de-la-semana-2-a-8-de-julio.html Mon, 02 Jul 2018 10:00:00 +0200 Noticias

Si me permitís el atrevimiento, hay muchas papeletas para que Nintendo Switch se convierta en la consola del verano, porque la puedes jugar en casa y cuando sea momento de ir a la playa la puedes llevar contigo. Eso, y que muchos estudios de desarrollo indis están sacando sus juegos para la nueva de Nintendo, y qué mejor momento que el verano porque tienen meses libres de grandes lanzamientos para poder destacar por ellos mismos.

]]>
poor-man
AMD presentaría una 3.ª generación Polaris a final de año; Navi de gama media para 2019 https://www.geektopia.es/es/technology/2018/07/02/noticias/amd-presentaria-una-3-generacion-polaris-a-final-de-ano-navi-de-gama-media-para-2019.html https://www.geektopia.es/es/technology/2018/07/02/noticias/amd-presentaria-una-3-generacion-polaris-a-final-de-ano-navi-de-gama-media-para-2019.html Mon, 02 Jul 2018 09:00:00 +0200 Noticias

Empieza julio, y cada vez está más cerca la presentación de nuevas tarjetas gráficas. Lo cual es obvio, si bien no hay fecha concreta. Pero cambiando de tercio en el terreno de los rumores, llegan dos sobre la presentación de nuevas tarjetas gráficas por parte de AMD. El primero hace referencia a una nueva generación de tarjetas gráficas basadas en Polaris, y específicamente en un chip Polaris 30. Usaría un proceso litográfico de 12 nm FinFET con un 15 % más de rendimiento respecto a las GPU de tipo Polaris 20.

]]>
david
================================================ FILE: api/test/data/feed/habr ================================================ Хабр / Лучшие публикации за сутки https://habr.com/posts/top/ ru editor@habr.com habr.com Sun, 03 Jun 2018 00:32:57 GMT https://habr.com/ https://habr.com/images/logo.png Хабр <![CDATA[Прибор ночного видения на базе тепловизионного модуля Flir Lepton 3]]> https://habr.com/post/413021/ https://habr.com/post/413021/?utm_source=habrahabr&utm_medium=rss&utm_campaign=413021 Ранее я написал статью о подключении к компьютеру тепловизионной приставки к смартфону Flir One Gen 2. Пришла пора вынуть из этой приставки модуль лептон и подключить к микроконтроллеру напрямую, собрав прибор ночного видения с разрешением 160x120 пикселей.
Читать дальше →]]>
Sat, 02 Jun 2018 15:49:27 GMT da-nie
<![CDATA[Подвал смерти]]> https://habr.com/post/413011/ https://habr.com/post/413011/?utm_source=habrahabr&utm_medium=rss&utm_campaign=413011 Общим лейтмотивом многих статей на Хабре – является поиск ошибок — неточностей, натяжек, а порой и откровенной глупости в книгах и фильмах. Не являются исключением и мои статьи, в которых я, весь в белом, смеюсь над недотепами авторами.

Поскольку я, ко всему прочему, являюсь литератором, будет честно предоставить право ответного удара: в смысле — дать возможность посмеяться над моим творчеством. Исходя из этого, я решил опубликовать вставную новеллу из цикла «Я у мамы инженер» — благо, по тематике она тесно примыкает к хабротемам.

Пара пояснений: Герой романа – и автор – разные люди. У нас разные позиции по многим вопросам. Я не всегда согласен с товарищем Главным Героем и спорю с ним, через реплики других персонажей. И — упомянутые в романе лица, чьи имена совпадают с реально существующими людьми – не более чем их отражения в другой реальности. Как Цандер в «Прыжке в Ничто» Беляева, если Вы понимаете о чем я.
Итак:

Затухающий костёр освещал только крохотный пятачок пляжа. Сидящий напротив огня кот, как и я, смотрел на огонь, сияя плошками отражающих свет глаз. Было в этой сцене что-то по домашнему уютное.

Я налил себе кофе, и, сев на складной стульчик, похлопал по колену, приглашая Беляша присоединиться. Его пучешарое величество соизволило принять приглашение. Почти невидимая в темноте Никсель полулежала на туристической пенке, но не спала. Конечно, уснешь тут.

— Настало время удивительных историй? — Спросил я. — Раз всё равно не спим.
Никсель промолчала. Беляш вертелся у меня на коленях, устраиваясь поудобней.

— Ну, раз возражений нет, начну: У меня неподалеку от дома работает офисный центр, у которого под автостоянкой расположен подвал смерти.

— Это как? — тихонько спросила девушка.

— Подвал, в который люди заходят и пропадают. Серьезно. Там у них за 30 лет российской независимости человек тридцать пропало. По человеку в год, таксказать.

Расскажу лучше по порядку: Читать дальше →]]>
Sat, 02 Jun 2018 13:26:04 GMT Zangasta
<![CDATA[«Хорошо забытое старое»: электровелосипеды — от первых моделей к возможностям сегодняшнего дня
]]> https://habr.com/post/413023/ https://habr.com/post/413023/?utm_source=habrahabr&utm_medium=rss&utm_campaign=413023 не уступает сегменту своих старших собратьев — электромобилей. Только в 2016 году во всем мире было продано чуть меньше 35 млн электровелосипедов — 93% пришлось на Азиатско-Тихоокеанский регион. Однако их популярность растет не только в Азии, но и по всему миру — например, в США в прошлом году зафиксировали двукратный рост продаж. Российский рынок, по мнению экспертов, довольно скромный — в год продается порядка 10 тысяч электровелосипедов — но он тоже активно развивается.

На велосипеды с электрическим приводом уже во всю пересаживаются государственные службы по всему миру: например, полицейские штата Висконсин последовали примеру своих малазийских коллег и патрулируют город на новом транспорте. Появляются городские сервисы для аренды вроде «Велобайка», но уже для электровелосипедов — это сети велопроката, которые можно встретить во многих крупных городах во всем мире. Они позволяют брать электровелосипед в аренду на одной станции и оставлять его в другой части города так, чтобы им мог воспользоваться кто-то другой.

Более того, появляются предложения о том, чтобы включить электровелосипеды в классификацию Европейского союза велосипедного спорта (UEC) и добавить новые дисциплины к обычным заездам и соревнованиям по горным велогонкам.

Попробуем немного «отмотать назад» и разобраться в том, как электровелосипед проделал путь от экспериментального изобретения до популярного атрибута жизни в большом городе. Сегодня расскажем:

  • кто впервые модернизировал классический велосипед;
  • почему об электровелосипедах забыли почти на 30 лет;
  • и что помогло им вернуться и стать популярным городским транспортом.

Читать дальше →]]>
Sat, 02 Jun 2018 16:37:33 GMT IvanPavlov
<![CDATA[SamsPcbGuide, часть 5: Трассировка сигнальных линий. Искажения в линии и согласование импедансов]]> https://habr.com/post/413001/ https://habr.com/post/413001/?utm_source=habrahabr&utm_medium=rss&utm_campaign=413001 Читать дальше →]]> Sat, 02 Jun 2018 09:55:58 GMT iamsam <![CDATA[Советский HI-FI и его создатели: лазерные видеодиски в СССР]]> https://habr.com/post/413027/ https://habr.com/post/413027/?utm_source=habrahabr&utm_medium=rss&utm_campaign=413027


К моменту разработки в Союзе описываемая технология доживала свои последние годы за ржавеющим железным занавесом. При этом для подавляющего большинства советских людей, немногим из которых был доступен даже банальный VHS-видеомагнитофон, представлялась истинным технологическим чудом. Под катом об отчаянной и изначально обреченной на провал попытке “догнать и перегнать”.
Читать дальше →]]>
Sat, 02 Jun 2018 18:54:46 GMT Sound_cULT
<![CDATA[Secure Data Act 2018 – в США планируют запретить бэкдоры в устройствах [опять]]]> https://habr.com/post/412991/ https://habr.com/post/412991/?utm_source=habrahabr&utm_medium=rss&utm_campaign=412991 представили законопроект, который получил название Secure Data Act 2018. Он запретит правительству и государственным структурам требовать от производителей технических устройств встраивать в свои продукты бэкдоры. Принуждения нельзя будет добиться даже через суд.

Подробнее о законопроекте и реакции сообщества расскажем далее.

Читать дальше →]]>
Sat, 02 Jun 2018 16:34:27 GMT 1cloud
<![CDATA[Небольшая заметка про wildcard сертификаты Let’s Encrypt]]> https://habr.com/post/413017/ https://habr.com/post/413017/?utm_source=habrahabr&utm_medium=rss&utm_campaign=413017 Читать дальше →]]> Sat, 02 Jun 2018 15:33:06 GMT isden <![CDATA[От гудения жирафов до звуков птиц-подражателей — слушаем природу вместе]]> https://habr.com/post/412999/ https://habr.com/post/412999/?utm_source=habrahabr&utm_medium=rss&utm_campaign=412999 World According to Sound Сэма Харнетта (Sam Harnett) и Криса Хоффа (Chris Hoff). В прошлой части обзора речь шла о необычных звуках, которые могут издавать насекомые, гейзеры и гравитационные волны. В этой части разберём на какие звуки способны жирафы, птицы и люди.

Читать дальше →]]>
Sat, 02 Jun 2018 09:42:07 GMT Audioman
<![CDATA[Что делает VMware, и какой будет сетевая архитектура будущего]]> https://habr.com/post/412923/ https://habr.com/post/412923/?utm_source=habrahabr&utm_medium=rss&utm_campaign=412923 отмечают в Gartner, 10% корпоративных данных генерируются за пределами традиционных ЦОД. И ожидается, что эта цифра вырастет до 50% к 2022 году. Тенденция связана с ростом популярности «периферийных вычислений» (edge computing) и интернета вещей.

Компаниям приходится искать новые подходы к организации корпоративных сетей. Одной из таких компаний является разработчик программного обеспечения для виртуализации VMware. В начале мая представители организации обозначили свое видение сетей будущего и представили концепцию Virtual Cloud Network. Её идея в том, чтобы упростить управление программными сетями и повысить защищенность распределенных сервисов.

Подробнее о том, что делает VMware, расскажем далее.

Читать дальше →]]>
Sat, 02 Jun 2018 13:44:32 GMT it_man
<![CDATA[[Из песочницы] Странности синтеза при работе с FPGA]]> https://habr.com/post/413007/ https://habr.com/post/413007/?utm_source=habrahabr&utm_medium=rss&utm_campaign=413007
Идея написания данной статьи возникла при синтезе одного проекта в разных средах разработки, в результате чего были получены отличные друг от друга результаты. Так как исходный модуль является достаточно объёмным, то для демонстрации полученных результатов был написан тестовый модуль меньшего объёма, но синтез которого вызывал те же предупреждения/ошибки. В качестве тестового модуля был использован 4-х битный регистр с асинхронным сбросом, а в качестве сред разработки были выбраны Libero SoC 18.1, Quartus Prime 17.1, Vivado 2017.4.1.
Читать дальше →]]>
Sat, 02 Jun 2018 12:29:41 GMT Dmitriy0111 fpgaverilogVivadoQuartusLibero SoC
<![CDATA[[Из песочницы] Инфраструктура открытых ключей: утилита генерации запросов на квалифицированный сертификат]]> https://habr.com/post/412993/ https://habr.com/post/412993/?utm_source=habrahabr&utm_medium=rss&utm_campaign=412993 Одним из центральных объектом инфраструктуры открытых ключей (Public Key Infrastructure — PKI/ИОК) наряду с ключевой парой является сертификат, который сегодня фактически является аналогом гражданского паспорта.
Читать дальше →]]>
Sat, 02 Jun 2018 07:35:47 GMT saipr pkicertificatepublic keyprivate keypkcs#11pkcs#10cspcsrrequestcertificate authorityгост 34.10-2012tcl/tkswig
<![CDATA[[Перевод] Стремление к прозрачности]]> https://habr.com/post/413013/ https://habr.com/post/413013/?utm_source=habrahabr&utm_medium=rss&utm_campaign=413013 Самый эффективный способ помочь другим — это помочь им помочь самим себе.
Джерри Корстенс

От переводчика


Предлагаю вашему вниманию перевод статьи CEO SpecterOps David McGuire «A Push Toward Transparency». Никакого отношения к данной компании я не имею и никогда не пользовался её продуктами, поэтому статья служит не рекламным целям, а лишь поводом для того, чтобы задуматься, обсудить и использовать или отказаться от использования предлагаемого автором подхода.

Дэвид поднимает вопрос прозрачности в индустрии информационной безопасности, утверждая, что распространение знаний об инструментах и методах работы — это не угроза конкурентному преимуществу, а очень важный шаг для всех участников рынка, который способен значительно повысить общий уровень защищенности информационных инфраструктур. В комментариях хотелось бы увидеть обсуждение этой позиции: насколько она совместима с реальностью, что нам мешает быть прозрачными, и нужно ли переходить от формирования зависимости от консультантов и продуктов к обучению заказчиков самостоятельному противодействию угрозам?
Читать дальше →]]>
Sat, 02 Jun 2018 13:51:16 GMT Michae1 прозрачность
<![CDATA[[Перевод] Неудовольствие обнуляет уровень счастья: почему невозможно постоянно быть счастливым]]> https://habr.com/post/412977/ https://habr.com/post/412977/?utm_source=habrahabr&utm_medium=rss&utm_campaign=412977

Счастье, в той или иной его форме, вроде бы является общей целью, достичь которой хотел бы каждый из нас. Мы часто ведём себя так, будто можем найти путь к полному удовлетворению – комфорту, насыщению, теплу, какой-то ещё награде – и постоянно быть счастливыми, просто сделав какие-то правильные выборы. Но удовольствие даже от самых приятных ощущений скоротечно, и это приводит к появлению скуки и желанию попробовать что-то новое и удивительное. Я, как нейробиолог, не могу не думать о том, является ли на самом деле мимолётность нашего удовлетворения неизбежной, или же это некая особенность работы мозга, поняв которую, можно будет узнать, как с этим бороться.

Многие повседневные функции работы мозга кажутся настолько естественными, что мы с трудом можем дистанцироваться от них, чтобы посмотреть на них со стороны. Мозг занимается тем, что замечает разные вещи. Очевидно, что основная работа мозга заключается в восприятии; на базе воспринятого он может делать оценки, а на основе их – действовать. Эту работу выполняют нейроны нервной системы. Они находят и представляют входные данные внешнего (и внутреннего) мира, анализируют данные, и реагируют на этот анализ соответствующим действием. Под действием обычно понимается движение: нейроны отправляют сигналы, заставляющие мускулы сокращаться, что позволяет вам выполнять какие-то действия. Входные данные поступают с органов чувств, анализ часто называют ассоциативным, а выход – моторикой. Троица чувства/ассоциативный анализ/моторика – это нейронный аналог восприятия/оценки/действия.
Читать дальше →]]>
Sat, 02 Jun 2018 09:00:01 GMT SLY_G счастьенесчастьепотенциалы действияионные каналынейромедиаторы
<![CDATA[Игра в прятки, или первый ботнет, которому не страшен reboot]]> https://habr.com/post/412997/ https://habr.com/post/412997/?utm_source=habrahabr&utm_medium=rss&utm_campaign=412997 обнаружили новую версию ботнета Hide and Seek (HNS), о котором стало известно в начале 2018 года. Он использует кастомный P2P-протокол и является первым ботнетом, который «выживает» даже после перезагрузки устройства, на котором закрепился.

Расскажем, как HNS это делает и как защитить от него устройства интернета вещей.

Читать дальше →]]>
Sat, 02 Jun 2018 09:36:21 GMT VASExperts
<![CDATA[Менеджеры зависимостей]]> https://habr.com/post/412945/ https://habr.com/post/412945/?utm_source=habrahabr&utm_medium=rss&utm_campaign=412945

В этой статье я расскажу, в чем менеджеры зависимостей (package manager) схожи по внутреннему устройству, алгоритму работы, и в чем их принципиальные отличия. Я рассматривал package manager’ы, предназначенные для разработки под iOS/OS X, но содержание статьи с некоторыми допущениями применимо и к другим.
Читать дальше →]]>
Sat, 02 Jun 2018 05:09:58 GMT vani2
<![CDATA[[Из песочницы] О терниях и звездах на пути оптимизации процессов разработки]]> https://habr.com/post/413025/ https://habr.com/post/413025/?utm_source=habrahabr&utm_medium=rss&utm_campaign=413025 Мечты, мечты
Холодными осенними вечерами мы с разработчиками приложений 3D визуализации собирались на кухне… пили кофе… и думали о ней… об эталонной организации разработки.

— У меня знакомые по agile работают: спринты, стори поинты, все дела…
— Да нам бы хотя бы ревью…


Читать дальше →]]>
Sat, 02 Jun 2018 17:39:04 GMT mimila управление персоналомуправление людьмиуправление проектамиуправление командойуправление командами разработчиковуправление проектами и командойуправление проектомразвитие бизнесаразвитие стартапаagilegitflowjiraвизуализация данных3Dвизуализация
<![CDATA[[Из песочницы] SAP по-быстрому]]> https://habr.com/post/412995/ https://habr.com/post/412995/?utm_source=habrahabr&utm_medium=rss&utm_campaign=412995
image
Читать дальше →]]>
Sat, 02 Jun 2018 08:20:35 GMT nasos SAPAzuretemplateбыстро
================================================ FILE: api/test/data/feed/hackernews ================================================ Hacker Newshttps://news.ycombinator.com/Links for the intellectually curious, ranked by readers.Gitea – Alternative to GitLab and GitHubhttps://gitea.ioWed, 6 Jun 2018 08:09:18 +0000https://news.ycombinator.com/item?id=17245246Comments]]>AMD Zen 2 Update: 7nm EPYC in Labs Now, Launching in 2019https://www.anandtech.com/show/12912/amd-zen-2-update-7nm-epyc-in-labs-now-launching-in-2019Wed, 6 Jun 2018 07:26:37 +0000https://news.ycombinator.com/item?id=17245025Comments]]>Microsoft has sunk a data centre in the sea to investigate energy efficiencyhttp://www.bbc.com/news/technology-44368813Wed, 6 Jun 2018 05:19:58 +0000https://news.ycombinator.com/item?id=17244525Comments]]>Facebook confirms data-sharing agreements with Chinese firmshttps://www.bbc.com/news/business-44379593Wed, 6 Jun 2018 08:54:02 +0000https://news.ycombinator.com/item?id=17245458Comments]]>State of Washington sues Facebook and Google over failure to disclose spendinghttps://techcrunch.com/2018/06/05/washington-sues-facebook-and-google-over-failure-to-disclose-political-ad-spending/Tue, 5 Jun 2018 21:30:16 +0000https://news.ycombinator.com/item?id=17242270Comments]]>BuildZoom (a better way to remodel) is hiring a Data Engineerhttps://jobs.lever.co/buildzoom/5d98e8d6-b8be-4871-a1de-109af3cb204dWed, 6 Jun 2018 09:45:39 +0000https://news.ycombinator.com/item?id=17245653Comments]]>Seikilos epitaphhttps://en.wikipedia.org/wiki/Seikilos_epitaphWed, 6 Jun 2018 03:31:04 +0000https://news.ycombinator.com/item?id=17244161Comments]]>AMD Reveals Threadripper 2: Up to 32 Cores, 250W, X399 Refreshhttps://www.anandtech.com/show/12906/amd-reveals-threadripper-2-up-to-32-cores-250w-x399-refreshWed, 6 Jun 2018 03:12:37 +0000https://news.ycombinator.com/item?id=17244089Comments]]>Archive.org and California to start a data sharing and preservation projecthttps://blog.archive.org/2018/06/05/internet-archive-code-for-science-and-society-and-california-digital-library-to-partner-on-a-data-sharing-and-preservation-pilot-project/Tue, 5 Jun 2018 19:31:03 +0000https://news.ycombinator.com/item?id=17241198Comments]]>Caltech glassblower's retirement has scientists sighing (2016)http://beta.latimes.com/local/education/la-me-caltech-glassblower-20160613-snap-story.htmlTue, 5 Jun 2018 18:45:36 +0000https://news.ycombinator.com/item?id=17240776Comments]]>Show HN: LogicEmu – Online Logic Simulatorhttp://lodev.org/logicemuTue, 5 Jun 2018 22:12:12 +0000https://news.ycombinator.com/item?id=17242528Comments]]>Australia drafts laws forcing Facebook and Google to reveal encrypted datahttps://www.theguardian.com/technology/2018/jun/06/planned-laws-to-force-tech-firms-to-reveal-encrypted-dataWed, 6 Jun 2018 07:28:15 +0000https://news.ycombinator.com/item?id=17245032Comments]]>How to be a Manager – A step-by-step guide to leading a teamhttps://getweeklyupdate.com/manager-guideTue, 5 Jun 2018 14:48:19 +0000https://news.ycombinator.com/item?id=17238135Comments]]>Show HN: Transity – Plain Text Accountinghttps://www.feram.io/blog/2018-06-05_transity_the_future_of_plain_text_accounting/Tue, 5 Jun 2018 21:14:23 +0000https://news.ycombinator.com/item?id=17242136Comments]]>Open Source License Helper Toolhttps://choosealicense.com/Tue, 5 Jun 2018 21:26:29 +0000https://news.ycombinator.com/item?id=17242238Comments]]>ServiceFabric: a distributed platform for building microservices in the cloudhttps://blog.acolyer.org/2018/06/05/servicefabric-a-distributed-platform-for-building-microservices-in-the-cloud/Tue, 5 Jun 2018 21:17:47 +0000https://news.ycombinator.com/item?id=17242160Comments]]>Show HN: Grep with colours written in Gohttps://github.com/arsham/blushTue, 5 Jun 2018 12:23:35 +0000https://news.ycombinator.com/item?id=17236967Comments]]>U.S. lawmaker: 'Sure looks like Zuckerberg lied to Congress'http://www.latimes.com/business/technology/la-fi-tn-facebook-data-20180604-story.htmlWed, 6 Jun 2018 01:33:29 +0000https://news.ycombinator.com/item?id=17243729Comments]]>Show HN: Python library for learning binarytreeshttps://github.com/joowani/binarytreeTue, 5 Jun 2018 22:04:31 +0000https://news.ycombinator.com/item?id=17242485Comments]]>Project Capillary: End-to-end encryption for push messaging, simplifiedhttps://android-developers.googleblog.com/2018/06/project-capillary-end-to-end-encryption.html?m=1Tue, 5 Jun 2018 18:28:10 +0000https://news.ycombinator.com/item?id=17240610Comments]]>Teaching My Computer to Write Its Own Music (2015)http://nautil.us/issue/21/information/how-i-taught-my-computer-to-write-its-own-musicTue, 5 Jun 2018 16:35:24 +0000https://news.ycombinator.com/item?id=17239367Comments]]>SEC Names Valerie A. Szczepanik Senior Advisor for Digital Assets and Innovationhttps://www.sec.gov/news/press-release/2018-102Wed, 6 Jun 2018 00:15:42 +0000https://news.ycombinator.com/item?id=17243341Comments]]>Apple Deprecates OpenGL Across All OSes; Urges Developers to Use Metalhttps://www.anandtech.com/show/12894/apple-deprecates-opengl-across-all-osesWed, 6 Jun 2018 07:53:08 +0000https://news.ycombinator.com/item?id=17245163Comments]]>Deploying geographically distributed services on Kubernetes Enginehttps://cloudplatform.googleblog.com/2018/06/How-to-deploy-geographically-distributed-services-on-Kubernetes-Engine-with-kubemci.html?m=1Tue, 5 Jun 2018 20:49:24 +0000https://news.ycombinator.com/item?id=17241895Comments]]>TypeScript 2.9 is now availablehttp://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-9.htmlTue, 5 Jun 2018 21:03:09 +0000https://news.ycombinator.com/item?id=17242026Comments]]>The Beginning of the Monte Carlo Method (1987)https://fermatslibrary.com/s/the-beginning-of-the-monte-carlo-methodTue, 5 Jun 2018 16:56:19 +0000https://news.ycombinator.com/item?id=17239599Comments]]>Tesla shareholders reject bid to strip Musk of chairman rolehttps://abcnews.go.com/Technology/wireStory/tesla-shareholders-reject-bid-strip-musk-chairman-role-55676119Wed, 6 Jun 2018 04:49:59 +0000https://news.ycombinator.com/item?id=17244431Comments]]>GitLab Ultimate and Gold now free for education and open sourcehttps://about.gitlab.com/2018/06/05/gitlab-ultimate-and-gold-free-for-education-and-open-source/Tue, 5 Jun 2018 18:02:47 +0000https://news.ycombinator.com/item?id=17240349Comments]]>Errol Morris Refutes It Thushttps://slate.com/culture/2018/06/errol-morris-book-about-thomas-kuhn-the-ashtray-reviewed.htmlTue, 5 Jun 2018 15:44:47 +0000https://news.ycombinator.com/item?id=17238765Comments]]>Amazon EKS – Now Generally Availablehttps://aws.amazon.com/blogs/aws/amazon-eks-now-generally-available/Tue, 5 Jun 2018 18:04:51 +0000https://news.ycombinator.com/item?id=17240369Comments]]> ================================================ FILE: api/test/data/feed/hackernoon-daily-dev ================================================ <![CDATA[Software Development in Hacker Noon on Medium]]> https://hackernoon.com/tagged/software-development?source=rss----3a8144eabfe3--software_development https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png Software Development in Hacker Noon on Medium https://hackernoon.com/tagged/software-development?source=rss----3a8144eabfe3--software_development Medium Wed, 06 Jun 2018 10:22:44 GMT <![CDATA[SurveyJS plugin for Wordpress]]> https://hackernoon.com/surveyjs-plugin-for-wordpress-9f42d9219db0?source=rss----3a8144eabfe3--software_development https://medium.com/p/9f42d9219db0 Tue, 05 Jun 2018 13:54:13 GMT 2018-06-05T14:15:08.561Z

We are happy to introduce a new plugin for WordPress — SurveyJS plugin. It will help you create a survey, quiz or form. Add it to any page or post on your WordPress site, collect results, and download them to analyze.

The plugin is free and is released under the GPLv2 WordPress standard license. Registration is not required — simply install and use it. It is based on SureveyJS libraries and uses a full SurveyJS power.

Here a short list of SurveyJS features:

  • The plugin has 15 elements (questions and panels): from simple inputs like text and a dropdown to Panel containers and a dynamic matrix (table) to build complex forms
  • Multi page support
  • Localization for many languages and support for multi language surveys/forms (one survey for several languages)
  • Control of survey flow: the ability to set visibility expressions for pages, panels, questions, and even individual items in checkboxes, radio groups, and dropdowns
  • The ability to fill data for checkboxes, radio groups, and dropdowns from web services
  • User input validation with several built-in validators
  • The ability to show results in a read-only survey
  • Several good-looking themes and much more

Powerfull Editor

You can build a survey by using a powerful visual editor called SurveyJS Builder. It can create a survey from scratch, customize it, and test your survey before you publish it on your site.

SurveyJS Builder

How to add a survey to your site

After the SurveyJS WordPress plugin is installed, you can open a list of available surveys. Here, create a new survey, open the editor window for any survey, open the survey results window, and delete the survey if you want.

Press the “Add Survey” button and the plugin will create a new survey and open it in the survey builder window:

You can easily drag and drop questions from the toolbox on the left side to the design surface and set properties by using the property grid on the right side of inplace editing tools. Each change is immediately saved, and you can undo it via the corresponding button in the top center part of the editor.

More information about options and settings can be found in the documentation.

After your survey is designed, we can add it to any page of your site via the “Add Survey” button (Wordpress shortcode) in the Posts section:

You will see your survey in page preview mode and can take it. Voila! We’ve done it!

What about results? — you are asking… The survey results window is available on the surveys list via “Results”:

You can sort results, search against them, and export them in the most popular format.

Support, bug fixed and new releases

SurveyJS is a popular platform that helps you create surveys, quizzes, and forms in JavaScript. This plugin is a part of Project SurveyJS and will be developed further. In addition to the built-in Wordpress forum and GitHub issue tracker, you can ask questions in our AnswerDesk web application.

We are looking forward to your feedback and are working hard to fix bugs you found as soon as possible.


SurveyJS plugin for Wordpress was originally published in Hacker Noon on Medium, where people are continuing the conversation by highlighting and responding to this story.

]]>
<![CDATA[How to host a Single Page Application with AWS CloudFront and Lambda@Edge]]> https://hackernoon.com/how-to-host-a-single-page-application-with-aws-cloudfront-and-lambda-edge-39ce7b036da2?source=rss----3a8144eabfe3--software_development https://medium.com/p/39ce7b036da2 Tue, 05 Jun 2018 11:39:47 GMT 2018-06-05T17:46:08.407Z Configuring CloudFront to support push-state URLs

This one seems like an easy one, however I’m appalled by how much time can be wasted configuring AWS for static website hosting and there must be a better way:

serverless: we will be hosting static assets so no messing around with servers for that
 — cheap and ultra-performant: by leveraging AWS CDN, we’ll get world-class global distribution and caching for pennies
 — automated: this is not a tutorial of the AWS console. Some of the marketing agencies I consult for would typically deploy new landing pages or static websites every week. If that’s something you do regularly too, it is worth investing an hour into automating this into a push-button procedure isn’t it?

About automating

There is something very powerful about automating even the little things. The benefits are much more than the sum of time savings over time, it will reduce human errors, improve the reliability of your service, get your employees busy with higher-value work and boost employee morale by eliminating boring low-value tasks. It improves your business globally.

A game changer: with Lambda@Edge, we can now configure CloudFront to support push-state URLs

The problem so far with hosting an SPA on CloudFront is that we couldn’t support push-state URLs because CloudFront doesn’t offer a “catch-all” configuration i.e. we couldn’t serve the same index.html file for any request to the domain. The solution was to use hash-state “ugly” urls which was a turn-off for most.

In 2017, AWS released Lambda@Edge, a service that runs your Lambda functions “at the edge” of the cloud i.e immediately before/after the CDN queries its cache:

  • viewer request: after CloudFront receives a request from a viewer
  • origin request: before CloudFront forwards the request to the origin
  • origin response: after CloudFront receives the response from the origin
  • viewer response: before CloudFront forwards the response to the viewer

This will let us rewrite the requests on origin request so that we always serve index.html for all push-state routes requests. Happy days!

What do I need?

  • an existing domain name registered as a hosted zone in your AWS account
  • a wildcard SSL certificate for all subdomains
  • terraform and the aws CLI installed and configured on your machine
  • a dummy React or Vue application to deploy

Show me the Terraform module!

I’ve released a Terraform module that does all the heavy lifting for you:

li0nel/terraform-aws-single-page-application

Copy the example files into your SPA root folder:
wget https://raw.githubusercontent.com/li0nel/terraform-aws-single-page-application/master/examples/main.tf
wget https://raw.githubusercontent.com/li0nel/terraform-aws-single-page-application/master/examples/outputs.tf
wget https://raw.githubusercontent.com/li0nel/terraform-aws-single-page-application/master/examples/terraform.tfvars
wget https://raw.githubusercontent.com/li0nel/terraform-aws-single-page-application/master/examples/variables.tf

Replace the values in terraform.tfvars with your aws CLI profile name, your app name and your domain name. Make sure you have an existing certificate for *.cdn.mydomain.com in the us-east-1 region.

Run terraform init then terraform apply and wait for the S3 bucket, Lambda function and CloudFront distribution to be created:

You can now compile your front-end assets locally and push them directly to the S3 bucket to deploy your application:

yarn build && aws s3 cp --recursive --acl=public-read build/ s3://$(terraform output s3_bucket)

An alternative is to use the CodeCommit Git repository and CodePipeline pipeline that has been created by the Terraform module to let AWS build your application, run your tests and deploy on S3.

Either way, your application is now running on CloudFront!

The push-state URL working properly when refreshing the page

How to host a Single Page Application with AWS CloudFront and Lambda@Edge was originally published in Hacker Noon on Medium, where people are continuing the conversation by highlighting and responding to this story.

]]>
<![CDATA[From Junior to Senior: The Skills a Back-End Developer Should Learn]]> https://hackernoon.com/from-junior-to-senior-the-skills-a-back-end-developer-should-learn-cbd077845afd?source=rss----3a8144eabfe3--software_development https://medium.com/p/cbd077845afd Tue, 05 Jun 2018 10:06:01 GMT 2018-06-05T10:06:01.131Z

Are you a junior back-end developer wondering how you can make the next jump in your career?

Transitioning from junior developer to senior developer can seem daunting at first, but if you know the skills that you need to confidently make the change, you’ll be on your way to a promotion or new job sooner than you might realise.

What skills might they be? We spoke to industry experts to seek insights on how you can climb the career ladder and get to that next level. For the purpose of simplicity, we’re going to divide this article into two broad skillsets you need — soft skills and hard skills. So, what do you need to learn, and how should you learn it?

Soft skills for developers

1) Asking for help: If you’re a junior developer, chances are you’ve got more experienced developers around you at your company, or in the communities that you’re a part of. By asking them about their journey to seniority, you’ll uncover some priceless insights.

David Boyne, who wrote this amazing article on his journey to becoming a technical lead, suggests that it’s OK to be surrounded by smart people! Don’t let it intimidate you. Find a friendly mentor who can show you the ropes, and you’ll enjoy the journey even more.

2) Communicating & collaborating: Craig Roberge, a developer at AgriDigital who boasts over 16 years of application development experience, says “soft skills are essential for all developers. The ability for a dev team to collaborate and communicate with each other is the foundation for successful project deliveries.”

This is a timely nugget of advice from Roberge, given that developers can tend to be a little pedantic and defensive about their code. He notes that this can often result in you, the developer, struggling to “be diplomatic with your colleagues.” He says that you must “argue coherently and rationally when you believe your solution to be the best, but always be willing to listen and be polite. Take pride and ownership in your code, but remain calm when things go wrong.” Most developers will know that this is easier said than done!

Building on this insight, Joe Ruello, Engineering Manager at hipages says that “code doesn’t live in a vacuum, and neither should developers. Communication is a vital skill for all developers; whether it be clarifying requirements with your product managers or discussing technical solutions with your colleagues, you need to be able to communicate effectively and clearly to get your ideas across in order to get anywhere in the industry.”

3) Problem solving: This may sound like one of those generic skills that every developer needs, but problem solving takes on a whole new meaning at a senior developer level. The higher you go the more complex the issues will get, and advanced problem solving skills become an absolute must to sustain your success at the top.

Roberge says the “ability to identify problems in advance and identify potential solutions” is key.

Hard skills for developers

By hard skills we mean your technical skills: gaining knowledge of upcoming technologies, and sharpening your current skill set. Keep in mind that technology evolves rapidly, and the skills we highlight are only an indicator of what a back-end developer might need to stay relevant over the next few years.

4) Javascript server side languages, functional programming & blockchain:Roberge feels that you should be trying to get as much experience as possible in both front-end and back-end development. This article we recently published on functional programming are a great starting point, while this one offers up the skills you need to become a blockchain engineer.

5) Design & back-end architecture: Ruello of hipages says, “A solid foundation in design patterns and knowledge of general software engineering best practices will take you a long way — these skills translate across languages and teams and will allow you to be an effective contributor on any team or project.

At a more practical level, proficiency in the language(s) in use by your team, knowledge of SQL and databases such as MySQL and PostgreSQL, knowledge of queues such as RabbitMQ, as well as how to consume an external API, will put you in a good place.”

Understanding the design concepts for back-end architecture, and the knowledge on building, maintaining and processing all of the data that goes through it, will enable you to see the ‘big picture’ of the back-end, which is critical when you’re a senior developer or technical lead. It’s the only way you can guide and mentor other junior developers working under you.

6) Keeping up to date with emerging technologies: Staying relevant is an endless battle in development, and you’ve always got to be looking to learn and progress. A resource like Stackoverflow can be your best friend, as you’ll be part of a community that’s in the same boat as you, avoiding the risk of coding in isolation.

Ruello adds, “The days of massive monolithic applications are coming to a close: the industry is moving towards microservice architectures and alternate paradigms such as event sourcing.

“Knowledge and experience with containerisation and orchestration technologies such as Docker and Kubernetes is becoming more and more relevant and should be in the toolbelt of any back-end developer.

“It is also beneficial to be versatile. Having some basic front-end knowledge under your belt — including modern frameworks like React — will allow you to do more yourself and deliver value at a quicker pace.”

Clearly, this reiterates how important the functional programming realm is becoming. It’s a whole new philosophy, a new way to code, and the sooner you become familiar with it, the better.

To sum up…

It’s important that you, as a junior developer, don’t get overwhelmed with all that you need to learn. But at the same time, you need to focus on developing the skills that will allow you to see and understand the back-end big picture. You must also remember that hard skills will only take you so far, and you’ll need softer skills to lead, communicate and collaborate effectively.

Ruello puts the challenge into perspective: “Back-end development can be a thankless role. Your job is to marshal data across your system in a performant and efficient way. The end user should not be aware of your presence, but you have the satisfaction of knowing that you’re doing the work to bring them the value you’ve promised.”

So stay true to your purpose as a back-end developer. If this is what you’re meant to do, you’ll have no problem in finding the motivation to overcome any obstacles, or learn any new skills you need to rise through the ranks.

Ready to ramp up your development career? Australia’s leading tech companies are looking for new talent right now! Check out our latest job listings here.


From Junior to Senior: The Skills a Back-End Developer Should Learn was originally published in Hacker Noon on Medium, where people are continuing the conversation by highlighting and responding to this story.

]]>
<![CDATA[The WWDC 2018 Keynote Chronicles]]> https://hackernoon.com/the-wwdc-2018-keynote-chronicles-fe97d1a9cee8?source=rss----3a8144eabfe3--software_development https://medium.com/p/fe97d1a9cee8 Mon, 04 Jun 2018 20:59:23 GMT 2018-06-04T21:01:14.806Z
Courtesy of Apple WWDC2018

So, I did this last year and decided to do it this year as well. Less of an Apple fanboy than in 2017, but as a developer and software engineer by trade and passion, I could not stay away from an event that regardless of my latest disappointments in Apple and specifically Tim Cook, does innovate and inspire to some degree.

Without further ado, here’s what happened today at the keynote event that started with what first seems like a light mockery of developers turning into a somewhat sweet Animal Planet style mini episode about who — us developers — are.

Followed by a running Tim onto the stage as if he just took too much time on the loo and was about to miss his cue. I understand a good morning or evening run, I understand the need for fitness, but running on and off stage, just never made sense to me, only to start with iOS — or better said, with all the things they should have done last year but failed to.

iOS 12

Starting with an iOS vs Android adoption rates report was a bit low and not news at all. Android is getting better and has its merits but fragmentation will forever force it into a lower adoption rate than iOS. This is now a decade long discussion and I still fail to see why.

The Interesting News:

  • iOS12 will be available for the same devices that today are capable of running iOS11, in fact iOS12 is supposedly up to 50% (average) faster than iOS11 on an iPhone 6.
  • Burst CPU processing model allowing your CPU to instantly ramp up and down when required. Power saving expected as well.
  • Shareable AR .usdz format available, and will be used natively by Adobe Creative Cloud as well — this could be interesting and occasionally useful.
  • A new app called Measure which can measure in 3D. Very cool and immensely useful!
  • Siri shortcuts to app actions, which basically means you’ll be able to automate a bunch of things, set a trigger call for Spotify and other previously unavailable things via Siri.
  • Refocus on how you use phone and tablet. Do not disturb at night with no notifications, and additional options added to set for how long you don’t want to be disturbed. Also in each notification you can fine-tune how often and when you want to see them.
  • Speaking of, here come group notifications — finally!
  • Screen-time control with great insight into how you use your device and control it based on reporting on how you use your phone or tablet which is particularly useful for kids as it allows for allowance so they spend a max set amount of time on an app per app basis.
  • Another “about time” feature is group face-time of up to 32 people — a demo of which was definitely “not rehearsed” …

The Boring News

  • ArKit2 is coming — ok, fine, moving on.
  • Multiuser augmented reality — happy with regular reality, sometimes even that’s too much.
  • ArKit Lego physical and digital combined play experience of up to 4 users. LegoArExperiences on the app store later. Will take a physical set of Lego over anything digital!
  • Photos search is now better with added refinements and suggestions.
  • New tab called “foryou”: loops, on this day, sharing activity suggestions based on face recognition while your friend gets a reverse sharing option, all private, on device.
  • News gets a “browse” tab, and a sidebar. Wow!
  • New stocks app with apple news built in. Some cross-pollination right there…
  • Voice Memos app.
  • iBooks gets a new design and is now called Apple Books — rebranding at its finest!
  • CarPlay third party navigation is allowed now — finally admitting you need more than Apple Maps to get to your destination?
  • Animoji with tongue detection — what the actual fudge?!?
  • Memoji — create your own animoji because your face is just not good enough anymore… :/

Watch OS5

This one I really cannot get excited about. While I am a huge fan of smart watches, I fail to understand how a time-piece that requires daily charging is considered as Apple put it “number one in customer satisfaction every year”. Clearly, these customers have not tried any other smart watch out there. And no, I don’t mean FitBit bracelets.

The Irrelevant (to me) News

  • Competition challenges between friends — basically who can close the rings faster.
  • Added Yoga activity type and hiking activity type.
  • Pace alerts and cadence reports.
  • Automatic workout detection — my Garmin does that already.
  • Walkie talkie app for “a fun easy way to talk”, using watch to watch connection.
  • Siri shortcuts available just like on iOS.
  • Third party apps on Siri watch-face.
  • You no longer need to say “hey Siri”, just raise your arm and talk to it.
  • Interactive notifications.
  • Web content in mail or messages with webkit — so this might send web designers and developers into a frenzy of “developing watch-first sites”.
  • Podcasts app on the watch. Meh.

The best bit was the demo with a lady on a stationary bike pretending to do a workout session and then her daughter talking to her on the watch yelling #mommyforthewin For the love of everything that’s holy, can these things get any more awkward and cheesy?

AppleTV 4K tvOS

The AppleTV in my view is one of the most underrated devices on the market today. I have both the 4 and the 4K and they are absolutely brilliant devices at a low-low cost of under $200. For what they are and what they can do, that’s a bargain.

Just News …

  • iTunes has now the largest collection of 4k HDR movies which while impressive I wouldn’t really write home about. Other providers will catch up quite quickly.
  • Dolby Atmos — which as far as I remember was last year’s news, but on that note, iTunes now has the largest Dolby Atmos collection, and comes as a free upgrade on supported titles. Thanks, I guess.
  • Live sports and news in a few countries, so again, don’t hold your breath.
  • New aerial screensaver location: earth from space — probably the coolest update to be honest.

MacOS Mojave

I am pretty sure I’ll end up calling it “Mojito” instead, because this “Mojabi” something just doesn’t roll off the tongue.

The Exciting News

  • Dark mode, which looks “bitchin’”! xCode gets dark mode too.
  • Dynamic desktop that reflects the time of day — might be a gimmick but still cool.
  • Desktop stacks for clean desktop — this is very welcome as it cleans up the desktop automatically. Brilliant!
  • Finder gets a new view called gallery view with file details bar and quick actions. Quite useful.
  • Quick look gets better with markup and quick actions. Just as useful as the above.
  • Screenshots with tools now and options, also very useful.
  • Safari shuts down cookie based tracking. Die cookies, die!

Not So Exciting News

  • Continuity camera able to take pictures and scan documents via your mobile device — I never used this continuity thing.
  • News app coming to mac, Stocks as well. Same for Voice Memos and Home app.
  • Better privacy for camera and microphone.
  • Safari is killing fingerprinting for tracking purposes so basically your Mac will look to an outside corporation or hacker a lot like many other macs, making it hard(er) to identify you.
  • Redesigned mac app store with themed tabs and recommendations, tips and tricks. Work, play and develop tabs added.
  • Ratings and review API for developers.

Well, I guess that’s kind of it. With MacOS the focus seems to have shifted to making the Mac a productivity machine more than just a design statement, which is very welcome and hugely necessary for professionals.

Most of this stuff available this fall. Over and out.

Attila Vago — writer of codes, blogs and things that live on the web. Programming polyglot, pragmatic doer, member of the “taking care of business” crowd, with a no nonsense attitude. An easily inspired inspirational individual with a strong predilection towards most things nerdy, good, carnivorous food, and Lego. Uses a Mac. Exercises at 6 a.m.

HackerNoon and Quora author.


The WWDC 2018 Keynote Chronicles was originally published in Hacker Noon on Medium, where people are continuing the conversation by highlighting and responding to this story.

]]>
<![CDATA[Five Quick Thoughts on Microsoft + Github]]> https://hackernoon.com/five-quick-thoughts-on-microsoft-github-b3563722e856?source=rss----3a8144eabfe3--software_development https://medium.com/p/b3563722e856 Mon, 04 Jun 2018 20:43:36 GMT 2018-06-04T21:08:13.797Z
Image: The Verge

By Joseph Flaherty

Microsoft is acquiring GitHub for $7.5B in stock. What does it mean for the tech ecosystem and startups? Here are a few quick thoughts:

1. From Creepers to Coders to CEOs

The first coding project of a precocious programmer starting out today will almost certainly be a Minecraft mod. Once this engineer is ready to graduate from brick-based biomes, a GitHub profile is a natural landing place. After this up and coming engineer has mastered MongoDB, they might be tempted by management and the lure of LinkedIn. It’s not an entirely clear story, yet, but Microsoft is stitching together an exciting series of assets that stretch from Kindergarten to the corner office.

2. Is Microsoft using Apple’s 2001 playbook?

Apple’s renaissance in the early aughts is usually attributed to the stylish iMac and the revolutionary clickwheel of the first-gen iPod, but many forget, or underestimate, how important the release of a Unix-based OSX was in gaining share with the developer community. These developers were the “alpha geeks,” evangelized to the tech masses, and stocked the iOS app store in the early years.

Is Microsoft trying to run that playbook? As Apple and Google jockey to bridge the gap between office and home, as Microsoft did in the 1990s, Microsoft is doubling down on productivity and tools. Perhaps Karate Kid reboots, and partnerships with Steven Spielberg will distract Google and Apple from the boring business of software, giving Microsoft an entre to reassert itself?

3. Will a startup fill GitHub’s void? Or are network effects too powerful?

GitHub competitor GitLab saw a massive surge in project imports when the acquisition news broke over the weekend, but does this represent a real developer revolt or merely an act of protest that will be nullified by superior network effects? What’s the over/under on crypto-backed replacements that will seek to fill the void in the coming weeks?

4. Don’t fight the last war

Many predicted Apple would “lose” mobile to the more open Android alternative, based on how the Mac vs. PC battle played out. It seems like a similar line of thinking is at play here, that Microsoft is doomed to destroy what makes GitHub so unique. Here’s a good example of this thinking:

It’s a fair concern, but I wouldn’t be so sure. Under CEO Satya Nadella Microsoft has shed many, if not most, of its bad practices from the Gates/Ballmer era. Despite its impressive balance sheet, Microsoft is arguably in fourth place among elite developers in mindshare and tool usage.

Almost all elite developers use Apple hardware, and iOS is the key to the global software market. Gmail and Docs are preferred over the Office Suite and addressing Android is a must. After iOS, AWS are the three most important letters in tech.

Moreover, each of these companies has taken a substantial PR hit among developers over the last few years. Apple’s diminishing reputation for quality and continued hostility to developers irks many. Google is building killer drones for the government and selling personal data to the highest bidder, both of which turn-offs for sizeable segments of developers. Amazon is eating everything. All the while, Microsoft minds its business, quietly selling software and services, and unbelievably to someone who lived through the 1990s, is the underdog. I wouldn’t be surprised to see the narrative around Redmond to change dramatically.

5. Efficient entrepreneurship pays

Github raised $350M in VC, which is a lot of capital, but the founders put off taking investment for the company’s first four years, until they had built substantial value. I haven’t seen the most recent cap table, but that decision to put off raising will likely make the founders billionaires. The lesson? Patience pays dividends.

What’s next?

Open Source emerged as a reaction to the Microsoft hegemon in the 90s, now Microsoft is the owner of one of the biggest Open Source communities. Imagine explaining this headline to a techie who went into a coma in 1997. So what’s next?

A merger with Adobe and/or an acquisition of Sketch/InVision to make a play for the creative class that Apple is paying less and less attention to? Will Microsoft use it’s Xbox franchise and the Hololens to compete on the entertainment front? There are more questions than answers at this point, but for the first time in a long time, Microsoft is interesting.


Five Quick Thoughts on Microsoft + Github was originally published in Hacker Noon on Medium, where people are continuing the conversation by highlighting and responding to this story.

]]>
<![CDATA[Deploying GitLab Review Apps with Terraform]]> https://hackernoon.com/using-terraform-for-gitlab-review-apps-acf05920a264?source=rss----3a8144eabfe3--software_development https://medium.com/p/acf05920a264 Thu, 31 May 2018 00:52:01 GMT 2018-06-04T18:15:01.491Z

GitLab Review Apps are a convenient way of managing dynamic environments for the purpose of reviewing changes before merging into your main branch. GitLab has great Kubernetes support and can easily deploy to your clusters, but if your application is not nicely containerized or your team is not ready to take on Kubernetes, what do you do? You Terraform!

Terraform

Terraform is an excellent cloud-agnostic tool for developing your infrastructure as code. By combining a couple features of Terraform, we can pretty easily build a system for deploying Review Apps.

1. Workspaces

Workspaces provide a way of provisioning and managing multiple sets of identical infrastructure without copying Terraform configuration files. If you are familiar with Terraform and its .tfstate files, you can think of Workspaces as creating and managing new arbitrarily named .tfstate files.

For example, terraform workspace new $BRANCH creates a new Workspace which is named with the value of the environment variable $BRANCH. This creates a new blank .tfstate, meaning a terraform apply will provision a new set of resources that are managed independently of any resources managed by any other workspace.

2. Remote State

Remote State is a way to persist Terraform state across multiple machines by storing .tfstate files in one of several supported remote storage mechanisms, such as Amazon S3. While this is most commonly used to allow people to collaboratively work on infrastructure, it can easily be used within GitLab jobs to provision and keep track of infrastructure managed by Terraform.

The key here is that Remote State persists Workspaces, allowing GitLab CI/CD to reference the Workspaces created for each branch across different jobs that will be ran at different times from different machines.

GitLab CI/CD

The .gitlab-ci.yml configuration for this is pretty straightforward, but there are a few key points.

There are three important pieces of configuration here, all within the environment block.

  1. name is the dynamically built name of the environment itself. In this case it is based on the the CI_COMMIT_REF_SLUG variable which is the URL-friendly representation of the branch name.
  2. url is the URL that GitLab associates to the environment. Note that GitLab does not create the DNS record for this, it is up to you to create it.
  3. on_stop tells GitLab which job should be triggered when the branch is closed or the environment is manually stopped, thus finishing off what makes this a Review App and not just a dynamically named environment.

The script portion of the configuration is where Terraform comes in.

We need to store the Terraform configuration outside of this repository because we need the configuration files to be available after the branch is closed.

Referencing a particular Git tag when cloning this repository is necessary to ensure that the infrastructure used to provision these applications does not change without you knowing.

As mentioned earlier, Terraform Workspaces is one of the big features that makes Review Apps with Terraform possible. We can define the infrastructure required to run the application and then use Workspaces to manage isolated copies of this infrastructure.

terraform workspace select $CI_COMMIT_REF_SLUG || terraform workspace new $CI_COMMIT_REF_SLUG

Here we are selecting the Workspace named with the value of $CI_COMMIT_REF_SLUG or we are creating it if it does not exist. This ensures that we can run the the StartReview job multiple times from a single branch without having issues.

The rest of the script is a standard terraform apply followed by some CodeDeploy specific stuff. I am not going into deployment specifics in this article since there are many tools for doing it, but if you are interested in setting up CodeDeploy I have written about it in the past.

The StopReview job is very similar to StartReview.

The GIT_STRATEGY environment variable set to none makes sure that GitLab does not try to clone the branch when running this job. This is necessary because this job may be ran after the branch is closed, and thus with nothing to clone.

The combination of action: stop and the name property is what tells GitLab which environment this job is meant to stop. The name here needs to match the name set in StartReview.

Getting to the script, we again clone the Terraform repository with the same tag used earlier.

We select the Terraform Workspace corresponding to this branch (it will already be created if we are running this job) and run terraform destroy -auto-approve to de-provision the infrastructure that was created for this branch’s Review App.

To clean everything up, we then switch the default Workspace and delete the Workspace we created for this branch. Terraform does not let you delete the currently selected Workspace, which is why we need to switch back to default.

At this point you should have infrastructure that can be provisioned at will dynamically based on branch name and then destroyed either at will or automatically when the branch is closed. Integrating your deployment tool of choice on top of this will give you fully functional Review Apps with their own infrastructure even if your application is not ready for Kubernetes.

Follow Jared Ready for more DevOps goodness!

👏 if you enjoyed the read!


Deploying GitLab Review Apps with Terraform was originally published in Hacker Noon on Medium, where people are continuing the conversation by highlighting and responding to this story.

]]>
<![CDATA[Bitcoin and Software Reliability]]> https://hackernoon.com/bitcoin-and-software-reliability-d681367a49b2?source=rss----3a8144eabfe3--software_development https://medium.com/p/d681367a49b2 Mon, 04 Jun 2018 10:41:54 GMT 2018-06-04T17:14:12.953Z

A small group of disgruntled people who feel left out of Bitcoin’s meteoric rise complain that Bitcoin’s developers add new features to its basic tool kit “too slowly”, and that innovation on it has stagnated. It is not true that Bitcoin is stagnating. Bitcoin is the fundamental backbone of the missing infallible payments layer of the Internet. In order for it to be infallible and totally reliable, there is only one possible approach to maintaining and extending the software that governs it.

The mindset and approach needed is not many quick iterations and “break things” mentality; instead, what is needed is the thinking behind super high uptime software, where methodical, slow, evidence-based improvement cycles are employed, and where features are added only when it is proven that stability, compatibility and integrity are absolutely guaranteed.

This is not a new approach in software. Mission-critical systems and applications where life and death are at stake opt for vendors who are very conservative and focussed on stability and reliability.

INTEGRITY Real-time Operating System

These systems have uptimes (the amount of time a system is available without interruption) measured in years. Visa’s recent downtime shows they are not running systems built to this high and exacting standard, and Bitcoin shows that it is built to this standard, with its uninterrupted, infallible and continuous service measured in years.

Bitcoin isn’t an operating system, but the principles of fault tolerance and careful extension apply nonetheless. The “To the Moon” meme provides a useful context. NASA’s software fault tolerance requirements are very strict. When astronauts are involved, their lives are at stake. “Break stuff” in that context means “Kill People”. The software simply must work every time, no compromise, no guesswork, no exceptions. There are no “do overs” or roll-backs. Guaranteed performance is possible in software, because everything about the systems, including the hardware, can be known in advance and thoroughly tested.

High fault tolerance software development has been going on for decades. It is a very well understood discipline, and the practices, methods and mentality are also established and known to work. This is why regular satellite launches work exactly as expected every time. People take them for granted, but there is a culture behind the processes that make regular flawless space launches possible that needs to be applied to Bitcoin, if it is to serve everyone as is hoped. It is not unreasonable to expect Bitcoin to never have an error in its operation. This expectation is already understood to be achievable in Air Traffic Control systems, where once again, lives are at stake.

https://shemesh.larc.nasa.gov/fm/fm-atm.html

With Bitcoin, lives and money are at stake. Interruption of its service can cause a cascade of losses and unintended consequences for potentially millions of people and billions of fiat dollars. If it is possible to build a Bitcoin that cannot fail, that should be the goal, and no compromise should be acceptable. It is also clearly possible that a distributed Bitcoin with that characteristic can exist. Bitcoin can be absolutely fault free and distributed at the same time; in fact, any centralization of Bitcoin into data centres increases the probability of critical faults. For certain, there is a math function to describe this. Can you write it out? The exam question would be something along the lines of,

“If Bitcoin is run from a single data centre and that data centre goes off-line, Bitcoin goes down. If Bitcoin is in two data centres and one of them goes off-line, Bitcoin stays up. Describe a function that explains this, showing the number of data centres in relation to the probability of Bitcoin going down, where going down means Bitcoin is totally inoperable. Extra marks for providing a graph of the function.”

Bitcoin is not a social network or chat app. It is a mission-critical software project that has greater integrity than any financial software project in history, in both senses of the word “integrity”. It never goes down, is always available, and is absolutely predictable. All other projects next to it pale in comparison. It is a solid foundation to build against — more solid, in fact, than the operating systems used to build the services that take advantage of it.

The vast majority of tool builders are not held to the standards that NASA and Mission-Critical, High Availability systems are held to; it is a special discipline that most people are unaware of. Participants who are not even software developers at all have no clue about this specialist field, let alone the expert field of software that isn’t life or death fault tolerant itself; that field is two times removed from them, and is not a part of their thinking at all.

Cherenkov Radiation in a Nuclear Reactor. TOXIC!

The more you look at what Bitcoin has achieved, how specialised its disciplines and requirements are, the number of things outside the software realm that constrain its operation (like the speed of light) the more you’re astonished that it has even happened, and the more you want to stay as far away as you can possibly get from its inner workings…if you are sane. This doesn’t mean that you can’t build on Bitcoin as an ordinary developer; on the contrary, its APIs are easy to understand and build against. What you cannot do, however, is enter the “radiation zone” where unseen problems can literally irradiate and kill you. The speed of light is a perfect example.

There is an upper limit to the block size beyond which the Bitcoin network cannot stay in sync. Because it takes time for data to move across the network, the speed of light is a limiting factor. You can’t have blocks of a size that are beyond that limit, and have Bitcoin as a distributed network. The obvious question is, “what is that magic block size number?”. It is certainly a function of the fastest possible network transmission speed, which is very much slower than the speed of light in air. Normal fibre optic cable transmits light at one third the speed of light, which suggests another exam question,

“Calculate the largest theoretical block size the Bitcoin network can manage and maintain a distributed peer structure if it were running on a perfect fibre optic network where the connections between all nodes run at half the speed of light, over a geographic area the size of the Earth. Any node on the network must be a maximum of one microsecond behind any other node at any time during normal Bitcoin operation.”

This is the sort of question big blockers don’t ask and don’t have the math to answer. New ultra-thin photonic-bandgap rim, mode division multiplexing fibre optic cable can transmit light at 99.7% of c, but it will take decades to replace all the “slow” fibre optic cable globally. For now, Bitcoin must operate within the constraints we have today. This matter of speed constraints is a question High-Frequency Traders have already posed, and found a solution to; put everything in one data centre:

This means that traders who are competing against each other buy rack space in specialist data centres where their boxen can execute trades with the equipment of other traders. This is not acceptable for Bitcoin, obviously, because it exists outside of the State and its regulations. High-speed trading data centres are all “compliant” and regulated. Bitcoin is not regulable. It can never exist in a data centre without losing its force of nature characteristic. This is not to say that Bitcoin is in opposition to anything; the rain, wind and snow are not in opposition to crops, roads or your vacation; they simply are, just as Bitcoin is. Putting Bitcoin in a data centre is like trying to put lightning in a Leyden Jar. It isn’t lightning any more, but static electricity.

Decades from now, when fibre optic cable runs at near-lightspeed it may be possible to increase the block size, and do other things that take advantage of the inevitable improvements in hardware and software. Certainly, as Bitcoin unleashes the forces of the free market, these innovations will come faster than they would have under the fiat currency fueled State. For now, however, Bitcoin must exist inside the constraints imposed by today’s technology. And it will be enough to change everything.

Tappas for six, 4 bottles of Moreneta Blonde, jug of sangria, fresh lemonade.


Bitcoin and Software Reliability was originally published in Hacker Noon on Medium, where people are continuing the conversation by highlighting and responding to this story.

]]>
<![CDATA[Keep passwords and secrets out of your logs with Go]]> https://hackernoon.com/keep-passwords-and-secrets-out-of-your-logs-with-go-a2294a9546ce?source=rss----3a8144eabfe3--software_development https://medium.com/p/a2294a9546ce Mon, 04 Jun 2018 15:56:01 GMT 2018-06-04T21:25:37.059Z When working with distributed systems generally the more logs, the better — the complication lies in being liberal for visibility while being conservative to keep sensitive information private and secure. It’s not easy, just ask GitHub and Twitter who found themselves logging raw passwords recently.

The details of GitHub’s and Twitter’s incidents weren’t made public but I’d guess an engineer changed a log level config or logged the request bodies without realizing the consequences.

The fact is this is the reality of the job — with complex systems like these no one can know the consequences of every change, especially so with the fast tech turnover rate. If we’re gonna solve problems like these we need to go deeper.

Issues like this arise by Murphy’s law: whatever can go wrong, will go wrong — if you leave a trap behind someone will walk into it. Let’s not do that. When writing Go, here’s what I do to leave no such trap behind and prevent the logging of secrets.

Let’s say you have a sign up request like so:

type CreateUserRequest struct {
Credentials Credentials `json:”credentials”`
}
type Credentials struct {
Email string `json:”email”`
Password string `json:”password”`
}

And let’s say you’re logging to JSON for Elasticsearch:

// logger we’re using
logger := log.NewJSONLogger(os.Stdout)
// request we decoded
request := CreateUserRequest{
Credentials: Credentials{
Email: “bilbro@theshire.net”,
Password: “theonering”,
},
}
// our call to log the request
logger.Log(“request”, request)
// the output
{“request”:{“credentials” {“email”:”bilbro@theshire.net”,”password”:”theonering”}}}

The result is the user’s password is logged. Not good.

To solve the problem we’ll implement our own MarshalJSON that’ll redact the user’s password.

func (co Credentials) MarshalJSON() ([]byte, error) {
type credentials Credentials
cn := credentials(co)
cn.Password = "[REDACTED]"
return json.Marshal((*credentials)(&cn))
}

Now when we log the same request the user’s password is not logged:

// the output
{“request”:{“credentials”:{“email”:”bilbro@theshire.net”,”password”:”[REDACTED]”}}}

There is now no possibility of logging the user’s password, regardless of who logs, nor where or when — at least if you’re logging JSON with this implementation. If you’re logging in another format, the same technique applies and there should be a corresponding marshal method for you to implement.

Please say hi at @travisjeffery.

Hit the 👏 and share if you found this useful.

Thanks for reading.


Keep passwords and secrets out of your logs with Go was originally published in Hacker Noon on Medium, where people are continuing the conversation by highlighting and responding to this story.

]]>
<![CDATA[Today I Learned: Storing Emoji to Mysql with Golang]]> https://hackernoon.com/today-i-learned-storing-emoji-to-mysql-with-golang-204a093454b7?source=rss----3a8144eabfe3--software_development https://medium.com/p/204a093454b7 Mon, 04 Jun 2018 10:11:01 GMT 2018-06-04T10:43:27.069Z A simple and silly story, about our tiny bug today.
monocle emoji from google image search

Today, I with my team in Kurio, having a bit of funny moment but also silly thing. It’s happen when we trying to store emojis to our storage in Mysql through our new and simple CRUD API services.

We’re making an internal service that used by our content-team, just a simple CRUD. The stacks is just: Angular + Golang + Mysql.

The services already deployed to production and already used by our content-team. Everything is normal, because it’s already tested from staging until it’s released. Until, when one of our content-team started to store an item to this services, and the payload have a few of emojis. That’s when we realized this silly bug.

The payload is more look like this :

{
"type": "text",
"text": "😈🤠 Lorem Ipsum Dolor sit Amet 😱",
"color": "#FFFFFF"
}

And returning error about incorrect value to store.

"Number": 1366
"Message": "Incorrect string value: '\\xF0\\x9F\\x98\\x88 \\xF0...' for column 'text' at row 1"

Luckily, this services is for internal use to our content-team, and the user load is not huge, so it’s still tolerable 😈. I can’t imagine what will happen if we released this to our real user.

Solving The Issue

To solve this issue, we do a few things related to this issue.

  • Change the Database’s charset encoding and collation
  • Change the Connection Driver’s charset encoding and collation from our application(Golang) to Mysql Server

Change Database Encoding Charset and Collation

our default charset before changed

We use Mysql 5.7 and using utf-8 as our charset. Which is not recommended after we fixing this issue.

So the solution is, we change our charset and collation to utf8mb4, because utf-8 in Mysql is not fully support all the utf-8 encoding generally. If we want a fully support all the utf-8 generally, we must use utf8mb4 .

To change the whole database’s charset and collation:

ALTER DATABASE
database_name
CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

To change the whole a specific table’s charset and collation

ALTER TABLE
table_name
CONVERT TO CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;

So after making this, we think we have solve our problem. But, after test it again, we still don’t fixed it. It still returning the same error.

Change Connection Charset in Mysql Driver

After reading more article and some q/a in stackoverflow and other forums. It’s not only the database, we also need to change our connection’s driver charset and collation. Because this service that we developed, is built from Golang (1.10), and also we use package github.com/go-sql-driver/mysql as our driver, we just need to add some changes to our dsn.

Before:

dsn := `root:root@tcp(127.0.0.1 :3306)/DB_NAME?parseTime=1&loc=Asia%2FJakarta`
dbConn, _:= sql.Open(`mysql`, dsn)

After:

dsn :=`root:root@tcp(127.0.0.1 :3306)/DB_NAME?parseTime=1&loc=Asia%2FJakarta&charset=utf8mb4&collation=utf8mb4_unicode_ci`
dbConn, _:= sql.Open(`mysql`, dsn)

Well, after doing this, now our service is running well, and can accept any emoji characters.

Conclusions

This bug is not too big, to be honest, it is a silly and funny bug. But it looks like everyone had ever fallen to this trap 😥. But today I learned something, that we should be careful when creating a database, regardless whatever its type (RDBMS, NoSQL)

References:

  1. Answer by Selvamani P in stackoverflow.com https://stackoverflow.com/a/39465494
  2. Answer by Mathias Bynens in dba.stackexchange.com
    https://dba.stackexchange.com/a/21684

If you found this article useful, or interesting to read, please kindly share to your network circle, or you can just give claps to help other to reach this. If you have any question or something, just put a response below.


Today I Learned: Storing Emoji to Mysql with Golang was originally published in Hacker Noon on Medium, where people are continuing the conversation by highlighting and responding to this story.

]]>
<![CDATA[A Modern Icarus — the short story of Ariane 5 Flight 501]]> https://hackernoon.com/crash-and-burn-a-short-story-of-ariane-5-flight-501-3a3c50e0e284?source=rss----3a8144eabfe3--software_development https://medium.com/p/3a3c50e0e284 Sun, 03 Jun 2018 20:05:42 GMT 2018-06-03T22:05:08.888Z
Ariane 5 Flight 501 @ T + 3 seconds

The 22nd anniversary of Ariane 5 Flight 501 offers an opportunity to reflect upon software defects, project errors, and the best principles and practices for solution delivery in the IT industry. In this blog and my upcoming book, Bugs: A Short History of Software Imperfection, I will chronicle some important failures in the past, explain how we arrived at the present, and discuss some ideas for improving the future of software quality. As information technology becomes increasingly woven into Life, the quality of software impacts our commerce, health, infrastructure, military, politics, science, security, and transportation. The Big Idea is that we have no choice but to get better at delivering technology solutions because we have to.

On June 4, 1996 in Kourou, French Guiana, the maiden flight 501 of the Ariane 5 rocket ended almost as soon as it began. About 37 seconds after the initial launch sequence (30 seconds after takeoff), at an altitude of 4000 meters, the rocket deviated 90 degrees from its intended flight path due to a software failure, experienced severe aerodynamic stress tearing its boosters from the main stage, and thereby triggered a controlled self-destruction that culminated in the spacecraft exploding in a fireball of liquid hydrogen.

The European Space Agency (ESA) had ambitions to take a leadership role in the commercial space business and surpass Japan, Russia, and the USA. The Ariane 4 (A4) had been in service for more than 20 years and boasted an excellent record of more than 100 successful launches with no failures. The new Ariane 5 (A5) rocket would carry larger satellite payloads than earlier versions, and flight 501 was carrying a payload of four satellites intended for researching the Earth’s magnetosphere. ESA had spent 10 years and $7 billion developing the A5, and flight 501 itself cost $370 million. The success of the Ariane 4 and ESA budget pressures resulted in the reuse of A4 software by the A5 program team including its navigation system and flight path optimization libraries.

ESA organized an inquiry board immediately after the crash to investigate the disaster and using flight data, optical observations (IR camera, film), inspection of recovered material, and review of the software code, the board identified the following sequence of events that resulted in the crash.

  • At T + 37 seconds, the Internal Reference System (SRI) that measured the rocket’s spatial attitude (altitude, motion, and position) sent incorrect data to the Flight Control System instead of the actual flight data because an arithmetic overflow occurred inside its alignment function when a 64-bit floating point number for the Horizontal Basis variable (BH) could not be cast and converted to a signed 16-bit integer. The SRI in the A5 was reused as a black box from the A4. Furthermore, the BH value was higher than expected because the early part of the A5 trajectory differed from the A4 and resulted in higher horizontal velocity values (five times as much). This error did not occur earlier in the flight because the vehicle speed was lower and the calculated values were small enough to fit into the program’s data types. Since there was no exception handling in the Ada code for this alignment function, the operand error bubbled up and the SRI component entered a failed state and returned a diagnostic value, intended for debugging purposes only.
  • The backup SRI, identical in hardware and software to the active SRI, could not be activated because it had failed for the same reason.
  • At T + 38 seconds, the On-Board Computer that executed the flight program then commanded course corrections as a result of the incorrect SRI data, and the rocket’s nozzles were deflected changing the flight path at an extreme angle.
  • At T + 39 seconds, high aerodynamic forces led to separation of the boosters from the main stage and triggered the self-destruct subsystem.
Ariane 5 Flight 501 @ T+ 39 seconds

The inquiry board further analyzed the SRI software and overall A5 program and arrived at several conclusions:

  • The SRI alignment function was used to perform ground-based alignment of the inertial platform prior to lift-off (around T-3 seconds) and once the rocket took off the alignment function would not serve a purpose. It was left running in the A5 for the first 50 seconds as a “special feature” in case the system needed to be restarted in the event of a brief pause in the countdown before lift off; such resets could take hours in the A4 and this would speed up the process.
  • The SRI code had been analyzed for exceptions by the A4 team, and seven variables were deemed at risk of operand error. Since a maximum SRI CPU utilization target of 80% had been set for the A4, only four variables were protected and three were left unprotected, including the BH variable. The original reason given for this decision was that “they were physically limited or there was a large margin of safety.” However, the CPU constraint only applied to the A4 — not the A5, and the SRI code was never re-analyzed by the A5 team using realistic A5 input data.
  • The operand error in the SRI was not sufficient for system failure. The specification and design of the SRI exception handling mechanism also contributed to the failure. In the event of any exception, the system specification stated the failure should be indicated on the data bus, the failure context should stored in an EEPROM memory, and finally the SRI processor should be shut down. The reason behind this acute action was the engineering culture within the Ariane program focused on hardware failure instead of software failures since the former occurred more often than the latter. A rational approach to handling random hardware failures is to shutdown active systems and switch to the backup. However, a better approach in this software fault scenario would have been to provide best-effort estimates of the required altitude, position, and velocity. The inquiry board wrote that “software should be assumed faulty until applying the currently accepted best practice methods can demonstrate that it is correct.”
  • While there was some unit testing and integration testing with A4 data, neither end-to-end, integration testing with hardware and software nor test simulations with realistic data from the A5 trajectory data were ever performed. Post-501 flight simulations running the SRI software in the context of actual 501 trajectory data reproduced the chain of events leading to the SRI failure.

The inquiry board made a number of recommendations, and they can be generalized into lessons learned from this case study that are useful to IT professionals.

  • Don’t run code or systems that you don’t need (R1). The SRI alignment function should have been switched off after lift-off. This Devops mistake is avoidable, easy to correct, and happens too often (think Knight Capital).
  • Quality Assurance matters (R2, R10, R11). If you don’t test the system end-to-end with high coverage of realistic positive and negative scenarios, then your product and project expectations are dreams — not empirically grounded hypotheses.
  • The smallest code Quality details matter whether its Ada, C, JavaScript, SQL, or Python (R4). An arithmetic conversion error caused the loss of a multi-million dollar spacecraft and set back a multi-billion dollar program for several years. In our own projects and systems, we must see the forest and the trees.
  • The system Complexity matters. One should carefully consider what components are critical, understand their fault surfaces, and avoid single points of failure (R6, R8, R13). Reusing someone else’s software artifacts just because it worked for them is not sufficient for your success. We need to examine the software’s assertions (think design by contract), inspect its tests, question assumptions, and think through dependencies. As an aside, one good example of quality transparency is APC; when you purchase a power supply unit it comes with the the unit test output from the factory.
  • Culture matters and can sometimes eat strategy for breakfast as well as your technology project (R14). Besides a design bias to mitigating failure through shutdown and backup failover, there were QA shortcuts taken, aggressive borrowing of A4 code, and there was no single point of accountability on the A5 team. The ESA held no one responsible for the failure — a classic tragedy of the commons.

The failure of the 501 highlighted risks with complex, costly computing systems to the general public, politicians, and business executives. It resulted in increased support for research on ensuring reliability of safety-critical systems. Automated analysis of the Ariane code written in Ada was one of the first examples of large scale static code analysis.

Afterwards, four replacement Cluster satellites were built and launched in pairs aboard Soyuz-U/Fregat rockets in 2000. The Ariane 5 program resumed, had dozens of successful launches and hundreds of satellite deployments, and is still active. The successor vehicle, the Ariane 6, is under development and there are plans to enter it into service in the 2020's.

References


A Modern Icarus — the short story of Ariane 5 Flight 501 was originally published in Hacker Noon on Medium, where people are continuing the conversation by highlighting and responding to this story.

]]>
================================================ FILE: api/test/data/feed/kaiak.tw ================================================ 城市美學新態度 https://kaiak.tw Indulge Esthetics Mon, 02 Jul 2018 15:11:13 +0000 zh-TW hourly 1 ================================================ FILE: api/test/data/feed/kottke ================================================ kottke.org tag:kottke.org,2009-08-11:05118 2018-06-05T20:48:15Z Jason Kottke's weblog, home of fine hypertext products Movable Type 4.2 Ten guidelines for nurturing a thriving democracy by Bertrand Russell tag:kottke.org,2018://5.32262 2018-06-05T20:48:15Z 2018-06-05T20:48:15Z Jason Kottke http://www.kottke.org In December 1951, British philosopher Bertrand Russell wrote a piece for the NY Times Magazine titled The Best Answer to Fanaticism — Liberalism with a subhead that says “Its calm search for truth, viewed as dangerous in many places, remains the hope of humanity.” At the end of the article, he offers a list of ten commandments for living in the spirit of liberalism:

1. Do not feel absolutely certain of anything.

2. Do not think it worthwhile to produce belief by concealing evidence, for the evidence is sure to come to light.

3. Never try to discourage thinking, for you are sure to succeed.

4. When you meet with opposition, even if it should be from your husband or your children, endeavor to overcome it by argument and not by authority, for a victory dependent upon authority is unreal and illusory.

5. Have no respect for the authority of others, for there are always contrary authorities to be found.

6. Do not use power to suppress opinions you think pernicious, for if you do the opinions will suppress you.

7. Do not fear to be eccentric in opinion, for every opinion now accepted was once eccentric.

8. Find more pleasure in intelligent dissent than in passive agreement, for, if you value intelligence as you should, the former implies a deeper agreement than the latter.

9. Be scrupulously truthful, even when truth is inconvenient, for it is more inconvenient when you try to conceal it.

10. Do not feel envious of the happiness of those who live in a fool’s paradise, for only a fool will think that it is happiness.

Over the past few years, I’ve found it increasingly difficult to keep an open mind about many issues, particularly on those related to politics. Remaining curious and generous about new & different ideas, especially in public, is perhaps more challenging than it was in Russell’s time. We are bombarded on all sides by propaganda, conspiracy theories, and broadly discredited theories from the past pushed upon us by entertainment news outlets and social media algorithms — we’re under a constant denial-of-service attack on our ability to think and reason.

We can’t reasonably be expected to give serious consideration to ideas like “the Holocaust didn’t happen”, “the Earth is flat”, “the Newtown massacre was faked”, “let’s try slavery again”, “vaccines cause autism”, and “anthropogenic climate change is a myth” — the evidence just doesn’t support any of it — but playing constant defense against all this crap makes it difficult to have good & important discussions with those we might disagree with about things like education, the role of national borders in a extremely mobile world, how to address our changing climate, systemic racism & discrimination, gun violence, healthcare, and dozens of other important issues. Perhaps with Russell’s guidelines in mind, we can make some progress on that front.

]]> Tags: Bertrand Russell   lists   politics]]>
Mythically massive and powerful waves tag:kottke.org,2018://5.32259 2018-06-05T18:33:54Z 2018-06-05T18:33:54Z Jason Kottke http://www.kottke.org Rachael Talibart

Rachael Talibart

Rachael Talibart

Are you a mountains or a beach person? I prefer the beach — the ocean in particular, even though it scares the hell out of me sometimes. Photographer Rachael Talibart captures the power of the sea with her photos of waves kicked up by storms. She spoke with Wired about the project and her healthy respect for the ocean.

Talibart still can’t help thinking of sea creatures when she looks at the photographs. Inspired by Homer’s Odyssey, she titled the series Sirens and gave each image the name of a mythological god or goddess. And although she avoids boats these days — she still gets seasick — Talibart credits her childhood sailing adventures with her ocean obsession.

“A part of me is still half-afraid of the sea,” she admits. “There’s a fascination and a love for it, but there’s also fear.”

(via robin sloan)

]]> Tags: photography   Rachael Talibart]]>
An AI learned to see in the dark tag:kottke.org,2018://5.32253 2018-06-05T16:29:39Z 2018-06-05T16:29:39Z Jason Kottke http://www.kottke.org Cameras that can take usable photos in low light conditions are very useful but very expensive. A new paper presented at this year’s IEEE Conference on Computer Vision and Pattern Recognition shows that training an AI to do image processing on low-light photos taken with a normal camera can yield amazing results. Here’s an image taken with a Sony a7S II, a really good low-light camera, and then corrected in the traditional way:

AI image in the dark

The colors are off and there’s a ton of noise. Here’s the same image, corrected by the AI program:

AI image in the dark

Pretty good, right? The effective ISO on these images has to be 1,000,000 or more. A short video shows more of their results:

It would be great to see technology like this in smartphones in a year or two.

]]> Tags: artificial intelligence   photography   science   video]]>
A supercut of unintentional ASMR moments from movies and TV shows tag:kottke.org,2018://5.32256 2018-06-05T14:34:00Z 2018-06-05T14:34:00Z Jason Kottke http://www.kottke.org

For these two videos, FunWithGuru collected scenes from movies & TV that can trigger ASMR. He featured movies like Phantom Thread (rustling cloth) and Amelie (whispering) as well as well as calmer moments from more unlikely fare like Inglourious Basterds, Edward Scissorhands, and The Office. The clips show ASMR staples like calm talking, people quietly performing tasks, whispering, hair brushing, pouring water, and rustling paper.

]]> Tags: movies   TV   video]]>
The problem with action scenes in DC movies tag:kottke.org,2018://5.32249 2018-06-05T12:03:57Z 2018-06-05T12:03:57Z Jason Kottke http://www.kottke.org

In his latest video, Evan Puschak compares the action scenes from Marvel and DC superhero movies and shows how DC comes up short. Some don’t appreciate all of the humor packed into Marvel’s films, but the DC movies take themselves WAY too seriously. And don’t even get me started on Zack Snyder — outside of 300, his take on action is not good. It’s not a coincidence that Snyder didn’t direct Wonder Woman, the best of the DCEU films in terms of action (and everything else).

See also the problem with action movies today and why are action movie trailers sounding more musical lately?

]]> Tags: Evan Puschak   film school   movies   video   Zack Snyder]]>
A short dance performance, collaboratively illustrated by hundreds tag:kottke.org,2018://5.32228 2018-06-04T21:34:18Z 2018-06-04T21:34:18Z Jason Kottke http://www.kottke.org

Over 300 different people drew/illustrated moments from a real-life dance performance, which Kristen Lauth Shaeffer then assembled into one cool animated performance. This strongly reminds me of Oliver Laric’s clip-art animation.

]]> Tags: art   Kristen Lauth Shaeffer   video]]>
The Atlas Obscura Explorer’s Guide for the World’s Most Adventurous Kid tag:kottke.org,2018://5.32252 2018-06-04T19:32:51Z 2018-06-04T19:32:51Z Jason Kottke http://www.kottke.org After the success of their book about the world’s most unusual places, Atlas Obscura is following up with an illustrated book aimed at kids showcasing “150 of the world’s most mesmerizing and mysterious wonders”: The Atlas Obscura Explorer’s Guide for the World’s Most Adventurous Kid.

Atlas Obscura Kids

Travel the world through common points of interest, from strange skeletons (Trunyan Tree cemetery in Indonesia leads you to India’s Skeleton Lake, for example) to wild waterfalls (while in Peru visit the Gocta Waterfall — and then move on to Antarctica’s Blood Falls) to ice caves to bioluminescence.

The book comes out in September but you can preorder it here. The first Atlas Obscura book was my son’s favorite for several months…he must have read it 8 times cover-to-cover. (via @kathrynyu)

]]> Tags: Atlas Obscura   books   travel]]>
Super freaky recently declassified NSA security posters tag:kottke.org,2018://5.32246 2018-06-04T15:10:09Z 2018-06-04T15:10:09Z Jason Kottke http://www.kottke.org These posters designed by the NSA emphasizing the importance of security and secrecy to their employees are amazing. Declassified in mid-April 2018, most of the posters were produced in the 50s, 60s, and 70s and look as though they were cooked up by Salvador Dali or the Dadaists. Or even Mad Magazine. I mean:

NSA Security Posters

NSA Security Posters

NSA Security Posters

NSA Security Posters

NSA Security Posters

NSA Security Posters

What fantastic design artifacts of that era. Many of them appear to be remixes/riffs of contemporary ad campaigns and messaging…you could easily imagine a security-themed distracted boyfriend or American Chopper poster hanging in today’s NSA offices.

I had a difficult time choosing just a few of these…many more are available in this PDF. (via hn)

]]> Tags: design   NSA]]>
Willpower, wealth, and the marshmallow test tag:kottke.org,2018://5.32244 2018-06-04T13:39:42Z 2018-06-04T13:39:42Z Jason Kottke http://www.kottke.org The marshmallow test is a famous psychological experiment designed by Walter Mischel in the 1960s. Kids were given a single marshmallow but told they could have another if they refrained from eating the first one for 15 minutes. The results seemed to indicate a much greater degree of self-control amongst those children who were able to delay gratification, which led to better outcomes in their lives. From a New Yorker article about Mischel:

Once Mischel began analyzing the results, he noticed that low delayers, the children who rang the bell quickly, seemed more likely to have behavioral problems, both in school and at home. They got lower S.A.T. scores. They struggled in stressful situations, often had trouble paying attention, and found it difficult to maintain friendships. The child who could wait fifteen minutes had an S.A.T. score that was, on average, two hundred and ten points higher than that of the kid who could wait only thirty seconds.

But Mischel only tested ~90 kids from a single preschool. Researchers from UC Irvine and NYU recently redid the test with more kids that were more representative of the general population and found that household income was a big factor in explaining both the ability to delay and outcomes.

Ultimately, the new study finds limited support for the idea that being able to delay gratification leads to better outcomes. Instead, it suggests that the capacity to hold out for a second marshmallow is shaped in large part by a child’s social and economic background — and, in turn, that that background, not the ability to delay gratification, is what’s behind kids’ long-term success.

If you’re poor, you might look at the promise of future food somewhat dubiously…and not because of a lack of self-control:

The failed replication of the marshmallow test does more than just debunk the earlier notion; it suggests other possible explanations for why poorer kids would be less motivated to wait for that second marshmallow. For them, daily life holds fewer guarantees: There might be food in the pantry today, but there might not be tomorrow, so there is a risk that comes with waiting. And even if their parents promise to buy more of a certain food, sometimes that promise gets broken out of financial necessity.

]]> Tags: psychology   science   Walter Mischel]]>
The end of the culture of the telephone tag:kottke.org,2018://5.32240 2018-06-01T18:30:00Z 2018-06-01T18:30:00Z Tim Carmody http://snarkmarket.com/ This is an excerpt from this week’s edition of Noticing, Kottke.org’s newsletter.

Alexis Madrigal wrote movingly about the death of 20th century telephone culture in “Why No One Answers Their Phone Anymore.” A combination of more media options, a glut of robo-calls, and the transformation of the telephone technology itself, with caller IDs, individual rather than household numbers, and mutable ringtones have changed not just a communication medium, but a way of life. And it’s part of a pattern of shifting media use from real-time to my-time. (When this first emerged, I used to call it TiVo Time.)

I wonder though, whether telephone culture has died or it’s metastasized. Madrigal writes: “When you called someone, if the person was there, they would pick up, they would say hello. If someone called you, if you were there, you would pick up, you would say hello. That was just how phones worked. The expectation of pickup was what made phones a synchronous medium.”

Avital Ronell, a wonky writer/philosopher I read a lot back in my grad school days, writes in The Telephone Book (1989) about the always-on nature of the telephone as a key element of its mode of being. “Respond as you would to the telephone, for the call of the telephone is incessant and unremitting. When you hang up, it does not disappear but goes into remission…. There is no off switch to the technological.”

This is now basically our state all the time! Not exclusively on the telephone, but on at least one of the electrical vibrations of telecommunications, everywhere we go, every minute of every day.

So it’s almost as if we’re now always on the telephone. A ring is like a call waiting notification that we can acknowledge or ignore. And most of the time, now, many of us ignore it. But only on the rarest occasions do we ignore the entire electronic hum. That’s where most of us live now.

(See also: this 1927 documentary on how to use a dial telephone.)

]]> Tags: telephony]]>
The last survivor of the 1921 Tulsa Race Riots tag:kottke.org,2018://5.32239 2018-06-01T18:00:00Z 2018-06-01T18:00:00Z Tim Carmody http://snarkmarket.com/ olivia-hooker_then.jpg

The history of the United States is a history of racial plunder, specifically whites plundering the property of nonwhites. It’s extremely difficult to build wealth across generations when gangs can burn down your farm or shoot up your banks without repercussions.

This is why the 1921 Tulsa Riots are so essential to American history, because it might be the starkest event of extralegal white plunder apart from the Trail of Tears. NPR managed to interview Olivia Hooker, who was six years old at the time of the riots. She is probably the last surviving witness.

In less than 24 hours, the white mobs destroyed more than 1,000 homes and businesses. They set fire to schools, churches, libraries, and movie theaters, leveling entire city blocks.

“My father’s store was destroyed,” Hooker says. “There was nothing left but one big safe. It was so big they couldn’t carry it away, so they had to leave it — in the middle of the rubble.”

“Fires had been started by the white invaders soon after 1 o’clock and other fires were set from time to time. By 8 o’clock practically the entire thirty blocks of homes in the negro quarters were in flames and few buildings escaped destruction. Negroes caught in their burning homes were in many instances shot down as they attempted to escape.”
— The New York Times, June 2, 1921

Reports varied wildly. Initial estimates put the death toll somewhere between 36 and 85. One report, released by Maurice Willows who directed the American Red Cross relief efforts, estimated that as many as 300 people were killed. Today, the Tulsa Race Riot is considered one of the worst incidents of racial violence in American history.

Hooker went on to get a doctorate in psychology and founded the Tulsa Race Riot Commission in 1997 to make a case for reparations. She’s now 103 years old.

]]>
How to make grilled cheese tag:kottke.org,2018://5.32238 2018-06-01T17:35:00Z 2018-06-01T17:35:00Z Tim Carmody http://snarkmarket.com/ best-ever-grilled-cheese.jpg

I’m a big fan of different recipes for simple food dishes — Jose Andres’s “The Perfectly Fried Egg” changed the way I cook just about everything — and this deconstructed-then-reconstructed take on grilled cheese fits right in with that glorious recipe.


  1. Heat a heavy pan over medium-low heat.
  2. Thinly spread one side of each bread slice with butter. Spread the other side of each slice with mayonnaise and place the bread, mayonnaise-side-down, in the pan. Divide the cheese evenly on top of the buttered slices. Adjust the heat so the bread sizzles gently.
  3. When the cheese is about halfway melted, use a spatula to flip one slice over on top of the other, and press lightly to melt. Keep turning the sandwich, pressing gently, until the sandwich is compact, both sides are crusty, and the cheese is melted.

Personally, I would omit the mayonnaise and brush the down sides of the bread with olive oil instead: it gives the bread a nice cripsyness and none of that mayonnaise flavor. (I’m cool with mayo most of the time, but not on my grilled cheese.)

]]> Tags: cheese   cooking   food]]>
Clickhole outdoes itself tag:kottke.org,2018://5.32235 2018-06-01T15:10:00Z 2018-06-01T15:10:00Z Tim Carmody http://snarkmarket.com/ I Am A Recently Divorced And Laid-Off Middle-Aged Man With A Lot Of Health Problems, And Everything I Say Is Incredibly Depressing. Ask Questions At Me” is one of the bleakest, funniest, most existentially absurd things I have ever read.

It’s structured like a Reddit AMA, so you have to read through the comments to get to the good bits, and the accumulative effect is bigger than any one punchline. A sample:

I got fired from my Pepsi job because one of my coworkers stuck a sign on my back that said “PROUD MURDERER OF JONBENET RAMSEY,” and the regional supervisor who was visiting that day took it at face value. I did not discover the sign until the following week, when I wore the same shirt again to a custody hearing and the judge cited it as justification for denying me visitation rights. Unfortunately, the sign on my back was perceived as a murder confession, and the company apparently reserves the right to withhold severance if termination comes as a result of criminal activity. So no severance for ol’ Ronald.

Sadly, the day I got fired was also the day of my 30th anniversary at Pepsi, and when my boss called me into his office I thought he was going to honor me. That was not the case.

Ronald also tries to get a dog to cheer himself up (he loses his beloved family dog in the divorce), but turns out to be allergic to it; the shelter refuses to take the dog back because “it they said ‘smelled too much like me.’” He chats up workers at the cellular phone stall so he can have human contact and reminisce about having a family plan. If this kind of black humor does anything for you, trust me, you should check this out.

As Matt Novak tweeted, “I’d just like to say that Nick Denton would be very proud if he had lived to see Kinja used like this. Clickhole is amazing. RIP Nick Denton.”

]]> Tags: comedy]]>
Through a Different Lens, a book of Stanley Kubrick’s photography tag:kottke.org,2018://5.32232 2018-06-01T14:11:51Z 2018-06-01T14:11:51Z Jason Kottke http://www.kottke.org Kubrick Photo Book

Kubrick Photo Book

Kubrick Photo Book

Kubrick Photo Book

Kubrick Photo Book

There is much to admire in how Stanley Kubrick’s movies are constructed, but the director’s keen compositional eye is perhaps the most noticeable. Before becoming a filmmaker, Kubrick honed his observational skills as a photographer in NYC. Look magazine hired him when he was just 17 years old to fill the pages of the publication with photos of life in the city. A new book, Stanley Kubrick Photographs: Through a Different Lens, celebrates Kubrick’s photography, showcasing how that youthful talent would eventually translate into a great filmmaking career.

Through a Different Lens reveals the keen and evocative vision of a burgeoning creative genius in a range of feature stories and images, from everyday folk at the laundromat to a day in the life of a debutant, from a trip to the circus to Columbia University. Featuring around 300 images, many previously unseen, as well as rare Look magazine tear sheets, this release coincides with a major show at the Museum of the City of New York and includes an introduction by noted photography critic Luc Sante.

Kubrick’s photos are also on display at the Museum of the City of New York until late October 2018.

]]> Tags: books   NYC   photography   Stanley Kubrick   Stanley Kubrick Photographs: Through a Different Lens]]>
Lightning fast demo of a magic transforming scarf tag:kottke.org,2018://5.32223 2018-05-31T23:37:05Z 2018-05-31T23:37:05Z Jason Kottke http://www.kottke.org

One of the recurrent topics here at the ol’ dot org is paying our respects to people who are mind-bendingly good at what they do. Case in point: watch this woman turn a magic scarf into about 100 different pieces of clothing in about 90 seconds. Reader, I audibly gasped at ~0:25 when she turned a scarf into a dress in the blink of an eye.

This extraordinary garment has been compared to a Thneed, a fictional garment from Dr. Seuss’ The Lorax:

I’m being quite useful. This thing is a Thneed.
A Thneed’s a Fine-Something-That-All-People-Need!
It’s a shirt. It’s a sock. It’s a glove. It’s a hat.
But it has OTHER uses. Yes, far beyond that.
You can use it for carpets. For pillows! For sheets!
Or curtains! Or covers for bicycle seats!”

There are quite a few magic scarves available for purchase on Amazon if you want to try one out for yourself, but check those seller ratings…some of them look a little sketchy. (via @dunstan)

]]> Tags: fashion   video]]>
Visualizing our world’s ever-growing urban infrastructure tag:kottke.org,2018://5.32229 2018-05-31T21:06:43Z 2018-05-31T21:06:43Z Jason Kottke http://www.kottke.org Marcus Lyons

Marcus Lyons

Marcus Lyons

For his projects Exodus and Timeout, Marcus Lyon takes overhead photographs and edits them into fantastical scenes that nonetheless seem plausible. LAX isn’t that large, no waterpark in Houston has that many pools, and Dubai’s roads do not have 70+ lanes, but you kinda have to look at satellite imagery on Google Maps to verify the fabrications.

]]> Tags: art   cities   Marcus Lyons   photography]]>
Simple Dieter Rams prints tag:kottke.org,2018://5.32226 2018-05-31T19:46:19Z 2018-05-31T19:46:19Z Jason Kottke http://www.kottke.org Rams Posters

I really like these prints for Rams, Gary Hustwit’s upcoming documentary about the legendary Dieter Rams. Each print features an object designed by Rams or his design team: the T41 radio, the ET66 calculator, the 620 chair, and the 606 shelving system.

PS. You can still buy the calculator from Braun. Ok, it’s a reissue, but that means it won’t cost you 100s of dollars on eBay.

]]> Tags: design   Dieter Rams   Gary Hustwit   movies   Rams]]>
Brutalist cuckoo clocks tag:kottke.org,2018://5.32222 2018-05-31T18:23:25Z 2018-05-31T18:23:25Z Jason Kottke http://www.kottke.org Artist Guido Zimmermann has updated the architectural styling of the cuckoo clock with models based on buildings by Brutalist & Bauhaus architects.

Modern Cuckoo Clocks

Modern Cuckoo Clocks

The classic cuckoo clock is a symbol for prosperity in the middle class and is considered a kind of luxury for the home. The updated version, a prefabricated panel construction (“plattenbau”), reveals today’s urban and social life in residential blocks.

(via colossal)

]]> Tags: architecture   art   Guido Zimmermann]]>
The 100 best one-hit wonders tag:kottke.org,2018://5.32220 2018-05-31T16:14:12Z 2018-05-31T16:14:12Z Jason Kottke http://www.kottke.org Today’s playlist is The 100 Best One-Hit Wonder Songs:

You can read the rationale behind all 100 picks on Consequence of Sound.

The standard definition (determined by who, Right Said Fred?) of a one-hit wonder is a band who has cracked the Top 40 of the Billboard Hot 100 only once. What, you had a late-career single make 41? Sorry, thanks for playing, but charting 41 isn’t the same as 40, right? Um, no … maybe? It gets no easier when you have to wade through dozens of other Billboard charts that count for everything except, apparently, determining a one-hit wonder. And what about all those charts in other countries — yeah, we ignored them. Great, this list is making us xenophobic now.

But that’s getting pretty damn technical, and we’re not numbers people here. Because, technically, Beck is a one-hit wonder. As are the Grateful Dead and even Radiohead if they hadn’t snuck in at 37 with “Nude” back in 2008. Very lucky, Mr. Yorke. Can you imagine if you scrolled through a list of the 100 Best One-Hit Wonder Songs and found Beck sitting at the top spot? You’d collectively crash our site’s server in a contest to see which commenter could say the cruelest thing about our music knowledge, mothers, and cats.

“Technically, Beck is a one-hit wonder.” Also, I feel that Sir Mix-a-Lot should have made the list.

]]> Tags: best of   lists   music]]>
The Americans is over, The Americans was great. tag:kottke.org,2018://5.32219 2018-05-31T14:27:03Z 2018-05-31T14:27:03Z Jason Kottke http://www.kottke.org Given the recent Netflix-driven Cambrian explosion in television shows, there is no Best Show On TV™ anymore. But over the past few years, even with so many other excellent shows to choose from, The Americans had a legitimate claim to that title. In his review of last night’s final show (spoilers ahoy!), Alan Sepinwall nails what made the show so compelling to me:

Priority-wise, The Americans has always been a show about marriage that used the spycraft to heighten the stakes, rather than an espionage drama that used the family material to make Philip and Elizabeth more relatable. Its chief interest was in the compromises necessary to make any long-term relationship work, about the disagreements every pair of spouses will have about career and parenting and everything else. The assassinations, honeypots, and Stan’s investigations provided narrative propulsion and suspense, and Soviet ideology was at the heart of every choice Elizabeth made, particularly when it came to Paige, but all of that was thematically secondary to husband/wife and parent/child issues.

As I noted in my recent media diet post, their final season has been very strong, and the series finale held true to the show’s focus on family in an unexpectedly quiet and powerful way.

Could the series have ended with some combination of Jenningses killed or behind bars for life? Certainly, and it wouldn’t have rang false if it had happened. But the fact that the finale’s tragedies are all small-scale and family-related — Elizabeth and Philip abandon one child and are abandoned by the other, Stan learns that his best friend has been betraying him for years, and that his wife may be betraying him in the same way — feels in keeping with all that we’ve seen before.

I loved the finale — Stan’s devastation in particular ruined me…I’m going to be thinking about that for a long while — and Sepinwall’s recap is typically great. He also interviewed the show’s creators about the episode, who maddeningly (but correctly, I grudgingly have to admit) won’t spill the beans on what happens to any of the characters after the events of the show. Other recaps: NY Times, Vulture, AV Club.

If you want to catch up, all six seasons of The Americans are available on Amazon (1-5 are Prime, 6 isn’t yet).

]]> Tags: Alan Sepinwall   The Americans   TV]]>
Hundreds of amazing 1980s tech company logos tag:kottke.org,2018://5.32212 2018-05-30T20:50:02Z 2018-05-30T20:50:02Z Jason Kottke http://www.kottke.org 85 Tech Logos

This 1985 catalog for engineers contains hundreds and hundreds of tech logos from the 70s and 80s. They are glorious.

Marcin Wichary turned more than 1400 of these logos into a screensaver “for your random viewing pleasure”.

]]> Tags: design   logos   Marcin Wichary]]>
A visual history of light tag:kottke.org,2018://5.32210 2018-05-30T18:33:03Z 2018-05-30T18:33:03Z Jason Kottke http://www.kottke.org

From the Atlantic, a quick visual history of human-created light sources over the past ~400,000 years, from wood fires to candles to the electric light.

3,000 BCE: The “rushlight” candle is invented in Ancient Egypt. It is made of a pithy stalk of rush soaked in animal fat.

1500 BCE: Babylonian/Assyrian lamps are created from olive or sesame oil. They had a linen wick and were fashioned from stone, terracotta, metal, or shells.

100 CE: The Romans create the tallow candle, which has a small wick with a thick, hand-formed layer of tallow.

One of the more interesting inventions along the way was the moonlight tower. In the early days of electric lights, mimicking the bright light of the Moon was one of the ways that towns chose to light their streets.

Moonlight Tower

Humans, too, found the high-slung orbs to be as disorienting as they were ethereal. As tall as the towers were, they still left shadows in their wake — shadows tinged with sharp blue light, Freeberg notes, which left pedestrians “dazed and puzzled.” Foggy evenings, combined with the air pollution of a newly industrialized America, could thrust all of Detroit into effective darkness — meaning, Freeberg writes, that “Detroiters could only speculate about the lovely sight that their lights must be creating as they shone down on the blanket of mist and soot that smothered the city.” Even during occasions when the fog broke enough to allow some light to penetrate to the streets below, “many found themselves groping along sidewalks in an eerie gloom.”

In the end, the many costs of the artificial moonlight outweighed its beauty and poetry. The structures meant to inspire awe among outsiders ended up inspiring, ultimately, something more akin to pity. (“It appears to me,” one frank observer put it, “that you are taking a very expensive way of getting a minimum benefit from the electric lights.”)

]]> Tags: video]]>
The top 100 stories that changed the world tag:kottke.org,2018://5.32209 2018-05-30T16:18:15Z 2018-05-30T16:18:15Z Jason Kottke http://www.kottke.org BBC Culture recently polled authors, journalists, and other literary types from 35 different countries and asked them “to nominate up to five fictional stories they felt had shaped mindsets or influenced history”. From the responses, they compiled a list of 100 stories that shaped the world. Here’s the top 5:

5. Things Fall Apart (Chinua Achebe, 1958)
4. Nineteen Eighty-Four (George Orwell, 1949)
3. Frankenstein (Mary Shelley, 1818)
2. Uncle Tom’s Cabin (Harriet Beecher Stowe, 1852)
1. The Odyssey (Homer, 8th Century BC)

The Harry Potter series, The Epic of Gilgamesh, and Jane Eyre are also included in the top 20. Oddly, the Hebrew Bible, Christian Bible, Koran, and other religious texts are nowhere to be found on the list. A story like the four gospels of the New Testament has surely changed the world much more than all of the other titles on the list combined. (via fave5)

]]> Tags: best of   books   lists]]>
The ABCs in motion tag:kottke.org,2018://5.32208 2018-05-30T14:16:38Z 2018-05-30T14:16:38Z Jason Kottke http://www.kottke.org

For this year’s 36 Days of Type project, Ben Huynh submitted this 3D animation of the alphabet from A to Z. You can see animations of the individual letters on Huynh’s Instagram. (via colossal)

]]> Tags: alphabet   Ben Huynh   design   video]]>
An explainer video from 1923 about Einstein’s theory of relativity tag:kottke.org,2018://5.32211 2018-05-29T21:13:29Z 2018-05-29T21:13:29Z Jason Kottke http://www.kottke.org

In 1923, Inkwell Studios1 released a 20-minute animated explanation of Albert Einstein’s theory of relativity, perhaps one of the very first scientific explainer videos ever made. Films were still silent in those days and the public’s scientific understanding limited (the discovery of Pluto was 7 years in the future, and penicillin 5 years) so the film is almost excruciatingly slow by today’s standards, but if you squint hard enough, you can see the great-grandparent to YouTube channels like Kurzgesagt, Nerdwriter, TED Ed, minutephysics, and the 119,000+ videos on YouTube returned for a “einstein relativity explained” search. (via open culture)

  1. Inkwell later became Fleischer Studios, which made cartoons like Betty Boop, Popeye, and the first animated Superman series. They also introduced the bouncing ball as a technique for singing along to on-screen lyrics.

]]> Tags: Albert Einstein   physics   science   video]]>
A brief history of fingerprints tag:kottke.org,2018://5.32215 2018-05-29T19:00:09Z 2018-05-29T19:00:09Z Jason Kottke http://www.kottke.org Smudge Art

Chantel Tattoli’s piece for The Paris Review, The Surprising History (and Future) of Fingerprints, is interesting throughout, but these two things leapt from the screen (italics mine):

It is true that every print is unique to every finger, even for identical twins, who share the same genetic code. Fingerprints are formed by friction from touching the walls of our mother’s womb. Sometimes they are called “chanced impressions.” By Week 19, about four months before we are issued into the world, they are set.

WHAT?! Is this true? A cursory search shows this might indeed be the case, although it looks as though there’s not established scientific consensus around the process.

Also, Picasso was fingerprinted as a suspect in the theft of the Mona Lisa from the Louvre:

When French authorities interrogated Pablo Picasso, in 1911, at the Palais de Justice about the theft of the Mona Lisa from the Louvre that August, he was clad in his favorite red-and-white polka-dot shirt. Picasso cried. He begged forgiveness. He was in possession of two statuettes filched from the museum, but he hadn’t taken her.

“In possession of”? Turns out a pal of Picasso’s lifted the statuettes from the museum, which was notoriously easy to steal from, and sold them to the artist, who knew exactly what he was buying.

True to Pieret’s testimony, Picasso kept two stolen Iberian statues buried in a cupboard in his Paris apartment. Despite the artist’s later protestations of ignorance there could be no mistaking their origins. The bottom of each was stamped in bold: PROPERTY OF THE MUSÉE DU LOUVRE.

Fingerprint art by Evan Roth. (via @claytoncubitt)

]]> Tags: biology   Chantel Tattoli   crime   Pablo Picasso   science]]>
You don’t have a right to believe whatever you want to tag:kottke.org,2018://5.32206 2018-05-29T16:57:05Z 2018-05-29T16:57:05Z Jason Kottke http://www.kottke.org Professor of philosophy Daniel DeNicola on the right of people to believe what they want to believe.

Unfortunately, many people today seem to take great licence with the right to believe, flouting their responsibility. The wilful ignorance and false knowledge that are commonly defended by the assertion ‘I have a right to my belief’ do not meet James’s requirements. Consider those who believe that the lunar landings or the Sandy Hook school shooting were unreal, government-created dramas; that Barack Obama is Muslim; that the Earth is flat; or that climate change is a hoax. In such cases, the right to believe is proclaimed as a negative right; that is, its intent is to foreclose dialogue, to deflect all challenges; to enjoin others from interfering with one’s belief-commitment. The mind is closed, not open for learning. They might be ‘true believers’, but they are not believers in the truth.

DeNicola is the author of the recent book Understanding Ignorance.

]]> Tags: Daniel DeNicola]]>
Sculptures made from scraps tag:kottke.org,2018://5.32207 2018-05-29T14:39:11Z 2018-05-29T14:39:11Z Jason Kottke http://www.kottke.org Artist Lydia Ricci collects scraps (of paper, cardboard, etc.) and sculpts them into everyday objects.

From Scraps

From Scraps

From Scraps

From Scraps

I love these…and there are a ton more to look at. Gah ok, just one more:

From Scraps

(via @yhaduong)

]]> Tags: art   Lydia Ricci]]>
The whole world is The Onion now tag:kottke.org,2018://5.32202 2018-05-25T18:00:00Z 2018-05-25T18:00:00Z Tim Carmody http://snarkmarket.com/ (A version of this story is an excerpt from this week’s Noticing newsletter. You can read more about Noticing here.)

In a rare interview, Italian author Elena Ferrante observes that between corruption, poverty, violence, fear, and the deterioration of democracy, “today it seems to me that the whole world is Naples and that Naples has the merit of having always presented itself without a mask.” The world of Ferrante’s novels is the world in which we’ve all been living; the rest of us are just catching up to what Neapolitans have known all along.

It seems you could make a similar case for The Onion in the time of Trump: the world was already absurd and buffoonish, and now it’s taken off its mask. It does make telling jokes a touch more tricky. Editor-in-chief Chad Nackers explains the site’s approach, admitting that the writers’ job would probably be easier if Hillary Clinton had been elected.

What strikes me is how much he attributes to the site’s changes over the years isn’t to the administration, but to the atmosphere, which has changed since the days of Bill Clinton (and not just because of who’s been elected since).

When I started, there weren’t really too many humor sites. There definitely weren’t any humor news sites. A lot of times, nobody else was going to get their comment out as fast as we were going to get it out, by virtue of us having a website. Now it almost seems like on Twitter there are people who are professional comedians who are online all day. A story breaks and they’re making jokes about it.

Andy Baio recently posted a link that shows you your Twitter timeline as it would have looked ten years ago if you followed all the same people that you do today. For me, at least, it’s amazing how different the tone is — even in the middle of an historic election, in the early stages of an enormous economic meltdown, there’s a lot less politics, a lot less sniping, and a lot more diaristic writing. It’s not necessarily better; it’s just very different. And all of those things were happening then — it’s just that Twitter wasn’t understood as the venue where every stance was to be articulated, every statement was to be critiqued, and every line was to be drawn. There were fewer people around, it was a lot more homogenous, and far fewer people were paying attention.

I wonder often how future historians will think about this time (you know, with the usual grisly caveat that people survive to do history in the future): how much of today’s ugliness, violence, and corruption they will think of as an aberration of one man, or one family, one political party, one social media network, one television network, etc.

Or will they see it as an interlocking, self-contradictory system, all of which had a history, and all of whose parts shaped and enabled what happened — hopefully, good and bad things. I mean, even the people who’ve argued that the coup has already happened can’t agree on whether it began with the election, with Congress, or some time long before.

Maybe the future historians will be better at disentangling these things than we are. Or maybe we’re just all hopelessly tangled.

]]> Tags: media   politics]]>
In defense of boredom tag:kottke.org,2018://5.32201 2018-05-25T17:30:00Z 2018-05-25T17:30:00Z Tim Carmody http://snarkmarket.com/ Monica Heisey was recently stuck on an airplane without much to do. Luckily, she made an essay out of it. “Being Bored Is Fun and Good, Sorry” is (surprisingly?) crackling with energy and insight.

In 2018, it is easy and common to be tired, depressed, burnt out, dulled, vibrating with mundane panic, desperate for the sweet release of death, etc. But to be peacefully understimulated with no relief in sight is almost impossible. The average person’s life is full of little tasks to complete, group chats to respond “haha, yeah” to, emails to circle back on, and people you went to high school with to determinedly ignore on the bus. The entire world is one giant beeping alert to things we should do or can do or will do in the future, things we are doing at that moment but could be doing faster. It’s more or less impossible to be bored. Bored means there are not thousands of to-do’s to accomplish. Bored means it doesn’t matter that there’s not. Bored means you are free. In a time of endless, empty stimuli, it is a thrill to be understimulated.

That said, I feel like there’s something of a bait-and-switch here. There’s boredom, which for me is defined by the frustration at having nothing appealing to do, and then there’s a lack of busyness or stimulation, which offers the possibility of a zen-like moment that transcends that frustration. We might call them both boredom, but they’re really not the same thing. But this is splitting hairs. The point is, opportunities for boredom can also be opportunities to be something better than busy, if you approach them the right way.

]]>
Mosaicism, or DNA differences from cell to cell (not just person to person) tag:kottke.org,2018://5.32200 2018-05-25T17:15:30Z 2018-05-25T17:15:30Z Tim Carmody http://snarkmarket.com/ Science writer Carl Zimmer has a new book on genetics and heredity called She Has Her Mother’s Laugh. The New York Times published an excerpt this week focusing on mosaicism — an unexpected but surprisingly common condition where different cells in the same organism display different DNA (sometimes strikingly, fatally different).

Dr. Walsh and his colleagues have discovered intricate mosaics in the brains of healthy people. In one study, they plucked neurons from the brain of a 17-year-old boy who had died in a car accident. They sequenced the DNA in each neuron and compared it to the DNA in cells from the boy’s liver, heart and lungs.

Every neuron, the researchers found, had hundreds of mutations not found in the other organs. But many of the mutations were shared only by some of the other neurons.

It occurred to Dr. Walsh that he could use the mutations to reconstruct the cell lineages — to learn how they had originated. The researchers used the patterns to draw a sort of genealogy, linking each neuron first to its close cousins and then its more distant relatives.

When they had finished, the scientists found that the cells belonged to five main lineages. The cells in each lineage all inherited the same distinctive mosaic signature.

Even stranger, the scientists found cells in the boy’s heart with the same signature of mutations found in some brain neurons. Other lineages included cells from other organs.

Based on these results, the researchers pieced together a biography of the boy’s brain.

I’ve always been drawn to the idea that each of us are many people, an assembly of mismatched parts, manifesting themselves in different times and contexts. It’s striking to see that reflected, albeit in a refracted way, in our array of possible genomes.

]]> Tags: Carl Zimmer   DNA   medicine]]>
The history of escape tag:kottke.org,2018://5.32198 2018-05-25T15:30:00Z 2018-05-25T15:30:00Z Tim Carmody http://snarkmarket.com/ On the heels of Texas’s lieutenant governor blaming school shootings on “too many entrances and too many exits” in buildings, 99% Invisible producer Avery Trufelman linked to this episode on the architectural history of egress, or orderly escape from a building in the case of a fire or some other emergency.

In the 19th century, most fire escapes were simple ropes:

One engineer actually thought that, instead of dispatching the ropes from indoors, archers could shoot the ropes up to the higher floors.

Another patent proposed individual parachute hats, with accompanying rubber shoes to break the fall.

There were also fire escape slides, which were marketed to schools as both emergency devices and playground equipment.

fireescapeslide.jpg

Even the iconic metal fire escapes attached to tenement buildings are a pretty poor form of egress; they’re not accessible, and since people generally don’t use them to enter or exit a building in normal circumstances, they don’t know how to locate or use them in a fire. Which is how we get to stairs behind a fire door, with clear, lit-up exits, as the main means of egress for tall buildings today. And nonresidential buildings like schools, hospitals, and commercial buildings have the strictest ratings and the most effective means of escape — which is a big part of why so few people die in fires in these buildings.

Who would have thought a little regulation and a modern, scientific approach could save so many lives?

]]> Tags: architecture]]>
Intricate circuit board model sculpted from plasticine clay tag:kottke.org,2018://5.32197 2018-05-25T14:45:00Z 2018-05-25T14:45:00Z Jason Kottke http://www.kottke.org Modified Man

Modified Man

When commissioned to create some artwork for a London music duo, Tim Easley spent 80 hours making this model circuit board out of plasticine clay.

The idea behind the cover was how the modified men of the future may make artwork out of ancient circuit boards, not quite understanding what they were for because of their crude appearance. For this I created a design with representations of computer chips and wires.

He then photographed the results for an album cover and other printed matter. (via colossal)

]]> Tags: art   Tim Easley]]>
My media diet for Spring 2018 tag:kottke.org,2018://5.32192 2018-05-24T20:56:12Z 2018-05-24T20:56:12Z Jason Kottke http://www.kottke.org I’ve been keeping track of every media thing I “consume”, so here are quick reviews of some things I’ve read, seen, heard, and experienced in the past month or so. I went to Florida with my kids and we did the Harry Potter thing at Universal & visited the Space Coast. I stopped watching Mr. Robot s03 after two episodes. Still making my way through Star Trek: Voyager when I want something uncomplicated to watch in the evening. (Ignore the letter grades, they suck.)

The Americans. This season, the show’s last, has been fantastic. It’s idiotic to say The Americans is the best show on TV with like 50,000 shows on Netflix alone, but after five strong seasons and this finish, they’ve earned it. (A)

Good Night Stories for Rebel Girls: The Podcast. I wrote an appreciation of this a few weeks ago. (A-)

Am I There Yet? by Mari Andrew. I love Andrew’s Instagram feed but even so, her book surprised me with timeless and universal themes woven into her life story. (A-)

The Handmaid’s Tale. The first season of this show was great and season two picks up right where it left off. I binged the first six episodes of this across two nights and came away shellshocked. (A)

Wild Wild Country. Not sure why anyone followed the Bhagwan anywhere, but Sheela on the other hand… There were several interesting threads in this documentary that didn’t quite get pulled together in the final episode. (B+)

The Wizarding World of Harry Potter at Universal Studios Florida. The tickets for this were incredibly expensive and worth every damn penny. This was very nearly a religious experience. (A+)

Downsizing. I wanted more from this about the implications of the evolution of humans into nano sapiens. Still, better than many critics & audiences suggested. (B)

Brain It On. I saw my daughter playing this physics puzzler on her iPad and basically grabbed it away from her and played for 24 straight hours. (A-)

Westworld. Watching this every week feels like a chore. Even though the safeties are off, everything that happens in the parks feels consequence-free. I don’t care about the robots. Should I? (C+)

Fantastic Mr. Fox. Stop-motion animation might be Anderson’s natural medium because he can shoot everything *exactly* like he wants. (A-)

Isle of Dogs. Loved this. The style of it made me want to design something amazing. I could have watched the sushi-making scene for like 15 more minutes. (A)

On Margins - The Making of Rebel Girls. Craig Mod talks to co-creator Elena Favilli about how Good Night Stories for Rebel Girls came about and came to be so successful. (B+)

L’Express. A classic Montreal restaurant. Best steak frites I’ve had in a long while. (A-)

Babylon Berlin. Super stylish. The dance scene in the second episode is amazing. The best things about the show are the music and the world-building in the first few episodes. (B+)

Death of Stalin. I love that people still make films like this. Most of the audience I saw this with had no idea what to make of it or why a few people were laughing so hard at some parts. (B+)

Kennedy Space Center. The solar eclipse last summer awakened the space/astronomy nerd in me, so this visit was incredible. We saw a Space Shuttle, a Saturn V rocket, the VAB, and a whole mess of other great things. Thinking of going back for their Astronaut Training Experience. (A+)

Avengers: Infinity War. The ending of this left me stunned…it broke the fourth wall in a unique way. (B+)

A Quiet Place. This entire movie is a metaphor for trying to keep small children quiet on a long plane flight. (B)

Broad Band: The Untold Story of the Women Who Made the Internet by Claire Evans. This book demonstrates that telling the story of technology, programming, and the internet mainly through the many women who helped build it all is just as plausible and truthful as telling the traditionally women-free tale we’ve typically been exposed to. (B+)

Songs of the Years, 1925-2018. So glad this playlist is back in my life. (A-)

The Avengers. I’d forgotten where all the Infinity Stones came from, so I’ve gone back and watched this, Avengers: Age of Ultron, and the first Thor movie. Fascinating to see the changes in the filmmaking and pacing. If Infinity War had been made with the pace of Thor (directed by Kenneth Branagh!), it would have been 5 hours long. (B+)

Caliphate. Gripping and disturbing and very nearly a must-listen. But I keep showing up places shellshocked after listening to it in the car. (A)

AWB OneSky Reflector Telescope. When I looked through this for the first time at the Moon, my first thought was “WHOA”. My second was “I should have bought a more powerful telescope”. Luckily I can just buy more lenses for it… (A)

I’ve been doing this for more than a year now! Past installments of my media diet can be found here.

]]> Tags: books   food   media diet   movies   music   podcasts   TV   video games]]>
The official “Cheaters Edition” of Monopoly tag:kottke.org,2018://5.32191 2018-05-24T18:43:14Z 2018-05-24T18:43:14Z Jason Kottke http://www.kottke.org Monopoly Cheaters

Hasbro has come out with an official “Cheaters Edition” of Monopoly (available at Amazon) where popular game cheats like stealing money from the bank, busting out of jail early, and taking a hotel from another player have been added to the gameplay. Fast Company has more on how the game came to be.

“We’ve had this data for years. 50% of all Monopoly players cheat,” says Randy Klimpert, Hasbro’s senior director of design and games development. This fact of life was always something of a running joke within the walls of Hasbro. It became the giggly fodder of proposed ad campaigns. Employees got a kick out of listening to the messages left on its holiday helpline, established in 2016, to help families settle disputes in their games and address accusations of creative cheating. “We were literally sitting around thinking, ‘what would really corrupt Monopoly?’ And someone said, ‘what if we cheated?’”

“Our senior marketer… you could see him mulling it,” Klimpert continues. “Monopoly… cheaters… Cheater Edition!” Hasbro instantly had the hook for a new game. But how do you make a game for cheaters that’s still sensical and fun?

]]> Tags: games   Monopoly]]>
Global warming blankets tag:kottke.org,2018://5.32179 2018-05-24T15:43:14Z 2018-05-24T15:43:14Z Jason Kottke http://www.kottke.org Using simple graphic representations of annual temperatures (like this one posted by climate scientist Ed Hawkins), people are knitting and crocheting blankets that show just how warm the Earth has gotten over the past few decades. See Katie Stumpf’s blanket, for example.

Global Warming Blankets

According to climate scientist (and crocheter) Ellie Highwood, these blankets are a subset of “temperature blankets” made to represent, for example, daily temperatures over the course of a year in a particular location. The blanket she crocheted used NOAA data of global mean temperature anomalies for a 101-year period ending 2016.

I then devised a colour scale using 15 different colours each representing a 0.1 °C data bin. So everything between 0 and 0.099 was in one colour for example. Making a code for these colours, the time series can be rewritten as in the table below. It is up to the creator to then choose the colours to match this scale, and indeed which years to include. I was making a baby sized blanket so chose the last 100 years, 1916-2016.

If you read her post, she provides instructions for making your own global warming blanket.

P.S. You might think that with the Earth’s atmosphere getting warmer on average, these blankets would ironically be less necessary that they would have been 50 years ago. But climate change is also responsible for more extreme winter weather events — think global weirding in addition to global warming. So keep those blankets handy!

]]> Tags: Ed Hawkins   Ellie Highwood   fashion   global warming   Katie Stumpf   science]]>
The arrested development of the Arrested Development cast tag:kottke.org,2018://5.32190 2018-05-24T13:30:54Z 2018-05-24T13:30:54Z Jason Kottke http://www.kottke.org Sopan Deb recently sat down with some of the cast of Arrested Development (Jeffrey Tambor, Tony Hale, Jason Bateman, Alia Shawkat, Jessica Walter, Will Arnett, and David Cross) for an interview about the show’s upcoming new season. Deb asked the group about the allegations against Tambor related to his work on Transparent, and Walter (who plays Lucille Bluth on the show) begins to cry as the men in the room, particularly Bateman, offer explanations for Tambor’s on-set verbal abuse of her.

BATEMAN: Again, not to belittle it or excuse it or anything, but in the entertainment industry it is incredibly common to have people who are, in quotes, “difficult.” And when you’re in a privileged position to hire people, or have an influence in who does get hired, you make phone calls. And you say, “Hey, so I’ve heard X about person Y, tell me about that.” And what you learn is context. And you learn about character and you learn about work habits, work ethics, and you start to understand. Because it’s a very amorphous process, this sort of [expletive] that we do, you know, making up fake life. It’s a weird thing, and it is a breeding ground for atypical behavior and certain people have certain processes.

SHAWKAT: But that doesn’t mean it’s acceptable. And the point is that things are changing, and people need to respect each other differently.

WALTER [THROUGH TEARS]: Let me just say one thing that I just realized in this conversation. I have to let go of being angry at him. He never crossed the line on our show, with any, you know, sexual whatever. Verbally, yes, he harassed me, but he did apologize. I have to let it go. [Turns to Tambor.] And I have to give you a chance to, you know, for us to be friends again.

TAMBOR: Absolutely.

WALTER: But it’s hard because honestly — Jason says this happens all the time. In like almost 60 years of working, I’ve never had anybody yell at me like that on a set. And it’s hard to deal with, but I’m over it now. I just let it go right here, for The New York Times.

Walter stated that Tambor apologized, but none of the men in the room said anything as simple as “that was inappropriate” or “that shouldn’t have happened to you”, even as they circle the wagons for Tambor. Although Bateman later apologized on Twitter for mansplaining, it seems like they haven’t really been listening to their colleagues and peers over the past several months about what it might be like being a women on the set of one of these shows.

]]> Tags: Arrested Development   interviews   Jason Bateman   Jeffrey Tambor   Jessica Walter   Sopan Deb   TV]]>
A graceful underwater dance by freediver Julie Gautier tag:kottke.org,2018://5.32178 2018-05-23T18:10:24Z 2018-05-23T18:10:24Z Jason Kottke http://www.kottke.org

Ama is a short film that was written, directed, and performed by freediver Julie Gautier.

Ama is a silent film. It tells a story everyone can interpret in their own way, based on their own experience. There is no imposition, only suggestions.

I wanted to share my biggest pain in this life with this film. For this is not too crude, I covered it with grace. To make it not too heavy, I plunged it into the water.

I dedicate this film to all the women of the world.

This is really beautiful. Watch it all the way through…the end is not to be missed. (via swissmiss)

]]> Tags: dance   free diving   Julie Gautier   video]]>
Bill Gates’ reading recommendations for Summer 2018 tag:kottke.org,2018://5.32184 2018-05-23T15:57:33Z 2018-05-23T15:57:33Z Jason Kottke http://www.kottke.org As he does every year, voracious reader Bill Gates has recommended five books worth reading this summer. Gates’ recommendations often have a Wizard bent and the video he produced for the list probably had a greater budget than the amount I’ve spent on running kottke.org over the past 5 years:

The book I’m most curious about is Origin Story: A Big History of Everything by David Christian. I’ve long wanted to check out his Big History course (due to another Gates rec) and this seems like a good way to do that.

David created my favorite course of all time, Big History. It tells the story of the universe from the big bang to today’s complex societies, weaving together insights and evidence from various disciplines into a single narrative. If you haven’t taken Big History yet, Origin Story is a great introduction. If you have, it’s a great refresher. Either way, the book will leave you with a greater appreciation of humanity’s place in the universe.

Here are his four other recommendations:

Leonardo da Vinci by Walter Isaacson.
Lincoln in the Bardo by George Saunders.
Everything Happens for a Reason: And Other Lies I’ve Loved by Kate Bowler.
Factfulness: Ten Reasons We’re Wrong About the World - and Why Things Are Better Than You Think by Hans Rosling.

]]> Tags: Bill Gates   books   David Christian   lists   Origin Story   video]]>
The Songs of the Years, 1925-2018 tag:kottke.org,2018://5.32183 2018-05-23T14:09:25Z 2018-05-23T14:09:25Z Jason Kottke http://www.kottke.org Back at the end of 2010, Ben Greenman created a playlist for the New Yorker’s holiday party that featured one song from each year of the magazine’s existence ordered chronologically.

At the party, the mix worked like a charm. Jazz and blues greeted the early arrivals, and as the party picked up, the mood became romantic (thanks to the big-band and vocal recordings of the late thirties and forties), energetic (thanks to early rock and roll like Fats Domino and Jackie Brenston in the early fifties), funky (James Brown in 1973, Stevie Wonder in 1974), and kitschy (the eighties), after which it erupted into a bright riot of contemporary pop and hip-hop (Rihanna! Kanye! M.I.A.! Lil Jon!).

After Greenman’s list was published, others created playlists from it on Rdio, YouTube, and Spotify. I listened to this playlist a lot on Rdio back then; it was the perfect way to time travel through the 20th and early 21st centuries in just a few hours.

I was reminded of the list yesterday after Laura Olin asked about favorite Spotify playlists and discovered that Tom Whitwell’s playlist was still around. He’d created it back in the early days of streaming music services, when Spotify was available only in Europe, so some of the songs had gone missing and others, like those by Michael Jackson & The Beatles, who didn’t allow their music on streaming services then. With Whitwell’s kind permission, I went in and tidied up the list, finding the proper song for every year but 1993 (“Return of the Crazy One,” by Digital Underground, which is available on YouTube…on the playlist it’s represented by “Doowutchyalike”).

Not content to have the list trapped in amber for eternity, I emailed Greenman to see if he had any thoughts on music from the intervening years. Although he’s no longer a staffer at the New Yorker, he generously sent me his selections for 2011-2018.1

2011: “Rolling in the Deep” by Adele
2012: “Call Me Maybe”by Carly Rae Jepsen
2013: “Get Lucky” by Daft Punk
2014: “Close Your Eyes (And Count to Fuck)” by Run the Jewels
2015: “WTF” by Missy Elliott
2016: “Hotline Bling” by Drake
2017: “Humble” by Kendrick Lamar
2018: “This is America” by Childish Gambino

You can listen to the full playlist embedded above or here on Spotify. Greenman shared some thoughts on updating the list:

The original list was occasioned by a party: the magazine’s 85th anniversary. Almost a decade has passed, and many things have changed. It feels like a less celebratory time, darker and less hopeful in some ways. But pop music persists. In extending the list from 2010 to the present, I tried to think about how those short bursts of sound still give us moments of joy, and how certain bursts attach themselves to certain moments in history.

I love this playlist and am so glad it’s back and updated. Big thanks to Ben and Tom for making this happen.

P.S. If you duplicate this playlist on Apple Music, Tidal, etc., send me a link. Or even better, if you’re inspired to create your own Songs of the Years playlist, send along those links too. I would love to hear alternate musical journeys through that era — e.g. playlists featuring only black artists or only women would be amazing.

Update: John Stokvis recreated the playlist on Apple Music. Apple had the correct Digital Underground song, but not De La Soul’s “Me, Myself & I”, so Stokvis subbed in “She Drives Me Crazy” from The Fine Young Cannibals. Here’s the Google Play playlist, courtesy of @neuroboy…looks like Google has every song.

A bit off-topic but still within rhyming distance, Aaron Coleman made a playlist of songs with years in the title from 1952-2031. He acknowledges that some of the songs are “terrible”.

  1. I convinced him to put Drake in there, so if you’re not feeling “Hotline Bling” for 2016, you can blame me. (My rationale: Drake was it for those few years, so you have to have him on there somewhere. Besides, it’s tough to pick just one song from “Lemonade” and it’s not on Spotify anyway.)

    Also, May is a bit early to choose a song for 2018, but “This is America” might hold up. If it doesn’t, maybe Greenman can revisit at the end of the year.

]]> Tags: Aaron Coleman   Ben Greenman   John Stokvis   lists   music   Tom Whitwell]]>
================================================ FILE: api/test/data/feed/lemonde ================================================ Le Monde.fr - Actualités et Infos en France et dans le monde Le Monde.fr - 1er site d'information. Les articles du journal et toute l'actualité en continu : International, France, Société, Economie, Culture, Environnement, Blogs ... Copyright Le Monde.fr https://www.lemonde.fr/rss/une.xml Sun, 03 Jun 2018 02:18:11 +0200 https://www.lemonde.fr/mmpub/img/lgo/lemondefr_rss.gif Le Monde.fr - Actualités et Infos en France et dans le monde https://www.lemonde.fr/rss/une.xml https://www.lemonde.fr/rugby/article/2018/06/02/finale-du-top-14-victoire-surprise-de-castres-sur-montpellier-13-29_5308781_1616937.html?xtor=RSS-3208 Rugby : face à Castres, le Montpellier de Mohed Altrad bute encore en finale Battus (29-13) samedi soir, les favoris héraultais n’ont pas réussi à remporter leur premier titre de champion de France. Le Castres olympique obtient, lui, son cinquième bouclier de Brennus. Sat, 02 Jun 2018 23:00:01 +0200 https://www.lemonde.fr/tiny/5308781/ https://www.lemonde.fr/roland-garros/article/2018/06/02/il-n-y-a-plus-de-francais-le-retour-de-la-chanson-de-roland-garros-2018_5308772_1616946.html?xtor=RSS-3208 « Il n’y a plus de Français », le retour de la chanson de Roland Après les éliminations de Gasquet, Pouille, Monfils et Herbert samedi, le tableau masculin ne compte plus de tricolores. Caroline Garcia reste la dernière représentante. Sat, 02 Jun 2018 21:46:51 +0200 https://www.lemonde.fr/tiny/5308772/ https://www.lemonde.fr/m-perso/article/2018/06/01/concierges-de-luxe-footballeurs-assistes_5308217_4497916.html?xtor=RSS-3208 Concierges de luxe : footballeurs assistés Pour se faciliter l’existence, les stars du foot ont remis les clés de leur vie privée à des concierges de luxe. Leur rôle : être disponibles en permanence afin de répondre à toutes sortes de demandes. Fri, 01 Jun 2018 14:40:12 +0200 https://www.lemonde.fr/tiny/5308217/ https://www.lemonde.fr/entreprises/article/2018/06/02/greve-sncf-trafic-encore-perturbe-dimanche-avec-2-tgv-sur-3-et-1-ter-sur-2_5308757_1656994.html?xtor=RSS-3208 A la SNCF, 2 TGV sur 3 et 1 TER sur 2 au vingt-sixième jour de grève Cette mobilisation intervient avant le vote mardi au Sénat de la réforme ferroviaire. Le texte a été remanié avec des amendements de tous les groupes politiques. Sat, 02 Jun 2018 18:16:20 +0200 https://www.lemonde.fr/tiny/5308757/ http://internetactu.blog.lemonde.fr/2018/06/02/videosurveillance-paradigme-du-technosolutionnisme/?xtor=RSS-3208 La vidéosurveillance ne sert à rien, mais elle est partout Malgré des centaines de millions d’euros dépensés, la vidéosurveillance, selon les chercheurs, ne parvient même pas à combattre le sentiment d’insécurité qu’elle promettait de résoudre. Sat, 02 Jun 2018 16:04:54 +0200 https://www.lemonde.fr/tiny/5308718/ https://www.lemonde.fr/moyen-orient-irak/article/2018/06/02/le-proces-en-irak-de-melina-boughedir-au-c-ur-d-une-polemique-entre-ses-avocats-et-jean-yves-le-drian_5308699_1667109.html?xtor=RSS-3208 Procès en Irak de Mélina Boughedir : ses avocats accusent Jean-Yves Le Drian d’« ingérence » Le procès en appel de cette Française, qui risque la peine de mort, doit se tenir dimanche à Bagdad. Le ministre des affaires étrangères avait qualifié Mme Boughedir de « combattante ». Sat, 02 Jun 2018 13:47:55 +0200 https://www.lemonde.fr/tiny/5308699/ https://www.lemonde.fr/religions/article/2018/06/02/abdelkader-arbi-je-veux-banaliser-le-fait-religieux-musulman-dans-les-armees_5308556_1653130.html?xtor=RSS-3208 Abdelkader Arbi : « Je veux banaliser le fait religieux musulman dans les armées » L’aumônier militaire en chef du culte musulman veut faire de l’armée « un laboratoire ». Sat, 02 Jun 2018 06:42:57 +0200 https://www.lemonde.fr/tiny/5308556/ https://www.lemonde.fr/planete/article/2018/06/01/contre-l-utilisation-abusive-de-plastique-les-plastic-attacks-arrivent-en-france_5308296_3244.html?xtor=RSS-3208 Contre l’utilisation abusive de plastique, les « Plastic attacks » arrivent en France Une journée de mobilisation est programmée samedi 2 juin dans des enseignes de grande distribution de plusieurs pays. Fri, 01 Jun 2018 16:42:02 +0200 https://www.lemonde.fr/tiny/5308296/ https://www.lemonde.fr/europe/portfolio/2018/06/02/en-celebrant-la-fete-nationale-le-nouveau-gouvernement-italien-veut-tourner-la-page-de-la-crise-politique_5308742_3214.html?xtor=RSS-3208 Bains de foule pour le nouveau gouvernement italien, en pleine fête nationale Après des mois de crise politique, le chef du gouvernement, Giuseppe Conte, et les ministres issus de la coalition populiste, ont participé au défilé militaire du 2 juin. Sat, 02 Jun 2018 17:00:17 +0200 https://www.lemonde.fr/tiny/5308742/ https://www.lemonde.fr/europe/article/2018/06/02/une-initiative-populaire-danoise-veut-interdire-la-circoncision_5308616_3214.html?xtor=RSS-3208 Une initiative populaire danoise veut interdire la circoncision S’il est adopté, le texte ferait du royaume scandinave le premier pays au monde à interdire l’ablation rituelle du prépuce des garçons de moins de 18 ans. Une initiative loin de faire l’unanimité. Sat, 02 Jun 2018 10:07:21 +0200 https://www.lemonde.fr/tiny/5308616/ https://www.lemonde.fr/m-gastronomie/article/2018/06/02/le-gin-a-nouveau-tonique_5308754_4497540.html?xtor=RSS-3208 Le gin à nouveau tonique Le succès de la mixologie a permis à l’alcool de genévrier, longtemps affublé d’une image vieillotte, de faire son retour dans les bars à la mode. Une aubaine pour les producteurs. Sat, 02 Jun 2018 18:15:28 +0200 https://www.lemonde.fr/tiny/5308754/ https://www.lemonde.fr/football/article/2018/05/31/le-mfc-1871-un-club-parisien-antifasciste-contre-le-football-moderne_5307564_1616938.html?xtor=RSS-3208 Le MFC 1871, un club parisien « antifasciste » contre « le football moderne » Se voulant un « modèle alternatif », le Ménilmontant Football Club participe ce week-end à l’hommage à Clément Méric, mort il y a cinq ans, avant de disputer un match de Coupe de France. Thu, 31 May 2018 13:08:50 +0200 https://www.lemonde.fr/tiny/5307564/ https://www.lemonde.fr/afrique/article/2018/06/02/a-bamako-une-manifestation-de-l-opposition-dispersee-par-les-forces-de-l-ordre_5308716_3212.html?xtor=RSS-3208 A Bamako, une manifestation de l’opposition dispersée par les forces de l’ordre Initialement interdit par les autorités, le rassemblement a été dispersé par des tirs de gaz lacrymogène. Le bilan provisoire fait état de seize blessés. Sat, 02 Jun 2018 15:55:32 +0200 https://www.lemonde.fr/tiny/5308716/ https://www.lemonde.fr/europe/article/2018/06/02/en-espagne-la-revanche-des-independantistes-catalans-sur-mariano-rajoy_5308610_3214.html?xtor=RSS-3208 La revanche des indépendantistes catalans sur Mariano Rajoy Les députés indépendantistes ont voté pour la motion de défiance qui a provoqué la chute de l’ancien chef de gouvernement conservateur. Sat, 02 Jun 2018 10:02:05 +0200 https://www.lemonde.fr/tiny/5308610/ https://www.lemonde.fr/idees/article/2018/06/02/commerce-le-moment-de-verite-pour-l-europe_5308660_3232.html?xtor=RSS-3208 Bataille commerciale avec les Etats-Unis : le moment de vérité pour l’Europe Editorial. L’agressivité commerciale américaine se révèle un test crucial pour mesurer la solidité de la solidarité européenne. Sat, 02 Jun 2018 10:58:34 +0200 https://www.lemonde.fr/tiny/5308660/ https://www.lemonde.fr/logement/article/2018/06/02/l-assemblee-vote-une-baisse-drastique-des-logements-accessibles-aux-personnes-handicapees_5308721_1653445.html?xtor=RSS-3208 L’Assemblée vote une baisse drastique des logements accessibles aux personnes handicapées Les députés ont voté, vendredi 1er juin, en faveur du passage de 100 % à 10 % de logements accessibles aux personnes handicapées dans la construction neuve. Sat, 02 Jun 2018 16:07:22 +0200 https://www.lemonde.fr/tiny/5308721/ https://www.lemonde.fr/bande-dessinee/article/2018/06/01/la-bd-franco-belge-au-pays-des-comics_5307976_4420272.html?xtor=RSS-3208 La BD franco-belge au pays des comics La maison américaine Heritage Auctions organise pour la première fois une vente d’originaux européens. Fri, 01 Jun 2018 09:09:51 +0200 https://www.lemonde.fr/tiny/5307976/ https://www.lemonde.fr/idees/article/2018/06/01/laurence-brunet-il-faut-inventer-de-nouvelles-figures-de-parentalite_5307881_3232.html?xtor=RSS-3208 Bioéthique : « Il faut inventer de nouvelles figures de parentalité », par Laurence Brunet Le Comité consultatif national d’éthique remet au Parlement, lundi 4 juin, un rapport sur la bioéthique. Pour la juriste, les réticences françaises envers la gestation pour autrui viennent de la façon dont notre législation, s’inspirant du droit romain, définit le père et la mère. Fri, 01 Jun 2018 06:30:15 +0200 https://www.lemonde.fr/tiny/5307881/ https://www.lemonde.fr/police-justice/article/2018/06/02/affaire-maelys-jour-d-obseques-en-isere_5308596_1653578.html?xtor=RSS-3208 Affaire Maëlys : jour d’obsèques en Isère Neuf mois après sa disparition, et trois mois après que son corps a été retrouvé, la fillette est inhumée samedi, après une cérémonie publique. Sat, 02 Jun 2018 09:43:08 +0200 https://www.lemonde.fr/tiny/5308596/ https://www.lemonde.fr/societe/article/2018/06/02/les-lyceens-de-banlieue-et-les-embuches-de-parcoursup_5308639_3224.html?xtor=RSS-3208 Les lycéens de banlieue et les embûches de Parcoursup Selon leurs enseignants, les élèves des quartiers subissent une double peine. Le ministère réfute toute discrimination. Sat, 02 Jun 2018 10:32:25 +0200 https://www.lemonde.fr/tiny/5308639/ https://www.lemonde.fr/entreprises/article/2018/06/01/une-panne-affecte-certains-paiements-par-carte-bancaire-visa-en-europe_5308441_1656994.html?xtor=RSS-3208 Une panne a affecté certains paiements par carte bancaire Visa en Europe Visa a présenté samedi ses excuses à ses clients pour cette panne qui n’est pas liée « à une cyberattaque ou un accès non autorisé ». Fri, 01 Jun 2018 19:29:20 +0200 https://www.lemonde.fr/tiny/5308441/ ================================================ FILE: api/test/data/feed/lobsters ================================================ Lobsters https://lobste.rs/ JWZ's snarky, but relevant take on Github https://www.jwz.org/blog/2018/06/lol-github/ https://lobste.rs/s/243k9d stevelord@users.lobste.rs Wed, 06 Jun 2018 02:51:24 -0500 https://lobste.rs/s/243k9d/jwz_s_snarky_relevant_take_on_github <p><a href="https://lobste.rs/s/243k9d/jwz_s_snarky_relevant_take_on_github">Comments</a></p> practices Speeding up Zsh and Oh-My-Zsh https://blog.jonlu.ca/posts/speeding-up-zsh https://lobste.rs/s/neetd2 JonLuca@users.lobste.rs Tue, 05 Jun 2018 23:45:21 -0500 https://lobste.rs/s/neetd2/speeding_up_zsh_oh_my_zsh <p><a href="https://lobste.rs/s/neetd2/speeding_up_zsh_oh_my_zsh">Comments</a></p> unix devops performance Mailing lists vs Github https://begriffs.com/posts/2018-06-05-mailing-list-vs-github.html https://lobste.rs/s/a88fsl begriffs@users.lobste.rs Tue, 05 Jun 2018 03:40:35 -0500 https://lobste.rs/s/a88fsl/mailing_lists_vs_github <p><a href="https://lobste.rs/s/a88fsl/mailing_lists_vs_github">Comments</a></p> vcs culture There is only one OS, and it’s been obsolete for decades https://programmingmadecomplicated.wordpress.com/2017/08/12/there-is-only-one-os-and-its-been-obsolete-for-decades/ https://lobste.rs/s/uxygzt davmac@users.lobste.rs Tue, 05 Jun 2018 03:37:01 -0500 https://lobste.rs/s/uxygzt/there_is_only_one_os_it_s_been_obsolete_for <p><a href="https://lobste.rs/s/uxygzt/there_is_only_one_os_it_s_been_obsolete_for">Comments</a></p> unix philosophy Your own VPN with OpenIKED & OpenBSD https://medium.com/@cmacrae/your-own-vpn-with-openiked-openbsd-13d7abd3d1d4 https://lobste.rs/s/bealzm cmacrae@users.lobste.rs Tue, 05 Jun 2018 10:29:11 -0500 https://lobste.rs/s/bealzm/your_own_vpn_with_openiked_openbsd <p><a href="https://lobste.rs/s/bealzm/your_own_vpn_with_openiked_openbsd">Comments</a></p> security openbsd devops networking Fast.ai: Up to speed with the best of Deep Learning https://www.zerotosingularity.com/blog/fast.ai-up-to-speed-with-the-best-of-deep-learning/ https://lobste.rs/s/zjyqyz zerotosingularity@users.lobste.rs Tue, 05 Jun 2018 23:34:28 -0500 https://lobste.rs/s/zjyqyz/fast_ai_up_speed_with_best_deep_learning <p><a href="https://lobste.rs/s/zjyqyz/fast_ai_up_speed_with_best_deep_learning">Comments</a></p> ai RC is moving https://www.recurse.com/blog/134-rc-is-moving https://lobste.rs/s/umqfbb rhonorv@users.lobste.rs Tue, 05 Jun 2018 16:03:02 -0500 https://lobste.rs/s/umqfbb/rc_is_moving <p><a href="https://lobste.rs/s/umqfbb/rc_is_moving">Comments</a></p> culture Zip Slip: Widespread Critical Arbitrary File Overwrite Vulnerability https://snyk.io/research/zip-slip-vulnerability https://lobste.rs/s/vdowdh lili2311@users.lobste.rs Tue, 05 Jun 2018 08:56:14 -0500 https://lobste.rs/s/vdowdh/zip_slip_widespread_critical_arbitrary <p><a href="https://lobste.rs/s/vdowdh/zip_slip_widespread_critical_arbitrary">Comments</a></p> security git ssb - cel/git-ssb@master https://git.scuttlebot.io/%25n92DiQh7ietE%2BR%2BX%2FI403LQoyf2DtR3WQfCkDKlheQU%3D.sha256 https://lobste.rs/s/yprzoq enkiv2@users.lobste.rs Tue, 05 Jun 2018 08:20:35 -0500 https://lobste.rs/s/yprzoq/git_ssb_cel_git_ssb_master <p><a href="https://lobste.rs/s/yprzoq/git_ssb_cel_git_ssb_master">Comments</a></p> vcs distributed Markets are efficient if and only if P = NP https://arxiv.org/pdf/1002.2284.pdf https://lobste.rs/s/1lfvdx pushcx@users.lobste.rs Tue, 05 Jun 2018 16:16:31 -0500 https://lobste.rs/s/1lfvdx/markets_are_efficient_if_only_if_p_np <p>Abstract:</p> <blockquote> <p>I prove that if markets are weak-form efficient, meaning current prices fully reflect all information available in past prices, then P = NP, meaning every computational problem whose solution can be verified in polynomial time can also be solved in polynomial time. I also prove the converse by showing how we can “program” the market to solve NP-complete problems. Since P probably does not equal NP, markets are probably not efficient. Specifically, markets become increasingly inefficient as the time series lengthens or becomes more frequent. An illustration by way of partitioning the excess returns to momentum strategies based on data availability confirms this prediction.</p> </blockquote> <p><a href="https://lobste.rs/s/1lfvdx/markets_are_efficient_if_only_if_p_np">Comments</a></p> pdf math finance GitPub: An extension to ActivityPub for web-based Git services federation https://github.com/git-federation/gitpub https://lobste.rs/s/d0pdor pizzaiolo@users.lobste.rs Tue, 05 Jun 2018 09:33:56 -0500 https://lobste.rs/s/d0pdor/gitpub_extension_activitypub_for_web <p><a href="https://lobste.rs/s/d0pdor/gitpub_extension_activitypub_for_web">Comments</a></p> vcs distributed Pony 0.22.4 has been released https://www.ponylang.org/blog/2018/06/0.22.4-released/ https://lobste.rs/s/ielm2y SeanTAllen@users.lobste.rs Tue, 05 Jun 2018 06:13:22 -0500 https://lobste.rs/s/ielm2y/pony_0_22_4_has_been_released <p><a href="https://lobste.rs/s/ielm2y/pony_0_22_4_has_been_released">Comments</a></p> release AMPstinction https://adactio.com/journal/13964 https://lobste.rs/s/oeeusd GeoffWozniak@users.lobste.rs Tue, 05 Jun 2018 22:04:23 -0500 https://lobste.rs/s/oeeusd/ampstinction <p><a href="https://lobste.rs/s/oeeusd/ampstinction">Comments</a></p> web Bootstrapping Haskell: part 1 https://elephly.net/posts/2017-01-09-bootstrapping-haskell-part-1.html https://lobste.rs/s/bukpqx pushcx@users.lobste.rs Tue, 05 Jun 2018 16:19:36 -0500 https://lobste.rs/s/bukpqx/bootstrapping_haskell_part_1 <p><a href="https://lobste.rs/s/bukpqx/bootstrapping_haskell_part_1">Comments</a></p> haskell compilers Robot Pedantry, Human Empathy https://mikemcquaid.com/2018/06/05/robot-pedantry-human-empathy/ https://lobste.rs/s/oot91l pushcx@users.lobste.rs Tue, 05 Jun 2018 17:52:21 -0500 https://lobste.rs/s/oot91l/robot_pedantry_human_empathy <p><a href="https://lobste.rs/s/oot91l/robot_pedantry_human_empathy">Comments</a></p> practices ASCAP for Open Source Software https://www.petekeen.net/asacp-for-open-source-software https://lobste.rs/s/wbysfk mperham@users.lobste.rs Tue, 05 Jun 2018 13:20:42 -0500 https://lobste.rs/s/wbysfk/ascap_for_open_source_software <p><a href="https://lobste.rs/s/wbysfk/ascap_for_open_source_software">Comments</a></p> programming How a 20-year Old Mobile Technology Protocol is Revolutionising Africa (With Numbers) https://medium.com/@wizaj/how-a-20-year-old-mobile-technology-protocol-is-revolutionising-africa-with-numbers-744a52cbea92 https://lobste.rs/s/he3pff friendlysock@users.lobste.rs Tue, 05 Jun 2018 13:13:44 -0500 https://lobste.rs/s/he3pff/how_20_year_old_mobile_technology <p><a href="https://lobste.rs/s/he3pff/how_20_year_old_mobile_technology">Comments</a></p> networking historical YES! I Compiled 1,000,000 TypeScript files in Under 40 Seconds. This is How. https://medium.com/@urish/yes-i-compiled-1-000-000-typescript-files-in-under-40-seconds-this-is-how-6429a665999c https://lobste.rs/s/iqygaw antifuchs@users.lobste.rs Wed, 06 Jun 2018 03:56:49 -0500 https://lobste.rs/s/iqygaw/yes_i_compiled_1_000_000_typescript_files <p><a href="https://lobste.rs/s/iqygaw/yes_i_compiled_1_000_000_typescript_files">Comments</a></p> databases performance Ratelimiting at API Gateways https://blog.getambassador.io/rate-limiting-for-api-gateways-892310a2da02 https://lobste.rs/s/adfqgu rshetty@users.lobste.rs Wed, 06 Jun 2018 03:14:18 -0500 https://lobste.rs/s/adfqgu/ratelimiting_at_api_gateways <p><a href="https://lobste.rs/s/adfqgu/ratelimiting_at_api_gateways">Comments</a></p> distributed Deprecation of OpenGL and OpenCL in macOS Mojave https://developer.apple.com/macos/whats-new/ https://lobste.rs/s/pqxwqj lewis@users.lobste.rs Mon, 04 Jun 2018 15:37:12 -0500 https://lobste.rs/s/pqxwqj/deprecation_opengl_opencl_macos_mojave <p><a href="https://lobste.rs/s/pqxwqj/deprecation_opengl_opencl_macos_mojave">Comments</a></p> mac A Kubernetes extension to deploy and run Tor onion services https://github.com/kragniz/tor-controller https://lobste.rs/s/9dqmqz kragniz@users.lobste.rs Tue, 05 Jun 2018 12:33:37 -0500 https://lobste.rs/s/9dqmqz/kubernetes_extension_deploy_run_tor <p><a href="https://lobste.rs/s/9dqmqz/kubernetes_extension_deploy_run_tor">Comments</a></p> devops programming Boilerplate README.md Template for GitHub/GitLab https://github.com/vladocar/boilerplate-readme-template https://lobste.rs/s/7j1e5z vladocar@users.lobste.rs Tue, 05 Jun 2018 05:15:21 -0500 https://lobste.rs/s/7j1e5z/boilerplate_readme_md_template_for <p><a href="https://lobste.rs/s/7j1e5z/boilerplate_readme_md_template_for">Comments</a></p> programming The Beginning of the Monte Carlo Method (1987) https://fas.org/sgp/othergov/doe/lanl/pubs/00326866.pdf https://lobste.rs/s/k8jy9v calvin@users.lobste.rs Tue, 05 Jun 2018 21:03:28 -0500 https://lobste.rs/s/k8jy9v/beginning_monte_carlo_method_1987 <p><a href="https://lobste.rs/s/k8jy9v/beginning_monte_carlo_method_1987">Comments</a></p> pdf math historical How to speed up the Rust compiler some more in 2018 https://blog.mozilla.org/nnethercote/2018/06/05/how-to-speed-up-the-rust-compiler-some-more-in-2018/ https://lobste.rs/s/tycqal calvin@users.lobste.rs Mon, 04 Jun 2018 23:45:36 -0500 https://lobste.rs/s/tycqal/how_speed_up_rust_compiler_some_more_2018 <p><a href="https://lobste.rs/s/tycqal/how_speed_up_rust_compiler_some_more_2018">Comments</a></p> rust compilers performance SOD - An Embedded Computer Vision and Machine Learning Library https://sod.pixlab.io https://lobste.rs/s/vgcg9i chmrad@users.lobste.rs Tue, 05 Jun 2018 23:50:56 -0500 https://lobste.rs/s/vgcg9i/sod_embedded_computer_vision_machine <p><a href="https://lobste.rs/s/vgcg9i/sod_embedded_computer_vision_machine">Comments</a></p> programming ai ================================================ FILE: api/test/data/feed/lowendbox.com ================================================ Low End Box https://lowendbox.com Hosting Websites on Bare Minimum VPS/Dedicated Servers Mon, 02 Jul 2018 12:52:50 +0000 en-US hourly 1 https://wordpress.org/?v=4.9 ChicagoVPS – $6/mo Windows VPS and 25% off select items for 4th of July!!! https://lowendbox.com/blog/chicagovps-6-mo-windows-vps-and-25-off-select-items-for-4th-of-july/ https://lowendbox.com/blog/chicagovps-6-mo-windows-vps-and-25-off-select-items-for-4th-of-july/#respond Mon, 02 Jul 2018 02:00:46 +0000 http://lowendbox.com/?p=16628 ChicagoVPSChicagoVPS sent over another sale in honor of the 4th of July week we have ahead of us. They decided to put on sale their hottest selling items from the last sale so we don’t expect this to remain in stock for long- be sure to act fast!

There are two primary packages to pick from below but if you don’t see what you need they also have a site wide sale running for the 4th of July, just use coupon code “July4th2018” for 25% off anything on their site except for some Windows/Linux VPS plans (like WinVPS 1GB/2GB and a few others), dedicated servers, domains, addons and licenses. If you do not see a template you desire on the linux plan at checkout then no worries, just pop open a ticket after ordering and let us know what you are looking for so we can get that installed for you!

2GB KVM Windows VPS

  • 2GB Dedicated RAM
  • 1x vCPU
  • 50GB SSD Disk Space
  • 2TB Bandwidth
  • 1Gbps
  • 1 x IPv4
  • Windows Server 2008 R2, 2012 R2 or 2016
  • KVM
  • $6.00/mo OR $60.00/yr
  • [Order Now]
2GB KVM Linux VPS

  • 2GB RAM
  • 1x vCPU
  • 60GB HDD Space
  • 2TB Bandwidth
  • 1Gbps
  • 1 x IPv4
  • Linux Templates
  • KVM
  • $5/mo OR $50/yr
  • [Order Now]

Network information is available after the break!

ChicagoVPS has a long history in the Low End Box market serving customers for many years and has been featured a bunch of times, having first been posted on Low End Box on October 16, 2010!  The ChicagoVPS brand manager, Nick, is also an administrator, and an active user, on Low End Talk. ChicagoVPS, desipite their name, actually offers service in Chicago, Dallas, Buffalo, and Los Angeles. Backups are available for an extra cost, just submit a ticket in their customer Portal. ChicagoVPS is owned and operated by Velocity Servers Inc., a NY based cloud and IT management company founded in 2006 which also owns Low End Box and Low End Talk.

Network information

Buffalo, NY, USA – ColoCrossing
Test IP: 192.3.180.103
Looking Glass: http://lg.buf.colocrossing.com

Los Angeles, CA, USA – ColoCrossing
Test IP: 107.175.180.6
Looking Glass: http://lg.la.colocrossing.com

LEBFEB2018” for 25% off anything on the ChicagoVPS site except for some limited VPS plans (like WinVPS 1GB/2GB and a few others), dedicated servers, domains, addons and licenses.

We want to hear your feedback, so if you buy please be sure to comment below!

]]>
https://lowendbox.com/blog/chicagovps-6-mo-windows-vps-and-25-off-select-items-for-4th-of-july/feed/ 0
HostMyBytes – OpenVZ SSD VPS from $1.99/month in Los Angeles and Buffalo! https://lowendbox.com/blog/hostmybytes-openvz-ssd-vps-from-1-99-month-in-los-angeles-and-buffalo/ https://lowendbox.com/blog/hostmybytes-openvz-ssd-vps-from-1-99-month-in-los-angeles-and-buffalo/#comments Tue, 26 Jun 2018 02:00:25 +0000 http://lowendbox.com/?p=16556 hostmybytes

Jonathan from HostMyBytes is back with a new offer for us! Their offer is available in 2 locations across the USA which include Los Angeles, CA and Buffalo, NY. This is their first ever SSD offer so we hope you enjoy.

Here’s what they had to say:

“HostMyBytes was born out of necessity, and today is well over three years old. We created HostMyBytes to fill our own needs for excellent hosting services. Then we decided to share our vision, processes and high standards with the world. Web hosting is what HostMyBytes does, and we strive to do it consistently better than any other company.”

***Want a freebie? Well you got it, they stated our readers just need to open a ticket after your order, mention you’re from LEB, and they will provide you with an extra 1TB of monthly bandwidth on any plan that you order, so long you mention you’re from LEB***

** Disk Test Benchmark Result: Click Here **

512MB Plan

  • 512MB RAM
  • 512MB vSwap
  • 1x vCPU
  • 5GB Pure SSD
  • 1TB Transfer
  • 100Mbps Uplink
  • DDoS Guard
  • 1x IPv4
  • OpenVZ/SolusVM
  • $1.99/mo
  • [ORDER]
1GB Plan

  • 1GB RAM
  • 1GB vSwap
  • 2x vCPU
  • 15GB Pure SSD
  • 2TB Transfer
  • 100Mbps Uplink
  • DDoS Guard
  • 1x IPv4
  • OpenVZ/SolusVM
  • $10.00/yr
  • [ORDER]
3GB Plan

  • 3GB RAM
  • 3GB vSwap
  • 3x vCPU
  • 25GB Pure SSD
  • 3TB Transfer
  • 1000Mbps Uplink
  • DDoS Guard
  • 1x IPv4
  • OpenVZ/SolusVM
  • $22.00/yr
  • [ORDER]
6GB Plan

  • 6GB RAM
  • 6GB vSwap
  • 4x vCPU
  • 40GB Pure SSD
  • 5TB Transfer
  • 1000Mbps Uplink
  • DDoS Guard
  • 1x IPv4
  • OpenVZ/SolusVM
  • $6.00/mo or $39.00/yr
  • [ORDER]

HostMyBytes started offering VPS services last year (2014). Jonathan told us that they have over 1,000 active customers and that they are growing fast. For those interested, their WHOIS information is public. HostMyBytes supports payment through PayPal, Credit Cards and Bitcoin. They offer a 30-day refund guarantee to all new customers, so it is fairly safe to try their service. An interesting note, their support statistics is shown in their about page. Based from the data, it seems their support is pretty good. Kindly read their Terms of Service, Acceptable Use and Privacy Policy before making any purchase.

Host Node Specifications

– Intel Xeon E3-1240’s
– 32GB RAM
– SSD Enterprise Drives
– 1Gbps Uplink

Network information

ColoCrossing – Los Angeles, CA, USA
Test IPv4: 198.46.138.196

ColoCrossing – Buffalo, NY, USA
Test IPv4: 192.210.234.131

 
Please let us know your feedback and if you have any questions/comments!

]]>
https://lowendbox.com/blog/hostmybytes-openvz-ssd-vps-from-1-99-month-in-los-angeles-and-buffalo/feed/ 26
UMaxHosting – 50GB RAID-10 VPS for $1.95/mo with a month free and more! https://lowendbox.com/blog/umaxhosting-50gb-raid-10-vps-for-1-95-mo-with-a-month-free-and-more/ https://lowendbox.com/blog/umaxhosting-50gb-raid-10-vps-for-1-95-mo-with-a-month-free-and-more/#comments Mon, 18 Jun 2018 02:00:24 +0000 http://lowendbox.com/?p=16508

John from UMaxHosting has submitted their first offer ever with us! They are offering OpenVZ based virtual services out of Los Angeles and New York. They started with New York and are now expanding over to the west coast! We hope you enjoy what they have to offer and please let us know of any questions/comments/concerns you may have below.

Here’s what they had to say:

“UMaxHosting is a hosting provider that specializes in providing maximum performance at the lowest cost possible. UMaxHosting provides a low latency network backed with a 99.9% network uptime guarantee. Additionally, our support staff are available 24×7 to assist our customers with any questions they may have. Our staff are also working behind the scenes to ensure our mission statement is constantly being delivered, without any shortcuts being taken!

Our Mission Statement: To deliver the highest level of hosting performance at the best value possible. To adapt to customer requirements and provide personalized service.”

***** Order any LEB special below and get 1 month free on top of your next due date! Open a ticket to our Billing Department to claim your free month after you have ordered. *****

256MB Plan

  • – 1 CPU Core
  • – 256MB DDR3 RAM
  • – 256MB vSwap
  • – 50GB RAID-10 Storage
  • – 2000GB Monthly Bandwidth
  • – 100Mbps Network Port
  • – SolusVM Control Panel
  • – Any Linux OS
  • – Unlimited OS Reinstalls
  • – Full Root Privileges
  • – Instant Deployment
  • – Easy API Access
  • $1.95/mo [ORDER]

1GB Plan

    • – 2 CPU Cores
    • – 1024MB (1GB) DDR3 RAM
    • – 1024MB (1GB) vSwap
    • – 70GB RAID-10 Storage
    • – 3000GB Monthly Bandwidth
    • – 100Mbps Network Port
    • – SolusVM Control Panel
    • – Any Linux OS
    • – Unlimited OS Reinstalls
    • – Full Root Privileges
    • – Instant Deployment
    • – Easy API Access
    • $9/qtr OR $18/yr [ORDER]

6GB Plan

  • – 4 CPU Cores
  • – 6144MB (6GB) DDR3 RAM
  • – 6144MB (6GB) vSwap
  • – 120GB RAID-10 Storage
  • – 5000GB Monthly Bandwidth
  • – 1000Mbps Network Port
  • – SolusVM Control Panel
  • – Any Linux OS
  • – Unlimited OS Reinstalls
  • – Full Root Privileges
  • – Instant Deployment
  • – Easy API Access
  • $7/mo OR $19/qtr [ORDER]

UMaxHosting supports payment through PayPal, MasterCard, VISA, American Express, Discover, Bitcoin, Litecoin, Ethereum, and Monero. Kindly read their Terms of Service before making any purchase.

Network information

ColoCrossing – Buffalo, New York, United States
Test IPv4: 192.3.180.103
LA Telecom Building – Los Angeles, California, United States
Test IPv4: 107.175.180.6

Hardware information
– Intel Xeon E3’s
– 32GB to 64GB of RAM
– 4x 2TB Enterprise HDD’s
– Hardware RAID10 with BBU Caching
– 1Gbps uplinks

]]>
https://lowendbox.com/blog/umaxhosting-50gb-raid-10-vps-for-1-95-mo-with-a-month-free-and-more/feed/ 60
WebSound – 2GB KVM w/ 4 cores & 100GB HDD @ ~$6.68/mo and more! https://lowendbox.com/blog/websound-256mb-kvm-8gb-ssd-1tb-bw-4-57-m-or-34-58-year-in-los-angeles/ https://lowendbox.com/blog/websound-256mb-kvm-8gb-ssd-1tb-bw-4-57-m-or-34-58-year-in-los-angeles/#comments Mon, 11 Jun 2018 02:00:24 +0000 http://lowendbox.com/?p=16466

Callum from WebSound.co.uk has sent over another awesome offer for us all to enjoy! They’ve been around since 2013 and have had nothing but great feedback around our community.

They’re a registered company in the UK (VAT Number: GB 203028955). They accept PayPal, Debit/Credit Card (Stripe) or BitCoin (Coinify). You can find their ToS/Legal Documents here.

In their own words: 

WebSound is an affordable, reliable hosting provider launched in 2013 – We have previously featured on LEB before and frequent offers around the LET community, however, we feel it’s time to bring a new, exclusive offer for the LEB community themselves again. We specialize in offering a variety of affordable VPS and Web Hosting services to cater for the needs of a wide range of clients, and our previous VPS hosting offers have been very popular among the community in the past, we hope that this offer can be met with the same popularity and demand as previously as we try to deliver something new and some updated features within our control panel since our last offering.

Exclusive Offer: LEB-KVMH50 gets 50% recurring off of all KVMH plans on any billing cycle, PLUS double disk space OR double bandwidth, open a support ticket on ordering to choose which double benefit you receive!

KVMH256

  • 256MB RAM (256MB SWAP)
  • 1 x CPU
  • 15GB HDD
  • 1TB Transfer
  • 1 x IPv4
  • /64 IPv6 Available
  • KVM (Virtualizor)
  • Promo Code: LEB-KVMH50
  • £11/yr($14.69)
  • [ORDER]
KVMH512

  • 512MB RAM (512MB SWAP)
  • 2 x CPU
  • 25GB HDD
  • 2TB Transfer
  • 1 x IPv4
  • /64 IPv6 Available
  • KVM (Virtualizor)
  • Promo Code: LEB-KVMH50
  • £1.50/mo($2.00)
  • [ORDER]
KVMH1024

  • 1GB RAM (1GB SWAP)
  • 2 x CPU
  • 50GB HDD
  • 3TB Transfer
  • 1 x IPv4
  • /64 IPv6 Available
  • KVM (Virtualizor)
  • Promo Code: LEB-KVMH50
  • £2.50/mo($3.34)
  • [ORDER]
KVMH2048

  • 2GB RAM (1GB SWAP)
  • 4 x CPU
  • 100GB HDD
  • 4TB Transfer
  • 1 x IPv4
  • /64 IPv6 Available
  • KVM (Virtualizor)
  • Promo Code: LEB-KVMH50
  • £5.00/mo ($6.68)
  • [ORDER]


Network Info:

Datacenter – Los Angeles, United States (Psychz)
Test IPv4: 45.35.9.75
Test IPv6: 2604:6600:0:40d::1

Hardware Specifications:

Dual Intel E5 Processors @ 2.4GHz+
128GB RAM
8 x 2TB HDD Drives
LSI Hardware RAID 10
1Gbps Uplinks

Please let us know of any questions/comments/concerns and enjoy!

]]>
https://lowendbox.com/blog/websound-256mb-kvm-8gb-ssd-1tb-bw-4-57-m-or-34-58-year-in-los-angeles/feed/ 12
Hostigger – Openstack/KVM in Chicago and Istanbul! https://lowendbox.com/blog/hostigger-openstack-kvm-in-chicago-and-istanbul/ https://lowendbox.com/blog/hostigger-openstack-kvm-in-chicago-and-istanbul/#comments Tue, 29 May 2018 02:00:13 +0000 http://lowendbox.com/?p=16421 Mustafa from Hostigger submitted an interesting offer we are happy to post today. They are offering Openstack based KVM services out of Chicago and Istanbul!

Hostigger is a registered company (EIN : 35-2566649), their WHOIS is public, and you can find their ToS/Legal Docs here. They accept PayPal and Credit Cards as payment.

Here’s what they had to say: 

“Hostigger is a worldwide high-end service provider in the hands of a High Availability service for over twenty years, turn-key service solution and development experience in the field. What separates us from the competition, superior quality and 100% customer satisfaction of our company strategy. We are committed to providing a first class service and thrive for excellence.
Our services services to run business critical, or high performance, top-level security, and capacity designed for demanding customers who require Wide Area Network. Hostigger customer portfolio for financial institutions, Telecom and technology organizations includes, among others. Our extensive technical expertise and extensive experience in Problem solving and high-quality technology enables us to provide customized Telecom and IT solutions to any challenge.”

Here’s the offers: 

Chicago-VPS-1

  • 2048MB RAM
  • 1x vCPU
  • 30GB SSD
  • 2TB Bandwidth
  • 10Gbps uplink
  • 1 x IPv4
  • Openstack/KVM
  • $4.99/month
  • $59.88/year
  • [ORDER]

Chicago-VPS-2

    • 3072MB RAM
    • 1x vCPU
    • 40GB SSD
    • 3TB Bandwidth
    • 10Gbps uplink
    • 1 x IPv4
    • Openstack/KVM
    • $6.99/month
    • $83.88/year
    • [ORDER]

Chicago-VPS-3

  • 4096MB RAM
  • 1x vCPU
  • 50GB SSD
  • 5TB Bandwidth
  • 10Gbps uplink
  • 1 x IPv4
  • Openstack/KVM
  • $8.99/month
  • $107.88/year
  • [ORDER]

Istanbul-VPS-1

  • 2048MB RAM
  • 1x vCPU
  • 30GB SSD
  • 2TB Bandwidth
  • 10Gbps uplink
  • 1 x IPv4
  • Openstack/KVM
  • $3.99/month
  • $47.88/year
  • [ORDER]

Istanbul-VPS-2

    • 3072MB RAM
    • 1x vCPU
    • 40GB SSD
    • 3TB Bandwidth
    • 10Gbps uplink
    • 1 x IPv4
    • Openstack/KVM
    • $5.99/month
    • $71.88/year
    • [ORDER]

Istanbul-VPS-3

  • 4096MB RAM
  • 1x vCPU
  • 50GB SSD
  • 5TB Bandwidth
  • 10Gbps uplink
  • 1 x IPv4
  • Openstack/KVM
  • $7.99/month
  • $95.88/year
  • [ORDER]

NETWORK INFO:

Cogent – Chicago
Test IPv4: 185.202.172.221
Test file: http://lg.chi.hostigger.com/100MB.test
Looking glass: http://lg.chi.hostigger.com
Equinix – Istanbul
Test IPv4: 185.219.132.125
Test file: http://lg.ist.hostigger.com/100MB.test
Looking glass: http://lg.ist.hostigger.com


Chicago Cloud System:
– 4x Intel Xeon E7-4870 CPU
– 512GB RAM
– 8x 2TB SSD
– Hardware RAID-10
– 10Gbps Uplink
Istanbul Cloud System:
– 2x Intel Xeon X5690
– 128GB RAM
– 2x 2TB SSD
– Hardware RAID-1
– 10Gbps uplink

]]>
https://lowendbox.com/blog/hostigger-openstack-kvm-in-chicago-and-istanbul/feed/ 28
VDS6.net – 1GB KVM from $1.87/mo and more! https://lowendbox.com/blog/vds6-net-1gb-kvm-from-1-87-mo-and-more/ https://lowendbox.com/blog/vds6-net-1gb-kvm-from-1-87-mo-and-more/#comments Tue, 22 May 2018 02:00:06 +0000 http://lowendbox.com/?p=16370

Sergey from VDS6.net has sent over their second ever offer to LowEndBox! They’ve been around since 2011 when we posted their first offer and are happy they are back today!

They’re a registered company in the state of Delaware, USA (#4921432). They accept PayPal, Webmoney, Interkassa (Coins), Robokassa (Cards). You can find their ToS/Legal Documents here.

In their own words: 

VDS6.NET opened its doors in late 2011. We have been around LowEndBox community a long time ago and started with offering NATed and IPv6 only FreeBSD jail servers. Since then we have opened up a few new locations, switched to KVM virtualization and would like to offer some new deals to the low-end community.

Here’s the offer: 

KVMNL-1

  • 1GB RAM
  • 1 x CPU
  • 10GB SSD
  • 0.50TB Transfer
  • 1Gbps Uplink
  • 1 x IPv4
  • IPv6 Available
  • KVM/VMmanager
  • Discount Code: VDS6-2018-NL1
  • $1.87/month
  • [ORDER]
KVMNL-2

  • 2GB RAM
  • 1 x CPU
  • 20GB SSD
  • 1TB Transfer
  • 1Gbps Uplink
  • 1 x IPv4
  • IPv6 Available
  • KVM/VMmanager
  • Discount Code: VDS6-2018-NL1
  • $3.75/month
  • [ORDER]
KVMNL-3

  • 3GB RAM
  • 2 x CPU
  • 30GB SSD
  • 1.5TB Transfer
  • 1Gbps Uplink
  • 1 x IPv4
  • IPv6 Available
  • KVM/VMmanager
  • Discount Code: VDS6-2018-NL1
  • $5.62/month
  • [ORDER]
KVMNL-4

  • 4GB RAM
  • 2 x CPU
  • 40GB SSD
  • 2TB Transfer
  • 1Gbps Uplink
  • 1 x IPv4
  • IPv6 Available
  • KVM/VMmanager
  • Discount Code: VDS6-2018-NL1
  • $7.50/month
  • [ORDER]

Network Info:

Datacenter – Amsterdam, Netherlands
Test IPv4: 93.170.105.2
Test IPv6: 2a07:a907:50a:2018::2
Looking glass: http://lg-nl.vds6.net

Please let us know of any questions/comments/concerns and enjoy!

]]>
https://lowendbox.com/blog/vds6-net-1gb-kvm-from-1-87-mo-and-more/feed/ 36
HostUS – Exclusive London SSD KVM & Worldwide OpenVZ Offers! https://lowendbox.com/blog/hostus-exclusive-london-ssd-kvm-worldwide-openvz-offers/ https://lowendbox.com/blog/hostus-exclusive-london-ssd-kvm-worldwide-openvz-offers/#comments Wed, 16 May 2018 02:00:38 +0000 http://lowendbox.com/?p=16340

Andrew from HostUS has sent in a fresh offer and we’re happy to have them back on our site as they always get great feedback!

HostUS is a registered company in Delaware, USA (# 5491145), their WHOIS is public, and you can find their ToS/legal documents here.

They accept PayPal, Bitcoin, Credit Card and Alipay, as well as all major bank cards (AMEX, Discover, MasterCard, VISA). There is a 3-day money back guarantee for a customer’s first order according to our terms and conditions.

In their own words: 

“HostUS was founded in 2012 with our first location in Atlanta, GA. We had since grown to Ten global locations. Throughout the years HostUS has grown from a small start-up to its existing state. In the USA and Europe we operate our own ASNs (AS7489 / AS25926) and our own hardware. In Asia Pacific (Hong Kong, Sydney and Singapore) we partner with SoftLayer (AS36351). We use direct allocated IP addresses in most of our locations.”

Special KVM VPS Plans:
Full KVM virtualization ready to run nearly any operating system (no module incompatibility and bothering support to enable modules). Run the latest Linux kernel, run BSD, run Docker, run Windows. Choose from already built templates or manual ISO installs. All KVM VPS plans include three snapshots which you can create and restore at any time.

Available KVM OSes can be found here.

London 2GB KVM Special

  • 2GB RAM
  • 1x vCPU
  • 20GB SSD
  • 2TB transfer
  • 1Gbps uplink
  • 2x IPv4***
  • 1x IPv6
  • KVM / Breeze Control Panel
  • $7/month
  • [Order Now]
London 3GB KVM Special

    • 3GB RAM
    • 1x vCPU
    • 35GB SSD
    • 3TB transfer
    • 1Gbps uplink
    • 2x IPv4
    • 1x IPv6
    • KVM / Breeze Control Panel
    • $10/month
    • [Order Now]
***London KVM Special: Contact Support to add 2nd IP, justification required.

Additional Offers:

Special OpenVZ Plans:

Container-based OpenVZ virtualization for running your favourite Linux distribution without the kernel overhead or management complexity. OpenVZ services are available in all ten of HostUS’ worldwide locations.

Available OpenVZ OSes can be found here.

Here are the offers:

USA / Europe 6GB OpenVZ

  • 6GB RAM
  • 6GB vSwap
  • 4 vCPU Cores (Fair Share)
  • 150GB Disk Space
  • 5TB transfer
  • 1Gbps uplink
  • 1x IPv4
  • 6x IPv6
  • OpenVZ / Breeze Control Panel
  • $18/quarter
  • $65/year
  • [Order Now]
USA / Europe 768MB OpenVZ

  • 768MB RAM
  • 768MB vSwap
  • 1 vCPU Core (Fair Share)
  • 20GB Disk Space
  • 2TB transfer
  • 1Gbps uplink
  • 1x IPv4
  • 4x IPv6
  • OpenVZ / Breeze Control Panel
  • $16/year
  • [Order Now]
Asia-Pacific 768MB OpenVZ

  • 768MB RAM
  • 768MB vSwap
  • 2 vCPU Cores (Fair Share)
  • 20GB Disk Space
  • 2TB transfer
  • 1Gbps uplink
  • 1x IPv4
  • 4x IPv6
  • OpenVZ / Breeze Control Panel
  • $5.65/month or $48/year
  • [Order Now]

Network Info & Hardware—>

Please see here for full network information.

– Intel Xeon CPUs (exact model depending on location / virtualization)
– At least 64GB DDR3 or DDR4
– OpenVZ: Minimum 4 HDD / SSD-Cached RAID 10
– KVM: Pure SSD RAID 10
– 1Gbps uplink

Please let us know of any feedback or questions you have!

]]>
https://lowendbox.com/blog/hostus-exclusive-london-ssd-kvm-worldwide-openvz-offers/feed/ 17
PNZHost – 3GB KVM @ 1Gbps for $5.99/mo along with other plans in the USA! https://lowendbox.com/blog/pnzhost-3gb-kvm-1gbps-for-5-99-mo-along-with-other-plans-in-the-usa/ https://lowendbox.com/blog/pnzhost-3gb-kvm-1gbps-for-5-99-mo-along-with-other-plans-in-the-usa/#comments Thu, 10 May 2018 02:00:57 +0000 http://lowendbox.com/?p=16304 VMium

Yong from PNZHost has submitted their first offer ever with us! They are offering KVM based virtual services out of Los Angeles and New York. They stated with Los Angeles when they opened their doors and are now starting to expand into other regions! We hope you enjoy what they have to offer and please let us know of any questions/comments/concerns you may have below.

Here’s what they had to say:

“PnZHost, founded in 2008, provides premier hosting solutions in the best datacenters around the world. When PnZHost was founded, emphasis was made on maximizing traffic and service quality between China and United States. Fast forward to today, PnZHost has datacenters in Los Angeles and New York. With that said, PnZHost now actively services clients from over 150 different countries! The rest is history. PnZHost’s KVM services allow you to install your own kernel, run Docker, and much more! We are happy to be apart of the LowEndBox community and look forward to servicing everyone’s needs!”

***For anyone who orders and opens a support ticket afterwards claiming that they are from the LowEndBox posting, we will upgrade the port speed of their VPS to 1000Mbps (1Gbps port) at no additional charge.***

512MB Plan

  • 1 x Intel Xeon E5 Core
  • 10GB Disk Storage
  • 512MB ECC RAM
  • 1TB Monthly Transfer
  • 100Mbps Network Port
  • 1 x IPv4
  • KVM Virtualization
  • $1.95/mo OR $15/yr [ORDER]

1GB Plan

    • 1 x Intel Xeon E5 Core
    • 20GB Disk Storage
    • 1024MB ECC RAM
    • 3TB Monthly Transfer
    • 100Mbps Network Port
    • 1 x IPv4
    • KVM Virtualization
    • $2.99/mo OR $22/yr [ORDER]

3GB Plan

  • 2 x Intel Xeon E5 Core
  • 60GB Disk Storage
  • 3072MB ECC RAM
  • 5TB Monthly Transfer
  • 100Mbps Network Port
  • 1 x IPv4
  • KVM Virtualization
  • $5.99/mo OR $45/yr [ORDER]

PNZHost supports payment through PayPal, Credit Cards, Bitcoin, Alipay and WeChat Pay. Kindly read their Terms of Service before making any purchase.

Network information

ColoCrossing – Buffalo, New York, United States
Test IPv4: 192.3.180.103

Hardware information
Dual Intel Xeon E5-2620v2 CPU’s
128GB RAM
4x 2TB Drives with RAID-10 Technology
Hardware RAID10 with Caching
1Gbps uplink

]]>
https://lowendbox.com/blog/pnzhost-3gb-kvm-1gbps-for-5-99-mo-along-with-other-plans-in-the-usa/feed/ 95
NFPHosting – 6GB KVM for $10/mo in LA, NY, IL and much more! https://lowendbox.com/blog/nfphosting-6gb-kvm-for-10-mo-in-la-ny-il-and-much-more/ https://lowendbox.com/blog/nfphosting-6gb-kvm-for-10-mo-in-la-ny-il-and-much-more/#comments Fri, 04 May 2018 21:00:10 +0000 http://lowendbox.com/?p=16265 Hello readers! Nathan over @ NFP Hosting sent over another set of awesome deals to share with us and they are now offering their services in three locations across the US! They were founded back in 2006, their WHOIS is public, and you can find their ToS/Legal Docs here. They accept PayPal, Credit Cards, Alipay and Bitcoin.

More about the company: 

“NFPHosting.com was founded in 2006 as an e-commerce hosting provider after seeing the lack of hosts who can deliver quality. Throughout the years of learning the ins and outs of running a hosting company, and seeing the opportunities to expand in the marketplace, NFP Hosting throughout the years added additional services to serve a wider variety of markets. NFP Hosting today offers everything the basic consumer looking to start a website may need, all the way up to the advanced (technical) user looking to set up a cluster of servers. At NFP Hosting, there is no waiting around. Services are instantly provisioned, and 24/7 customer support comes standard with our plans. No compromises. No excuses. It’s really as simple as that.
We are the provider for the people. Our motto is: Premium Solutions. Friendly People. Service Delivered. This means always going above and beyond, and going the extra mile. Hence why customers love NFP Hosting. Real results, real performance!
“These offers are extra special not only because we’ve expanded to Chicago, but this is our first KVM VPS offer we’re presenting to the LEB community! In addition to that, we have some new OpenVZ specials in 3 locations, too!”

HERE’S THE OFFERS:

1GB RAM KVM

  • 1GB RAM
  • 1x CPU Core
  • 20GB HDD Space
  • 1.5TB Bandwidth
  • 100Mbps Network Port
  • 1x IPv4
  • SolusVM/KVM Virtualization
  • Linux or Windows OS
  • $2.95/month or $15/year
  • [ORDER]

2GB RAM KVM

    • 2GB RAM
    • 2x CPU Core
    • 40GB HDD Space
    • 5TB Bandwidth
    • 100Mbps Network Port
    • 1x IPv4
    • SolusVM/KVM Virtualization
    • Linux or Windows OS
    • $9/quarterly (every 3 months)
    • [ORDER]

6GB RAM VDS (Semi-Dedicated)

  • 6GB RAM
  • 4x CPU Core
  • 100GB HDD Space
  • 5TB Bandwidth
  • 1000Mbps Network Port
  • 1x IPv4
  • SolusVM/KVM Virtualization
  • Linux or Windows OS
  • $10/month or $90/year
  • [ORDER]

ADDITIONAL OFFERS/NETWORK INFO: 

2GB RAM – LEB Special

  • 2GB RAM
  • 2GB vSwap
  • 1x CPU Core
  • 50GB HDD Space
  • 2TB Bandwidth
  • 100Mbps Network Port
  • 1x IPv4
  • Virtualizor/OpenVZ
  • $12/year
  • [ORDER]

3GB RAM – LEB Special

    • 3GB RAM
    • 3GB vSwap
    • 2x CPU Core
    • 60GB HDD Space
    • 3TB Bandwidth
    • 100Mbps Network Port
    • 1x IPv4
    • Virtualizor/OpenVZ
    • $18/year
    • [ORDER]

6GB RAM – LEB Special

  • 6GB RAM
  • 6GB vSwap
  • 4x CPU Core
  • 150GB HDD Space
  • 10TB Bandwidth
  • 1000Mbps Network Port
  • 1x IPv4
  • Virtualizor/OpenVZ
  • $45/year
  • [ORDER]

NETWORKS/DATACENTERS
ColoCrossing – Los Angeles, CA
Test IPv4: 107.175.180.6
Test file: http://lg.la.colocrossing.com/100MB.test

ColoCrossing – Buffalo, NY
Test IPv4: 192.3.180.103
Test file: http://lg.buf.colocrossing.com/100MB.test

ColoCrossing – Chicago, IL
Test IPv4: 66.225.198.198
KVM VPS Host Node Specifications
– Intel Xeon E5-2620v2’s
– 128GB to 192GB of RAM
– 4x 2TB HDD’s
– LSI 9271 Hardware RAID
– 1Gbps Uplinks
OpenVZ VPS Host Node Specifications
– Intel Xeon E3/E5’s
– 32 to 64 GB RAM
– 4x 1TB HDD’s
– LSI 9271 Hardware RAID
– 1Gbps Uplinks

 

]]> https://lowendbox.com/blog/nfphosting-6gb-kvm-for-10-mo-in-la-ny-il-and-much-more/feed/ 169 HyperExpert – 10% off ALL VPS Plans and other goodies! https://lowendbox.com/blog/hyperexpert-10-off-all-vps-plans-and-other-goodies/ https://lowendbox.com/blog/hyperexpert-10-off-all-vps-plans-and-other-goodies/#comments Wed, 02 May 2018 02:00:26 +0000 http://lowendbox.com/?p=16199
Ali from HyperExpert just sent us over an offer that looks awesome! He mentioned the web plans (noted below) come with free .COM registrations and all of their VPS plans are 10% off starting today!

Here’s what they had to say: 

“Hyper Expert, LLC was established in the year 2015 by a small group of people that are very passionate about technology. We provide you with the best possible ways to make use of technology to improve your brand. The foundation of Hyper Expert is trust and honesty, with goal to provide the best customer experience to help clients generate revenue, reduce costs and transform their thinking. Hyper Expert serves as technology consultants and can also provide web services, colocation, and performance cloud hosted solutions.”

They are a registered business in the state of Washington, USA (#604202674). Their Terms of Service can be located here.

They currently accept Credit Cards and PayPal only.

NEW SPECIALS
FREE .COM Registrations/Transfers with ANY Hosting/Reseller Accounts – use code freedomain
VPS: 10% OFF any plan – use code 10OFF

Here’s shared Web Hosting deals: 

– 1 Website
– Free SSL
– 5 Databases
– 5GB Storage
– UNLIMITED Subdomains
– Unlimited Bandwidth
– Weekly backups
– WordPress installer
– Website Migration
– cPanel
– $0.99/Month
– FREE .COM Registrations/Transfers – use code “freedomain”
– [ORDER NOW]

– 5 Websites
– Free SSL
– 10 Databases
– 10GB Storage
– UNLIMITED Subdomains
– Unlimited Bandwidth
– Weekly backups
– WordPress installer
– Website Migration
– cPanel
– $1.99/Month
– FREE .COM Registrations/Transfers – use code “freedomain”
– [ORDER NOW]

 

KVM specials are after the break!

– 1GB RAM
– 1x vCPU
– 20GB HDD space (SSD Cached)
– 1TB Bandwidth
– 2GB Dedicated Swap (addition to your main storage)
– Weekly backups
– 1Gbps uplink
– 1x IPv4
– 1x IPv6 /64 subnet
– $2.99/month
– 10% OFF – use code “10OFF”
– [ORDER NOW]

– 2GB RAM
– 2x vCPU
– 40GB HDD space (SSD Cached)
– 2TB Bandwidth
– Weekly backups
– 1Gbps uplink
– 1x IPv4
– 1x IPv6 /64 subnet
– $4.99/month
– 10% OFF – use code “10OFF”
– [ORDER NOW]

– 4GB RAM
– 4x vCPU
– 80GB HDD space (SSD Cached)
– 3TB Bandwidth
– Weekly backups
– 1Gbps uplink
– 1x IPv4
– 1x IPv6 /64 subnet
– $8.99/month
– 10% OFF – use code “10OFF”
– [ORDER NOW]

NETWORK INFO:

Wowrack Datacenter, Seattle, WA, USA
Test IPv4: 208.115.100.186
Test IPv6: 2602:febc:0:3b9::4dbc
Test file: http://208.115.100.186/100MB.zip
Looking glass: http://208.115.100.186

Host Node:

– 2x Intel Xeon E5-2670 CPU
– 192GB RAM
– 2x 80TB Network Storage
– Hardware RAID10
– 2x 10Gbps uplink

]]> https://lowendbox.com/blog/hyperexpert-10-off-all-vps-plans-and-other-goodies/feed/ 19 QuadraNet – Intel Q9550 Dedicated Server w/ DDoS Protection for $39/month! https://lowendbox.com/blog/quadranet-intel-q9550-dedicated-server-w-ddos-protection-for-39-month/ https://lowendbox.com/blog/quadranet-intel-q9550-dedicated-server-w-ddos-protection-for-39-month/#comments Fri, 27 Apr 2018 20:00:09 +0000 http://lowendbox.com/?p=16175 Adam from QuadraNet sent over another Los Angeles dedicated server offer for our readers. QuadraNet operates its own datacenter facilities with its own network infrastructure (AS8100), equipment and IP space, and has recently opened a new Los Angeles datacenter.

QuadraNet’s offer features 15,000RPM SAS drives with a Hardware RAID controller this time around, making this offer quite unique for Los Angeles!

In their own words:

“QuadraNet is a datacenter which has been operating since 2001. QuadraNet operates its own datacenter facilities with its own network infrastructure (AS8100), equipment and IP space. They started under the brand “OC3 Networks,” OC3 Networks acquired MultiPoint and then a subsidary brand to focus on dedicated servers was started under a brand named PacificRack. All these brands eventually came together merged into one, “QuadraNet.” They are well-known and popular in LowEndBox/LowEndTalk community as they are used by many VPS hosting providers.”

Their WHOIS is public, they are a registered company in the USA, their legal docs can be found here , and they accept credit cards, PayPal, Checks, wire payments, Alipay, Tencent WeChat Pay, and cryptocurrency as available methods of payment.

Here’s the offer:

Xeon Dedicated Server – Limited Time Offer
This offer includes 3Gbps of QuadraNet VEST DDoS Mitigation, you can also upgrade to their Asia-Optimized network for an additional $5/month.
  • Intel Core2Quad Q9550 Quad Core – 2.83Ghz, 12M Cache, 1333FSB
  • 8GB RAM
  • 2x 147GB SAS 15,000RPM Drives
  • Hardware RAID-1 via Adaptec 2405
  • 15TB Traffic
  • 100Mbps Uplink
  • /29 IPv4 – 5 Usable IPs
  • /64 IPv6 – Millions of IPs
  • KVM over IP, Remote Power Control
  • $39/month (***$20 FIRST MONTH***)
  • INCLUDES: Noction Intelligent Routing Platform Enabled Network
  • INCLUDES: 3Gbps Detect & Mitigate QuadraNet VEST DDoS Protection
  • [Order Now]
Network info: 

QuadraNet, Inc Datacenter, Los Angeles, CA, USA
Test IPv4: 198.55.111.5
Test IPv4 Asia-optimized: 204.152.218.25
Test IPv6: 2607:fcd0:0:a::2
Test File: http://repos.lax-noc.com/speedtests/100mb.bin

For those interested, QuadraNet Los Angeles Network consists of the following carriers:

GT-T/TiNet — Transit — 1 x 10Gbps
PCCW/BTN — Transit — 1 x 10Gbps
ChinaUnicom — Transit — 1 x 10Gbps
Cogent Communications — Transit — 1 x 10Gbps
Telia — Transit — 1 x 10Gbps
China Telecom — Transit — 1 x 10Gbps
AboveNet/Zayo — Transit — 1 x 10Gbps
Equinix Exchange — Peering — 1 x 10Gbps
Any2Exchange — Peering – 1 x 10Gbps
Host.net — Transit — 2 x 10Gbps
HiNet Taiwan — Peering — 1 x 10Gbps
Google Direct — Peering — 1x 10Gbps
Plus hundreds of additional network peers
]]>
https://lowendbox.com/blog/quadranet-intel-q9550-dedicated-server-w-ddos-protection-for-39-month/feed/ 9
AIT – $1 for first month on 512MB Xen VPS w/ UNLIMITED bandwidth in the USA! https://lowendbox.com/blog/ait-1-for-first-month-on-512mb-xen-vps-w-unlimited-bandwidth-in-the-usa/ https://lowendbox.com/blog/ait-1-for-first-month-on-512mb-xen-vps-w-unlimited-bandwidth-in-the-usa/#comments Mon, 23 Apr 2018 02:00:32 +0000 http://lowendbox.com/?p=16139 We are proud to welcome Xenia from AIT to LowEndBox as they have just sent in their first offer! They have been around since 1995 and own their own Datacenter in Fayetteville, North Carolina. We hope you love their introductory offer and hope to hear some positive feedback on something different from our usual offer(s).

In their own words:
“We are proud to offer affordable and reliable VPS hosting since 1995. At AIT, we love what we do and have control over every aspect of hosting process. We own and operate a 93,000 square foot data center with 24/7 dedicated security detail and video surveillance. We do provide 24/7 technical support as well as web-development and SEO services. Our main goal is to offer superior quality services at affordable prices. And today it’s even cheaper! You can get the first month of VPS hosting for $1.”

They are a registered corporation in the state of North Carolina (0393095). They accept Credit Card, PayPal and ACH (upon request) as payment methods. Please see the Legal Documents for further information before ordering.

Offer:

VPS Starter
– CPU: 1 Core
– Disk: 25GB SSD Space
– RAM: 512MB
– Bandwidth: UNLIMITED
– 1Gbps Uplink
– 1 x IPv4
– XEN Virtualization
– $4.99/mo (first month is just $1) OR $47.66/yr
[Order Now]

——————

Locations & Test Information

AIT Dataceter (Fayetteville, North Carolina)
Test IPv4: 216.117.143.252
Test file: http://216.117.143.252/1Gtest.bin

Hardware Specifications
– Intel Xeon E3-1270 to 2xIntel Xeon E5-2690v4
– 32GB RAM to 512GB RAM
– 2x1TB SSD to 12x1TB SSD
– Hardware Raid 1 to Hardware Raid 10
– 1Gbps uplink

]]>
https://lowendbox.com/blog/ait-1-for-first-month-on-512mb-xen-vps-w-unlimited-bandwidth-in-the-usa/feed/ 8
HappyBeeHost – 1GB OpenVZ VPS $2/month and more! https://lowendbox.com/blog/happybeehost-1gb-openvz-vps-2-month-and-more/ https://lowendbox.com/blog/happybeehost-1gb-openvz-vps-2-month-and-more/#comments Mon, 16 Apr 2018 02:00:50 +0000 http://lowendbox.com/?p=16121

Aaron from HappyBeeHost is back with a third offer for our readers. They are still in the OVH Datacenter in London and have plenty to offer! There is two coupon codes listed below with the products so be sure to use those to take advantage of their sale properly!

In their own words:

“HappyBeeHost is a leading provider of high-performance, low-cost web hosting solutions. We operate on a diverse range of flexible products in a highly secured environment coupled with at most customer care. We believe in being leaders rather than followers. Within a short span of time since we have stepped into the competitive web industry, we have left our traces through our competencies, methodologies and business ethics.

*We are providing this exclusive offer for our new SATA virtual server plans starting at just 2 USD/month (Use Coupon code HPYSALE for life time). Also, the SSD VPS range is starting from 5 USD/month (Use Coupon code LEB50 for life time)*”

They offer PayPal as payment methods. As always, please ensure you read their Terms of Service.

Offers:

VM-Starter:

– 1GB RAM
– 1GB vSwap
– 4x vCPU
– 30GB HDD Space
– 1TB Transfer
– 1Gbps Uplink
– 1x IPv4
– OpenVZ/SolusVM
– Coupon: HPYSALE
– $2/month
[Order Now]

VM-Economy:

– 2GB RAM
– 2GB vSwap
– 4x vCPU
– 40GB HDD space
– 2TB transfer
– 1Gbps uplink
– 1x IPv4
– OpenVZ/SolusVM
– Coupon: HPYSALE
– $5/month

(more after break)

VMSSD-Starter:

– 1GB RAM
– 1GB vSwap
– 4x vCPU
– 30GB SSD space
– 1TB transfer
– 1Gbps uplink
– 1x IPv4
– OpenVZ/SolusVM
– Coupon: LEB50
– $5/month

Locations & Test Information

Host Node:
CPU: Intel Xeon D-1520
RAM: 32GB DDR4 ECC 2133 MHz
DISKS: Software RAID1 2x2TB
TRAFFIC: 1Gbps uplink

Datacenter Name: OVH, London
Datacenter Location: United Kingdom/London
]]>
https://lowendbox.com/blog/happybeehost-1gb-openvz-vps-2-month-and-more/feed/ 26
HiFormance – 2GB OpenVZ for $10.00/yr or 2GB KVM VPS for $5/mo! https://lowendbox.com/blog/hiformance-2gb-openvz-for-10-00-yr-or-2gb-kvm-vps-for-5-mo/ https://lowendbox.com/blog/hiformance-2gb-openvz-for-10-00-yr-or-2gb-kvm-vps-for-5-mo/#comments Tue, 10 Apr 2018 18:00:23 +0000 http://lowendbox.com/?p=16079
Kyle over at HiFormance is back with more amazing deals for us, this time even better then the last. We have enjoyed the positive feedback from our readers in regards to HiFormance and we look forward to listing them more!

Here’s a note from the company

“Its been a great year so far for us at HiFormance and we appreciate the LowEndBox community for all your support and feedback! Since we launched last year and sustained exponential growth, we have expanded our service & support across the nation and continue to do so each day! We want to give our customers a unique experience with the highest level of performance and customer service. Signing up with HiFormance means becoming apart of a network of specialists and hosting enthusiasts that ultimately give you the best presence on the web. Welcome to HiFormance, how can we further enhance your hosting experience?”

Their WHOIS is public, they’re a registered LLC in the state of Wyoming (2017-000777425), they accept PayPal and Credit Cards, and you can find their legal docs at the following links:
**Pre-pay 3-years to get double CPU, memory, SSD or IP address!**

(Just submit a ticket and include the resource you choose to be doubled.)

Here’s the offer: 

OpenVZ 2018

  • 2GB RAM
  • 2 x vCores
  • 20GB Pure SSD
  • 2TB Bandwidth
  • 1Gbps Uplink
  • 1 x IPv4
  • OpenVZ (SolusVM)
  • Linux Only
  • $10/yr
  • [ORDER]
KVM 2018

  • 2GB RAM
  • 2 x Cores
  • 40GB Pure SSD
  • 2TB Bandwidth
  • 1Gbps Uplink
  • 1 x IPv4
  • KVM (SolusVM)
  • Windows & Linux
  • $5/mo
  • [ORDER]

Network Info: 

Buffalo, NY – 107.175.18.3 – Looking Glass
Chicago, IL – 192.3.19.3 – Looking Glass
Dallas, TX – 107.173.126.3 – Looking Glass
Los Angeles, CA – 107.175.217.3 – Looking Glass
Atlanta, GA – 206.217.143.125 – Looking Glass

Host Node Specifications:

2x Xeon E5-2660 through E5-2690
128GB+ DDR3/DDR4
8 X 1TB SSD
Hardware RAID10
1Gbps Uplink

Please let us know if you guys have any questions, comments or concerns in the field below and enjoy!

 

]]> https://lowendbox.com/blog/hiformance-2gb-openvz-for-10-00-yr-or-2gb-kvm-vps-for-5-mo/feed/ 88 Post-Easter Sales @ LowEndTalk still on going! https://lowendbox.com/blog/post-easter-sales-lowendtalk-still-on-going/ https://lowendbox.com/blog/post-easter-sales-lowendtalk-still-on-going/#respond Wed, 04 Apr 2018 22:00:04 +0000 http://lowendbox.com/?p=16046

We wanted to make sure our readers were aware of the hot sales we have going on over at LowEndTalk still from the Easter sales posted over the weekend! Check them out below and let us know if you have any questions/comments:

# Time4VPS – @time4vps
**One-time 50% on all products** – [LET Post] / [Order Link] (Coupon: ZAXO46LQ)


# Hostens – @hostens
**One-time 50% on all products** – [LET Post] / [Order Link] (Coupon: I0LXE4ZH)


# InceptionHosting – @AnthonySmith
**€6/m UK KVM** – [LET Post] / [Order Link] (Coupon: YK0EHQJ2M7)
2 CPU | 4G RAM | 20G NVMe | 1 IPv4 | /64 IPv6 | 4T BW | 1Gbps
**Free 2nd IP for order before Sunday!**
DDOS Protected + Daily Backup


# First Root – @FR_Michael
**€12.1/m KVM ex VAT (One-time, limited 30)** – [LET Post] / [Order Link]
(Coupon: 8G48-CFKW-WWVJ-T6GJ)
4 CPU | 4G RAM | 300G R-10 | 1 IPv4 | 1 IPv6 | 10T BW | 1Gbps
**Special pricing of €8.06/m for first 10 customer!** (Coupon: AM7J-KR4S-32NL-P4KJ)
F-Com Control Panel


# FlowVPS – @trewq
**$10 AUD/m Australia KVM** – [LET Post] / [Order Link]
2 CPU | 4G RAM | 30G NVMe | 1 IPv4 | /64 IPv6 | 750G BW
**Special pricing for longer period!** [$25 AUD/qtr] or [$85 AUD/yr]

**$5.5 AUD/m Australia KVM** – [LET Post] / [Order Link]
2 CPU | 2G RAM | 15G NVMe | 1 IPv4 | /64 IPv6 | 500G BW
**Special pricing for longer period!** [$14.5 AUD/qtr]


# WebProject – @WebProject
**£5/m Xen** – [LET Post] / [Order Link]
4 CPU | 4G RAM | 200G HDD | 1 IPv4 | /112 IPv6 | 5T BW
Anti-DDOS Protection + 14 Day Money Back


# ExtraVM – @MikeA
**One-time 60% on OVZ VPS (1st month / Quarter)** – [LET Post] / [Order Link]
(Coupon: 34LCVSH5ED)

**One-time 25% on any VPS (1st month)** – [LET Post] / [Order Link]
(Coupon: 25SWITCH)


# FTPIT – @komputerking
**$2/m US 512M OVZ** – [LET Post] / [Order Link]
2 CPU | 512M RAM | 15G SSD | 1 IPv4 | 2T BW
Location: Atlanta, Fremont, Los Angeles, New York


# BudgetNode – @Ishaq
**$36/yr Utah KVM Storage (Limited)** – [LET Post] / [Order Link]
1 CPU | 512M RAM | 500G R-6 | 1 IPv4 | /64 IPv6 | 2T BW | 1Gbps


# VirMach – @VirMach
**Existing customer only** – [LET Post] / [Order Link]
(Read the LET post above to know how to apply the coupon)

**30% off KVM Storage (Pre-order)** (Coupon: 30offeaster)
**$4.9/m** | 1 CPU | 1G RAM | 1T R-10 | 1 IPv4 | 10T BW | 10Gbps
**$9.8/m** | 2 CPU | 2G RAM | 2T R-10 | 1 IPv4 | 20T BW | 10Gbps
Location: Buffalo

**FREE** 1 year of Shared-1 hosting package (Coupon: literallyfree)
**$10 off for E3-HD dedicated server** (Coupon: 10offdedieaster)
**$10/yr for Proxy/VPN service (No IP change allowed)** (Coupon: eastercheapvpn)


# GulloHosting – @Cam
**$8/yr NAT OVZ Pennsylvania** – [LET Post] / [Order Link]
1/2 CPU | 1G RAM | 3G Disk | 1 NAT IPv4 (20 Ports) | /80 IPv6 | 0.5T BW | 1Gbps


# HostSolutions – @cociu
**50% off Romania Dedicated server (Limited 75)** – [LET Post] / [Order Link]
(Coupon: 3AYKCG8T2D)
**€14.5/m** | 2 x L5630 | 4G RAM | 146G SAS | 1 IPv4 | UL BW | 100Mbps | KVM Included
**€19.5/m** | 2 x L5630 | 8G RAM | 146G SAS | 1 IPv4 | 5T BW | 1Gbps | KVM Included
**€22.5/m** | 2 x L5630 | 16G RAM | 146G SAS | 1 IPv4 | 10T BW | 1Gbps | KVM Included

**50% off Romania Dedicated server (Limited 75)** – [LET Post] / [Order Link]
(Coupon: UNLYU7S0S0)


# IOFlood – @funkywizard
**$89/m Dedicated Server** – [LET Post] / [Order Link]
2 x L5639 | 72G RAM | 4x3T HDD | 5 IPv4 | 20T Out / UL In BW | 1Gbps | Hardware RAID
Upgrades available (More info by checking out LET post)

**$99/m Dedicated Server** – [LET Post] / [Order Link]
2 x E5-2660v1 | 64G RAM | 400G SSD | 5 IPv4 | 20T Out / UL In BW | 1Gbps | Hardware RAID
Upgrades available (More info by checking out LET post)


# LiteServer – @LiteServer

**30% off OVZ/KVM VPS** – [LET Post] / [Order Link] (Coupon: 30SSDEGGS)
**€11.2/yr** | 1 CPU | 128M RAM | 15G SSD | 1 IPv4 | 1T BW | OVZ
**€11.2/yr** | 1 CPU | 128M RAM | 5G SSD | 1 IPv4 | 2T BW | OVZ
**€5.25/qtr** | 1 CPU | 256M RAM | 25G SSD | 1 IPv4 | 2T BW | KVM
**€5.25/qtr** | 1 CPU | 256M RAM | 5G SSD | 1 IPv4 | 4T BW | KVM
More plans available by checking out LET post


# WebSound – @WSCallum

**FREE** 6 months UK Webhosting (Limited 25) – [LET Post] / [Order Link]
5G SSD | 150G BW | cPanel | DDOS Protected

**£11.00 LA VPS** – 50% off annually – [Order Link]
1 CPU | 256M RAM | 15G Disk | 1 IPv4 | /64 IPv6 | 1T BW

**£0.75/m + £1.8/m LA VPS** – 75% first month + 40% off recurring – [Order Link]
2 CPU | 512M RAM | 25G Disk | 1 IPv4 | /64 IPv6 | 2T BW

**£1.25/m + £3/m LA VPS** – 75% first month + 40% off recurring – [Order Link]
2 CPU | 1G RAM | 50G Disk | 1 IPv4 | /64 IPv6 | 3T BW


# Clouvider – @Clouvider

**UK Dedicated server as low as £20/m!** – [LET Post] / [Order Link]
**£35/m** | E3-1240v3 | 16G RAM | 2x1T HDD | 30T BW | 1Gbps | DDOS Protection
**£59/m** | E3-1241v3 | 32G RAM | 2x512G SSD | 30T BW | 1Gbps | DDOS Protection
**£40/m** | E3-1240v5 | 16G RAM | 2x1T HDD | 30T BW | 1Gbps | DDOS Protection
**£40/m** | E3-1270v5 | 16G RAM | 240G SSD | 30T BW | 1Gbps | DDOS Protection
**£42/m** | E3-1270v6 | 16G RAM | 256G NVMe | 30T BW | 1Gbps | DDOS Protection
**£45/m** | E3-1270v5 | 16G RAM | 4x240G SSD | 30T BW | 1Gbps | DDOS Protection
**£45/m** | E3-1270v5 | 16G RAM | 1x450G NVMe + 1T HDD | 30T BW | 1Gbps | DDOS Protection
**£45/m** | E3-1270v6 | 16G RAM | 1x450G NVMe + 1T HDD | 30T BW | 1Gbps | DDOS Protection | 40% more off
**£79/m** | E3-1270v6 | 16G RAM | 240G SSD | 30T BW | 1Gbps | DDOS Protection | 40% more off
Use coupon code **5I086NUUCYCE** for **extra 40% discount** on the last 2 servers (Limited to 20 orders only)


# VMHaus – @vmhaus

**Topup $30 and get $10 extra** – [LET Post] / [Order Link]


# HostHongKong – @randvegeta
**$199/m Dedicated Server** (Setup $50/m) – [LET Post] (PM for order link)
2 x E5-2660 (or similar) | 64G RAM | 4x500G or 2x1T SSD | /28 IPv4 | /60 IPv6 | 5T BW | 1Gbps
**Direct China Route** (Setup on Mid April)

**$35/m HK KVM VPS** – [LET Post] (PM for order link)
2 CPU | 4G RAM | 100G SSD R-10 | 1 IPv4 | /64 IPv6 | 1T BW
**Direct China Route**


# Ho-ost – @Hoost
**£17.50/yr Chicago KVM VPS** – [LET Post] / [Order Link] (Coupon: EasterVPS)
1 CPU | 1G RAM | 25G HDD | 1 IPv4 | 1T BW


# MXroute.io – @MikePT
**Yearly MailChannels SMTP Relay + Spam filtering** – [LET Post] / [Order Link]
**€20/yr** | 2k email per month
**€30/yr** | 5k email per month
**€40/yr** | 10k email per month


# BunnyCDN – @BunnySpeed
**FREE** $5 credits valid for 3 months – [LET Post] / [Order Link]
(Coupon: HAPPYEASTER-2018)
**25% recharge bonus** starting on 1 April

* CPU and Bandwidth for VPS are shared except Dedicated servers
* If the price doesn’t match, that means the coupon have used up or exceeded number of orders

]]>
https://lowendbox.com/blog/post-easter-sales-lowendtalk-still-on-going/feed/ 0
FlowVPS – 4GB KVM for ~$65/year and more! https://lowendbox.com/blog/flowvps-4gb-kvm-for-46-24-year-and-more/ https://lowendbox.com/blog/flowvps-4gb-kvm-for-46-24-year-and-more/#comments Mon, 02 Apr 2018 10:00:47 +0000 http://lowendbox.com/?p=15980

Brendan from FlowVPS has sent over their first offer to LowEndBox. We are happy to list them for the first time and look forward to all of the positive feedback we expect from our readers! Brendan is an active member of our LowEndTalk community as well.

They’re a registered company in Australia (#99 617 970 788). They accept PayPal and Stripe (including Apply Pay). You can find their ToS here.

In their own words: 

FlowVPS is an Australian based company selling services in Melbourne. We aim to offer low cost, high quality services, this is why we exclusively offer KVM with NVMe dries.

Here’s the offer: 

VPS-1

  • 2GB RAM
  • 2x vCPU
  • 15GB NVMe Disk
  • 500GB Bandwidth
  • 1Gbps Uplink
  • 1x IPv4
  • /64 IPv6
  • KVM
  • $5.50 AUD/mo ($4.22 USD/mo)
  • [ORDER]
VPS-2

  • 4GB RAM
  • 2x vCPU
  • 30GB NVMe Disk
  • 500GB Bandwidth
  • 1Gbps Uplink
  • 1x IPv4
  • /64 IPv6
  • KVM
  • $85 AUD/yr ($65.00 USD/yr)
  • [ORDER]

Network Info:

Datacenter Name – Equinix ME1 – Melbourne, Victoria, Australia
Test IPv4: 103.217.254.100
Test IPv6: 2402:7340:1:1::2
Looking glass: http://lg.flowvps.com

Please let us know if you have any questions/comments/concerns.

]]>
https://lowendbox.com/blog/flowvps-4gb-kvm-for-46-24-year-and-more/feed/ 7
VikingLayer – 2GB KVM for $4.93/mo in Dallas! https://lowendbox.com/blog/vikinglayer-2gb-kvm-for-4-93-mo-in-dallas/ https://lowendbox.com/blog/vikinglayer-2gb-kvm-for-4-93-mo-in-dallas/#comments Tue, 27 Mar 2018 22:00:21 +0000 http://lowendbox.com/?p=15959

Radoslav is back from VikingLayer with a really great offer for us to share with everyone. The VikingLayer brand is owned by drServer.net and these guys have been around since 2013. They have told us that they have done a lot of work behind the scenes and we are happy to be listing them again here based on previous feedback!

Their WHOIS is public and you can find their ToS here and their AUP here.

They accept PayPal and Bitcoin.

In their own words:

“We have done solid investments in purchasing hardware and upgrading our network. The services now are on fully owned hardware, ensuring your data protection. Also, this is an exclusive offer, that first comes to LowEndBox after a period of silence from us.”

Offer

  • 4 xvCPU
  • 2GB RAM
  • 45GB SSD Disk
  • 2TB Bandwidth
  • 1 IPv4
  • /64 IPv6
  • KVM/Virtualizor
  • $4.93/month ~~ 4€/month
  • $59.12 ~~ 48€/year
  • [Order Now]

Node Specifications:

– Intel Xeon E5-2670
– 128GB RAM
– 6 x 1TB SSD’ss
– Hardware RAID-10
– 1Gbps shared uplink

Network info:

Dallas, Incero

Test IPv4: 192.138.210.63
Test IPv6: 2604:0880:0052:0000:0000:0000:01e5:657b
]]>
https://lowendbox.com/blog/vikinglayer-2gb-kvm-for-4-93-mo-in-dallas/feed/ 8
VPSnet – SSD VPS plans starting @ $2.10/mo! https://lowendbox.com/blog/vpsnet-ssd-vps-plans-starting-2-10-mo/ https://lowendbox.com/blog/vpsnet-ssd-vps-plans-starting-2-10-mo/#comments Sat, 24 Mar 2018 20:00:30 +0000 http://lowendbox.com/?p=15908

Anthony from VPSnet has sent over their first offer to LowEndBox! They’ve been around since 2007 and are an active member on our LowEndTalk community as well.

They’re a registered company in Lithuania (#302482484). They accept PayPal, Credit Cards, WebMoney, CashU, PaySera, Bank, SMS and many others as methods of payment. You can find their ToS/Legal Documents here.

In their own words: 

VPSnet.com – offers reliable, affordable servers and has been specializing in the field of data centre services since 2007.
By choosing the services of VPSnet, customers both reduce their expenditures and save time.

Running our own data centre, VPSnet controls the total service provision process, so it can both provide complex services and ensure high service availability for a competitive price. Flexible solutions, long-term experience and a constant improvement process – this is why You should be considered for choosing us.

At this time VPSnet.com has significantly increased VPS resources.
From now on all VPS servers will have up to double resources for the same price:

Here’s the offer: 

VPS-1

  • 1GB RAM
  • 2Ghz/1 core CPU
  • 10GB SSD
  • 50Mbps Uplink
  • Unlimited Traffic
  • Daily Backups
  • 1x IPv4
  • /112 (65,536 IPs) IPv6
  • $2.10/month
  • [Click here to get started]
VPS-2

  • 2GB RAM
  • 3Ghz/1 core CPU
  • 15GB SSD
  • 80Mbps Uplink
  • Unlimited Traffic
  • Daily Backups
  • 1x IPv4
  • /112 (65,536 IPs) IPv6
  • $3.10/month
  • [Click here to get started]
VPS-3

  • 3GB RAM
  • 4Ghz/2 core CPU
  • 20GB SSD
  • 100Mbps Uplink
  • Unlimited Traffic
  • Daily Backups
  • 1x IPv4
  • /112 (65,536 IPs) IPv6
  • $4.19/month
  • [Click here to get started]
VPS-4

  • 4GB RAM
  • 5Ghz/2 core CPU
  • 30GB SSD
  • 100Mbps Uplink
  • Unlimited Traffic
  • Daily Backups
  • 1x IPv4
  • /112 (65,536 IPs) IPv6
  • $5.77/month
  • [Click here to get started]

Network Info:

Datacenter Name – Vilnius
Lithuania
Test IPv4: 91.211.244.3
Test IPv6: 2a05:7cc0::3

Host node specifications:
– Intel Xeon E5-1650v2/v3/v4 CPU
– 64/128GB RAM
– 2x 1TB NVME/SSD
– Hardware RAID-1/10
– 1/10Gbps Uplink
]]>
https://lowendbox.com/blog/vpsnet-ssd-vps-plans-starting-2-10-mo/feed/ 10
NFP Hosting – March Madness Deals in Los Angeles and New York starting @ $1/yr! https://lowendbox.com/blog/nfp-hosting-march-madness-deals-in-los-angeles-and-new-york-starting-1-mo/ https://lowendbox.com/blog/nfp-hosting-march-madness-deals-in-los-angeles-and-new-york-starting-1-mo/#comments Fri, 16 Mar 2018 18:00:18 +0000 http://lowendbox.com/?p=15842 Hey everyone, Nathan over @ NFP Hosting has some awesome deals to share with us today and are happy to advertise their latest expansion to New York! They were founded back in 2006, their WHOIS is public, and you can find their ToS/Legal Docs here. They accept PayPal, Credit Cards, Alipay and Bitcoin.

More about the company: 

“NFPHosting.com was founded in 2006 as an e-commerce hosting provider after seeing the lack of hosts who can deliver quality. Throughout the years of learning the ins and outs of running a hosting company, and seeing the opportunities to expand in the marketplace, NFP Hosting throughout the years added additional services to serve a wider variety of markets. NFP Hosting today offers everything the basic consumer looking to start a website may need, all the way up to the advanced (technical) user looking to set up a cluster of servers. At NFP Hosting, there is no waiting around. Services are instantly provisioned, and 24/7 customer support comes standard with our plans. No compromises. No excuses. It’s really as simple as that.
We are the provider for the people. Our motto is: Premium Solutions. Friendly People. Service Delivered. This means always going above and beyond, and going the extra mile. Hence why customers love NFP Hosting. Real results, real performance!
These offers are special because these offer the highest levels of discounts that we have granted yet, and we have created a variety of different promotions that are exclusive to LowEndBox. “

HERE’S THE OFFER:

1GB RAM – LEB VPS Special

– 1GB RAM
– 1x CPU Core
– 15GB HDD Space
– 2.5TB Bandwidth
– 100Mbps Network Port
– 1x IPv4
– Virtualizor/OpenVZ
– $9/year

ADDITIONAL OFFERS/NETWORK INFO: 


2GB RAM – LEB VPS Special

– 2GB RAM
– 2x CPU Core
– 40GB HDD Space
– 3TB Bandwidth
– 100Mbps Network Port
– 1x IPv4
– Virtualizor/OpenVZ
– $18/year

3GB RAM – LEB VPS Special

– 3GB RAM
– 2x CPU Core
– 60GB HDD Space
– 6TB Bandwidth
– 100Mbps Network Port
– 1x IPv4
– Virtualizor/OpenVZ
– $18/semi-annually OR $29/year

(Below shared/reseller offers are provisioned in our Los Angeles location only. New York coming soon!)

Shared Hosting Special

– 20 GB Disk Space
– 1TB Transfer
– Up To 3 Addon Domains
– Unlimited MySQL Databases
– Free Migration
– cPanel Control Panel
– Softaculous One-Click Easy Installer
– DDoS Protected Servers
– $1/year

Reseller Hosting Special

– 100 GB Disk Space
– 2TB Transfer
– Create Unlimited Accounts
– Unlimited MySQL Databases
– Free Migration
– cPanel/WHM Control Panel
– Softaculous One-Click Easy Installer
– DDoS Protected Servers
– $5/year

Master Reseller Special

– 100 GB Disk Space
– 2TB Transfer
– Create Unlimited Shared & Reseller Hosting Accounts
– Unlimited MySQL Databases
– Free Migration
– cPanel/WHM Control Panel
– WHMReseller Panel
– Softaculous One-Click Easy Installer
– DDoS Protected Servers
– $12/year

NETWORKS/DATACENTERS
ColoCrossing – Los Angeles, CA
Test IPv4: 107.175.180.6
Test file: http://lg.la.colocrossing.com/100MB.test

ColoCrossing – Buffalo, NY
Test IPv4: 192.3.180.103
Shared/Reseller Host Node Specifications
– Dual Intel Xeon Processors
– 64GB RAM
– 4x 1TB HDD’s
– LSI 9271 Hardware RAID
– 1Gbps Uplinks
VPS Host Node Specifications
– Intel Xeon E3/E5’s
– 32 to 64 GB RAM
– 4x 1TB HDD’s
– LSI 9271 Hardware RAID
– 1Gbps Uplinks

 

]]> https://lowendbox.com/blog/nfp-hosting-march-madness-deals-in-los-angeles-and-new-york-starting-1-mo/feed/ 222 LoveServers – KVM & OpenVZ SSD Specials + Storage Plans – Manchester, UK https://lowendbox.com/blog/loveservers-kvm-openvz-ssd-vps-birthday-offer-manchester-uk-2/ https://lowendbox.com/blog/loveservers-kvm-openvz-ssd-vps-birthday-offer-manchester-uk-2/#comments Tue, 13 Mar 2018 03:00:02 +0000 http://lowendbox.com/?p=15797 Jack is back from LoveServers and sent in this offer, it has been over a year since their last offer and they are happy to present us with their new storage product line!

In their own words:
LoveServers started in October 2015, Fully owned hardware, Network blend behind us at iomart is Zayo, Cogent and peering at London and Manchester Internet exchange. LoveServers Ltd is a registered company in England & Wales with registration number 09835683. They own all of their equipment and have physical access to address any hardware issues should they arise.

They offer ASN Sponsorship, IP leasing and free BGP sessions on their quarterly KVM deal.

They accept PayPal and Stripe (Credit Cards) as payment methods. Please see the ToS for further information before ordering.

Offers:

STOR250 – KVM
– CPU: 1 Core
– Disk: 250GB SATA SAN Backed Storage
– RAM: 512MB
– Bandwidth: 1TB
– IPv4: 1
– IPv6: /64
– £4/mo ($6/mo)
(Stackable) 500GB would be £8 for example.
[Order Now]


——————

2GB KVM Special
– 2GB RAM
– 1 x vCPU
– 30GB SSD
– 2TB Transfer
– 1Gbps uplink
– 1 x IPv4
– /64 IPv6
– KVM/SolusVM
– $6/mo
– $18/quarter
[Order Now]

——————

3GB OpenVZ Special
– 3GB RAM
– 1 x vCPU
– 20GB SSD
– 1TB Transfer
– 1Gbps uplink
– 1 x IPv4
– /64 IPv6
– OpenVZ/SolusVM
– £4/mo ($6/mo)
– £12/quarter ($18/quarter)
[Order Now]

——————

Yearly OpenVZ Special
– 512MB RAM
– 1x vCPU
– 20GB SSD
– 1TB transfer
– 1Gbps uplink
– 1x IPv4
– /64 IPv6
– OpenVZ
– £15/year ($20/year)
[Order Now]

——————

Locations & Test Information

iomart (Manchester, United Kingdom)
Test IPv4: 185.145.46.3
Test IPv6: 2a07:4580:b0d:1::dead:beef
Test file: http://lg.loveservers.com/100MB.test
Looking glass: http://lg.loveservers.com/

More info about BGP session: HERE
More info about DDoS Mitigation – HERE

]]>
https://lowendbox.com/blog/loveservers-kvm-openvz-ssd-vps-birthday-offer-manchester-uk-2/feed/ 4
================================================ FILE: api/test/data/feed/malformed-hackernews ================================================ Hacker Newshtpt://:s://news.ycombinator.com/Links for the intellectually curious, ranked by readers.Gitea – Alternative to GitLab and GitHubhtpt:/:s://gitea.ioWed, 6 Jun 2018 08:09:18 +0000https://news.ycombinator.com/item?id=17245246Comments]]>AMD Zen 2 Update: 7nm EPYC in Labs Now, Launching in 2019htpt:/:s://www.anandtech.com/show/12912/amd-zen-2-update-7nm-epyc-in-labs-now-launching-in-2019Wed, 6 Jun 2018 07:26:37 +0000https://news.ycombinator.com/item?id=17245025Comments]]>Microsoft has sunk a data centre in the sea to investigate energy efficiencyWhat is love?Wed, 6 Jun 2018 05:19:58 +0000https://news.ycombinator.com/item?id=17244525Comments]]>Facebook confirms data-sharing agreements with Chinese firms/Wed, 6 Jun 2018 08:54:02 +0000https://news.ycombinator.com/item?id=17245458Comments]]>State of Washington sues Facebook and Google over failure to disclose spendinghttps://techcrunch.com/2018/06/05/washington-sues-facebook-and-google-over-failure-to-disclose-political-ad-spending/Tue, 5 Jun 2018 21:30:16 +0000https://news.ycombinator.com/item?id=17242270Comments]]>BuildZoom (a better way to remodel) is hiring a Data Engineerfile:///home/malformed/file.jpgWed, 6 Jun 2018 09:45:39 +0000https://news.ycombinator.com/item?id=17245653Comments]]>Seikilos epitaphhttps://en.wikipedia.org/wiki/Seikilos_epitaphWed, 6 Jun 2018 03:31:04 +0000https://news.ycombinator.com/item?id=17244161Comments]]>AMD Reveals Threadripper 2: Up to 32 Cores, 250W, X399 Refreshhttps://www.anandtech.com/show/12906/amd-reveals-threadripper-2-up-to-32-cores-250w-x399-refreshWed, 6 Jun 2018 03:12:37 +0000https://news.ycombinator.com/item?id=17244089Comments]]>Archive.org and California to start a data sharing and preservation projecthttps://blog.archive.org/2018/06/05/internet-archive-code-for-science-and-society-and-california-digital-library-to-partner-on-a-data-sharing-and-preservation-pilot-project/Tue, 5 Jun 2018 19:31:03 +0000https://news.ycombinator.com/item?id=17241198Comments]]>Caltech glassblower's retirement has scientists sighing (2016)http://hey:now@beta.latimes.com/local/education/la-me-caltech-glassblower-20160613-snap-story.htmlTue, 5 Jun 2018 18:45:36 +0000https://news.ycombinator.com/item?id=17240776Comments]]>Show HN: LogicEmu – Online Logic Simulatorhttp://lodev.org/logicemuTue, 5 Jun 2018 22:12:12 +0000https://news.ycombinator.com/item?id=17242528Comments]]>Australia drafts laws forcing Facebook and Google to reveal encrypted datahttp://webmail.company.com/owa/calendar/firstName.Name@company.com/Calendar/calendar.htmlWed, 6 Jun 2018 07:28:15 +0000https://news.ycombinator.com/item?id=17245032Comments]]>How to be a Manager – A step-by-step guide to leading a teamhttps://getweeklyupdate.com/manager-guideTue, 5 Jun 2018 14:48:19 +0000https://news.ycombinator.com/item?id=17238135Comments]]>Show HN: Transity – Plain Text AccountingTue, 5 Jun 2018 21:14:23 +0000https://news.ycombinator.com/item?id=17242136Comments]]>Open Source License Helper Toolhttps://choosealicense.com/Tue, 5 Jun 2018 21:26:29 +0000https://news.ycombinator.com/item?id=17242238Comments]]>ServiceFabric: a distributed platform for building microservices in the cloudhttps://blog.acolyer.org/2018/06/05/servicefabric-a-distributed-platform-for-building-microservices-in-the-cloud/Tue, 5 Jun 2018 21:17:47 +0000https://news.ycombinator.com/item?id=17242160Comments]]>Show HN: Grep with colours written in Gohttps://github.com/arsham/blushTue, 5 Jun 2018 12:23:35 +0000https://news.ycombinator.com/item?id=17236967![CDATA[Comments]]>U.S. lawmaker: 'Sure looks like Zuckerberg lied to Congress'����������������������������������������������������������������<title><link>���������������������������������������� ================================================ FILE: api/test/data/feed/maxwell-land-surveying.com ================================================ <?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" > <channel> <title>Maxwell Land Surveying https://maxwell-land-surveying.com Surveying For Over 50 Years Wed, 03 Jan 2018 01:58:57 +0000 en-US hourly 1 https://wordpress.org/?v=4.9.6 Using GPS to Track You – Is It Real? https://maxwell-land-surveying.com/gps-track-real-2 https://maxwell-land-surveying.com/gps-track-real-2#comments Mon, 08 Oct 2012 10:25:49 +0000 http://maxwell-land-surveying.com/?p=682 Continue reading ]]> https://maxwell-land-surveying.com/gps-track-real-2/feed 1 Land Surveying – How Do I Know if I Need A Land Survey? https://maxwell-land-surveying.com/land-surveying-land-survey Sat, 15 Sep 2012 06:00:36 +0000 http://maxwell-land-surveying.com/?p=670 Continue reading ]]> The Land Surveying Process https://maxwell-land-surveying.com/land-surveying-process Thu, 09 Aug 2012 12:13:02 +0000 http://maxwell-land-surveying.com/?p=634 Continue reading ]]> Land Surveying: The “Pincushion” Effect https://maxwell-land-surveying.com/land-surveying-pincushion-effect Wed, 16 May 2012 13:06:06 +0000 http://maxwell-land-surveying.com/?p=541 Continue reading ]]> ================================================ FILE: api/test/data/feed/medium-technology ================================================ <![CDATA[Handpicked stories about Technology on Medium]]> https://medium.com/topic/technology?source=rss-------8-----------------technology https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png Handpicked stories about Technology on Medium https://medium.com/topic/technology?source=rss-------8-----------------technology Medium Wed, 06 Jun 2018 10:13:08 GMT <![CDATA[Apple Wants Its Phones Back]]>

Apple dropped a bomb at their global developer conference: It’s stepping in to curb phone addiction. This is a big blow to the ad-driven…

]]> https://shift.newco.co/apple-wants-its-phones-back-d0d77142c7d?source=rss-------8-----------------technology https://medium.com/p/d0d77142c7d Tue, 05 Jun 2018 18:07:08 GMT 2018-06-05T18:07:08.095Z <![CDATA[The Apple(-ized) generation]]>

This is one of the series of stories in which I explore how the era of tech refashioned capitalism.

]]> https://medium.com/@jurajsalapa/the-apple-ized-generation-ffb20e788c95?source=rss-------8-----------------technology https://medium.com/p/ffb20e788c95 Tue, 05 Jun 2018 16:37:39 GMT 2018-06-05T16:40:28.590Z <![CDATA[AI Risks Replicating Tech’s Ethnic Minority Bias Across Business]]>

Diverse workforce essential to combat new danger of ‘bias in, bias out’

]]> https://medium.com/financial-times/ai-risks-replicating-techs-ethnic-minority-bias-across-business-304225e8cbc6?source=rss-------8-----------------technology https://medium.com/p/304225e8cbc6 Tue, 05 Jun 2018 21:16:58 GMT 2018-06-05T21:16:58.517Z <![CDATA[Apple is taking on Snapchat ]]>

Apple’s annual massive launch party, I mean, developer conference kicked off yesterday, with huuuuuge updates to every Apple operating…

]]> https://blog.producthunt.com/apple-is-taking-on-snapchat-b54bb2b9a77b?source=rss-------8-----------------technology https://medium.com/p/b54bb2b9a77b Tue, 05 Jun 2018 14:39:08 GMT 2018-06-05T14:39:08.117Z
<![CDATA[Power consumption of Stadiums]]>

The 11th season of IPL is over and most of us are now bored by our screens. This is not new that we watch cricket, in more sense, a sport…

]]> https://medium.com/@zodhyatech/power-consumption-of-stadiums-55aff6bb86cf?source=rss-------8-----------------technology https://medium.com/p/55aff6bb86cf Sun, 03 Jun 2018 03:31:18 GMT 2018-06-03T03:31:18.089Z <![CDATA[A Glass of Ice Water in the Desert]]>

Thoughts on WWDC 2018

]]> https://500ish.com/a-glass-of-ice-water-in-the-desert-859febd2e0f7?source=rss-------8-----------------technology https://medium.com/p/859febd2e0f7 Tue, 05 Jun 2018 19:50:22 GMT 2018-06-05T19:51:12.241Z
<![CDATA[Disruptive Forces: Machine Learning as Societal Disruptor (2016)]]>

Presented by Steven Rahman to The InterAction Council, Baku Azerbaijan 2016 as part of discussions focussing on the future of work and…

]]> https://medium.com/@stevenrahman/disruptive-forces-machine-learning-as-societal-disruptor-2016-859e02951d7a?source=rss-------8-----------------technology https://medium.com/p/859e02951d7a Sun, 03 Jun 2018 01:55:48 GMT 2018-06-03T22:20:56.972Z <![CDATA[This iPhone Feature Can Radically Improve Your Life And Relationships]]>

“When you change the way you look at things, the things you look at change.” — Dr. Wayne Dyer

]]> https://medium.com/thrive-global/this-iphone-feature-can-radically-improve-your-life-and-relationships-d7a4134cb425?source=rss-------8-----------------technology https://medium.com/p/d7a4134cb425 Mon, 04 Jun 2018 13:26:54 GMT 2018-06-06T00:43:56.444Z <![CDATA[The Happy]]>

A comic about connection and loneliness

]]> https://medium.com/spiralbound/the-happy-848723888fa0?source=rss-------8-----------------technology https://medium.com/p/848723888fa0 Tue, 05 Jun 2018 13:01:03 GMT 2018-06-05T13:01:03.472Z <![CDATA[I just want a good TV picture]]>

You probably own a TV, right? Then I am pretty sure that the picture you are getting is pretty shitty. Why? Because nowadays it seems it…

]]> https://medium.com/@nicolas.neubauer/i-just-want-to-good-tv-picture-8826cb815b30?source=rss-------8-----------------technology https://medium.com/p/8826cb815b30 Sat, 02 Jun 2018 17:43:43 GMT 2018-06-03T13:54:25.726Z ================================================ FILE: api/test/data/feed/perezhilton ================================================ PerezHiltonhttps://perezhilton.comPerez Hilton dishes up the juiciest celebrity gossip on all your favorite stars, from Justin Bieber to Kim Kardashian. Are you up-to-date on Hollywood's latest scandal?!Wed, 06 Jun 2018 10:54:02 GMThttp://wordpress.org/?v=2.0.10enKate Spade's Sister Says The Designer Suffered From Years Of Mental Illness; Reported Suicide 'Not Unexpected'http://perezhilton.com/2018-06-05-kate-spade-reta-saffo-sister-mental-illness-reported-suicidehttp://perezhilton.com/2018-06-05-kate-spade-reta-saffo-sister-mental-illness-reported-suicide#respondWed, 06 Jun 2018 03:26:00 +0000Perez Hiltonhttp://perezhilton.com/2018-06-05-kate-spade-reta-saffo-sister-mental-illness-reported-suicideIn an email to the Kansas City Star on Tuesday, Kate Spade's older sister -- Reta Saffo -- says the handbag designer suffered from mental illness for the last three or four years, and says her reported suicide "was not unexpected by me."

As we reported, the fashion legend was found in her New York apartment by a housekeeper at 10:30 a.m. EST, after she reportedly hung herself. The 55-year-old was pronounced dead at the scene.

Related: Stars We Lost In 2018

According to Saffo, Spade reportedly self-medicated with alcohol, and seemed fixated on Robin Williams' suicide by hanging when it happened in August 2014. She told the newspaper:

"I think there was a plan even as far back as then."

After the publication posted a story about Spade's death, Saffo emailed the Star saying they misspelled Kate's childhood nickname, Katy.

Although she was asked to do a phone interview, Saffo declined because she reportedly took a sedative. (She noted that her husband is a medical doctor.)

In the email, Saffo said she tried to get Kate into treatment, but the designer "chickened out" as she was worried with how her hospitalization might affect the image of her brand.

"I will say this was not unexpected by me. I'd flown out to Napa and NYC several times in the past 3-4 years to help her to get the treatment she needed (inpatient hospitalization). She was always a very excitable little girl and I felt all the stress/pressure of her brand (KS) may have flipped the switch where she eventually became full-on manic depressive... I'd come so VERY close to getting her to go in for treatment (to the same place Catherine Zeta-Jones went for her successful bipolar treatment program). I'd spoken with them on the phone (not telling them exactly who the patient would be). They agreed to fly in and talk with her and take her with them to the treatment center... She was all set to go — but then chickened out by morning. I even said I (would) go with her and be a 'patient' too (she liked that idea) I said we could talk about it all — our childhood, etc. That I could help her fill in any blanks she might have... That seemed to make her more comfortable, and we'd get sooo close to packing her bags, but — in the end, the 'image' of her brand (happy-go-lucky Kate Spade) was more important for her to keep up. She was definitely worried about what people would say if they found out."'

Although her husband Andy Spade reportedly tried to persuade Kate to seek help, "nothing ever came of it."

After numerous failed attempts, Saffo ultimately stopped trying.

"After numerous attempts, I finally let go... Sometimes you simply cannot SAVE people from themselves! One of the last things she said to me was, 'Reta, I know you hate funerals and don't attend them, but for me would you PLEASE come to MINE, at least. Please!' I know she perhaps had a plan, but she insisted she did not."'

In regards to Robin Williams' death, Saffo said Kate heard about his passing at a hotel in Santa Fe.

"We were freaked out/saddened... but she kept watching it and watching it over and over. I think the plan was already in motion even as far back as then."

Saffo ended her email remembering her "kind" and "funny" younger sister.

"She was a dear little person. So dear — so kind, so funny. I'll miss our 6-7-hr-long phone conversations between NY and NM... I'm off to bed for a good cry."

If you or someone you know are experiencing thoughts of suicide or self harm, please call the National Suicide Prevention Lifeline at 1-800-273-8255 and know that you are not alone.

[Image via Flashpoint/WENN.]

]]>
http://perezhilton.com/2018-06-05-kate-spade-reta-saffo-sister-mental-illness-reported-suicide/feed/
Orlando Brown Arrested For Felony Narcotics Possession In Las Vegas!http://perezhilton.com/2018-06-05-orlando-brown-thats-so-raven-las-vegas-arresthttp://perezhilton.com/2018-06-05-orlando-brown-thats-so-raven-las-vegas-arrest#respondWed, 06 Jun 2018 02:14:51 +0000Perez Hiltonhttp://perezhilton.com/2018-06-05-orlando-brown-thats-so-raven-las-vegas-arrestOn Monday in Las Vegas, Orlando Brown was arrested and booked on felony narcotics possession, and misdemeanor charges of drug paraphernalia and resisting arrest.

According to TMZ, after cops witnessed him go in and out of a motel, they pulled over the cab he was in, and eventually cuffed him after he initially refused to cooperate.

Related: Orlando Arrested In His Underwear!

Officials allegedly found a bag of meth and a pipe on him, and discovered he had an outstanding warrant for an unrelated domestic violence case.

As of this writing, he is reportedly still in jail.

In his mugshot (seen HERE), Brown shows off his tattoo of former That's So Raven costar Raven-Symoné, seen on social media last week.

[Image via WENN.]

]]>
http://perezhilton.com/2018-06-05-orlando-brown-thats-so-raven-las-vegas-arrest/feed/
Donald Trump Forgot The Words To God Bless America At 'Celebration of America' Event — Twitter Reacts!http://perezhilton.com/2018-06-05-donald-trump-god-bless-america-celebration-of-america-white-house-twitter-reactshttp://perezhilton.com/2018-06-05-donald-trump-god-bless-america-celebration-of-america-white-house-twitter-reacts#respondWed, 06 Jun 2018 01:20:37 +0000Perez Hiltonhttp://perezhilton.com/2018-06-05-donald-trump-god-bless-america-celebration-of-america-white-house-twitter-reactsThank god he isn't a singer...

After canceling a Super Bowl celebration event with the Philadelphia Eagles, Donald Trump held an impromptu "Celebration of America" ceremony at the White House on Tuesday.

Related: Kim Kardashian's Meeting With Donald Trump Did NOT Go Well!

During the shindig, the Marine Band and Army Chorus began playing God Bless America, and the President tried but FAILED to sing along.

As seen in the following video, Donnie totally forgot the lyrics!


After the clip went viral, social media users totally BLASTED the businessman for forgetting the song's 28 words. See the best reactions (below):

[Image via CBS News/Twitter.]

]]>
http://perezhilton.com/2018-06-05-donald-trump-god-bless-america-celebration-of-america-white-house-twitter-reacts/feed/
David Spade Mourns Kate Spade's Death With Emotional Instagram Tributehttp://perezhilton.com/2018-06-05-david-spade-breaks-silence-on-kate-spade-deathhttp://perezhilton.com/2018-06-05-david-spade-breaks-silence-on-kate-spade-death#respondWed, 06 Jun 2018 01:11:37 +0000Perez Hiltonhttp://perezhilton.com/2018-06-05-david-spade-breaks-silence-on-kate-spade-deathOur hearts keep breaking for her family.

Late Tuesday evening, David Spade broke his silence on sister-in-law Kate Spade's tragic and sudden death.

Related: The Fashion World's Biggest Tragedies

In an emotional Instagram post, he wrote:

Fuzzy picture but i love it. Kate and I during Christmas family photos. We had so much fun that day. She was so sharp and quick on her feet. She could make me laugh so hard. I still cant believe it. Its a rough world out there people, try to hang on.A post shared by David Spade (@davidspade) on Jun 5, 2018 at 5:27pm PDT

The legendary fashion designer was found dead in her New York apartment Tuesday morning. It's reported she left a suicide note for her 13-year-old daughter.

Our thoughts are with her family at this time.

If you are struggling with suicidal thoughts, please know that you matter and can call 1-800-273-8255 for help.

[Image via FayesVision/WENN.]

]]>
http://perezhilton.com/2018-06-05-david-spade-breaks-silence-on-kate-spade-death/feed/
Courtney Stodden Debuts Alter Ego EMBER! Performs Song Me Too!http://perezhilton.com/2018-06-05-courtney-stodden-debuts-alter-ego-ember-performs-song-me-toohttp://perezhilton.com/2018-06-05-courtney-stodden-debuts-alter-ego-ember-performs-song-me-too#respondWed, 06 Jun 2018 00:52:40 +0000Perez Hiltonhttp://perezhilton.com/2018-06-05-courtney-stodden-debuts-alter-ego-ember-performs-song-me-tooCourtney Stodden is what we call 'infamous'. But, regardless of how you know her or how you think you know her, she's rebranding as a singer and a songwriter.

Pouring herself into her music, she just gave us her first ever live performance!

Check out her very personal song Me Too here!

Watch! Enjoy! SHARE!

And CLICK HERE to Vote on our tour demand page to see our podcast live! We need to know what cities to go!

]]>
http://perezhilton.com/2018-06-05-courtney-stodden-debuts-alter-ego-ember-performs-song-me-too/feed/
Kim Kardashian Admits She Cried Over Kanye West's 'Slavery' Comments!http://perezhilton.com/2018-06-05-kim-kardashian-kanye-west-cfda-awards-wouldnt-leave-ye-slavery-commentshttp://perezhilton.com/2018-06-05-kim-kardashian-kanye-west-cfda-awards-wouldnt-leave-ye-slavery-comments#respondWed, 06 Jun 2018 00:46:32 +0000Perez Hiltonhttp://perezhilton.com/2018-06-05-kim-kardashian-kanye-west-cfda-awards-wouldnt-leave-ye-slavery-commentsSticking by your husband isn't always easy...

In Kanye West's new song Wouldn't Leave off his new album Ye, the musician reveals how wife Kim Kardashian reacted to his comments about "slavery" being "a choice."

Related: Kim & Khloé Kardashian Share Parenting Tips!

He raps:

"My wife callin', screamin', say, 'We 'bout to lose it all!' / Had to calm her down 'cause she couldn't breathe / Told her she could leave me now, but she wouldn't leave."'

On Monday at the 2018 CFDA Awards, the KUWTK star told ET Online that she, in fact, cried and fought with him over his controversial words.

The reality TV personality confessed:

"Did I cry about it? Did I fight about it? Yeah... That's not stuff we put on social media -- I'm not going to start tweeting what my thoughts are, but we have those moments and that was the one song that he didn't really play for me until the last minute, so I heard that last minute and it meant a lot to me... I really like that song... But yeah, we have different views sometimes, but that's my husband, you know?"

Although she heard that song at the last minute, Kardashian was present for most of the recording sessions.

"I was in the room for making all of the songs and hearing things and it's a really fascinating process, especially since he scrapped his whole album and redid it in the last two weeks and just came up with all new songs... I left to go home for, like, two days and then I come back and it was a whole new album. It's fascinating to see the process."

As we reported, a day after the album dropped, songs from the LP dominated the Apple Music and Spotify charts.

"I'm so happy that it's been well-received because I've seen him go through a lot and he's just the most genuine person... He might say things that might get misinterpreted and people don't see the context behind it, but I always know his heart, so I'm glad that it was really well-received."

Overall, Kim credits Kanye for helping her find her voice as a woman.

"He is so confident... He would always build up my confidence to be who I want to be, and so I'll voice my opinion when I think there's something that is maybe done wrong -- or even if the messaging is right [and] the communication isn't quite there to figure that out."

She added:

"But I always believe and trust in him that he will always eventually explain himself because I know it's hard... I know what he really means when he says something and I know people will too at some point."

Despite the drama, these two truly love each other!

[Image via Andres Otero/WENN.]

]]>
http://perezhilton.com/2018-06-05-kim-kardashian-kanye-west-cfda-awards-wouldnt-leave-ye-slavery-comments/feed/
Brad Pitt vs Angelina Jolie!http://perezhilton.com/2018-06-05-angelina-jolie-brad-pitt-summer-europe-fighting-podcasthttp://perezhilton.com/2018-06-05-angelina-jolie-brad-pitt-summer-europe-fighting-podcast#respondTue, 05 Jun 2018 23:55:53 +0000Perez Hiltonhttp://perezhilton.com/2018-06-05-angelina-jolie-brad-pitt-summer-europe-fighting-podcastIt hurts that they're at this place!

This and much more on our latest podcast! Listen to The Perez Hilton Podcast with Chris Booker on iTunes or directly at http://PerezPodcast.com

]]>
http://perezhilton.com/2018-06-05-angelina-jolie-brad-pitt-summer-europe-fighting-podcast/feed/
This Sarah Paulson & Cate Blanchett Today Show Interview Will Make You Smile!http://perezhilton.com/2018-06-05-sarah-paulson-cate-blanchett-today-show-interviewhttp://perezhilton.com/2018-06-05-sarah-paulson-cate-blanchett-today-show-interview#respondTue, 05 Jun 2018 23:07:12 +0000Perez Hiltonhttp://perezhilton.com/2018-06-05-sarah-paulson-cate-blanchett-today-show-interviewHoda Kotb cannot keep Sarah Paulson and Cate Blanchett under control!!

During an appearance promoting Ocean's 8, the 43-year-old American Horror Story star and the 49-year-old Carol actress were absolute HAMS as they tried to upstage each other on the Today show!

Watch the hilarity (above)!!

]]>
http://perezhilton.com/2018-06-05-sarah-paulson-cate-blanchett-today-show-interview/feed/
Chrissy Teigen Holds Nothing Back When Describing 'Brat' Donald Trump! Quote Of The Day!http://perezhilton.com/2018-06-05-chrissy-teigen-donald-trump-brat-quote-of-the-dayhttp://perezhilton.com/2018-06-05-chrissy-teigen-donald-trump-brat-quote-of-the-day#respondTue, 05 Jun 2018 22:49:01 +0000Perez Hiltonhttp://perezhilton.com/2018-06-05-chrissy-teigen-donald-trump-brat-quote-of-the-day"The god damn president is such. A fucking. Petty. And fragile. Brat."

-- Chrissy Teigen after learning Donald Trump is asking an appeals court to restore his power to block critics on Twitter. Yeah, what she said.

[Image via Johnny Louis/WENN.]

]]>
http://perezhilton.com/2018-06-05-chrissy-teigen-donald-trump-brat-quote-of-the-day/feed/
EXCLUSIVE! Friday Singer Rebecca Black Auditions For The Four With THIS Classic Song!http://perezhilton.com/2018-06-05-rebecca-black-the-four-fox-audition-exclusivehttp://perezhilton.com/2018-06-05-rebecca-black-the-four-fox-audition-exclusive#respondTue, 05 Jun 2018 22:32:53 +0000Perez Hiltonhttp://perezhilton.com/2018-06-05-rebecca-black-the-four-fox-audition-exclusiveWill Rebecca Black make the cut??

On Thursday's premiere episode of Fox's The Four, the singer -- known for her infamous hit song Friday -- auditions in front of panelists Diddy, Meghan Trainor, and DJ Khaled, and host Fergie!

Related: Rebecca Black Opens Up About Being Bullied

Additionally, we can EXCLUSIVELY reveal that Miz Black is performing...

Bye, Bye, Bye by NSYNC!

To see how she does, watch the premiere this Thursday at 8/7c!

[Image via FOX.]

]]>
http://perezhilton.com/2018-06-05-rebecca-black-the-four-fox-audition-exclusive/feed/
================================================ FILE: api/test/data/feed/reddit-r-programming ================================================ 2018-06-06T09:40:33+00:00https://www.redditstatic.com/icon.png//r/programming/.rsshttps://b.thumbs.redditmedia.com/2rTE46grzsr-Ll3Q.pngComputer Programmingprogramming/u/mvaniganhttps://www.reddit.com/user/mvanigan&#32; submitted by &#32; <a href="https://www.reddit.com/user/mvanigan"> /u/mvanigan </a> <br/> <span><a href="https://www.cnbc.com/2018/06/05/github-interest-from-google-and-others-revenue-about-300-million.html">[link]</a></span> &#32; <span><a href="https://www.reddit.com/r/programming/comments/8oryk9/github_was_also_talking_to_google_about_a_deal/">[comments]</a></span>t3_8oryk92018-06-05T15:58:18+00:00GitHub was also talking to Google about a deal, but went with Microsoft instead/u/mikkoseedhttps://www.reddit.com/user/mikkoseed&#32; submitted by &#32; <a href="https://www.reddit.com/user/mikkoseed"> /u/mikkoseed </a> <br/> <span><a href="https://about.gitlab.com/2018/06/05/gitlab-ultimate-and-gold-free-for-education-and-open-source/">[link]</a></span> &#32; <span><a href="https://www.reddit.com/r/programming/comments/8oug9x/gitlab_ultimate_and_gold_are_now_free_for/">[comments]</a></span>t3_8oug9x2018-06-05T20:52:50+00:00GitLab Ultimate and Gold are now free for education and open source./u/histoire_guyhttps://www.reddit.com/user/histoire_guy&#32; submitted by &#32; <a href="https://www.reddit.com/user/histoire_guy"> /u/histoire_guy </a> <br/> <span><a href="https://sod.pixlab.io">[link]</a></span> &#32; <span><a href="https://www.reddit.com/r/programming/comments/8oy7cr/sod_an_embedded_computer_vision_and_machine/">[comments]</a></span>t3_8oy7cr2018-06-06T05:51:56+00:00SOD - An Embedded Computer Vision and Machine Learning Library/u/jonjonbeehttps://www.reddit.com/user/jonjonbee&#32; submitted by &#32; <a href="https://www.reddit.com/user/jonjonbee"> /u/jonjonbee </a> <br/> <span><a href="https://stackoverflow.com/questions/50683786/why-does-arrayin-i-give-different-results-in-java-8-and-java-10">[link]</a></span> &#32; <span><a href="https://www.reddit.com/r/programming/comments/8ook0g/code_golfing_challenge_leads_to_discovery_of/">[comments]</a></span>t3_8ook0g2018-06-05T06:19:10+00:00Code golfing challenge leads to discovery of string concatenation bug in JDK 9+ compiler/u/brendt_gdhttps://www.reddit.com/user/brendt_gd&#32; submitted by &#32; <a href="https://www.reddit.com/user/brendt_gd"> /u/brendt_gd </a> <br/> <span><a href="https://www.stitcher.io/blog/acquisition-by-giants">[link]</a></span> &#32; <span><a href="https://www.reddit.com/r/programming/comments/8opa92/voicing_my_concerns_not_about_github_as_a_product/">[comments]</a></span>t3_8opa922018-06-05T08:56:56+00:00Voicing my concerns, not about GitHub as a product, but about monopolies growing larger and larger./u/mgdohttps://www.reddit.com/user/mgdo&#32; submitted by &#32; <a href="https://www.reddit.com/user/mgdo"> /u/mgdo </a> <br/> <span><a href="http://fermatslibrary.com/s/the-beginning-of-the-monte-carlo-method">[link]</a></span> &#32; <span><a href="https://www.reddit.com/r/programming/comments/8osq2d/the_beginning_of_the_monte_carlo_method_1987/">[comments]</a></span>t3_8osq2d2018-06-05T17:28:48+00:00The Beginning of the Monte Carlo Method (1987)/u/fuzzzerdhttps://www.reddit.com/user/fuzzzerd&#32; submitted by &#32; <a href="https://www.reddit.com/user/fuzzzerd"> /u/fuzzzerd </a> <br/> <span><a href="https://arstechnica.com/gadgets/2018/06/everyone-complaining-about-microsoft-buying-github-needs-to-offer-a-better-solution/">[link]</a></span> &#32; <span><a href="https://www.reddit.com/r/programming/comments/8owvi0/everyone_complaining_about_microsoft_buying/">[comments]</a></span>t3_8owvi02018-06-06T02:14:22+00:00Everyone complaining about Microsoft buying GitHub needs to offer a better solution/u/nfrankelhttps://www.reddit.com/user/nfrankel&#32; submitted by &#32; <a href="https://www.reddit.com/user/nfrankel"> /u/nfrankel </a> <br/> <span><a href="https://www.infoq.com/news/2018/06/open-source-jmc">[link]</a></span> &#32; <span><a href="https://www.reddit.com/r/programming/comments/8opkcp/oracle_lays_off_java_mission_control_team_after/">[comments]</a></span>t3_8opkcp2018-06-05T09:58:46+00:00Oracle Lays Off Java Mission Control Team After Open Sourcing Product/u/PerfectlyClearhttps://www.reddit.com/user/PerfectlyClear&#32; submitted by &#32; <a href="https://www.reddit.com/user/PerfectlyClear"> /u/PerfectlyClear </a> <br/> <span><a href="https://blogs.microsoft.com/?p=52553832">[link]</a></span> &#32; <span><a href="https://www.reddit.com/r/programming/comments/8oh3mq/microsoft_acquires_github/">[comments]</a></span>t3_8oh3mq2018-06-04T13:05:37+00:00Microsoft acquires GitHub/u/mariuzhttps://www.reddit.com/user/mariuz&#32; submitted by &#32; <a href="https://www.reddit.com/user/mariuz"> /u/mariuz </a> <br/> <span><a href="https://medium.com/processing-foundation/a-modern-prometheus-59aed94abe85">[link]</a></span> &#32; <span><a href="https://www.reddit.com/r/programming/comments/8oy5dv/the_history_of_processing_by_casey_reas_and_ben/">[comments]</a></span>t3_8oy5dv2018-06-06T05:41:33+00:00The History of Processing by Casey Reas and Ben Fry/u/jakpithttps://www.reddit.com/user/jakpit&#32; submitted by &#32; <a href="https://www.reddit.com/user/jakpit"> /u/jakpit </a> <br/> <span><a href="https://www.nucleustechnologies.com/blog/export-exchange-mailboxes-backup-to-pst-using-powershell-commands/">[link]</a></span> &#32; <span><a href="https://www.reddit.com/r/programming/comments/8oza1j/export_exchange_2016_2013_2010_mailboxes_backup/">[comments]</a></span>t3_8oza1j2018-06-06T09:39:07+00:00Export Exchange 2016, 2013, & 2010 Mailboxes Backup to PST using PowerShell Commands./u/grauenwolfhttps://www.reddit.com/user/grauenwolf&#32; submitted by &#32; <a href="https://www.reddit.com/user/grauenwolf"> /u/grauenwolf </a> <br/> <span><a href="https://www.infoq.com/news/2018/06/open-source-jmc">[link]</a></span> &#32; <span><a href="https://www.reddit.com/r/programming/comments/8oritj/oracle_lays_off_java_mission_control_team_after/">[comments]</a></span>t3_8oritj2018-06-05T15:03:49+00:00Oracle Lays Off Java Mission Control Team After Open Sourcing Product/u/one_eyed_golferhttps://www.reddit.com/user/one_eyed_golfer&#32; submitted by &#32; <a href="https://www.reddit.com/user/one_eyed_golfer"> /u/one_eyed_golfer </a> <br/> <span><a href="https://www.bfilipek.com/2018/06/variant.html">[link]</a></span> &#32; <span><a href="https://www.reddit.com/r/programming/comments/8oyrzc/everything_you_need_to_know_about_stdvariant_from/">[comments]</a></span>t3_8oyrzc2018-06-06T07:46:03+00:00Everything You Need to Know About std::variant from C++17/u/one_eyed_golferhttps://www.reddit.com/user/one_eyed_golfer&#32; submitted by &#32; <a href="https://www.reddit.com/user/one_eyed_golfer"> /u/one_eyed_golfer </a> <br/> <span><a href="https://foonathan.net/blog/2018/06/01/pointer-taxonomy.html">[link]</a></span> &#32; <span><a href="https://www.reddit.com/r/programming/comments/8oyrvv/a_better_taxonomy_of_pointers/">[comments]</a></span>t3_8oyrvv2018-06-06T07:45:30+00:00A (Better) Taxonomy of Pointers/u/one_eyed_golferhttps://www.reddit.com/user/one_eyed_golfer&#32; submitted by &#32; <a href="https://www.reddit.com/user/one_eyed_golfer"> /u/one_eyed_golfer </a> <br/> <span><a href="https://blog.appsignal.com/2018/06/05/redo-retry-next.html">[link]</a></span> &#32; <span><a href="https://www.reddit.com/r/programming/comments/8oyrsm/rubys_redo_retry_and_next_keywords/">[comments]</a></span>t3_8oyrsm2018-06-06T07:45:02+00:00Ruby's redo, retry and next keywords/u/rlphttps://www.reddit.com/user/rlp&#32; submitted by &#32; <a href="https://www.reddit.com/user/rlp"> /u/rlp </a> <br/> <span><a href="https://developer.apple.com/macos/whats-new/">[link]</a></span> &#32; <span><a href="https://www.reddit.com/r/programming/comments/8okg5y/apple_deprecating_opengl_and_opencl_in_macos/">[comments]</a></span>t3_8okg5y2018-06-04T20:07:38+00:00Apple deprecating OpenGL and OpenCL in macOS/u/agumonkeyhttps://www.reddit.com/user/agumonkey&#32; submitted by &#32; <a href="https://www.reddit.com/user/agumonkey"> /u/agumonkey </a> <br/> <span><a href="https://www.reddit.com/r/haskell/comments/8or5vt/call_for_papers_for_the_2018_workshop_on/">[link]</a></span> &#32; <span><a href="https://www.reddit.com/r/programming/comments/8os06i/call_for_papers_for_the_2018_workshop_on/">[comments]</a></span>t3_8os06i2018-06-05T16:03:52+00:00Call for papers for the 2018 Workshop on Functional High-Performance Computing [x-post from r/haskell]/u/udelbluehttps://www.reddit.com/user/udelblue&#32; submitted by &#32; <a href="https://www.reddit.com/user/udelblue"> /u/udelblue </a> <br/> <span><a href="https://stratechery.com/2018/the-cost-of-developers/">[link]</a></span> &#32; <span><a href="https://www.reddit.com/r/programming/comments/8oq2sv/the_cost_of_developers/">[comments]</a></span>t3_8oq2sv2018-06-05T11:35:59+00:00The Cost of Developers/u/iOSGuyhttps://www.reddit.com/user/iOSGuy&#32; submitted by &#32; <a href="https://www.reddit.com/user/iOSGuy"> /u/iOSGuy </a> <br/> <span><a href="https://en.m.wikipedia.org/wiki/OpenGL">[link]</a></span> &#32; <span><a href="https://www.reddit.com/r/programming/comments/8ooihn/til_that_opengl_turns_25_this_month_june_30th/">[comments]</a></span>t3_8ooihn2018-06-05T06:10:45+00:00TIL that OpenGL turns 25 this month (June 30th)/u/ben_a_adamshttps://www.reddit.com/user/ben_a_adams&#32; submitted by &#32; <a href="https://www.reddit.com/user/ben_a_adams"> /u/ben_a_adams </a> <br/> <span><a href="https://www.peachpie.io/2018/06/performance-progress-report.html">[link]</a></span> &#32; <span><a href="https://www.reddit.com/r/programming/comments/8oqabd/peachpie_performance_progress_report_speed/">[comments]</a></span>t3_8oqabd2018-06-05T12:11:13+00:00PeachPie: Performance Progress Report | Speed Matters (PHP on .NET Core)/u/irqlnotdispatchlevelhttps://www.reddit.com/user/irqlnotdispatchlevel&#32; submitted by &#32; <a href="https://www.reddit.com/user/irqlnotdispatchlevel"> /u/irqlnotdispatchlevel </a> <br/> <span><a href="https://chromium.googlesource.com/chromium/src/+/master/docs/security/side-channel-threat-model.md">[link]</a></span> &#32; <span><a href="https://www.reddit.com/r/programming/comments/8orpgy/chromium_postspectre_threat_model_rethink/">[comments]</a></span>t3_8orpgy2018-06-05T15:26:25+00:00[Chromium] Post-Spectre Threat Model Re-Think/u/Ameliaprohttps://www.reddit.com/user/Ameliapro&#32; submitted by &#32; <a href="https://www.reddit.com/user/Ameliapro"> /u/Ameliapro </a> <br/> <span><a href="https://www.articlecube.com/progressive-web-apps-revolutionary-way-mobile-web-surfing">[link]</a></span> &#32; <span><a href="https://www.reddit.com/r/programming/comments/8oy26g/progressive_web_appsa_revolutionary_way_of_mobile/">[comments]</a></span>t3_8oy26g2018-06-06T05:24:47+00:00Progressive Web Apps:A Revolutionary Way of Mobile Web Surfing/u/nnethercotehttps://www.reddit.com/user/nnethercote&#32; submitted by &#32; <a href="https://www.reddit.com/user/nnethercote"> /u/nnethercote </a> <br/> <span><a href="https://blog.mozilla.org/nnethercote/2018/06/05/how-to-speed-up-the-rust-compiler-some-more-in-2018/">[link]</a></span> &#32; <span><a href="https://www.reddit.com/r/programming/comments/8oma38/how_to_speed_up_the_rust_compiler_some_more_in/">[comments]</a></span>t3_8oma382018-06-05T00:07:45+00:00How to speed up the Rust compiler some more in 2018/u/fagnerbrackhttps://www.reddit.com/user/fagnerbrack&#32; submitted by &#32; <a href="https://www.reddit.com/user/fagnerbrack"> /u/fagnerbrack </a> <br/> <span><a href="http://blog.scottlogic.com/2018/04/26/webassembly-by-hand.html">[link]</a></span> &#32; <span><a href="https://www.reddit.com/r/programming/comments/8oqhwy/writing_webassembly_by_hand/">[comments]</a></span>t3_8oqhwy2018-06-05T12:44:02+00:00Writing WebAssembly By Hand/u/aaronlelevierhttps://www.reddit.com/user/aaronlelevier&#32; submitted by &#32; <a href="https://www.reddit.com/user/aaronlelevier"> /u/aaronlelevier </a> <br/> <span><a href="https://aaronlelevier.github.io/graph-theory-crash-course/">[link]</a></span> &#32; <span><a href="https://www.reddit.com/r/programming/comments/8or2cx/graph_theory_crash_course/">[comments]</a></span>t3_8or2cx2018-06-05T14:05:37+00:00Graph Theory Crash Course ================================================ FILE: api/test/data/feed/rss.cnki.net ================================================ 河海大学学报(哲学社会科学版)-CNKI 河海大学学报(哲学社会科学版) http://kns.cnki.net/kcms/detail/ http://piccache.cnki.net/kns55/images/GB/logo.gif http://kns.cnki.net/kcms/detail/ zh-cn kns.cnki.net/kcms/detail/ 18/01/30 00:00 Copyright 2018, CNKI Inc. All Rights Reserved 2 <![CDATA[房地产价格波动:投资效应、财富效应与通货膨胀效应]]> 摘要:为了探究我国房价波动的宏观经济效应,基于2005年7月至2016年11月70个大中城市的月度数据,从投资效应、财富效应和通货膨胀效应3个维度构建ARDL模型,以研究我国房价波动对经济增长、国民消费和物…]]> <![CDATA[中国旅游目的地供给态势分析与政策研究——基于供给侧结构性改革的视角]]> 摘要:供给侧结构性改革为中国旅游目的地供给转型升级提供了良好机遇。旅游目的地供给可依据供给内容和供给主体进行系统性归纳和分析。中国旅游供给总量已经达到了一个空前的规模,但目的地供给质量仍有待提升。目的地供给…]]> <![CDATA[河海大学举行《河海月刊》创办100周年纪念座谈会]]> 摘要:<正>2017年12月,河海大学举行《河海月刊》创办100周年纪念座谈会。校党委书记唐洪武、校长徐辉、江苏省期刊协会会长沈建国、中国水利学会副秘书长刘咏峰、河海大学原党委书记、校长姜弘道、《水利学报》主编程晓陶等参加座谈会。副校长郑金海主持座谈会。唐洪武书记指出,今天召开《河海月刊》创办100周年纪念座谈会很有意义,是贯彻党的十九大精神和学校第…]]> <![CDATA[中国工业发展环境财务绩效评估及指数构建——基于省际数据的实证研究]]> 摘要:理论界与实务界相对缺乏对环境财务绩效综合评估的研究。在提出工业行业环境财务绩效评估体系理论框架的基础上,采用主成分分析法和因子分析法对2011—2014年中国各省份工业行业的环境财务绩效进行评估,并依…]]> <![CDATA[市场参与者预期与商品住宅价格的动态关系研究——基于时间维和空间维的比较分析]]> 摘要:能否科学揭示预期与房价的关系是行业健康、调控有效、决策正确的关键。建立实证计量模型后,联合运用面板数据模型、面板聚类法等分别从时间、空间变化角度,对2001—2015年中国30个省(市、自治区)市场参…]]> <![CDATA[微信社群对高校思想政治教育的影响及提升效力策略]]> 摘要:随着信息网络技术的突飞猛进,微信成为高校师生群体广泛使用的思想交流工具。微信社群对高校师生的思想政治教育具有深刻影响,它丰富了教育载体,开拓了工作新平台,提升了亲和力,增强了便捷性。但是,微信社群也带…]]> <![CDATA[学科方法论视域下思想政治教育研究对象探析]]> 摘要:囿于论辩在"说明"与"理解"的研究方法论两端,思想政治教育研究对象难以呈现完整的研究面貌,使其成为一项未竟的方法论难题。而学科方法论作为一个有机整体,以动态、立体的特质弥合、勾连着研究方法论的两端,是对现有思想政治教育研究对象研究困境的突破与超越。学科方法论视域下,客观经验研究的方法论准则,实践论归属的方法论理念,历史诠释的方法论理路,应成为推进思想政治教育研究对象研究的方法进路。…]]> <![CDATA[《河海大学学报(哲学社会科学版)》2017年总目次]]> ~~…]]> <![CDATA[《河海大学学报(哲学社会科学版)》征稿简则]]> 《河海大学学报(哲学社会科学版)》经国家新闻出版署批准,于1999年3月创刊。1.本刊坚持以马克思列宁主义、毛泽东思想、邓小平理论、"三个代表"重要思想、科学发展观、习近平新时代中国特色社会主义思想为指导,关注传统学科、基础理论研究,特别注重应用学科、边缘学科、新兴学科以及各学科之间的交叉渗透和综合研究,以推进马克思主义理论和各学科的理论…]]> <![CDATA[《水利经济》征订启事]]> 中国科技核心期刊RCCSE中国核心学术期刊全国水利系统优秀期刊全国农业系统优秀期刊(邮发代号28-252,CN32-1165/F,双月刊)《水利经济》是由河海大学与中国水利经济研究会共同主办的以…]]> <![CDATA[《河海大学学报(哲学社会科学版)》订阅办法]]> (CN 32-1521/C,ISSN 1671-4970,双月刊,自办发行)《河海大学学报(哲学社会科学版)》由河海大学主办,每双月末出版,国内外公开发行。每期定价:11元(含邮费1元),全年订费66元。欢迎广大读者和单位函索订单或直接汇款订阅。订阅办法:(1)邮局汇款:请将订单和邮签与汇款单仔细填好后寄回本刊编辑部(汇款时务请注明"订…]]> <![CDATA[民法典时代下雨水资源权属研究]]> 摘要:雨水资源的综合利用对缓解城市内涝和水资源供需矛盾具有重要意义,然而,国内对雨水资源权属及利用的研究主要集中在工程技术领域,涉及法律法规及政策层面的研究还很少,已不能满足雨水资源开发利用的需求。在我国编…]]> <![CDATA[延迟退休政策问题建构中的网络舆情变迁研究]]> 摘要:作为一种特殊的公共政策态度,网络舆情的传播受到了政策沉淀和认知定势的双重影响。在延迟退休政策问题的建构中,网络舆情是在官方行动者观点和声音的"准刺激"以及网民自身对延迟退休问题的错误认知或非理性认知定…]]> <![CDATA[日本环境法中非规制调整方法及对我国的启示]]> 摘要:日本环境法的调整方法除规制方法之外,还有综合性方法、经济方法、信息型方法、行政指导、环境协定、事后措施等非规制调整方法。规制方法与和非规制方法各有其优劣,要兼顾公平与效率,应当注意将该两种方法运用在不…]]> <![CDATA[论列宁无产阶级执政党纪律建设思想]]> 摘要:纪律建设是列宁从建党初期就高度重视的问题,整饬党纪是列宁执政党建设的重要一环。十月革命后,列宁将马克思主义政党学说与俄共(布)实践相结合,对无产阶级执政党纪律建设进行了思考和探索,其思想包括维护中央权…]]> <![CDATA[习近平“对党忠诚”思想的三重维度解读]]> 摘要:对党忠诚是党员、干部的政治品质与党性原则。习近平一贯强调对党忠诚,系列讲话中蕴含了丰富的对党忠诚思想。从忠诚主体定位看,对党忠诚既有对全体党员的普遍要求,也有对"关键少数"与重点领域党员严格的具体要求…]]> <![CDATA[从新发展议程看马克思主义前瞻性]]> 摘要:进入新世纪,国际社会关于发展的认知和行动都有明显进步,但也存在许多不容忽视的问题,联合国方面聚焦于以人为中心的经济、社会与环境的可持续发展,经过多年谋划最终形成了《2030年可持续发展议程》,确立了"…]]> <![CDATA[马克思主义大众化规律研究的新探索——读邓姗《马克思主义大众化的规律研究》]]> 摘要:<正>马克思主义大众化是马克思主义理论由抽象到具体、由深奥到通俗、由少数精英理解掌握到被广大群众理解掌握的过程。马克思主义大众化过程中,必然有可以遵循的规律性。深入研究马克思主义大众化的规律,为当代中国马克思主义大众化的具体实践提供有价值的应用性措施,将有助于推进当代中国的马克思主义大众化实践活动,进一步巩固马克思主义在我国意识形态领域里的指导性地位,推动中国特色社会主义建…]]> <![CDATA[中日环境监测主体制度的比较与借鉴]]> 摘要:环境监测主体制度是有关环境监测管理主体和实施主体的各项法律制度与规范的总称,日本很早便确立了完备的环境监测主体制度。经过多年的实践,其成功的制度实践已成为各国法律文明的典范。通过对中日环境监测主体制度…]]> <![CDATA[《河海大学学报(哲学社会科学版)》等期刊编委会换届会议顺利召开]]> 摘要:<正>2017年12月28日上午,河海大学在闻天馆召开了《河海大学学报(哲学社会科学版)》等期刊的编委会换届会议。会议由副校长郑金海主持,党委书记唐洪武,校长、党委副书记徐辉,编委会成员及编辑部工作人员参加了此次会议。徐辉校长对各位编委长期以来给予河海大学学术期刊的关心和支持表示感谢。他表示,创办出一流的…]]> <![CDATA[中国市政债券信用价差影响因素分析]]> 摘要:地方政府债务危机已经成为抑制中国地方经济发展的重要问题。地方政府债务危机主要由信用风险造成,为此,确定市政债券信用价差的影响因素可以有效建立市政债券信用风险管理机制。通过研究债券信用价差影响因素相关文…]]> <![CDATA[PPP模式下项目型企业脆弱性研究述评]]> 摘要:沿着"脆弱性内涵-形成机理-扩散机理-评估预警"思路,对企业脆弱性、项目型企业脆弱性、PPP模式下项目型企业脆弱性的现有文献进行分类归纳并对三者的联系与区别进行详细述评。研究发现,项目型企业脆弱性形成…]]> <![CDATA[长江经济带高技术产业创新要素集聚的空间溢出效应]]> 摘要:高技术产业在推动产业升级和创新驱动方面具有重要带动作用。以长江经济带11省市高技术产业为研究对象,运用空间杜宾模型,选取2006—2015年面板数据,研究创新要素集聚及其对高技术产业的空间溢出效应。研究表明:创新要素集聚的非均衡分布特征明显;除资本投入和劳动力投入外,创新要素集聚对高技术产业发展的促进作用最为显著;创新要素集聚在省域间的溢出效应大于省域内的溢出效应。…]]> <![CDATA[马克思主义新闻观的历史境遇与现代观照]]> 摘要:理解与学习马克思主义新闻观可以从4个维度进行探讨,即全球化、主体性、动力源与问题域,这四重维度分别对应了马克思主义新闻观的主导视角、本真意义、发展路径和实践平台,它们各具蕴意、相互独立,却又共同存在于马克思主义新闻观的产生与发展之中。因此,在新的历史境遇下,坚持从多维角度探寻马克思主义新闻观的最新成果,依旧可以为中国的新闻传播事业提供宝贵的发展机遇和社会空间。…]]> <![CDATA[老龄化视角下家庭商业保险持有行为影响因素研究——基于CHFS调研数据的实证分析]]> 摘要:随着改革开放的不断深入和人口老龄化的逐步到来,养老保障体系的建立与实施已成为重要的民生问题,商业保险作为其中的支柱力量,需要受到足够重视。分别运用LOGIT模型和TOBIT模型从家庭基本特征、经济特征…]]> <![CDATA[当前中国四大移民潮:问题与对策]]> 摘要:我国现阶段已经形成四大移民潮。改革开放以来,从农村向城镇转移的农民工总量增长出现减速趋势,拖欠工资、不依法签订劳动合同、缺少同城待遇等问题仍然存在。扶贫、生态、避灾搬迁与水库移民的规模不断扩大,资金、…]]> <![CDATA[唯物辩证法视阈下新时代社会主要矛盾变化探析]]> 摘要:唯物辩证法是理解新时代社会主要矛盾变化的哲学前提。在唯物辩证法视阈下,党的十九大报告提出的社会主要矛盾变化是主观辩证法与客观辩证法互动的历史性结论,内涵着唯物辩证法意蕴,是新时代标志、丰富内涵与创新性…]]> <![CDATA[长期照护:概念框架、研究发现与政策建议]]> 摘要:按照习近平总书记建立长期照护保障制度的指示精神,通过"中国长期照护保障需求"课题的调查研究,得到了10项研究发现:从城市老年人及其家庭的人口学特征、经济学特征和社会学特征看,都难以满足失能老人的长期照护保障需求。因此,城市老年人对社会化的长期照护服务和长期照护保险大多表示认可。以调查统计结果为基础,提出了与长期照护服务与筹资相关的政策建议。…]]> <![CDATA[人口“空心化”与农村养老服务多元供给困境研究]]> 摘要:人口"空心化"问题已成为我国农村养老服务多元供给的最大约束条件,全方位影响农村居民生活、工作方式、社区文化和经济。城乡空间居住距离动摇家庭代际互助基础,即使"隔代照顾式"随迁和"女儿养老"的家庭功能自…]]> <![CDATA[利益分化格局下中国共产党意识形态整合工作提升策略]]> 摘要:改革开放以来,伴随着经济结构的深度调整,社会结构的快速转型,社会阶层的持续分化,导致利益结构的深刻变化,呈现利益诉求多样化、利益关系复杂化、利益差距显著化的特征,致使中国共产党的意识形态整合工作面临引…]]> <![CDATA[论马克思主义意识形态在国家治理中的功能及其实现]]> 摘要:当代中国国家治理是马克思主义国家理论与中国共产党治国理政实践相结合而形成的国家发展理念。马克思主义作为党和国家的根本指导思想,对国家治理实践活动具有理论支撑、价值整合、舆论引导的作用,同时也是国家治理…]]> <![CDATA[文化视野下的中国佛教艺术——评《中国佛教艺术史》]]> 摘要:<正>中国的佛教艺术丰富多彩,千姿百态,如何系统地把握其发展脉络以及不同时期的风格特点呢?由赖永海、王月洁两位先生主编的《中国佛教艺术史》(南京大学出版社,2017年)基于思想文化史和宗教学、艺术学的…]]> <![CDATA[农村环境管理中的政府角色——基于政策文本的分析]]> 摘要:明确划分各级政府在环境管理中的职能、职责,既是深化"放管服"改革、构建责任型政府的内在要求,也是改善农村生态环境、实现农村经济可持续发展的现实需要。从历史视角梳理农村环境管理政策的演进历程之后,基于政…]]> <![CDATA[缓发性海洋灾害传导机理及对沿海地区发展的影响评价——以海平面上升为例]]> 摘要:作为缓发性海洋灾害的一种主要表现形式,海平面上升已对沿海地区经济社会发展产生了严重影响。在修正"源-路径-受体-影响"理论模型基础上,分析海平面上升对沿海地区发展的影响机理,并采用熵权法定量测算影响程…]]> <![CDATA[中国减贫的范式演变与未来走向:从发展主义到福利治理]]> 摘要:自改革开放以来,新中国的减贫实践先后经历了开发式扶贫和精准扶贫两个主要阶段,具有明显的"行政主导型"特征,遵循"发展主义"逻辑并取得了显著的减贫成效,预期到2020年现行标准下所有贫困人口将实现脱贫,…]]> <![CDATA[制度距离对中国OFDI区位选择的影响]]> 摘要:基于2006—2016年中国对外直接投资排名前45个东道国的投资数据,运用引力模型分析制度距离对中国对外直接投资区位选择的影响。实证结果表明:规范性制度距离阻碍中国对外直接投资,主要表现为东道国与中国…]]> <![CDATA[基于DEA-Malmquist方法的装备制造业自主创新能力评价]]> 摘要:装备制造业是国民经济的重要支柱产业,影响和决定一国制造业的基础和核心竞争力。十九大以来,我国制造业的重要发展方向就是不断创新、加强与国际接轨力度。基于2006—2015年我国装备制造业的面板数据,构建…]]> <![CDATA[后2020贫困问题初探]]> 摘要:作为发展中大国,后2020中国仍然存在贫困问题。考虑到世界各国经验和扶贫成效,结合中国国情,应根据人的基本需求变化来确定新的贫困标准,这既符合大多数发展中国家的通常做法,又能够体现中国扶贫成效。扶持对…]]> <![CDATA[论中国脱贫攻坚的理论与实践创新]]> 摘要:党的十八大以来,我国扶贫开发进入脱贫攻坚阶段。脱贫攻坚理论与实践创新不断深化推进,不仅彰显脱贫攻坚在决胜全面小康社会进程中的重要地位,也预示贫困研究与贫困干预模式的转型。在习近平扶贫思想引导下,坚持精…]]> <![CDATA[劳动供给结构、技术进步与收入差距——基于CHNS数据的研究]]> 摘要:改革开放以来,伴随我国经济快速发展、居民收入差距逐渐扩大,当前的基尼系数已超过国际警戒线,高低技能劳动者收入差异的扩大成为社会总体收入差距扩大的主要因素;与此同时,高校扩招政策导致高素质劳动力供给显著…]]> <![CDATA[西部山区农民易地扶贫搬迁意愿的影响因素]]> 摘要:从现在到2020年是打赢脱贫攻坚战的关键时期,从农民自身角度研究搬迁意愿,对加快实施易地扶贫移民搬迁具有重要意义。研究依据西方微观人口迁移理论:地方效用理论、计划行为理论和效价-期望理论,整合构建了中…]]> <![CDATA[为高质量发展而竞争:地方政府竞争问题的新解析]]> 摘要:建设为高质量发展而竞争的机制,是贯彻落实新发展理念、建设现代化经济体系的具体行动。在新一轮扩大地方政府自主权的背景下,矫正过去的地方政府竞争制度、重塑中国经济新动力,是推进全面深化改革的一项极其重要的…]]> <![CDATA[论社会主义核心价值观的理论自觉与自信——读黄明理《角度视野践行——社会主义核心价值观释讲》]]> 摘要:<正>自2006年社会主义核心价值体系的提出,2012年又在此基础上系统地概括出24字社会主义核心价值观,至今先后已过去了十余年。按照习惯思维,对核心价值观的宣传热度早就应该降温了,可是,不仅主流舆论宣传的力度日渐加大,而且在实践落实方面越来越制度化,并通过核心价值观的制度化建设实现核心价值观的信仰化,习近平总书记在全国…]]> <![CDATA[新时代中国意识形态建设研究的新维度——读张志丹《意识形态功能提升新论》]]> 摘要:<正>长期以来,西方国家对中国和平演变战略从来没有停止过,与此同时,多元多样多变的社会思想在国内蔓延,它们对于马克思主义、社会主义和共产主义信仰产生的冲击是空前的。今天,中国特色主义事业已经进入新时代,无论是从回应上述思潮,还是从建构具有引领力、凝聚力的社会主义意识形态,服务于中华民族复兴大业和治国理政、全球治理等重大课题,都需要提升中国意识形态功能。针对这些…]]> <![CDATA[人类命运共同体视阈中的中国意识形态国际话语权]]> 摘要:意识形态是话语的思想内核和价值基石。中国的话语权,实质是中国主流意识形态话语权,因而研究和关注中国意识形态的国际话语权就是话语权研究的题中应有之义。面对该论题,需要超越"传播学研究范式",以"实践学研…]]> <![CDATA[习近平新时代领导干部战略能力思想研究]]> 摘要:战略能力是领导者的核心能力。中国特色社会主义进入新时代客观要求领导干部须培养和强化战略能力。习近平高度重视战略能力,在长期的领导实践和思考中形成了关于领导干部战略能力的思想。习近平关于领导干部战略能力的理论既是新时代中国特色社会主义思想的有机组成部分,也是对各级领导干部的基本要求和行动指南。探讨和领会习近平新时代领导干部战略能力思想具有观念上的启迪意义和现实的指导价值。…]]> <![CDATA[新时代深化毛泽东研究的三重理论维度]]> 摘要:在中国特色社会主义步入新时代的历史条件下,深化与拓展毛泽东研究,需要从理论谱系、历史遗产与研究方法三重维度进行突破。对毛泽东思想与中国特色社会主义理论体系关系的研究,需要不断突破宏观层面的"定性研究"…]]> <![CDATA[工程风险向工程社会危机演化的机理及应对策略]]> 摘要:近年来,不断发生的工程社会危机都由工程风险演化而来,给整个社会造成了巨大的负面影响。基于探索性单案例研究方法,以我国重大安全事故中具有显著社会影响的天津港危险品仓库爆炸事故为分析样本,将工程危机作为中…]]> <![CDATA[调动多方的主动性构建流域生态补偿机制——评《流域生态补偿机制研究——基于主体行为分析》]]> 摘要:<正>流域是兼具自然属性与生活经济功能的复合生态系统,进行流域综合开发可以满足人民物质需求,保障社会经济发展。然而,流域的过渡开发造成的水土流失、水污染等生态环境问题引起了人们的重视。习总书记倡导的"绿水青山就是金山银山"理念给流域的建设与开发指明了方向。如何应对流域开发所带来的生态环境问题?张婕、王济干、徐健合著的《流域生态补偿机制研究》(科学出版社,2017…]]> <![CDATA[基于主体不平等的跨国界河流水资源分配的破产博弈研究]]> 摘要:基于破产理论和讨价还价博弈,构建水资源分配的破产博弈模型。借鉴国际水法,构建主体在水资源分配谈判中的议价能力评价指标体系,将议价能力运用到破产博弈模型中,突出主体在水资源分配中的不平等性,减少水资源分配量与贡献、需求量和对水资源依赖程度的非对称性;结合主体的谈判破裂点,根据主体满意度函数的联动函数寻找水资源分配的最优解,使分配能同时满足个体理性和集体理性,并对澜沧江-湄公河流域进行实例研究。…]]> ================================================ FILE: api/test/data/feed/ruby-on-rails ================================================ Jekyll2018-05-27T14:56:31+00:00https://weblog.rubyonrails.org/Riding RailsEnumerable#index_with, transaction fixes, and more!2018-05-27T00:00:00+00:002018-05-27T00:00:00+00:00https://weblog.rubyonrails.org/2018/5/27/this-week-in-rails-enumerable-index_with-transaction-fixes-and-more<p>Hello everyone! This is <a href="https://twitter.com/eugeneius">Eugene</a>, with a roundup of the last two weeks of activity in the Rails world. Let’s get started!</p> <h3 id="this-weeks-contributors"><a href="http://contributors.rubyonrails.org/contributors/in-time-window/20180513-20180526">This Week’s Contributors</a></h3> <p>In the last two weeks, Rails saw contributions from 29 people, including 10 first-time contributors. Thank you all!</p> <p>If you’d like to be included here, why not check out the list of <a href="https://github.com/rails/rails/issues">open issues</a>?</p> <h3 id="add-enumerableindex_with"><a href="https://github.com/rails/rails/pull/32523">Add <code class="highlighter-rouge">Enumerable#index_with</code></a></h3> <p>This new method converts an enumerable to a hash, where the keys are the enumerable’s elements and the values are determined by the provided block or argument.</p> <h3 id="action-mailer-now-eager-loads-the-mail-gem"><a href="https://github.com/rails/rails/pull/32808">Action Mailer now eager loads the mail gem</a></h3> <p>Loading the mail gem during boot avoids burdening the first request with the responsibility, and conveniently sidesteps a deadlock that the author encountered in their application.</p> <h3 id="allow-range-and-rangecover-on-range"><a href="https://github.com/rails/rails/pull/32938">Allow <code class="highlighter-rouge">Range#===</code> and <code class="highlighter-rouge">Range#cover?</code> on <code class="highlighter-rouge">Range</code></a></h3> <p>Active Support extends <code class="highlighter-rouge">Range#===</code> to match other ranges, but a change to the native Ruby implementation broke it. This patch ensures that the behaviour will work on Ruby 2.6, and also adds it to <code class="highlighter-rouge">Range#cover?</code> for good measure.</p> <h3 id="speed-up-xor_byte_strings-by-70"><a href="https://github.com/rails/rails/pull/32931">Speed up <code class="highlighter-rouge">xor_byte_strings</code> by 70%</a></h3> <p>The benchmark included with this performance patch shows that it saves a cool 5 microseconds whenever Rails generates a CSRF token. 🐎</p> <h3 id="roll-back-parent-transaction-when-children-fail-to-save"><a href="https://github.com/rails/rails/pull/32796">Roll back parent transaction when children fail to save</a></h3> <p>If a record’s associations contains valid but unsaveable data, it will now correctly fail to save and roll back its transaction.</p> <h3 id="finalize-transaction-record-state-after-real-transaction"><a href="https://github.com/rails/rails/pull/32911">Finalize transaction record state after real transaction</a></h3> <p>When a record was saved multiple times in the same transaction, its previous state wasn’t always immediately restored if the transaction was later rolled back.</p> <h3 id="disable-foreign-keys-during-alter_table-for-sqlite3-adapter"><a href="https://github.com/rails/rails/pull/32865">Disable foreign keys during <code class="highlighter-rouge">alter_table</code> for SQLite3 adapter</a></h3> <p>Tables that are referenced by foreign keys can now be successfully altered when using the SQLite3 adapter.</p> <p>In related news, <a href="https://github.com/rails/rails/pull/32923">Rails 6.0 will require a minimum SQLite version of 3.8.0</a>.</p> <p>As always, there were many more changes to the Rails codebase than we can cover here - if you’re interested, you can check out <a href="https://github.com/rails/rails/compare/master@%7B2018-05-13%7D...@%7B2018-05-26%7D">the full listing of commits from the last two weeks</a>. Until next week!</p>eugeneiusHello everyone! This is Eugene, with a roundup of the last two weeks of activity in the Rails world. Let’s get started!Google Cloud Storage streaming downloads, performance improvements and more!2018-05-12T00:00:00+00:002018-05-12T00:00:00+00:00https://weblog.rubyonrails.org/2018/5/12/this-week-in-rails-google-cloud-storage-streaming-downloads-performance-improvements-and-more<p>Hello everyone! This is <a href="https://twitter.com/repinel">Roque</a> bringing you the latest news from the Rails world. I will cover the highlights from the last two weeks. Let’s get started!</p> <h3 id="this-weeks-contributors"><a href="http://contributors.rubyonrails.org/contributors/in-time-window/20180428-20180512">This Week’s Contributors</a></h3> <p>39 people contributed to Rails in the last two weeks, including 9 for the first time! A big thank you to all of you!</p> <p>If you’d like to see yourself on that board, why not check out the list of <a href="https://github.com/rails/rails/issues">open issues</a>, or get involved in the <a href="https://groups.google.com/d/forum/rubyonrails-core">core discussion list</a>.</p> <h3 id="support-streaming-downloads-from-google-cloud-storage"><a href="https://github.com/rails/rails/pull/32788">Support streaming downloads from Google Cloud Storage</a></h3> <p>Active Storage now supports streaming downloads from Google Cloud Storage. You will need version <code class="highlighter-rouge">1.11</code> or greater of the gem <code class="highlighter-rouge">google-cloud-storage</code>.</p> <h3 id="add-option-identify-to-activestorageblob"><a href="https://github.com/rails/rails/pull/32833">Add option <code class="highlighter-rouge">identify</code> to ActiveStorage::Blob</a></h3> <p>This allows control over the content type identification performed by Active Storage. For instance, if <code class="highlighter-rouge">identify</code> is <code class="highlighter-rouge">false</code>, then you can provide your own <code class="highlighter-rouge">content_type</code> value.</p> <h3 id="improve-the-performance-of-activesupportinflectorordinal"><a href="https://github.com/rails/rails/commit/0c54fc460e52d2b9aa02e1e27a090dbe7ee98829">Improve the performance of <code class="highlighter-rouge">ActiveSupport::Inflector.ordinal</code></a></h3> <p>Big performance improvement for ordinal generation! The power of benchmarks-oriented solutions.</p> <h3 id="use-did_you_mean-for-spelling-suggestions"><a href="https://github.com/rails/rails/pull/32289">Use <code class="highlighter-rouge">did_you_mean</code> for spelling suggestions</a></h3> <p>Now that Rails requires Ruby <code class="highlighter-rouge">2.3</code> or greater, Rails will use the gem <code class="highlighter-rouge">did_you_mean</code> for spelling suggestions. The gem is shipped with Ruby, and automatically required when the Ruby process starts.</p> <h3 id="fix-logic-on-disabling-commit-callbacks"><a href="https://github.com/rails/rails/pull/32807">Fix logic on disabling commit callbacks</a></h3> <p>Callbacks were being called unexpectedly when errors occur due to a small issue with precedence of logical operators.</p> <h3 id="reset-content_length-between-test-requests"><a href="https://github.com/rails/rails/pull/32773">Reset <code class="highlighter-rouge">CONTENT_LENGTH</code> between test requests</a></h3> <p>If a <code class="highlighter-rouge">POST</code> request was followed by a <code class="highlighter-rouge">GET</code> request in a controller test, then the <code class="highlighter-rouge">rack.input</code> and <code class="highlighter-rouge">RAW_POST_DATA</code> headers from the first request would be reset but the <code class="highlighter-rouge">CONTENT_LENGTH</code> header would leak to the second request.</p> <p>As always there were many more changes to the Rails codebase than we can cover here. But you can read all about them <a href="https://github.com/rails/rails/compare/master@%7B2018-04-28%7D...@%7B2018-05-12%7D">here</a>! Until next week!</p>repinelHello everyone! This is Roque bringing you the latest news from the Rails world. I will cover the highlights from the last two weeks. Let’s get started!Arel merged to Active Record, faster image processing and more2018-04-29T00:00:00+00:002018-04-29T00:00:00+00:00https://weblog.rubyonrails.org/2018/4/29/this-week-in-rails-arel-merged-to-active-record-faster-image-processing-and-more<p>Hello 🌧 from London! This is <a href="http://twitter.com/kirshatrov">Kir</a>, bringing you the latest Rails updates in this episode of the newsletter.</p> <h3 id="this-weeks-contributors"><a href="http://contributors.rubyonrails.org/contributors/in-time-window/20180421-20180427">This Week’s Contributors</a></h3> <p>28 people contributed to Rails in the last week, including 3 for the first time! A big thank you to all of you!</p> <p>If you’d like to see yourself on that board, why not check out the list of <a href="https://github.com/rails/rails/issues">open issues</a>, or get involved in the <a href="https://groups.google.com/d/forum/rubyonrails-core">core discussion list</a>.</p> <h3 id="use-imageprocessing-gem-for-active-storage-variants"><a href="https://github.com/rails/rails/pull/32471">Use ImageProcessing gem for Active Storage variants</a></h3> <p>ImageProcessing gem provides a wrapper around MiniMagic and ruby-vips, allowing you to change backends on the fly and benefit from libvips being up to 10x faster than ImageMagick.</p> <h3 id="update-rails_welcomepng-to-reflect-a-more-diverse-population"><a href="https://github.com/rails/rails/pull/32735">Update ‘rails_welcome.png’ to reflect a more diverse population</a></h3> <p>The Getting Started picture that you can see in new Rails apps was updated with a more diverse population.</p> <h3 id="support-active-storage-attachment-in-presence-validator"><a href="https://github.com/rails/rails/pull/31956">Support Active Storage attachment in presence validator</a></h3> <p><code class="highlighter-rouge">assert_presence_of</code> now works with ActiveStorage attachments.</p> <h3 id="merge-arel-to-active-record"><a href="https://github.com/rails/rails/pull/32097">Merge Arel to Active Record</a></h3> <p>To simplify release management, Arel library hosted in rails/arel has been merged to ActiveRecord, and is now located in rails/rails.</p> <p>As always there were many more changes to the Rails codebase than we can cover here. But you can read all about them <a href="https://github.com/rails/rails/compare/master@%7B2018-04-21%7D...@%7B2018-04-27%7D">here</a>! Until next week!</p>kirshatrovHello 🌧 from London! This is Kir, bringing you the latest Rails updates in this episode of the newsletter.RailsConf 2018 Edition2018-04-22T00:00:00+00:002018-04-22T00:00:00+00:00https://weblog.rubyonrails.org/2018/4/22/this-week-in-rails-railsconf-2018-edition<p>Hello 🌨 from Pittsburgh! RailsConf was amazing: more than a thousand attendees showing that Rails is more alive and welcoming than ever.</p> <p>All the presentations will be available on YouTube in about a month. For now, you can take a sneak peek by browsing the slide decks: from <a href="https://speakerdeck.com/eileencodes/railsconf-2018-the-future-of-rails-6-scalable-by-default">Rails 6</a> to <a href="https://speakerdeck.com/claudiob/active-storage">Active Storage</a>, from <a href="https://speakerdeck.com/derekprior/up-and-down-again-a-migrations-tale">Migrations</a> to <a href="https://speakerdeck.com/tmikeschu/stop-testing-start-storytelling-railsconf-2018">Testing</a>, from <a href="https://speakerdeck.com/jnraine/ten-years-of-rails-upgrades">Upgrades</a> to <a href="https://speakerdeck.com/saarons/api-how-lendinghome-approaches-legacy-technologies">API</a>, from <a href="https://speakerdeck.com/vaidehijoshi/re-graphing-the-mental-model-of-the-rails-router-1">Router</a> to <a href="https://speakerdeck.com/dinahshi/your-first-contribution-and-beyond">Contributing</a>, from <a href="https://speakerdeck.com/qrush/the-graphql-way-a-new-path-for-json-apis">GraphQL</a> to <a href="https://speakerdeck.com/a_matsuda/turbo-boosting-real-world-applications">Performance</a>, from <a href="https://speakerdeck.com/justinweiss/building-a-collaborative-text-editor">Collaboration</a> to <a href="https://speakerdeck.com/lauramosher/harry-the-hedgehog-learns-you-a-communication">Communication</a>, from <a href="https://speakerdeck.com/stellacotton/so-youve-got-yourself-a-kafka-event-powered-rails-services">Kafka</a> to <a href="https://speakerdeck.com/genslein/postgres-10-performance-and-you">PostgreSQL</a>, from <a href="https://speakerdeck.com/tegon/warden-the-building-block-behind-devise">Warden</a> to <a href="https://speakerdeck.com/palkan/railsconf-2018-access-denied-the-missing-guide-to-authorization-in-rails">Authorization</a>, from <a href="https://speakerdeck.com/michaelherold/whats-in-a-price-how-to-price-your-products-and-services">Economy</a> to <a href="https://speakerdeck.com/wonderwoman13/draw-a-crowd-the-contextual-camouflage-story">Art</a>, from <a href="https://speakerdeck.com/rofreg/the-doctor-is-in-using-checkups-to-find-bugs-in-production">Bugs</a> to <a href="https://speakerdeck.com/presidentbeef/the-evolution-of-rails-security">Security</a>, from <a href="https://speakerdeck.com/dazuma/containerizing-rails-techniques-pitfalls-and-best-practices">Containers</a> to <a href="https://speakerdeck.com/xdite/blitzbuilding-product-with-rails">Crypto</a>, from <a href="https://speakerdeck.com/toomuchpete/the-code-free-developer-interview">Interviews</a> to <a href="https://speakerdeck.com/geoffreylitt/ruby-a-family-history-railsconf-2018">History</a>, from <a href="https://speakerdeck.com/sinthetix/leveling-up-a-heroic-team">Teams</a> to <a href="https://speakerdeck.com/awood45/broken-apis-break-trust-tips-for-creating-and-updating-apis">Trust</a>, from <a href="https://speakerdeck.com/edouardchin/upgrading-rails-at-scale-railsconf-2018">Shopify</a> to <a href="https://speakerdeck.com/talsafran/github-and-rails-10-years-together">GitHub</a>, from <a href="https://speakerdeck.com/lazyatom/heres-to-the-crazy-ones">Engines</a> to <a href="https://speakerdeck.com/andrewglass1/human-powered-rails-automated-crowdsourcing-in-your-rails-app">Crowdsourcing</a>, from <a href="https://speakerdeck.com/olivierlacan/the-life-and-death-of-a-rails-app">Mortality</a> to <a href="https://speakerdeck.com/erniemiller/stating-the-obvious">Life</a>, there was really something for everyone!</p> <h3 id="this-weeks-contributors"><a href="http://contributors.rubyonrails.org/contributors/in-time-window/20180414-20180420">This Week’s Contributors</a></h3> <p>37 people contributed to Rails in the last week, including 9 for the first time! A big thank you to all of you!</p> <p>If you’d like to see yourself on that board, why not check out the list of <a href="https://github.com/rails/rails/issues">open issues</a>, or get involved in the <a href="https://groups.google.com/d/forum/rubyonrails-core">core discussion list</a>.</p> <h3 id="inclusive-language-in-documentation-examples"><a href="https://github.com/rails/rails/pull/32582">Inclusive Language in Documentation Examples</a></h3> <p>A couple of changes to make the docs more inclusive of trans and non-binary individuals. Hurray! 💗🌈🏳️‍🌈</p> <h3 id="add-the-nonce-true-option-for-javascript_include_tag-helper"><a href="https://github.com/rails/rails/pull/32607">Add the <code class="highlighter-rouge">nonce: true</code> option for <code class="highlighter-rouge">javascript_include_tag</code> helper</a></h3> <p>Works the same way as <em>javascript_tag nonce: true</em> to support automatic nonce generation for Content Security Policy.</p> <h3 id="improve-performance-of-translation-helper"><a href="https://github.com/rails/rails/pull/32326">Improve performance of translation helper</a></h3> <p>A PR that is worth reading to learn how to benchmark a possible performance improvement using the right tools.</p> <h3 id="dont-pass-splat-keyword-arguments-as-a-single-hash"><a href="https://github.com/rails/rails/pull/32612">Don’t pass splat keyword arguments as a single Hash</a></h3> <p>Looking ahead at Ruby 2.6, which will raise a warning when a method is called with <em>(*args)</em>. Declaring the arguments makes for more readable code.</p> <h3 id="fix-exception-in-astimezoneall-when-any-tzinfo-data-is-missing"><a href="https://github.com/rails/rails/pull/32613">Fix exception in AS::Timezone.all when any tzinfo data is missing</a></h3> <p>Time zones change every year, even <a href="https://www.iana.org/time-zones">multiple times a year</a>. <em>ActiveSupport::Timezone.all</em> won’t raise an error even when a time zone is missing from TZInfo.</p> <h3 id="output-only-one-nonce-in-csp-header-per-request"><a href="https://github.com/rails/rails/pull/32602">Output only one nonce in CSP header per request</a></h3> <p>Nonces from old requests were saved, causing the header to grow infinitely after every request.</p> <h3 id="avoid-blocking-the-server-in-delete_matched"><a href="https://github.com/rails/rails/commit/ef2af628a9ec1cc4e7b6997a021dd3f85cfe4665">Avoid blocking the server in <code class="highlighter-rouge">#delete_matched</code></a></h3> <p>A fix to the newly added redis-cache-store feature of Rails 5.2. Calling <em>delete_matched</em> will no longer block the Redis server.</p> <p>Coming back home after an amazing event like RailsConf is always tough. Can’t wait to see you all next year at RailsConf 2019 in Minneapolis from April 30th to May 2nd. Hopefully it won’t snow! 🤞– <a href="http://claudiob.github.io">Claudio</a></p>claudiobHello 🌨 from Pittsburgh! RailsConf was amazing: more than a thousand attendees showing that Rails is more alive and welcoming than ever.Rails 5.2.0, performance optimizations, space-saving compression and more!2018-04-15T00:00:00+00:002018-04-15T00:00:00+00:00https://weblog.rubyonrails.org/2018/4/15/this-week-in-rails-rails-5-2-0-performance-optimizations-space-saving-compression-and-more<p>And now a Rails 🌩 News Flash 🌩! (Hint: we’ve got some big news this week, if you hadn’t heard). We take you now, live, to our reporter on the scene, <a href="https://twitter.com/imtayadeway">Tim</a>, for all the latest and greatest this week.</p> <h3 id="rails-520-is-out"><a href="http://weblog.rubyonrails.org/2018/4/9/Rails-5-2-0-final/">Rails 5.2.0 is out!</a></h3> <p>5.2.0 is officially among us, a little bit ahead of <a href="http://railsconf.com/">RailsConf</a> this year. If you can’t wait until then to find out everything that this new release brings, do go read the original <a href="http://weblog.rubyonrails.org/2018/4/9/Rails-5-2-0-final/">blog post</a> that accompanied the release for all the details!</p> <h3 id="this-weeks-contributors"><a href="http://contributors.rubyonrails.org/contributors/in-time-window/20180401-20180413">This Week’s Contributors</a></h3> <p>48 people contributed to Rails in the last two weeks, including an incredible 11 for the first time! A big thank you to all of you!</p> <p>If you’d like to see yourself on that board, why not check out the list of <a href="https://github.com/rails/rails/issues">open issues</a>, or get involved in the <a href="https://groups.google.com/d/forum/rubyonrails-core">core discussion list</a>.</p> <h3 id="api-controliers-now-get-a-set-of-default-headers"><a href="https://github.com/rails/rails/pull/32484">API controlIers now get a set of default headers</a></h3> <p>Though you may not need all these headers, there are specific instances where you may want them to enhance security, so it makes sense to have this configured on by default.</p> <h3 id="an-optimization-for-the-query-cache-middleware"><a href="https://github.com/rails/rails/pull/32414">An optimization for the Query Cache middleware</a></h3> <p>This nice little optimization eliminated some array allocations, that you may benefit from if you have a large number of connection pools.</p> <h3 id="avoid-generating-full-changes-hash-on-every-save"><a href="https://github.com/rails/rails/pull/32497">Avoid generating full changes hash on every save</a></h3> <p>By asking the mutation tracker for the list of changed attributes, some work can be skipped when generating the changes hash. This may be most noticeable for serialized attributes, for which calling <code class="highlighter-rouge">#original_value</code> can be significantly more expensive.</p> <h3 id="fix-activesupportcache-compression"><a href="https://github.com/rails/rails/pull/32539">Fix ActiveSupport::Cache compression</a></h3> <p>A regression was found whereby compressed items in the cache store were taking up more space than their original, uncompressed versions. That is now fixed thanks to the great detective work shown in this PR!</p> <p>As always there were many more changes to the Rails codebase than we can cover here. But you can read all about them <a href="https://github.com/rails/rails/compare/master@%7B2018-04-01%7D...@%7B2018-04-13%7D">here</a>! Until next week!</p>imtayadewayAnd now a Rails 🌩 News Flash 🌩! (Hint: we’ve got some big news this week, if you hadn’t heard). We take you now, live, to our reporter on the scene, Tim, for all the latest and greatest this week.Rails 5.2.0 FINAL: Active Storage, Redis Cache Store, HTTP/2 Early Hints, CSP, Credentials2018-04-09T21:00:00+00:002018-04-09T21:00:00+00:00https://weblog.rubyonrails.org/2018/4/9/Rails-5-2-0-final<p>Nearly 14 years since <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/107370">the first public version of Rails</a>, it’s our pleasure to release yet another major upgrade to the framework in the form of 5.2.0 final. We’ve been diligently polishing Active Storage and the other big new components for stable release, and it’s great to see so many applications already running the release candidates in production. <a href="https://basecamp.com">Basecamp</a> and <a href="https://shopify.com">Shopify</a> have both been running Rails 5.2.0 for quite a while.</p> <p>This release comes just in time for <a href="https://railsconf.com/">RailsConf</a>, which features sessions on the new <a href="https://railsconf.com/program/sessions#session-627">encrypted credentials</a>, <a href="https://railsconf.com/program/sessions#session-562">a code review of Active Storage</a>, <a href="https://railsconf.com/program/sessions#session-588">advice on how to upgrade to a new Rails version</a>, and a <a href="https://railsconf.com/program/sessions#session-552">lot</a> <a href="https://railsconf.com/program/sessions#session-568">of</a> <a href="https://railsconf.com/program/sessions#session-549">Webpack</a> talks.</p> <p>You can read in even more detail about everything that’s <a href="http://edgeguides.rubyonrails.org/5_2_release_notes.html">new in Rails 5.2 in the newly finished release notes</a>.</p> <p>Note that <a href="https://github.com/rails/rails">rails/master</a> development is now targeting Rails 6.0.</p> <p>Many thanks to Rails core, Rails contributors, and everyone else who’ve helped with code, documentation, bug reports, and whatever else to get Rails 5.2.0 out the door. It’s amazing to have <a href="http://contributors.rubyonrails.org/releases/5-2-0/contributors">over 400 code contributors</a> with fingerprints on this release.</p> <h2 id="feature-highlights">Feature highlights</h2> <p>It’s been too hard to deal with file uploads in Rails for too long. Sure, there’s been a lot of fine plugins available, but it was overdue that we incorporated something right into the framework. So now we have!</p> <p>With the new <a href="https://github.com/rails/rails/blob/d3893ec38ec61282c2598b01a298124356d6b35a/activestorage/README.md">Active Storage</a> framework in Rails 5.2, we’ve solved for the modern approach of uploading files straight to the cloud. Out of the box, there’s support for Amazon’s S3, Google’s Cloud Storage, and Microsoft Azure Cloud File Storage.</p> <p>If you’re dealing with images, you can create variants on the fly. If you’re dealing with videos or PDFs, you can create previews on the fly. And regardless of the type, you can analyze uploads for metadata extraction asynchronously.</p> <p>Active Storage was extracted from Basecamp 3 by George Claghorn and yours truly. So not only is the framework already used in production, it was born from production. There’s that Extraction Design guarantee stamp alright!</p> <p>Speaking of extractions, Jeremy Daer has untangled the long jungle twine of hacks we were using at Basecamp to employ Redis for general partial, fragment, and other Rails caching jobs. There’s a sparkling new <a href="https://github.com/rails/rails/pull/31134">Redis Cache Store</a> that incorporates all those years of veteran hacks into a cohesive unit that anyone can use.</p> <p>This new Redis Cache Store supports Redis::Distributed, for Memcached-like sharding across Redises. It’s fault tolerant, so will treat failures like misses, rather than kill the request with an exception. It even supports distributed MGETs for that full partial collection caching goodness.</p> <p>This comes together with a massive leap forward for cache efficiency with <a href="https://github.com/rails/rails/pull/29092">key recycling</a> and <a href="https://github.com/rails/rails/pull/31147">compression</a> both available by default. For Basecamp, it meant improving the cache lifetime by two orders of magnitude! We went from having caches trashed in as little as a day to having caches last for months. If you’re using partial caching and the nesting doll strategy, your cache lifetime will improve dramatically between these two changes.</p> <p>We’ve also embraced the cherry of HTTP/2 with <a href="https://github.com/rails/rails/pull/30744">early hints</a> through the work of Aaron Patterson and Eileen Uchitelle. This means we can automatically instruct the web server to send required style sheet and JavaScript assets early. Which means faster full page delivery, as who wouldn’t want that?</p> <p>On the topic of performance, Rails now ships with <a href="https://github.com/Shopify/bootsnap">Bootsnap</a> in the default <code class="highlighter-rouge">Gemfile</code>, created by our friends at Shopify. It generally reduces application boot times by over 50%.</p> <p>Rails has always been in the forefront of making your web applications more secure, leading the way with built-in CSRF and XSS protection and we’ve enhanced that further in Rails 5.2 with <a href="https://github.com/rails/rails/pull/31162">the addition of a new DSL</a> that allows you to configure a <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy">Content Security Policy</a> for your application. You can configure a global default policy and then override it on a per-resource basis and even use lambdas to inject per-request values into the header such as account subdomains in a multi-tenant application.</p> <p>But it’s not all just new starry-eyed wonders. In Rails 5.1, we added <a href="https://github.com/rails/rails/pull/28038">encrypted secrets</a>. These secrets were like the old secrets but, uhm, more secret, because, you know, ENCRYPTION! Confusing? Yes. Why would you want secrets that weren’t really secret? Well, you don’t.</p> <p>In Rails 5.2, we’ve rectified the mess by deprecating the two different kinds of secrets and introduced a new shared concept called <a href="https://github.com/rails/rails/pull/30067">Credentials</a>. Credentials, like AWS access keys and other forms of logins and passwords, were the dominant use case for secrets, so why not just call a spade a spade. So spade it is!</p> <p>Credentials are always encrypted. This means they’re safe to check into revision control, as long as you keep the key out of it. That means atomic deploys, no need to mess with a flurry of environment variables, and other benefits of having all credentials that the app needs in one place, safe and secure.</p> <p>In addition, we’ve opened up the API underlying Credentials, so you can easily deal with other encrypted configurations, keys, and files.</p> <p>Since Rails 5.1, we’ve also made great strides with <a href="https://github.com/rails/webpacker">Webpacker</a>. So Rails 5.2 is meant to pair beautifully with the new Webpacker 3.0 release. Rails has fully embraced modern JavaScript with a pre-configured build pipeline run by Webpack. We keep strengthening that relationship.</p>dhhNearly 14 years since the first public version of Rails, it’s our pleasure to release yet another major upgrade to the framework in the form of 5.2.0 final. We’ve been diligently polishing Active Storage and the other big new components for stable release, and it’s great to see so many applications already running the release candidates in production. Basecamp and Shopify have both been running Rails 5.2.0 for quite a while.New Rails bug fix releases, closer to multi dbs and more!2018-03-31T00:00:00+00:002018-03-31T00:00:00+00:00https://weblog.rubyonrails.org/2018/3/31/this-week-in-rails-new-rails-bug-fix-releases-closer-to-multi-dbs-and-more<p>Hey there, esteemed readers of Rails’ public repo tea leaves. It’s <a href="https://twitter.com/kaspth">Kasper</a> bringing you the latest hot cup to steel transcendence from.</p> <h3 id="this-weeks-contributors"><a href="http://contributors.rubyonrails.org/contributors/in-time-window/20180324-20180331">This Week’s Contributors</a></h3> <p>Here goes a hey-o to the 16 contributors this week! You can make the list no doubt, try finding an <a href="https://github.com/rails/rails/issues">open issue</a>.</p> <h3 id="rails-507-and-516-are-out"><a href="http://weblog.rubyonrails.org/2018/3/29/Rails-5-0-7-and-5-1-6-have-been-released/">Rails 5.0.7 and 5.1.6 are out</a></h3> <p>New bug fix releases are out, so you can upgrade your apps today.</p> <h3 id="easy-multi-databases-basic-rake-tasks"><a href="https://github.com/rails/rails/pull/32274">Easy Multi databases: basic rake tasks</a></h3> <p>For applications with multiple databases you always had to create your own rake tasks. No more! One of the stepping stones for Rails 6.0 to have multi db support out of the box is in.</p> <h3 id="compare-dates-with-before-and-after"><a href="https://github.com/rails/rails/pull/32185">Compare dates with before? and after?</a></h3> <p>To compare two dates and/or times we’d use the standard &lt; and &gt; operators. Now date arithmetic is a little easier with <em>today.before?(tomorrow)</em> and <em>today.after?(yesterday)</em>. Thus joining <em>today.between?(yesterday, tomorrow)</em>. Your app now has no excuse not to show up on time!</p> <h3 id="allow-prefixing-store-attributes"><a href="https://github.com/rails/rails/pull/32306">Allow prefixing store attributes</a></h3> <p>In the vein of <em>delegate :name, to: :person, prefix: true</em> adding <em>person_name</em>, your store attributes now houses the same trick to squash duplicate accessors. Also sports specific prefixes to really clear the path of method name clashing.</p> <h3 id="favor-app-wide-configforce_ssl-for-https"><a href="https://github.com/rails/rails/pull/32277">Favor app-wide config.force_ssl for HTTPS</a></h3> <p>Rails has long had a way to incrementally force users onto HTTPS, a controller level force_ssl! Times have changed and Rails 6.0 deprecates that option in favor of the app-wide config.force_ssl so every endpoint will use HTTPS.</p> <p>There were many more changes to Rails’ codebase, which you can check out <a href="https://github.com/rails/rails/compare/master@%7B2018-03-24%7D...@%7B2018-03-31%7D">here</a>.<br /> Until next week!</p>kaspthHey there, esteemed readers of Rails’ public repo tea leaves. It’s Kasper bringing you the latest hot cup to steel transcendence from.Rails 5.0.7 and 5.1.6 have been released2018-03-29T18:40:00+00:002018-03-29T18:40:00+00:00https://weblog.rubyonrails.org/2018/3/29/Rails-5-0-7-and-5-1-6-have-been-released<p>Hi everyone,</p> <p>I am happy to announce that Rails 5.0.7 and 5.1.6 have been released.</p> <h2 id="changes-since-506">CHANGES since 5.0.6</h2> <p>To view the changes for each gem, please read the changelogs on GitHub:</p> <ul> <li><a href="https://github.com/rails/rails/blob/v5.0.7/actioncable/CHANGELOG.md">Action Cable CHANGELOG</a></li> <li><a href="https://github.com/rails/rails/blob/v5.0.7/actionmailer/CHANGELOG.md">Action Mailer CHANGELOG</a></li> <li><a href="https://github.com/rails/rails/blob/v5.0.7/actionpack/CHANGELOG.md">Action Pack CHANGELOG</a></li> <li><a href="https://github.com/rails/rails/blob/v5.0.7/actionview/CHANGELOG.md">Action View CHANGELOG</a></li> <li><a href="https://github.com/rails/rails/blob/v5.0.7/activejob/CHANGELOG.md">Active Job CHANGELOG</a></li> <li><a href="https://github.com/rails/rails/blob/v5.0.7/activemodel/CHANGELOG.md">Active Model CHANGELOG</a></li> <li><a href="https://github.com/rails/rails/blob/v5.0.7/activerecord/CHANGELOG.md">Active Record CHANGELOG</a></li> <li><a href="https://github.com/rails/rails/blob/v5.0.7/activesupport/CHANGELOG.md">Active Support CHANGELOG</a></li> <li><a href="https://github.com/rails/rails/blob/v5.0.7/railties/CHANGELOG.md">Railties CHANGELOG</a></li> </ul> <p><em>Full listing</em></p> <p>To see the full list of changes, <a href="https://github.com/rails/rails/compare/v5.0.6...v5.0.7">check out all the commits on GitHub</a>.</p> <h2 id="changes-since-515">CHANGES since 5.1.5</h2> <p>To view the changes for each gem, please read the changelogs on GitHub:</p> <ul> <li><a href="https://github.com/rails/rails/blob/v5.1.6/actioncable/CHANGELOG.md">Action Cable CHANGELOG</a></li> <li><a href="https://github.com/rails/rails/blob/v5.1.6/actionmailer/CHANGELOG.md">Action Mailer CHANGELOG</a></li> <li><a href="https://github.com/rails/rails/blob/v5.1.6/actionpack/CHANGELOG.md">Action Pack CHANGELOG</a></li> <li><a href="https://github.com/rails/rails/blob/v5.1.6/actionview/CHANGELOG.md">Action View CHANGELOG</a></li> <li><a href="https://github.com/rails/rails/blob/v5.1.6/activejob/CHANGELOG.md">Active Job CHANGELOG</a></li> <li><a href="https://github.com/rails/rails/blob/v5.1.6/activemodel/CHANGELOG.md">Active Model CHANGELOG</a></li> <li><a href="https://github.com/rails/rails/blob/v5.1.6/activerecord/CHANGELOG.md">Active Record CHANGELOG</a></li> <li><a href="https://github.com/rails/rails/blob/v5.1.6/activesupport/CHANGELOG.md">Active Support CHANGELOG</a></li> <li><a href="https://github.com/rails/rails/blob/v5.1.6/railties/CHANGELOG.md">Railties CHANGELOG</a></li> </ul> <p><em>Full listing</em></p> <p>To see the full list of changes, <a href="https://github.com/rails/rails/compare/v5.1.5...v5.1.6">check out all the commits on GitHub</a>.</p> <h2 id="sha-256">SHA-256</h2> <p>If you’d like to verify that your gem is the same as the one I’ve uploaded, please use these SHA-256 hashes.</p> <p>Here are the checksums for 5.0.7:</p> <div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ shasum -a 256 *-5.0.7.gem c023d1df2fd6f5e1ac042ad6a0338e8a2c4d1404484f8fe77121b81f10b75f2c actioncable-5.0.7.gem 5f9b12f26ae8906d20b9f4784644853121a3b03f74a396943677fc30f91c2e35 actionmailer-5.0.7.gem 08e0d4582d1b37cc059aca1d19cd271e7bb575265093c4a99cb79d80dcb0d196 actionpack-5.0.7.gem eb20007cc9ee40ee7a2f96147e9776394f72d59979b23da15f444a9906c17b8b actionview-5.0.7.gem e8a15b73302c02352da9463b134daf037841fec7d5d5c2ec97487456f96bb8d5 activejob-5.0.7.gem fe35b1bbfb140c7416723e3a7d7ef2a78e8921739863d8a917a93131e2b7cc87 activemodel-5.0.7.gem c6349cd59e29118aaed5d4d2414e87b427affd28925b7fe1559cb45a21152366 activerecord-5.0.7.gem a595a42311ea13ce994b1feea3325cbbb1ac5c0bf40cd96c89797882121da7fb activesupport-5.0.7.gem 76815a2a7e99c83b53ea52325c5bbc5ca15e25ecdfb741ea329ca153cf11ff84 rails-5.0.7.gem e08b95ec3dbb708f9d449a01c083c66d47ddba2f373e4a2fd1bde2c7a92fdb48 railties-5.0.7.gem </code></pre></div></div> <p>Here are the checksums for 5.1.6:</p> <div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ shasum -a 256 *-5.1.6.gem 2e678b45852f242e5897a0d4e43dca1088fb3d5c350592b22768b502a085261f actioncable-5.1.6.gem ecbc307e66102b1406fba38f6d7c869fd763cafa98b02fd4f6049fd41d663de9 actionmailer-5.1.6.gem 8dcd333263bdea533de7ac8e087f530f20bde6167c3c02060b82630b90aee26f actionpack-5.1.6.gem 0181e71b9d307425605c50aa70358148aa0dff270bf2e07dbb87acb3d3a7ddcd actionview-5.1.6.gem a291963337402f3dcd5aee1dff3fd980256742bb0cfa06c47315257d11d69a0a activejob-5.1.6.gem 7e3d2904a524a18c4f710a170243eac706279a36142289431d3c504df665c881 activemodel-5.1.6.gem 1da0546d452cc9b25b900bc2616b57d1e41e24039c33466b46d7add27fdf13c7 activerecord-5.1.6.gem 94d2f2a9fe1a7421165e0014eaa4c8eb2d229f72dc9815cf7c2f0c595f05b521 activesupport-5.1.6.gem b8301a87151de3feb7cbdf57a66842bb668493f4cec464fd0f67d4c7173b6051 rails-5.1.6.gem 482a97c40ff61f4e8aed5f449a5f54fcb3890ddd53c3a7dc0efd02a9da139e79 railties-5.1.6.gem </code></pre></div></div> <p>As always, huge thanks to the many contributors who helped with this release.</p>pixeltrixHi everyone,Rails 5.2.0.RC2, AWS authentication options and more2018-03-24T00:00:00+00:002018-03-24T00:00:00+00:00https://weblog.rubyonrails.org/2018/3/24/this-week-in-rails-rails-5-2-0-rc2-aws-authentication-options-and-more<p>Hello fellow Rubyists, this is <a href="https://twitter.com/morgoth85">Wojtek</a> bringing you the polished set of latest Rails news.<br /> We do like to “polish” things here in Poland ;-)</p> <h3 id="rails-520rc2-released"><a href="http://weblog.rubyonrails.org/2018/3/20/Rails-5-2-RC2/">Rails 5.2.0.RC2 released</a></h3> <p>Aiming for 5.2.0 final version to be released before the RailsConf in April. Help us test it, to have a solid and stable release.</p> <h3 id="this-weeks-contributors"><a href="http://contributors.rubyonrails.org/contributors/in-time-window/20180318-20180324">This Week’s Contributors</a></h3> <p>Big thanks to 16 people who contributed to Rails this week! If you’d like to join them, check out the list of <a href="https://github.com/rails/rails/issues">open issues</a>.</p> <h3 id="allow-full-use-of-the-aws-s3-sdk-authentication-options"><a href="https://github.com/rails/rails/commit/c1600009b2bbb3b67db20ddb14fef34d4cfa82bc">Allow full use of the AWS S3 SDK authentication options</a></h3> <p>It’s now possible to use environment variables and IAM roles to authenticate to AWS in Active Storage.</p> <h3 id="support-mysql2-gem-version-05"><a href="https://github.com/rails/rails/commit/9f5477af93d18e9644903f89bce4ffde13cc376e">Support mysql2 gem version 0.5</a></h3> <p>New version of mysql2 gem brings some bugfixes and features but also some backward incompatibilites. Check them out in <a href="https://github.com/brianmario/mysql2/releases/tag/0.5.0">changelog</a>.</p> <h3 id="memoize-the-result-of-calculating-path-to-translation"><a href="https://github.com/rails/rails/commit/05eaa07627376626902bd7acde35406edf1bb2f2">Memoize the result of calculating path to translation</a></h3> <p>Speeds up usage of <strong>I18n.translate</strong>. Benchmark included in the comments.</p> <h3 id="use-ascii-8bit-paths-in-actiondispatchstatic"><a href="https://github.com/rails/rails/commit/2ef145883348e92c9e6393ece9b6967e3a5a80c7">Use ASCII-8BIT paths in ActionDispatch::Static</a></h3> <p>Fixes encoding incompatibilites between Rack and Rails middlewares.</p> <h3 id="remove-support-for-qu-gem-from-active-job"><a href="https://github.com/rails/rails/commit/6ef720791d6532a107f4777edfe1d708b6b9c068">Remove support for Qu gem from Active Job</a></h3> <p>Qu gem wasn’t compatible since Rails 5.1. Development was stopped in 2014 and maintainers have confirmed its demise.</p> <p>There were many more changes to Rails’ codebase, which you can check out <a href="https://github.com/rails/rails/compare/master@%7B2018-03-18%7D...@%7B2018-03-24%7D">here</a>.<br /> Until next week!</p>morgoth85Hello fellow Rubyists, this is Wojtek bringing you the polished set of latest Rails news. We do like to “polish” things here in Poland ;-)Rails 5.2.0 RC2: Active Storage, Redis Cache Store, HTTP/2 Early Hints, CSP, Credentials2018-03-20T21:00:00+00:002018-03-20T21:00:00+00:00https://weblog.rubyonrails.org/2018/3/20/Rails-5-2-RC2<p>It’s almost time for <a href="https://railsconf.com">RailsConf</a>, and we’re determined to get the final version of Rails 5.2 released before then. So here’s the hopefully last release candidate before that can happen. We’ve put a ton of into ironing out all the issues with Active Storage in particular, now that more and more applications are starting to use it in production.</p> <p>You can peruse the <a href="https://github.com/rails/rails/compare/v5.2.0.rc1...v5.2.0.rc2">nearly 200 commits</a> since the first release candidate from the beginning of the year to see everything that has been fixed.</p> <p>If you’re about to start a new application, I feel confident enough in this release to recommend that you should base it off this RC2. If you like to keep up with the latest release, now is also a great time to update your existing application.</p> <p>You can read in even more detail about everything that’s <a href="http://edgeguides.rubyonrails.org/5_2_release_notes.html">new in Rails 5.2 in the newly finished release notes</a>.</p> <p>Enjoy Rails 5.2 and hope to see a good portion of everybody at RailsConf in a month or so!</p> <h2 id="recap-of-the-highlights-of-rails-52-from-the-beta-announcement">Recap of the highlights of Rails 5.2 from the beta announcement</h2> <p>It’s been too hard to deal with file uploads in Rails for too long. Sure, there’s been a lot of fine plugins available, but it was overdue that we incorporated something right into the framework. So now we have!</p> <p>With the new <a href="https://github.com/rails/rails/blob/d3893ec38ec61282c2598b01a298124356d6b35a/activestorage/README.md">Active Storage</a> framework in Rails 5.2, we’ve solved for the modern approach of uploading files straight to the cloud. Out of the box, there’s support for Amazon’s S3, Google’s Cloud Storage, and Microsoft Azure Cloud File Storage.</p> <p>If you’re dealing with images, you can create variants on the fly. If you’re dealing with videos or PDFs, you can create previews on the fly. And regardless of the type, you can analyze uploads for metadata extraction asynchronously.</p> <p>Active Storage was extracted from Basecamp 3 by George Claghorn and yours truly. So not only is the framework already used in production, it was born from production. There’s that Extraction Design guarantee stamp alright!</p> <p>Speaking of extractions, Jeremy Daer has untangled the long jungle twine of hacks we were using at Basecamp to employ Redis for general partial, fragment, and other Rails caching jobs. There’s a sparkling new <a href="https://github.com/rails/rails/pull/31134">Redis Cache Store</a> that incorporates all those years of veteran hacks into a cohesive unit that anyone can use.</p> <p>This new Redis Cache Store supports Redis::Distributed, for Memcached-like sharding across Redises. It’s fault tolerant, so will treat failures like misses, rather than kill the request with an exception. It even supports distributed MGETs for that full partial collection caching goodness.</p> <p>This comes together with a massive leap forward for cache efficiency with <a href="https://github.com/rails/rails/pull/29092">key recycling</a> and <a href="https://github.com/rails/rails/pull/31147">compression</a> both available by default. For Basecamp, it meant improving the cache lifetime by two orders of magnitude! We went from having caches trashed in as little as a day to having caches last for months. If you’re using partial caching and the nesting doll strategy, your cache lifetime will improve dramatically between these two changes.</p> <p>We’ve also embraced the cherry of HTTP/2 with <a href="https://github.com/rails/rails/pull/30744">early hints</a> through the work of Aaron Patterson and Eileen Uchitelle. This means we can automatically instruct the web server to send required style sheet and JavaScript assets early. Which means faster full page delivery, as who wouldn’t want that?</p> <p>On the topic of performance, Rails now ships with <a href="https://github.com/Shopify/bootsnap">Bootsnap</a> in the default <code class="highlighter-rouge">Gemfile</code>, created by our friends at Shopify. It generally reduces application boot times by over 50%.</p> <p>Rails has always been in the forefront of making your web applications more secure, leading the way with built-in CSRF and XSS protection and we’ve enhanced that further in Rails 5.2 with <a href="https://github.com/rails/rails/pull/31162">the addition of a new DSL</a> that allows you to configure a <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy">Content Security Policy</a> for your application. You can configure a global default policy and then override it on a per-resource basis and even use lambdas to inject per-request values into the header such as account subdomains in a multi-tenant application.</p> <p>But it’s not all just new starry-eyed wonders. In Rails 5.1, we added <a href="https://github.com/rails/rails/pull/28038">encrypted secrets</a>. These secrets were like the old secrets but, uhm, more secret, because, you know, ENCRYPTION! Confusing? Yes. Why would you want secrets that weren’t really secret? Well, you don’t.</p> <p>In Rails 5.2, we’ve rectified the mess by deprecating the two different kinds of secrets and introduced a new shared concept called <a href="https://github.com/rails/rails/pull/30067">Credentials</a>. Credentials, like AWS access keys and other forms of logins and passwords, were the dominant use case for secrets, so why not just call a spade a spade. So spade it is!</p> <p>Credentials are always encrypted. This means they’re safe to check into revision control, as long as you keep the key out of it. That means atomic deploys, no need to mess with a flurry of environment variables, and other benefits of having all credentials that the app needs in one place, safe and secure.</p> <p>In addition, we’ve opened up the API underlying Credentials, so you can easily deal with other encrypted configurations, keys, and files.</p> <p>Since Rails 5.1, we’ve also made great strides with <a href="https://github.com/rails/webpacker">Webpacker</a>. So Rails 5.2 is meant to pair beautifully with the new Webpacker 3.0 release. Rails has fully embraced modern JavaScript with a pre-configured build pipeline run by Webpack. We keep strengthening that relationship.</p>dhhIt’s almost time for RailsConf, and we’re determined to get the final version of Rails 5.2 released before then. So here’s the hopefully last release candidate before that can happen. We’ve put a ton of into ironing out all the issues with Active Storage in particular, now that more and more applications are starting to use it in production. ================================================ FILE: api/test/data/feed/seattle.craigslist.org ================================================ craigslist seattle | activity partners search https://seattle.craigslist.org/search/act en-us copyright 2018 craigslist robot@craigslist.org robot@craigslist.org https://seattle.craigslist.org/search/act?format=rss craigslist seattle | activity partners search Collection 2018-07-02T09:44:19-07:00 6 hourly <![CDATA[Lets meet and go on Random day trips]]> https://seattle.craigslist.org/see/act/d/lets-meet-and-go-on-random/6632393171.html 2018-07-01T22:46:51-07:00 en-us copyright 2018 craigslist https://seattle.craigslist.org/see/act/d/lets-meet-and-go-on-random/6632393171.html text 2018-07-01T22:46:51-07:00 <![CDATA[Male Workout Buddy; July 4th, 5th, 6th,7th and 8th (Mill Creek/Evt Mall, The Gym, LA fit)]]> https://seattle.craigslist.org/sno/act/d/male-workout-buddy-july-4th/6630739006.html 2018-07-01T22:00:23-07:00 en-us copyright 2018 craigslist https://seattle.craigslist.org/sno/act/d/male-workout-buddy-july-4th/6630739006.html text 2018-07-01T22:00:23-07:00 <![CDATA[Running (Seattle)]]> https://seattle.craigslist.org/see/act/d/running/6632215524.html 2018-07-01T18:12:25-07:00 en-us copyright 2018 craigslist https://seattle.craigslist.org/see/act/d/running/6632215524.html text 2018-07-01T18:12:25-07:00 <![CDATA[24 hr fitness workout partner (Everett)]]> https://seattle.craigslist.org/sno/act/d/24-hr-fitness-workout-partner/6620418628.html 2018-07-01T16:51:08-07:00 en-us copyright 2018 craigslist https://seattle.craigslist.org/sno/act/d/24-hr-fitness-workout-partner/6620418628.html text 2018-07-01T16:51:08-07:00 <![CDATA[Work out Animal. (Olympia)]]> https://seattle.craigslist.org/oly/act/d/work-out-animal/6632331043.html 2018-07-01T16:34:44-07:00 en-us copyright 2018 craigslist https://seattle.craigslist.org/oly/act/d/work-out-animal/6632331043.html text 2018-07-01T16:34:44-07:00 <![CDATA[CARS AND COFFEE & BURGERS? (KIRKLAND)]]> https://seattle.craigslist.org/est/act/d/cars-and-coffee-burgers/6632151788.html 2018-07-01T16:28:42-07:00 en-us copyright 2018 craigslist https://seattle.craigslist.org/est/act/d/cars-and-coffee-burgers/6632151788.html text 2018-07-01T16:28:42-07:00 <![CDATA[Female golfing partner wanted (lynnwood)]]> https://seattle.craigslist.org/sno/act/d/female-golfing-partner-wanted/6628002707.html 2018-07-01T14:03:25-07:00 en-us copyright 2018 craigslist https://seattle.craigslist.org/sno/act/d/female-golfing-partner-wanted/6628002707.html text 2018-07-01T14:03:25-07:00 <![CDATA[Activity partners this summer (Tacoma)]]> https://seattle.craigslist.org/tac/act/d/activity-partners-this-summer/6632253974.html 2018-07-01T12:24:14-07:00 en-us copyright 2018 craigslist https://seattle.craigslist.org/tac/act/d/activity-partners-this-summer/6632253974.html text 2018-07-01T12:24:14-07:00 <![CDATA[Looking for a buddy around my age]]> https://seattle.craigslist.org/see/act/d/looking-for-buddy-around-my/6632242163.html 2018-07-01T12:11:36-07:00 en-us copyright 2018 craigslist https://seattle.craigslist.org/see/act/d/looking-for-buddy-around-my/6632242163.html text 2018-07-01T12:11:36-07:00 <![CDATA[Seeking female 35-45 for activities (Lynnwood)]]> https://seattle.craigslist.org/sno/act/d/seeking-femalefor-activities/6631827941.html 2018-07-01T09:50:02-07:00 en-us copyright 2018 craigslist https://seattle.craigslist.org/sno/act/d/seeking-femalefor-activities/6631827941.html text 2018-07-01T09:50:02-07:00 <![CDATA[Sailing aboard S/V Solution (Elliott Bay, Seattle)]]> https://seattle.craigslist.org/see/act/d/sailing-aboard-v-solution/6614152909.html 2018-07-01T09:35:22-07:00 en-us copyright 2018 craigslist https://seattle.craigslist.org/see/act/d/sailing-aboard-v-solution/6614152909.html text 2018-07-01T09:35:22-07:00 <![CDATA[alpha west walk about.. (steil/dupont road)]]> https://seattle.craigslist.org/tac/act/d/alpha-west-walk-about/6631768469.html 2018-07-01T09:19:48-07:00 en-us copyright 2018 craigslist https://seattle.craigslist.org/tac/act/d/alpha-west-walk-about/6631768469.html text 2018-07-01T09:19:48-07:00 <![CDATA[Wine / Vineyard - Wine Making Grape Growing (Snohomish County)]]> https://seattle.craigslist.org/sno/act/d/wine-vineyard-wine-making/6614322262.html 2018-07-01T08:58:12-07:00 en-us copyright 2018 craigslist https://seattle.craigslist.org/sno/act/d/wine-vineyard-wine-making/6614322262.html text 2018-07-01T08:58:12-07:00 <![CDATA[Hiking partner : To enjoy nature]]> https://seattle.craigslist.org/see/act/d/hiking-partner-to-enjoy-nature/6631782735.html 2018-07-01T08:56:17-07:00 en-us copyright 2018 craigslist https://seattle.craigslist.org/see/act/d/hiking-partner-to-enjoy-nature/6631782735.html text 2018-07-01T08:56:17-07:00 <![CDATA[mature m activity partner for the same (auburn)]]> https://seattle.craigslist.org/skc/act/d/mature-activity-partner-for/6631727661.html 2018-07-01T08:21:46-07:00 en-us copyright 2018 craigslist https://seattle.craigslist.org/skc/act/d/mature-activity-partner-for/6631727661.html text 2018-07-01T08:21:46-07:00 <![CDATA[Kayaking in and around Tacoma (Tacoma)]]> https://seattle.craigslist.org/tac/act/d/kayaking-in-and-around-tacoma/6631750260.html 2018-07-01T08:16:06-07:00 en-us copyright 2018 craigslist https://seattle.craigslist.org/tac/act/d/kayaking-in-and-around-tacoma/6631750260.html text 2018-07-01T08:16:06-07:00 <![CDATA[Mens Golf Group (Puget Sound)]]> https://seattle.craigslist.org/tac/act/d/mens-golf-group/6631736202.html 2018-07-01T07:57:27-07:00 en-us copyright 2018 craigslist https://seattle.craigslist.org/tac/act/d/mens-golf-group/6631736202.html text 2018-07-01T07:57:27-07:00 <![CDATA[Female walking partner (Olympia)]]> https://seattle.craigslist.org/oly/act/d/female-walking-partner/6626343462.html 2018-07-01T06:04:49-07:00 en-us copyright 2018 craigslist https://seattle.craigslist.org/oly/act/d/female-walking-partner/6626343462.html text 2018-07-01T06:04:49-07:00 <![CDATA[old and chubby on a bike (n.seattle/ shoreline)]]> https://seattle.craigslist.org/see/act/d/old-and-chubby-on-bike/6631712347.html 2018-07-01T00:21:23-07:00 en-us copyright 2018 craigslist https://seattle.craigslist.org/see/act/d/old-and-chubby-on-bike/6631712347.html text 2018-07-01T00:21:23-07:00 <![CDATA[Activity Partner to Travel Vegas, Hike Zion Bryce]]> https://seattle.craigslist.org/see/act/d/activity-partner-to-travel/6631467649.html 2018-06-30T17:02:10-07:00 en-us copyright 2018 craigslist https://seattle.craigslist.org/see/act/d/activity-partner-to-travel/6631467649.html text 2018-06-30T17:02:10-07:00 <![CDATA[Looking for Texas holdem players for League. (Online)]]> https://seattle.craigslist.org/see/act/d/looking-for-texas-holdem/6631422180.html 2018-06-30T16:02:20-07:00 en-us copyright 2018 craigslist https://seattle.craigslist.org/see/act/d/looking-for-texas-holdem/6631422180.html text 2018-06-30T16:02:20-07:00 <![CDATA[Meditation Practice for Men]]> https://seattle.craigslist.org/see/act/d/meditation-practice-for-men/6631387220.html 2018-06-30T14:59:54-07:00 en-us copyright 2018 craigslist https://seattle.craigslist.org/see/act/d/meditation-practice-for-men/6631387220.html text 2018-06-30T14:59:54-07:00 <![CDATA[Attack on Titan Season 3 Viewing Party (Federal Way)]]> https://seattle.craigslist.org/skc/act/d/attack-on-titan-season-3/6631327800.html 2018-06-30T14:09:33-07:00 en-us copyright 2018 craigslist https://seattle.craigslist.org/skc/act/d/attack-on-titan-season-3/6631327800.html text 2018-06-30T14:09:33-07:00 <![CDATA[july 4 th Lake Boren companionship]]> https://seattle.craigslist.org/est/act/d/july-4-th-lake-boren/6631166975.html 2018-06-30T11:15:27-07:00 en-us copyright 2018 craigslist https://seattle.craigslist.org/est/act/d/july-4-th-lake-boren/6631166975.html text 2018-06-30T11:15:27-07:00 <![CDATA[looking for tennis partner or more sport activity]]> https://seattle.craigslist.org/est/act/d/looking-for-tennis-partner-or/6631167810.html 2018-06-30T11:12:18-07:00 en-us copyright 2018 craigslist https://seattle.craigslist.org/est/act/d/looking-for-tennis-partner-or/6631167810.html text 2018-06-30T11:12:18-07:00 ================================================ FILE: api/test/data/feed/shanzhuoboshi.com ================================================ 闪卓博识 – 官方网站 http://www.shanzhuoboshi.com 在这里你将学会如何使用及精通闪光灯,利用闪光灯你可以拍出优秀的相片 Fri, 27 Feb 2015 22:26:57 +0000 zh-CN hourly 1 https://wordpress.org/?v=4.9.6 闪卓博识谢幕 http://www.shanzhuoboshi.com/blog/2013/12/31/29904.html http://www.shanzhuoboshi.com/blog/2013/12/31/29904.html#comments Tue, 31 Dec 2013 01:04:36 +0000 http://www.shanzhuoboshi.com/?p=29904 2009年,我开办了闪卓博识中国网站,想通过这个平台跟讲汉语的朋友分享我对离机闪光灯布光的热爱。那个时候学习用闪光灯布光的资源还不多,汉语资源就更少了。而且,网上高质量的免费资源也很匮乏。

闪卓博识中国网站自开办以来发展异常迅猛,知道有很多人一直在浏览和支持闪卓博识网站,我真的很高兴。现在,闪卓博识网站的读者已经遍布全球175个国家,读者人数超过1百万人,大家齐聚闪卓博识,共同分享对离机闪光灯布光的热爱。

看着大家的成长与进步和对离机闪光灯不减的热情,我由衷地高兴。这些年来,我收到了很多给闪卓博识的感谢信,在信中他们都表达了闪卓博识网站对他们生活和事业的帮助的感谢之情,真的很令人感动。

但是,这一刻还是来临了。我已经找到了新的工作,没有多余的时间和精力再经营闪卓博识了。我会想念大家的,我不敢想象以后没有大家的陪伴我的生活会变成什么样。这一改变对我来说既有对未来生活的兴奋与憧憬,更有对离开你们这些闪卓士的伤感与不舍。以后,闪卓博识网站将不再更新文章,不过网站上现有的内容在近期内仍会开放,当然我希望能够向大家长期开放。

闪卓博识官方淘宝店以后会正常为大家服务,并保证产品的售后。我们也会继续引进新的产品到中国大陆,提供给所有闪卓士。再次衷心的感谢大家这几年对闪卓博识淘宝店的支持。

在我离开之前,我想公开感谢一些对闪卓博识网站做出贡献的重要人士:

  • 大卫•豪比——没有你对世界的卓越贡献,就不会有离机闪光灯布光的革命。你乐于助人的无私精神以及紧追摄影和网络发展的新方法都让我感到惊奇与钦佩。感谢你所做的一切!
  • 老友记的史先生——从网站开办的第一天,你就一直在大力支持闪卓博识,老友记也是淘宝上最好的网店之一。你们出色的客户服务为你们赢得了良好的口碑,我预祝你们越来越好。
  • 闪卓博识所有员工——在过去的4年里,很多幕后人员都对闪卓博识的成功起到了关键作用,而且你们经常感觉不到大家的感谢。在此,我真诚地感谢你们,感谢你们所做的艰苦努力。
  • 闪卓博识的所有赞助商和支持闪卓博识的人——没有你们,闪卓博识网站很早之前就破产了。感谢大家的长期陪伴,尤其是永诺Enlight PhotoLumiquestLumoproRosco

最后,衷心感谢闪卓博识网站的忠实读者们。你们的支持最重要,没有你们的支持,我们的所有付出都没有意义。看着你们的成长与进步,我由衷地为你们高兴。感谢大家参与我们的新兵营,在与大家的互动中我学到了很多。非常感谢大家。我希望闪卓博识已经帮大家实现了摄影梦想。

再见了,朋友们……Andrew Strauss

]]>
http://www.shanzhuoboshi.com/blog/2013/12/31/29904.html/feed 189
场记:Miller Mobley拍摄伯明翰牧师 http://www.shanzhuoboshi.com/blog/2013/12/28/29893.html http://www.shanzhuoboshi.com/blog/2013/12/28/29893.html#comments Sat, 28 Dec 2013 00:26:50 +0000 http://www.shanzhuoboshi.com/?p=29893 编者注:这篇客座文章是纽约摄影师Miller Mobley写的。

Miller Mobley拍摄的伯明翰牧师肖像照

我受伯明翰当地一家杂志的委托,拍摄一系列的医院牧师肖像照。说实话,我没有接到任何关于如何拍摄的艺术指导,所以我可以随心所欲地做我想做的事——这种感觉太棒了!

我马上开始构思拍摄。可惜,我不能到拍摄这些肖像照的医院圣地提前查看拍摄场地。我决定这样做:如果我喜欢那个场地,我就用现场环境做背景拍摄;如果我觉得环境单调无聊,我就自己布置一个背景。我一直在尝试一种新的布光,真的很想在拍摄牧师时尝试一下。所以,我期待能用自己布置的背景。结果,果真如我所愿。

]]>
http://www.shanzhuoboshi.com/blog/2013/12/28/29893.html/feed 18
怎么回事…… http://www.shanzhuoboshi.com/blog/2013/12/26/29885.html http://www.shanzhuoboshi.com/blog/2013/12/26/29885.html#comments Thu, 26 Dec 2013 01:13:06 +0000 http://www.shanzhuoboshi.com/?p=29885 电影《热浴盆时光机》里的迷幻照片

我浏览Flickr上的照片时,看到闪卓博识读者Matthew Coughlin借着这张迷幻的照片,在向我很喜欢的一部电影《热浴盆时光机》致敬。

它是365天项目的一部分,还配有一张幕后照片。点击跳转,查看布光照片和一个问题。

]]>
http://www.shanzhuoboshi.com/blog/2013/12/26/29885.html/feed 2
Robert Caplin的灯光大餐 http://www.shanzhuoboshi.com/blog/2013/12/24/29879.html http://www.shanzhuoboshi.com/blog/2013/12/24/29879.html#comments Tue, 24 Dec 2013 00:53:49 +0000 http://www.shanzhuoboshi.com/?p=29879

视频中的创意多棒啊!它是由纽约摄影师Robert Caplin想出来的。我现在就要尝试一下从视频中偷学来的技巧。

我吃遍了整个霍华德县,并且每到一处都会拍摄照片,你再也找不到比用一个微距镜头和一个巴掌大的LED灯拍摄食物照片更简单的方法了。我想,我的3×6英寸LitePad灯肯定要成为我的常用设备了。

(来自ISO 1200

]]>
http://www.shanzhuoboshi.com/blog/2013/12/24/29879.html/feed 4
场记:钢琴演奏家 http://www.shanzhuoboshi.com/blog/2013/12/22/29866.html http://www.shanzhuoboshi.com/blog/2013/12/22/29866.html#comments Sun, 22 Dec 2013 00:22:04 +0000 http://www.shanzhuoboshi.com/?p=29866 钢琴演奏家的肖像照片

过去,在一个光线昏暗的大房间里拍摄令我恐惧。我会把所有大闪光灯都拿出来——并且把我能借到的其它闪光灯也带上。不过,我从来都没有得到过我所希望的亮度。

那时候我不知道,在大房间拍摄时,让现场光担任主角,再用一点热靴闪光灯的光线进行调整,效果会更好。我说“一点热靴闪光灯”通常指的是把热靴闪光灯的亮度设到最多1/8…

]]>
http://www.shanzhuoboshi.com/blog/2013/12/22/29866.html/feed 18
富士相机的长期看法 http://www.shanzhuoboshi.com/blog/2013/12/20/29852.html http://www.shanzhuoboshi.com/blog/2013/12/20/29852.html#comments Fri, 20 Dec 2013 00:41:56 +0000 http://www.shanzhuoboshi.com/?p=29852 用富士X系列相机拍摄的效果图

我已经踏入富士的神奇世界两年了。这真是一个很奇妙的体验,我一直在闪卓博识上公布我的看法,而且富士相机可能是我所收到的问题中最常见的话题。

所以,今天我们暂且不讲布光,先来探讨一下无反相机。在此我要向对这个话题不敢兴趣的读者道歉,我很快就会回到布光上来的。但对那些准备入手富士相机的读者来说,我希望这篇文章会对大家有所帮助。

]]>
http://www.shanzhuoboshi.com/blog/2013/12/20/29852.html/feed 19
幕后视频:《时代》杂志的抗议者 http://www.shanzhuoboshi.com/blog/2013/12/18/29749.html http://www.shanzhuoboshi.com/blog/2013/12/18/29749.html#comments Wed, 18 Dec 2013 00:42:48 +0000 http://www.shanzhuoboshi.com/?p=29749 《时代》杂志封面我们很少能详细地看看一些近期走红的照片的制作过程。下面的幕后视频是Peter Hapak拍摄的2011年度全世界范围内的抗议活动。这是为《时代》杂志封面故事所拍的照片,故事中的人物被称为年度风云人物。

我已经以一名记者、摄影师、布光小子,还有普通人的身份,看过这个视频好几遍了。

有许多能学习的东西。

]]>
http://www.shanzhuoboshi.com/blog/2013/12/18/29749.html/feed 12
自制裸灯雷达罩 http://www.shanzhuoboshi.com/blog/2013/12/16/29743.html http://www.shanzhuoboshi.com/blog/2013/12/16/29743.html#comments Mon, 16 Dec 2013 00:18:28 +0000 http://www.shanzhuoboshi.com/?p=29743 印度南部的闪卓博识读者Sinu Kumar来自印度南部的闪卓博识读者Sinu Kumar向我们介绍了一种自制热靴闪光灯雷达罩的新方法。

和影室灯不同,大多数热靴闪光灯都有一个很小的闪光管,被外壳内的内置标准罩包围着。如果你真想设计一个雷达罩,你就需要一个能向四面八方打光的光源。所以首先,你需要把热靴闪光灯的光束转变成一个全方位的裸灯。

大部分人会通过柔光罩

goumai
柔光罩编辑
柔光罩(肥皂盒)
柔光罩(也叫肥皂盒,Stofen,等等)用于给热靴闪光灯营造出裸灯效果。在窄小的空间内,带有柔光罩的闪光灯向房顶照射,光线不仅会从闪光灯顶部射向房顶,还会在柔光罩内部进行反射后,向外360度全方位照射。许多摄影师都在户外或较大房间内使用这种设备,而这类地方并不适于产生360度的散射光线。这样做只会浪费光量,促使摄影师提高闪光灯亮度,进而更快消耗电池。懂得分辨何种环境适合使用此设备很重要。此设备还可让背景光源发出更宽的光束,这也是利用更广的光线覆盖范围做到的。不同闪光灯需要的柔光罩尺寸都不一样,购买时,一定要选好适合你闪光灯型号的柔光罩。
闪卓博识相关文章:
推荐的购买链接:
来散射热靴闪光灯的光线,或者用一个广角镜来扩散光线。当然,这两种方式都会吃掉光线。

但Kumar的设计不会。其实,他是把闪光管从热靴闪光灯内拆下来,然后再安装在雷达罩

goumai
雷达罩编辑
雷达罩
雷达罩可以放大光源,创造出漂亮的柔光。闪光灯朝向拍摄对象照射,但小反射圆盘会挡住它,避免光线直射拍摄对象。光线会先反射到大圆盘上,然后再反射到拍摄对象上。这种二次反射会营造出很棒的柔光,适合肖像照的拍摄。在柔和度上与伞差不多,但照片效果完全不同。
闪卓博识相关文章:
推荐的购买链接:
里。另外,他选择用于支撑闪光管的材料也很棒。

在打开链接之前,请注意一则警告:千万不要轻易尝试这个方法,除非你很清楚自己在做什么。这是很危险的——至少里面有些高压电。如果你真的要尝试的话,一定要让闪光管引线绝缘。我光看着露出来的引线,就已经吓得不行了。Sinu。

看完警告之后,点击这里查看那个不到$10美元的裸灯雷达罩。

]]>
http://www.shanzhuoboshi.com/blog/2013/12/16/29743.html/feed 12
神牛V850 锂电让闪光更快速 http://www.shanzhuoboshi.com/blog/2013/12/14/29759.html http://www.shanzhuoboshi.com/blog/2013/12/14/29759.html#comments Sat, 14 Dec 2013 01:19:27 +0000 http://www.shanzhuoboshi.com/?p=29759 神牛V850正反面展示图

一、功能介绍

神牛在最近推出了V850热靴闪光灯,这款产品最大的特点就是采用了锂电池作为电力供应。厂家方面称使用锂电池能够带来全光输出下1.5s的回电时间与650次的闪光次数,并且能够解决AA电池充电、携带麻烦的问题。闪卓博识非常感兴趣,因为闪光灯使用锂电池非常少见,也有很多期待的地方,很值得做一次测试。

]]>
http://www.shanzhuoboshi.com/blog/2013/12/14/29759.html/feed 17
简单装修(下) http://www.shanzhuoboshi.com/blog/2013/12/12/29732.html http://www.shanzhuoboshi.com/blog/2013/12/12/29732.html#comments Thu, 12 Dec 2013 00:30:10 +0000 http://www.shanzhuoboshi.com/?p=29732 车库展示图

我学到的第一个教训是:$200美元不能将一个车库转变成一个华丽的可变摄影棚。不过做摄影棚还是有可能的,不加装潢,只置办基本必需品就行……

]]>
http://www.shanzhuoboshi.com/blog/2013/12/12/29732.html/feed 13
================================================ FILE: api/test/data/feed/sospc.name ================================================ Sospc https://sospc.name Il y a toujours une solution. Sun, 01 Jul 2018 06:47:24 +0000 fr-FR hourly 1 https://wordpress.org/?v=4.9.6 https://sospc.name/wp-content/uploads/2018/04/fav3.png Sospc https://sospc.name 32 32 56618684 Logiciel en bref : Anyburn, un logiciel de gravure polyvalent à découvrir. https://sospc.name/anyburn/ https://sospc.name/anyburn/#comments Sun, 01 Jul 2018 06:45:07 +0000 https://sospc.name/?p=61219 Merci à vous de suivre le flux Rss de www.sospc.name. ;o)<

Logiciel en bref : Anyburn, un logiciel de gravure polyvalent à découvrir.

Les éditeurs de logiciels de gravure payants ont du souci à se faire vu les nombreux softs gratuits proposés. Je vous parle aujourd’hui d’AnyBurn, une alternative intéressante. Je l’ai écrit à plusieurs reprises, j’ai longtemps utilisé Néro qui a été un incontournable dans ce domaine au début des années 2000. Mais il faut le reconnaître, bien que ses qualités n’ont jamais été remises en cause, la complexité de l’interface au fil des nouvelles versions et le changement de modèle économique en ont rebuté plus d’un. Oui, la version gratuite s’est vu allégée au fil du temps de ses principales fonctionnalités, puis son développement a été arrêté, ajoutée à cela une gamme commençant à 80€, il était logique que l’éditeur perde la faveur du grand public. Il ne faut pas oublier que les moyens de stockage des données évoluant, les utilisateurs […]

Cet article Logiciel en bref : Anyburn, un logiciel de gravure polyvalent à découvrir. est apparu en premier sur votre site préféré www.sospc.name ;o)<

]]>
https://sospc.name/anyburn/feed/ 14 61219
Limitation à 80 Km/h au lieu de 90 : avez-vous mis à jour votre GPS ? https://sospc.name/limitation-80-kmh-mise-jour-gps/ https://sospc.name/limitation-80-kmh-mise-jour-gps/#comments Sat, 30 Jun 2018 05:30:31 +0000 https://sospc.name/?p=66159 Merci à vous de suivre le flux Rss de www.sospc.name. ;o)<

Limitation à 80 Km/h au lieu de 90 : avez-vous mis à jour votre GPS ?

Que cela nous plaise ou non, à partir du 1er Juillet 2018, des centaines de milliers de kilomètres de routes verront leur limitation être abaissée à 80 Km/h. Sauf que c’est bien beau tout cela, mais avez-vous pensé ou prévu de mettre à jour votre GPS ? J’ai été surpris par le chiffre : ce changement de limitation va affecter 400 000 kilomètres de routes, 40% du réseau ! ( source Garmin ) Partant de là, même si vous n’êtes pas un grand voyageur, il y a fort à parier que vous allez emprunter de nombreuses voies qui auront changé de limitation près de chez vous. Le problème est que la mise à jour d’un GPS risquent d’être payante pour une grande partie d’entre vous…   Eh oui, et votre destin va être scellé en fonction du type de Gps […]

Cet article Limitation à 80 Km/h au lieu de 90 : avez-vous mis à jour votre GPS ? est apparu en premier sur votre site préféré www.sospc.name ;o)<

]]>
https://sospc.name/limitation-80-kmh-mise-jour-gps/feed/ 28 66159
[Abonnés] Une société propose 10 Go de stockage gratuit dans le cloud à vie, cela vous intéresse ? https://sospc.name/10-go-cloud-a-vie/ https://sospc.name/10-go-cloud-a-vie/#comments Thu, 28 Jun 2018 05:45:23 +0000 https://sospc.name/?p=66083 Merci à vous de suivre le flux Rss de www.sospc.name. ;o)<

[Abonnés] Une société propose 10 Go de stockage gratuit dans le cloud à vie, cela vous intéresse ?

Le Cloud est devenu omniprésent dans notre vie numérique. Je ne suis personnellement pas très enthousiaste à l’idée de stocker des données sur des serveurs étrangers, mais si vous avez besoin de partager des fichiers cela dépanne bien. Je vous propose de découvrir un tout nouveau service. Je suis sûr que l’accroche ( volontaire….) des 10 Go de stockage offerts a fait bondir certains d’entre vous. Je vous le dis tout de suite, ce n’est pas un titre trompeur : cette société qui a lancé son service en Septembre 2017, propose réellement cette capacité et à vie. Oui on trouve déjà des concurrents connus qui vous offrent du stockage sans débourser un seul centime, 2 et 5 Go avec respectivement DropBox et Onedrive, mais 10 Go c’est bien mieux… Oui, je sais ce que certains vont dire, Gmail propose 15 […]

Cet article [Abonnés] Une société propose 10 Go de stockage gratuit dans le cloud à vie, cela vous intéresse ? est apparu en premier sur votre site préféré www.sospc.name ;o)<

]]>
https://sospc.name/10-go-cloud-a-vie/feed/ 20 66083
[Abonnés] L’offre premium d’Sospc a 2 mois : bilan. https://sospc.name/offre-premium-2-mois-bilan/ https://sospc.name/offre-premium-2-mois-bilan/#comments Tue, 26 Jun 2018 04:43:33 +0000 https://sospc.name/?p=66007 Merci à vous de suivre le flux Rss de www.sospc.name. ;o)<

[Abonnés] L’offre premium d’Sospc a 2 mois : bilan.

Cela fait un peu plus de deux mois maintenant que l’offre premium, l’abonnement de soutien à Sospc, a démarré. Je vous dis où on en est précisément aujourd’hui.  J’aime bien les comptes ronds et je pensais vous annoncer que nous étions arrivés au palier suivant, ce n’est pas encore le cas malheureusement. J’en profite pour vous remercier à nouveau pour votre soutien financier et vos mails sympathiques réguliers qui me demandent comment je vais et comment se porte Sospc. Je dois dire pour être tout à fait honnête avec vous que je suis un petit peu déçu.     Certes, je ne m’attendais pas à 1000 abonnés, j’ai ( encore…) les pieds sur terre , mais à partir du moment où il y a 750 abonnés à la newsletter, je pensais que parmi ces personnes, un grand nombre d’entre elles […]

Cet article [Abonnés] L’offre premium d’Sospc a 2 mois : bilan. est apparu en premier sur votre site préféré www.sospc.name ;o)<

]]>
https://sospc.name/offre-premium-2-mois-bilan/feed/ 21 66007
Amazon Echo / Echo Dot : test du Kit d’éclairage Philips Hue. https://sospc.name/amazon-echo-kit-philips-hue/ https://sospc.name/amazon-echo-kit-philips-hue/#comments Sun, 24 Jun 2018 06:30:42 +0000 https://sospc.name/?p=65568 Merci à vous de suivre le flux Rss de www.sospc.name. ;o)<

Amazon Echo / Echo Dot : test du Kit d’éclairage Philips Hue.

Je vous ai fait découvrir il y a une semaine le nouvel assistant Amazon Echo deuxième génération. Je poursuis aujourd’hui mon délire avec le test du kit Philips Hue livré avec deux ampoules. Je vous annonce d’emblée la bonne nouvelle, ce kit fonctionne très bien, et avant que les ronchons râlent, je vous dis tout de suite qu’il vous permet de gérer jusqu’à 50 ampoules ! Il y a donc de quoi faire, je ne connais que deux endroits où l’on utilise autant d’ampoules, la villa de Macron et celle d’Azamos. Déjà, pour commencer, si vous pensez que commander par la voix son éclairage est une une fonctionnalité gadget, inutile de poursuivre la lecture de cet article. Oui, on peut parler de technologie non indispensable, mais c’est comme tout, c’est la façon de s’en servir qui définit son utilité.   […]

Cet article Amazon Echo / Echo Dot : test du Kit d’éclairage Philips Hue. est apparu en premier sur votre site préféré www.sospc.name ;o)<

]]>
https://sospc.name/amazon-echo-kit-philips-hue/feed/ 4 65568
Internet en vacances : transformez votre téléphone en Box ! https://sospc.name/transformer-smartphone-box/ https://sospc.name/transformer-smartphone-box/#comments Sat, 23 Jun 2018 06:24:05 +0000 https://sospc.name/?p=65542 Merci à vous de suivre le flux Rss de www.sospc.name. ;o)<

Internet en vacances : transformez votre téléphone en Box !

Vous êtes en déplacement pour des raisons professionnelles ou personnelles, vous souhaitez utiliser votre ordinateur portable et là, patatra, trouver un réseau Wifi gratuit ou pas trop cher (et fiable…) c’est vraiment la galère. Sauf que vous n’y pensez pas, mais votre téléphone mobile peut vous être d’une très grande utilité. On en parle aujourd’hui. C’est fou le nombre de Gigas qui sont compris dans nos offres mobiles de nos jours. C’est bien simple, il y a quelques années je n’avais qu’un tout petit giga, mais désormais les forfaits 20 Gigas sont devenus la norme minimale, et les promos pour les 30 et 50 Gigas pullulent ! On en trouve bien évidemment des plus costaux, mais attention suivant l’opérateur vous aurez des surprises, si c’est pour avoir 100 Gigas ou plus et ne pas pouvoir se connecter ou avoir un […]

Cet article Internet en vacances : transformez votre téléphone en Box ! est apparu en premier sur votre site préféré www.sospc.name ;o)<

]]>
https://sospc.name/transformer-smartphone-box/feed/ 14 65542
Firefox, présentation de deux Thèmes sombres pour améliorer le confort de lecture, par Mia. https://sospc.name/themes-sombres-firefox/ https://sospc.name/themes-sombres-firefox/#comments Fri, 22 Jun 2018 06:03:53 +0000 https://sospc.name/?p=65710 Merci à vous de suivre le flux Rss de www.sospc.name. ;o)<

Firefox, présentation de deux Thèmes sombres pour améliorer le confort de lecture, par Mia.

Bonjour à tous, j’ai posté dernièrement sur le Forum dans la section « Vos trucs et astuces » une petite trouvaille que je regrette de n’avoir pas découverte plus tôt. A la demande d’AZAMOS, j’en ai fait un article pour Sospc afin que vous soyez plus nombreux à en profiter. Ce sera donc très court car il n’y a pas matière à en écrire des pages. Je ne sais pas vous, mais je trouve les fonds blancs agressifs pour les yeux. J’avais bien tenté un réglage des couleurs dans les paramètres de Firefox, mais ça ne fonctionnait pas vraiment bien.     Ensuite j’ai cherché dans les extensions, mais même les thèmes complets ne changent que la couleur des onglets et de la barre de recherche, et beaucoup ne sont pas adaptés à la version Quantum. J’ai fini par trouver deux extensions qui […]

Cet article Firefox, présentation de deux Thèmes sombres pour améliorer le confort de lecture, par Mia. est apparu en premier sur votre site préféré www.sospc.name ;o)<

]]>
https://sospc.name/themes-sombres-firefox/feed/ 15 65710
Amazon Echo : comment remplacer le mot d’activation Alexa par Amazon, Echo ou Ordinateur. https://sospc.name/amazon-echo-remplacer-alexa/ https://sospc.name/amazon-echo-remplacer-alexa/#comments Thu, 21 Jun 2018 06:14:57 +0000 https://sospc.name/?p=65660 Merci à vous de suivre le flux Rss de www.sospc.name. ;o)<

Amazon Echo : comment remplacer le mot d’activation Alexa par Amazon, Echo ou Ordinateur.

Didpoy m’a demandé ces jours-ci si le mot clé d’activation ‘ Alexa ‘ pouvait être changé. Je lui ai manifestement répondu un peu trop vite par la négative car j’ai trouvé par hasard une petite astuce pour le changer mais bon, pas de quoi pavoiser le choix reste vraiment très limité… Je vous ai présenté récemment l’assistant vocal Amazon Echo que j’ai adoré tester. Le mot clé qui permet d’interagir avec cette intelligence artificielle est ‘ Alexa ‘. C’est bien beau tout ça, mais qu’arriverait-il si vous ou une personne de votre entourage s’appelait Alexa, Alex ou tout autre prénom phonétiquement très proche ? Je suppose que c’est sûrement pour cela qu’Amazon permet sa modification. Il y a deux possibilités : soit vous l’effectuez en ligne depuis votre Pc, mais le choix proposé sera seulement Amazon ou Echo, soit vous utilisez […]

Cet article Amazon Echo : comment remplacer le mot d’activation Alexa par Amazon, Echo ou Ordinateur. est apparu en premier sur votre site préféré www.sospc.name ;o)<

]]>
https://sospc.name/amazon-echo-remplacer-alexa/feed/ 2 65660
Linux : découvrez le mode persistant de la distribution MX 17, par Didier. https://sospc.name/mode-persistant-mx-17/ https://sospc.name/mode-persistant-mx-17/#comments Wed, 20 Jun 2018 05:46:32 +0000 https://sospc.name/?p=65197 Merci à vous de suivre le flux Rss de www.sospc.name. ;o)<

Linux : découvrez le mode persistant de la distribution MX 17, par Didier.

J’affectionne tout particulièrement le mode LIVE pour utiliser Linux. Habituellement, l’extinction du PC supprime toutes modifications effectuées sur le système : changement fond écran, personnalisation du navigateur, création de fichiers ou dossiers, etc… La distribution MX Linux, dont je vous avait parlé en 2016, permet grâce à un mode « persistant » efficace de stocker vos préférences, de conserver vos modifications à l’extinction de la machine, à chaque redémarrage sur votre clé USB Live, on retrouve sa configuration modifiée……………sympa, non ? => pas d’installation => pas de dual-boot (bien que ça reste un excellent choix) => pas d’utilisation en Virtual Box et tout ça en français !! Suivez le guide pour l’installation en mode texte. Au démarrage sur la clé et sur laquelle on a « gravé » l’iso de la MX 17 : https://mxlinux.org/download-links   Sélectionner 2e choix : Snapshot Customize Boot ( text menus ). Sélectionner 23 French. Nombre de colonnes : faire Entrée. […]

Cet article Linux : découvrez le mode persistant de la distribution MX 17, par Didier. est apparu en premier sur votre site préféré www.sospc.name ;o)<

]]>
https://sospc.name/mode-persistant-mx-17/feed/ 7 65197
Amazon Echo, test de l’assistant personnel dont vous ne pourrez plus vous passer. https://sospc.name/amazon-echo/ https://sospc.name/amazon-echo/#comments Sun, 17 Jun 2018 05:36:35 +0000 https://sospc.name/?p=65306 Merci à vous de suivre le flux Rss de www.sospc.name. ;o)<

Amazon Echo, test de l’assistant personnel dont vous ne pourrez plus vous passer.

Cela fait deux ans qu’Amazon Echo existe. Si vous n’en avez pas entendu beaucoup parlé jusqu’ici c’est parce que la première génération était en anglais et moins aboutie. La deuxième génération est désormais disponible dans la langue de molière et je dois dire que j’ai eu un coup de cœur. Je vous dis tout. Pour être tout à fait précis Amazon Echo est développé depuis fin 2014, on comprend mieux ainsi pourquoi l’application est si évoluée. J’ai lu quelques articles / tests ces jours-ci et je les ai globalement trouvés sévères. On n’essaie pas de vous vendre de l’intelligence artificielle au sens stricte du terme, il ne faut pas tout confondre.   Pour un prix de base de 99€ ( et actuellement en promo à moitié prix 49€, édit du 18/06…la promo est déjà finie, certaines réfs sont déjà en rupture […]

Cet article Amazon Echo, test de l’assistant personnel dont vous ne pourrez plus vous passer. est apparu en premier sur votre site préféré www.sospc.name ;o)<

]]>
https://sospc.name/amazon-echo/feed/ 38 65306
================================================ FILE: api/test/data/feed/straitstimes.com ================================================ The Straits Times Asia News https://www.straitstimes.com/ en ================================================ FILE: api/test/data/feed/strava ================================================ <![CDATA[strava-engineering - Medium]]> https://medium.com/strava-engineering?source=rss----89d4108ce2a3---4 https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png strava-engineering - Medium https://medium.com/strava-engineering?source=rss----89d4108ce2a3---4 Medium Sat, 09 Jun 2018 16:46:34 GMT <![CDATA[Apple Dev Guild Week]]> https://medium.com/strava-engineering/apple-dev-guild-week-f5981fe525a4?source=rss----89d4108ce2a3---4 https://medium.com/p/f5981fe525a4 Mon, 04 Jun 2018 23:55:00 GMT 2018-06-04T23:55:00.331Z Swift Adoption

The team of developers that works on our iPhone and Apple Watch app spends the majority of its time working on feature development during the year. However, for a week in April the Apple Dev Guild had the opportunity to focus on platform health and the future of what writing iPhone and Watch apps looks like at Strava. Until this year writing iOS and WatchOS apps at Strava has meant writing entirely Objective-C. As a guild and as an organization we determined that it was important to begin our shift to Swift.

Why Swift? Why now?

Swift is a fast, safe, modern programming language. Swift was a fresh start for Apple. Unlike Objective-C, which comes with the baggage of being incrementally built on top of C, was designed from the ground up with features such as strict type safety and succinctness that help prevent programmer error, ease in maintenance, and let the programmer focus on logic and business rules.

Swift is the standard for writing iOS apps, partially because Apple declared it the official language, but also because it’s effective. Programmers are using it, it is the fastest growing programming language overall, and we’re at the stage where many iOS programmers have only ever written Swift. As a growing company we get candidates all the time that have only written Swift, which is perfectly fine with us since we tend to believe that being an effective iOS programmer is more about knowing the platform and having strong software engineering fundamentals. However, it was clear to us that in order to attract engineers we needed to evolve.

Strava’s iOS codebase is 7 years old and is almost entirely Objective-C. Swift has been around for years. Why hadn’t we really started adopting Swift until this year? At Strava we pride ourselves on adopting a healthy and reasonable mix of bleeding edge technologies and tried and true solutions. We actually did try out Swift in the early days, mostly experimentally, but every Swift release resulted in breaking API changes that just left a bad taste in our mouth. We witnessed several situations where other companies had to repeatedly rewrite their apps written in early versions of Swift and had a hard time coping with API changes across Xcode releases. As time went by and our codebase grew substantially we just simply didn’t risk making the switch, at least until the benefits started to clearly outweigh the disadvantages.

By the time Swift 4 was released it seemed like its maturity was commensurate with ours and we decided to dive fully in. As a guild we spent some time during the latter half of 2017 ensuring that we were all roughly on the same page as far as technical aptitude in Swift so that engineers could review each other’s code without getting completely lost. At the start of 2018 we decided that all new files should be written in Swift. We have a long way to go, but as of this writing our codebase is approximately 6% Swift and 94% Objective-C. That may not seem like much, but in a codebase of thousands of files and hundreds of thousands of lines of code going from zero Swift to just over 6% this year is a good start.

Building up our infrastructure

We started adopting Swift at the beginning of the year with enough in our toolbox to keep us working without slowing down product development, but we didn’t lay down a lot of ground rules. We trusted that the nature of Swift’s syntax and type safety would be enough to get us going and avoid the need to rely on manually checking a style guide in order to prevent us from shooting ourselves in the foot. We did integrate SwiftLint early on and have adjusted the set of rules we use over time to suit our needs. Developers report that they are pleased that an impartial robot tells them something is wrong with their code at compile-time, rather than getting nitpicked by their colleagues in pull requests.

Xcode 9.3 and Swift 4.1 Update

Guild week coincided nicely with the release of Xcode 9.3 and Swift 4.1. We spent some time ensuring that our existing Swift code was Swift 4.1 compatible and we updated our project settings to take advantage of the language update.

Swift dependency injection with Swinject

We’ve used Typhoon as our dependency injection framework on iOS for many years and it’s served us well. Although Typhoon supports Swift, we’ve viewed our Swift adoption as an opportunity to try out new things. During guild week we gave Swinject a try as a lightweight, pure Swift alternative to Typhoon.

BDD with Quick and Nimble

Behavior driven development offers an appealing refinement to TDD that can help organize thinking around testing the behavior of your application, especially when compared with traditional unit testing practices. BDD is used widely by the Web guild and we have used both Cedar and Kiwi in the past at Strava in Objective-C, but we kept returning to regular XCTestCases. BDD in Swift regains some of the elegance lost in BDD in Objective-C, so we decided to give it another shot by integrating Quick and Nimble. Quick is similar to RSpec in that it has helped us write more understandable and thorough tests.

Miscellany

By the time guild week had started in April we were already habitually writing Swift, so the entire focus that week wasn’t just on further Swift adoption. We had a growing laundry list of improvements we hoped to make across the app and across our development toolchain, so we set out to accomplish some of them while we could devote a relatively large chunk of time.

Some of these improvements included:

  • Migrating from HockeyApp to Crashlytics
  • Automating integration of internal Cocoapod updates
  • Updated our iPhone recording code to use the modernized Strava for Apple Watch recording code
  • Added flexibility to our internal URL routing mechanism

Looking forward

Strava’s second guild week is on the horizon and the Apple Dev Guild is taking some inspiration from the Android guild’s modularization efforts. We’re going to largely focus on modularizing our codebase further with the goals of establishing an architecture that is easier and less brittle to work with. We have some of this architecture in place already and it’s shown to help make working in a large code base feel small and manageable again. Aside from a qualitative improvement in coding confidence we want to establish empirically that these efforts are worth our time. We’ll begin tracking and analyzing build and test times. Alongside our Swift adoption our hope is that a more modular architecture leads to an more stable, more testable, and faster app.


Apple Dev Guild Week was originally published in strava-engineering on Medium, where people are continuing the conversation by highlighting and responding to this story.

]]>
<![CDATA[Time to Learn React!]]> https://medium.com/strava-engineering/time-to-learn-react-e207ca12ad57?source=rss----89d4108ce2a3---4 https://medium.com/p/e207ca12ad57 Mon, 21 May 2018 16:33:50 GMT 2018-05-21T16:33:50.831Z Web Guild Week at Strava

The web guild at Strava is responsible for maintaining and improving the Ruby/Rails/JavaScript/CSS platform, processes, and culture. We believe that an up-to-date, modern web platform is not only more secure and faster, but also makes our engineers more productive and happier. As part of a company wide Guild Week, during the week of April 2nd all of our web engineers took time off from their regularly scheduled product work to focus solely on learning React.

jQuery, Backbone, and CoffeeScript — oh my!

Strava’s main monolithic Rails application began its life over 9 years ago. At that time functional and immutable JavaScript was not in vogue, libraries like React and Redux did not exist, and CSS modules were not a thing. In the early days of Strava we used jQuery and over time, as our application grew, we adopted CoffeeScript and Backbone. Since then, our JavaScript stack has fallen behind the times. Compared to new versions of the Javascript language and new front-end application paradigms, our Javascript stack is brittle and difficult to work with or feel excited about. Near the end of last year we decided to experiment with a few of the newest front-end languages and libraries in order to select a set of tools that would allow us to continue to meet our product goals and stay nimble and reactive to the latest advancements in front-end development.

We developed a simple rubric for evaluating our options and then selected some engineers to split off into teams and develop a proof of concept login view using each of the technologies we were evaluating. We then came together at the end of the experiment, discussed our findings, and, as you may have guessed, ended up choosing React on ES6.

At the time of this decision there were only a handful of web engineers that conceptually understood React and we hadn’t made many of our most important technical and best practice decisions yet. How were we going to test our code? Would we be using Redux? Were we going to use CSS modules? How would we integrate with existing code and our existing Rails application? How would we go about migrating our old CoffeeScript code over to React? How would a new engineer at Strava become proficient in React and its associated technologies?

Exploring React-land

React Logo / Creative Commons

Over the next few weeks a group of Strava engineers, dubbed “The React Working Group”, integrated React into our Strava Local Rails app. This app is independent of our monolith and was a good candidate for continuing to develop our ideas and understanding of this new set of tools. During that time we answered some of the most basic questions and developed some initial best practices. We were going to use Jest for testing, we were not going to use Redux yet, CSS modules were a go, and we would upgrade our apps to Rails 4.2 in order to use the Webpacker Gem for easy integration with webpack.

The complicating factor was that our main Rails application (www.strava.com) was running Rails 3.2 so we needed to make a very concerted effort to speed up our upgrade plans. I can write a whole other blog post series on upgrading our Rails application, but we’ll stick with React for this post. The summary is that we did it. The Rails 4.0 upgrade was by far the most difficult part and took over a month to complete. The 4.1 and 4.2 upgrades each took about two weeks and included backwards-compatible development work and deployment. We did not have to roll-back any deploys so we considered this a massive success.

Establishing a Permanent Colony

At this point we felt that we had a sufficient starting base from which we could begin adopting React as our primary frontend framework. The problem, of course, was that we had a lot of engineers that knew very little about ES6, React, Jest, Webpack, and CSS modules — let alone how all of these new tools would interact with our existing Rails app.

Enter guild week. Guild week was a perfect opportunity to spend 100% of our time focused entirely on learning these new tools, continuing to develop our best practices, and building a knowledge base so that future employees would be able to learn to use React at Strava quickly. The goal at the end of this week was not to have some percentage of our main Rails app rewritten in React. Instead, we wanted every engineer in the web guild to understand React code and concepts and feel comfortable reviewing ES6 and JSX. The ideal outcome was that going forward the entire guild would agree that all new JavaScript code would be written in React and that over time we would refactor existing backbone views and models into React.

We spent the first few days of the week working through the Web Bos React for Beginners course. This got everyone up to speed with basic ES6, JSX, and React. We then spent the rest of the week writing actual code, comparing results, and learning some more advanced concepts. There was no pressure to produce production level code. If it took one engineer longer to work through the basic React course than another engineer, that was completely okay.

Throughout the week we also organized some hour-long presentations from the React Working Group members. These sessions were recorded so that future employees could follow along and get caught up. For example, we organized one session on Jest/Testing and another on CSS Modules.

When we actually dove into code we constrained ourselves to a set list of some smaller views/projects and purposefully duplicated each others work. We wanted to be able to compare implementations so that we could learn and develop consistent practices going forward.

Are We There Yet?

React week was a great success. The team benefited greatly from being able to take a full week off regular work and just learn. Ultimately this dedicated learning time will result in long term productivity, reliability, and confidence gains. Even if all of us don’t immediately go off and start writing React components, we will be able to more confidently review code and assess technical tradeoffs as we continue to build out our tooling and infrastructure.

There are some things we could have done better. We should have done more to plan and organize our learning sessions and we should have done a better job of setting up some of the basic tooling and integrations with our web app ahead of time. Part of the reason we weren’t as prepared is that we had just finished our Rails 4.2 upgrade and had not had time to do as much setup as we would have liked.

In the following weeks we have made additional progress. We have a full “Getting Started in JavaScript” guide which summarizes each of the tools and best practices we have adopted — along with links to the recorded guild week presentations. We have fully integrated linting and testing of JavaScript and CSS into our CI pipeline. And we continue to make improvements to our deployment and development pipelines: for example by de-duping and better organizing our production JavaScript assets.

We’re excited for the future of JavaScript at Strava! And we’re really looking forward to the next Guild week. If you’re interested in joining the web guild and getting to participate in the next two web guild weeks we’ll have this year, we are always hiring web engineers. Check out our open positions here or reach out to me directly @panthomakos.


Time to Learn React! was originally published in strava-engineering on Medium, where people are continuing the conversation by highlighting and responding to this story.

]]>
<![CDATA[Android Guild Week: Modularizing our App]]> https://medium.com/strava-engineering/android-guild-week-924ed49b668c?source=rss----89d4108ce2a3---4 https://medium.com/p/924ed49b668c Mon, 30 Apr 2018 22:57:26 GMT 2018-04-30T23:13:54.709Z The Android team at Strava tries to maintain a healthy level of refactoring in conjunction with feature development throughout the year. However, earlier this month, all Android engineers had the opportunity to focus solely on platform health for an entire week (see our post about Guild Weeks for the history). After reviewing potential areas on which to focus, we decided to spend the week dividing our codebase into functional modules. This post reviews our reasoning, approach and outcomes.

Why create more modules?

The Android codebase is approximately 6.5 years old and started, as most projects do, with a single module (now named handset). Over the years we added a few new modules, but the majority of our code was still concentrated in handset. With improvements to the Android Gradle Plugin (AGP) such as build caching by module and parallel compilation, we set out to modularize our codebase with the following goals:

  • make the project more readable and less tightly coupled
  • increase build speed
  • enable more efficient development iterations (explained later)

Prerequisites

Leading up to Guild Week, we agreed it was important to establish some benchmarks and build tools to track our progress. To address this, we added 2 items to our gradle configuration:

  1. time-based tracking of build tasks — we used Netflix’s Nebula plugin to achieve this
  2. simple code distribution counts — we wrote a basic gradle task that runs cloc locally to give a snapshot of distribution across modules

Defining the work

We follow a Scrum process at Strava, so we wrote stories to extract different pieces of our app into new modules. Some examples include:

  • Create a Challenges module — the Challenges feature is fairly self-contained and seemingly easy to extract
  • Create a Test Utilities module — we had some test code duplicated across modules and it made sense to move it to a common location that was reusable by all
  • Create an Authorization module — if we extract the login flow to a separate module, engineers can assemble mini-apps during feature development that allow focused iteration. For example, an engineer building new views for our Clubs module could deploy a “Clubs” app that consists of the authorization, clubs and core modules. This should build and deploy in a fraction of the total handset build.

With our benchmarks established and a week ahead of us, we divvied up the stories and charged forward.

One step at a time

We all started by creating new, empty modules and then proceeded to extract code out of handset into the new modules. This is also when we really started to shine a light on years of accumulated complexities. Two examples highlight the challenges we faced:

Authorization

As mentioned earlier, we knew creating an authorization module would be a big win. The path to extract that code unfolded with the following steps:

  • getAthlete() — In our codebase, the authorization process revolves around the Athlete class. In the past year, we had already moved a lot of Athlete code from our handset module to an athlete module, but had not yet extracted the fundamental getAthlete() method that queries our API, which is a key step in the authorization flow.
  • Push notification settings coupling — When we tried to extract getAthlete(), we saw that the completion callback method syncs push notification settings to our API. Unfortunately, our notification settings code resided in handset and was tightly coupled with several classes there. So we set out to create a notifications module and extract that.
  • Pencils down — the week ended while we were in the midst of extracting the notification code to a new module. As of this writing, we are finally ready to land those changes.

While we slowly moved the authorization code following the process above, we also built an interim solution to achieve mini-apps:

  • We added an option to our development menu (not shipped in production builds) that exports preferences and authorization information.
  • We introduced a new launcher module that consumes the exported preferences and runs a given starting Activity.
  • This allows engineers to deploy a local development app with a subset of the desired modules and authorized access to our test servers.

View complexities

Another issue we encountered during the week was untangling legacy Activity and Fragment implementations. Long ago, we added StravaBaseActivity and StravaBaseFragment classes. They started as simple ways to provide things like lifecycle method performance tracking and basic injection of commonly used interfaces. Over time, these classes grew well beyond their scope and violated the OOP principle of Composition over Inheritance. We have been gradually migrating our view implementations to an MVVM pattern, but during Guild Week we discovered many of the legacy Activities and Fragments were effectively trapped in the handset module due to the extensive dependencies on Base classes. To address this, we migrated what Views we could and made plans to provide much lighter Base classes in a common-ui module which will ease the transition out of handset.

Moving forward

Aforementioned complexities aside, we continued our work toward a more modular codebase and made solid progress throughout the week. The team banded together, reviewing Pull Requests and socializing our process to determine how, when and why we introduce a new module. We also ensured a README file accompanied every module that describes its function and assigns ownership to engineers with expertise.

In addition, we improved our code on several other fronts:

  • Since we recently increased our minSdkVersion, we were able to move our images to webp and reduce our APK footprint.
  • We deleted a lot of unused build configurations and code from app flavors we had deprecated, simplifying our overall gradle structure.
  • We consolidated all of our string content to a single module. This drastically reduced the complexity in our translation process and simplified the steps necessary to create a new module.
  • We successfully created a test-utils Java library module. This consolidated all of our shared test classes to a single module that we can now include with a simple testImplementation project(':test-utils') line in any gradle file.

On Monday, we re-ran our tracking tools to measure the efforts and assess our week.

Drawing Conclusions

We arrived at the following conclusions when the week was over:

Modules and code distribution

We introduced 8 new modules and reduced the percentage of the codebase in handset from 77% to 74%. 3% does not seem like a large amount, but in one week we established momentum behind modularization and arrived at the following general process: move things, see what breaks, untangle, repeat.

Subset of code distribution metrics by module before & after Guild Week

Build Speed

Continuous Integration (CI) build times actually increased by 23%. At first this was alarming, as one of the main reasons we began this process was to decrease time spent waiting for our code to build. However, we dug into the numbers further and discovered that due to the changes in the codebase throughout the week, our CI image was spending a lot of time downloading newly-added dependencies. To address this, we increased the frequency at which we rebuild our CI image and continue to monitor build speed closely. We are also investigating a process to automatically rebuild the image every time new dependencies are introduced, eliminating noise from the speed measurements.

Elapsed build times (pink line) during Guild Week

In addition, our interim solution for mini-apps yielded great results regarding build speed. While not tracked in our CI environment, tests on development machines showed a 4x reduction in build time when deploying a mini-app vs deploying the complete handset APK. This will dramatically speed up the development iterations engineers encounter on a daily basis.

Overall, the team had a great time working together towards a cleaner codebase. We’re actively tracking our progress and are eager to see how much we can achieve before our next Guild Week.


Android Guild Week: Modularizing our App was originally published in strava-engineering on Medium, where people are continuing the conversation by highlighting and responding to this story.

]]>
<![CDATA[Quantifying Effort through Heart Rate Data]]> https://medium.com/strava-engineering/quantifying-effort-through-heart-rate-data-e6a0e3dd6a52?source=rss----89d4108ce2a3---4 https://medium.com/p/e6a0e3dd6a52 Tue, 17 Apr 2018 15:33:14 GMT 2018-04-17T16:45:28.605Z From Suffer Score to Relative Effort

Written by: Chris Spada and Will Meyer

One of our most popular Premium features is Suffer Score, a way to quantify effort during an activity using heart rate data. Although Suffer Score has become a popular feature for providing insights into an activity, it had limitations in providing accurate results across sports and athletes for similar efforts. The main problems were:

  1. The model wasn’t well suited for comparing effort across different sports. Running efforts were scored higher than rides and swims of the same length and intensity. This meant that a similar amount of effort applied to a run would result in a higher Suffer Score than it would have in a ride of a similar duration.
  2. Length of the effort was weighted much more than intensity. Shorter, more intense efforts had lower Suffer Scores than longer, less intense ones even if the shorter effort had a much greater training effect.

Working with Dr. Marco Altini, we developed a model to generate a new version of Suffer Score, called Relative Effort. This powers new Premium features that provide insight into week-over-week training load. The new model follows the same approach of using time spent in different heart rate zones to score an activity, but differs in a few key ways: it weights intensity of effort more than duration, is better at weighting equivalent efforts across sports, and scores equivalent efforts by different athletes similarly. The result is that Strava athletes are better able to use this metric to compare activity effort across workout types, sport types and even individuals.

Tuning the Model

To calculate Relative Effort, the model takes in a stream of data with an athlete’s heart rate and the corresponding timestamp as inputs. Using the athlete’s max heart rate (either entered by the athlete or estimated), this heart rate data is divided into a number of zones that approximate different levels of cardiovascular intensity. For each heart rate zone, the model applies a coefficient to weight the time spent in that zone. The higher the heart rate zone, the harder the effort, and a higher coefficient to more heavily weight time spent in that zone.

To achieve our goal of providing similar values for athletes producing similar efforts, we leveraged Strava’s rich data set to find a group of activities from athletes giving a roughly equivalent effort. To tune on a subset of activities from thousands of different athletes, we made the assumption that Athlete A giving an all-out effort should expend an equal amount of stress/effort as Athlete B, even if the athletes have different absolute fitness levels. These two athletes should then have similar Relative Effort values. After testing 5k, 10k, and half marathon distances, we settled on using 10k running race efforts to tune the coefficients applied to each zone. Running removes much of the variability associated with sports like cycling, where drafting and coasting can result in significant changes in effort and heart rate. The 10k distance is short enough that an athlete is consistently in a high heart rate zone, yet long enough for heart rate data to settle into a consistent pattern and avoid the noise often found in shorter events.

With a large subset of 10k running races on Strava, we iterated through thousands of different coefficient combinations for each heart rate zone, with the goal of minimizing variance of Relative Effort values from our data set. By minimizing the variance on a set of equivalent efforts, we sought to increase the precision of the model and rate equivalent efforts equally. We used the coefficient of variation (standard deviation / mean) to measure variance in order to control for the effect of increasing values when testing higher coefficients. We were able to decrease the coefficient of variation from 0.44 from the original coefficients to 0.39, a 12% improvement. This decrease in variance will improve the accuracy of the Relative Effort model and give our athletes a better representation of their efforts.

Extending the model to different sports

The second objective of rebuilding Relative Effort was to better approximate efforts across activities. To do this, we used activities from Olympic distance triathlons as a way to find equivalent efforts to tune the model across sports. Although not perfect in terms of athletes giving equal effort in each leg, we think that in aggregate those activities should give us a reasonably hard effort for comparison. This was particularly valuable to validate using a lower set of heart rate zones for cycling activities, and a lower max heart rate for swim activities.

To make Relative Effort scores comparable between run and ride, we compared running and cycling activities from the Olympic distance triathlon dataset to view an approximation of the values using the new ride zones. The ride zones are relatively lower than run, as cycling heart rates are lower than weight-bearing activities like running. We found a median score of 211 for run, and 190 for ride. Even though the ride median is slightly lower than the run median, we’re comfortable with this because a cycling effort during a triathlon is usually submax to save some energy for the run.

We wanted to make sure we had a good approximation between ride and run before we moved on to swimming. Heart rate based training isn’t as common for swimming, and literature for swim heart rate zones isn’t as well defined as run and ride. Additionally, swimming max heart rate has been described as 10–12 beats per minute lower than other activities. Given the non-weight-bearing nature of swimming, we used cycling zones and tested a mix of lower max heart rates and a lower lactate threshold heart rate. We settled on using cycling heart rate zones with a max heart rate 12 beats lower than the recorded value, based on comparing the Relative Effort distributions from swim, ride, and run legs of the triathlon data set.

For Strava’s 20 other supported activity types, there isn’t extensive research on relative heart rate differences between activities, so we assigned the activities either run or ride HR zones. This is roughly based on whether the sport is weight-bearing and bipedal (Nordic ski, hike) in which case we assigned the run zones, or is not weight-bearing (Windsurf, handcycle, kayak) and has lower expected heart rates, and applied the cycling zones.

Leveraging Strava’s extensive activity dataset, we were able to tune and extend Relative Effort to better quantify Strava athletes’ efforts, in turn powering a compelling new product for our athletes to help guide their training.

Thanks to Tommy Gaidus, Ethan Hollinshead, Kyle Yugawa, Varun Pemmaraju, and J Evans for their significant contributions and guidance on this project.


Quantifying Effort through Heart Rate Data was originally published in strava-engineering on Medium, where people are continuing the conversation by highlighting and responding to this story.

]]>
<![CDATA[Guild Week at Strava]]> https://medium.com/strava-engineering/guild-week-at-strava-8edc1d7b5274?source=rss----89d4108ce2a3---4 https://medium.com/p/8edc1d7b5274 Thu, 12 Apr 2018 00:18:59 GMT 2018-04-12T16:17:09.126Z Recently, the Strava Engineering team took a weeklong break from regular product work to focus attention on our core technology platforms. We coined this effort Guild Week. Before explaining Guild Week, it’d be useful to understand what a “Guild” is at Strava.

A Brief History of Guilds at Strava

Like most software companies, Strava started off with a single product development team, consisting of engineers, product managers, and designers. Engineers and designers were “free agents”, and worked on whatever project was highest priority. Eventually, we reached a point where that single team became unwieldy to manage. Product managers couldn’t plan for the medium / long term because they couldn’t count on having engineering and design support. Engineers couldn’t develop expertise in specific areas of the product, and also didn’t have the time to make longer-term investments in more complex product features.

To solve this problem, we split product development into what we called “vertical teams” — smaller teams comprised of mobile and web engineers, designers, analysts, and a product manager that each focused on one aspect of Strava’s product. These teams are relatively stable — we have had Growth and Premium vertical teams for over two years.

Of course, any team structure represents a compromise. In our case, the vertical team structure split iOS, Android, and Web engineers across multiple teams, which made it difficult to maintain consistency and cohesion across technology platforms. To counter this problem, we created a secondary team structure called Guilds. Each iOS, Android, and Web engineer became a member of their respective Guild in addition to their vertical team.

The Guilds are responsible for their technical platform: onboarding new engineers in that platform; keeping the platform current with the latest technologies; maintaining consistent design patterns across each codebase; and teaching one another about best practices.

Guild Work

We try to spend 10% of engineering time working on Guild projects. Tackling larger Guild projects is challenging when each engineer in the Guild is also responsible for projects on their vertical team. Guild work is of strategic importance to Strava — a healthy codebase enables us to build great products, and keeping our technology stack up-to-date ensures that our engineers are developing skills in modern systems and frameworks. As a result, we decided to supplement the 10% ongoing time with a series of Guild Weeks scheduled throughout the year. During a Guild Week, all engineers devote 100% of their time to their respective platforms. In this blog post series we’ll explore what each of our Guilds did during their first Guild Week of 2018.


Guild Week at Strava was originally published in strava-engineering on Medium, where people are continuing the conversation by highlighting and responding to this story.

]]>
<![CDATA[Diversity within Strava’s Engineering Organization]]> https://medium.com/strava-engineering/diversity-within-stravas-engineering-organization-a48d0a0dd9ed?source=rss----89d4108ce2a3---4 https://medium.com/p/a48d0a0dd9ed Fri, 23 Feb 2018 18:42:55 GMT 2018-03-05T23:54:08.648Z with contributions from Debbie Ly and the EDIG team

At Strava, we believe that building a diverse and inclusive culture is crucial to bringing out the best in our team.

  • Creating a safe space fosters a sense of belonging, where all teammates can be more comfortable sharing their ideas and perspectives.
  • Fostering an environment of inclusion will continue to encourage strong candidates to apply to Strava, expanding our potential talent pool.
  • Creativity is an essential component of engineering work. A diverse set of experiences and backgrounds expands the knowledge base we draw from, and ultimately inspires inventive solutions.
  • We will deliver a better product to our athletes if our engineering team more closely matches the world demographic.

These values have always been important to us — a group of volunteers created the original Diversity and Inclusivity Group (DIG) in 2015 to begin advocating for these issues. However, as our company grew larger in size, we needed more firepower to drive all of the improvements that we were constantly discovering. In mid-2017, we formed our Engineering Diversity and Inclusivity Group (EDIG) with a focus of attracting and engaging diverse engineering candidates and employees.

The first initiative of our group involved expanding our talent search to new, diverse talent pools. For example, one of our engineers talked to students at Harvey Mudd about job opportunities at Strava, where over 50% of the computer science graduates are women. Our engineers have also been working with Code2040, an organization focused on creating engineering opportunities for black and latinx students, to mentor fellows from underrepresented groups in the technology industry.

However, the process of interviewing at technology companies can often be stressful for candidates from non-traditional backgrounds. To combat this, we are beginning to send an informative packet to all candidates before their first interview. The goal is for candidates from any background to start the interview process feeling informed and prepared. Because we believe that having teams with diverse skill sets adds value to our engineering projects, we ask candidates questions that gauge their potential value to Strava outside of purely technical contributions. In doing so, we are able to draw a more holistic picture of what a candidate will add to their prospective team.

Hiring and retention are only the first steps towards our vision of a truly inclusive environment throughout our engineering organization. On an ongoing basis, EDIG members host diversity lunches and actively encourage all employees to join in. During these sessions, participants break out into small groups and engage in a safe conversation around current diversity issues. To incorporate external viewpoints in our way of thinking, we invite prominent speakers who have worked on major diversity initiatives at other technology companies. By encouraging these conversations and creating a safe space for employees to hear out new perspectives and ideas, we can foster a workplace where all voices are heard.

EDIG encourages all engineers within our organization to actively pursue diversity and inclusion. Traditionally, the challenge engineers face when participating in committees outside their core function is that they feel like they are taking time away from their day-to-day projects to work on something that is not universally seen as directly advancing their engineering career. At Strava, we explicitly encourage and support all engineers to dedicate time and energy to make Strava a better company in any way they see fit, including participating in diversity groups and attending diversity/inclusion conferences and talks. To start, we have seen more people throughout our organization gathering diversity data, scheduling lunchtime talks on important issues, and improving other parts of our hiring process.

From our internal surveys, we see an 18% year-over-year increase on the belief that Strava values diversity. In the past year, we’ve hired ten women and nine people of color to join our team. We have made good progress in 2017, but our team continues to explore other ways we can further improve. Strava is committed to furthering these principles and building a diverse team in 2018 and beyond. Stay tuned for more updates and learnings from Strava’s EDIG.


Diversity within Strava’s Engineering Organization was originally published in strava-engineering on Medium, where people are continuing the conversation by highlighting and responding to this story.

]]>
<![CDATA[Upgrading Kafka at Strava]]> https://medium.com/strava-engineering/upgrading-kafka-at-strava-fda64bed0504?source=rss----89d4108ce2a3---4 https://medium.com/p/fda64bed0504 Mon, 18 Dec 2017 22:34:18 GMT 2017-12-19T19:30:14.801Z About Me:

My name is Daniel Schofield and I am a Senior at the University of Maryland. I have had the pleasure of interning at Strava on the Infrastructure team for the past 3 months. While I am an avid runner that has used Strava for a while, my interest in working here was also due to my interest in seeing how Strava engineering projects work under the hood.

Interning:

For the first couple weeks of my internship, I was assigned several different tasks to familiarize myself with Strava’s codebase. The biggest of these projects was making updates to the matched runs service, Toucan. This was a great start to my internship. I could immediately see the product impact my changes made, while becoming more comfortable at Strava. I was then assigned my main project — implementing a new system for publishing events with Apache Kafka.

Project Background:

Kafka is a distributed streaming platform, that lets you publish and subscribe to a stream of records. Kafka is heavily used at Strava — it logs the majority of events that happen on the platform, such as changes to activities, segment efforts, and kudos. It also plays an important role in logging client behavior events.

When I arrived at Strava, the majority of events were produced by our Rails front-end that serves API and web traffic. We wanted to improve how we published events to Kafka. Most importantly, we were producing events using an unmaintained Kafka client — poseidon. In addition, as Strava has grown, we have seen a growth in services that want to produce events to Kafka. When upgrading Kafka versions, the broker needs to be updated, followed by the clients. As the number of producers grew, it became more tedious to make all of the associated upgrades. Event logging is very important to many pieces of Strava’s products and we could not tolerate a loss of events, even when updating our logging system.

Theoretically it is easy to upgrade Kafka brokers, but it in practice it can be difficult. For example, attempting to upgrade the Kafka brokers, while supporting older clients, resulted in an increased web error rate — the Kafka client we were using, poseidon, did not handle reduced availability scenarios well. We also wanted be able to use the Kafka official API in Java. Overall, when I arrived there were a multitude of reasons to restructure the architecture of event logging to Kafka.

The Solution:

Several solutions to improve the way events are logged were explored, however, a service as the solution became clear. By putting event logging behind a service, we were able to leverage Thrift client code already in the current Rails codebase. This code easily allows for retries and other settings to be configured when sending requests to the service.

The design of the service focused on creating a single Kafka producer that exposes a Thrift endpoint. Rails first forms a request that includes a batch of events. When the service receives these events, it logs them to Kafka. This architecture is simple and allows for the Java Kafka client to be used when publishing. Additionally, any Thrift client can be used to publish events. Finally, having a single producer makes it easier to update the Kafka version and configuration — with a single event sink.

Through this standardization of a service, Kafka is accessible to any new services that want to produce events with a simple Thrift request, as opposed to having to handle Kafka client configuration. This service can be enhanced to handle extra features such as message validation and any additional logic that could be introduced in the future. The service was then deployed using Marathon to be able to leverage other pre-existing infrastructure such as autoscaling.

Lessons Learned:

Being able to own the development of my own service was helpful for growth as an engineer. Creating my own service allowed me to learn about the open source code that we use at Strava. For example, the application is deployed on Marathon with Docker containers, which gave me insight into container orchestration. Strava also uses linkerd and Zookeeper for load balancing and service discovery, in addition to using Graphite for metrics collection. One of the best things about developing this service was that I was able to gain a sense of how these different technologies interact with one another. Working at Strava, I’ve had the opportunity to learn about technologies I didn’t know existed before I arrived.

Overall Experience:

Interning at Strava was an amazing experience and I am extremely thankful that I had the opportunity to work here. I was able to learn about software and best practices in the industry. It was great to see that even though people have strong opinions on the product, they are still able to make data-driven decisions that focus on what is best for the athlete. While here I also had the opportunity to run my first marathon, California International Marathon, and felt extremely encouraged by the positive culture that is prevalent here. I felt important working on a real project that is deployed in production and actually has an impact on Strava. I appreciated the iterative development that allowed me to grow and become a better developer and a better person.

I would like to thank Jeff Pollard for being my technical mentor, Steve Lloyd for being my manager, and all of the Infrastructure team for supporting me throughout my time here. Go Terps.


Upgrading Kafka at Strava was originally published in strava-engineering on Medium, where people are continuing the conversation by highlighting and responding to this story.

]]>
<![CDATA[Rebuilding the Segment Leaderboards Infrastructure: Part 4: Accessory Systems]]> https://medium.com/strava-engineering/rebuilding-the-segment-leaderboards-infrastructure-part-4-accessory-systems-5e98dc9a3d78?source=rss----89d4108ce2a3---4 https://medium.com/p/5e98dc9a3d78 Tue, 28 Nov 2017 18:01:01 GMT 2017-11-28T18:01:01.492Z Over the past year, the Strava platform team has been working to rebuild the segment leaderboards system. This is the final article in a series of four blog posts detailing that process, and describes how the leaderboards event stream architecture enables simple and easy extensions to the core functionality. For some added context, please read part one, which details the background of the leaderboards system, part two, which distilled the problems of the previous leaderboards systems down to a set of principles a new system should solve, and part three, which describes details of the core leaderboards system.

Accessory Systems

As a quick refresher, part three of this series described a leaderboard architecture in which effort mutations in the Ruby on Rails app were logged to a Kafka topic partitioned by segment and user. Those mutations are consumed by a worker which refreshed effort data from the canonical effort store, and then applied the resulting updates to leaderboards storage.

As a review, here is the existing architecture translating effort mutations into leaderboard updates. Note the “Leaderboards Service API,” which is an RPC service clients make requests through to query the Cassandra leaderboards storage.

While this system is the core of our final leaderboards system, it is far from the entire surface area of the leaderboards service at Strava. In addition to basic leaderboard functionality, the leaderboards service is also responsible for:

  1. Awarding top ten achievements (including KOM/QOM) from efforts on an activity.
  2. Maintaining counts of the total number of efforts ever on a segment, and the total number of unique users who have attempted a segment.
  3. Serving as a base store for dynamically filtered leaderboards (for example: a leaderboard composed only of the other users you are following, or the members of a club).

A naive way to support these features would be to execute queries against Cassandra leaderboard storage:

  1. Achievements — whenever we render an activity’s efforts within the Strava product, query the leaderboard for every segment traversed by that activity to determine if any of the activity’s effort resulted in a top ten.
  2. Counts — whenever we show a leaderboard, fetch all rows from it to determine the count.
  3. Filtered leaderboards — Whenever we need to show a dynamically filtered leaderboard, fetch all rows from the leaderboard and filter them for users which meet the criteria.

While straightforward, querying Cassandra every time is incredibly costly — you may have noticed the phrase “fetch all rows” more than once in the previous paragraph. Full Cassandra table scans are computationally expensive, and time consuming. If we attempted these naive query patterns during regular query load, we would overwhelm our infrastructure and cause undesirable and unpredictable latency for requests.

The next logical step, then, is to denormalize the data these features require into a derivative datasets. These datasets contain precomputed answers to the common questions the above queries aim to answer, giving us predictable performance and predictable latency for read requests.

Replication and Synchronization

Reflecting back on the three features our leaderboards service needs to support, we can classify each access pattern into one of three derivative data sets:

  1. Leaderboard Cache — copy of an often-requested portion of all leaderboards, held in a low latency format (i.e. in-memory), offering quick reads.
  2. Achievements — store of efforts which are within the top 10 of a leaderboard.
  3. Counts — aggregate counts of total efforts and unique number of users seen per leaderboard.

To keep derivative data stores like these in sync, we will want to update them as soon as the leaderboards themselves are updated. To achieve this goal, oftentimes engineers will do the simple and straightforward thing of adding lines of code in the upstream application to update derivative data stores as well. For example, to keep leaderboard aggregate counts in sync we would add code to increment the total effort counter every time a new effort is added or removed from a leaderboard.

This approach may sound straightforward at first, but there is a lot of hidden complexity:

  • Latency in updating downstream data sets add latency to upstream processing.
  • Availability of the upstream processing is now tied to availability of the downstream data stores.
  • Upstream processing is now concerned with proper error-handling/retry/data consistency requirements of downstream data sets.
  • Added complexity of code, integration, and testing downstream updates within the upstream system.

In nearly all cases, these complications can be avoided by instead architecting your system in a stream processing approach, where changes in the upstream system are asynchronously replicated to downstream ones. In this design, the upstream triggering system logs mutations it is making, then downstream services consume those updates and apply changes to their own data stores. In our implementation, the worker updating leaderboards simply logs leaderboard mutation messages as it updates leaderboards. Downstream clients consume those mutations to keep their derivative data stores in sync.

Derivative Data Sets

In the rest of this article we will summarize how the leaderboards stream processing architecture allowed us to build three derivative data sets. We’ll slowly build out a diagram of the entire leaderboard architecture, showing how all three of the systems fit together as part of the larger whole.

Leaderboard Cache

While Cassandra meets our use case for leaderboard storage quite nicely, due to its data model, it has a limited querying ability. You are not able to craft queries as expressive as those in more traditional RDBMS (such as MySQL). The normal approach to this limitation is to predefine query patterns and denormalize data into separate Cassandra tables, one for each query pattern.

This technique is somewhat challenging for leaderboards. For the dynamic leaderboards, it is prohibitively expensive to materialize all of them in Cassandra. We would be looking at an additional leaderboard per segment for each user that has traversed the segment and each club in which a member has traversed the segment, together ordering on the tens or hundreds of millions. Thus, we have to fetch all efforts from the base leaderboard, and filter them in memory. These are not common requests, but do happen with enough frequency, and are expensive enough to Cassandra, that we wanted to look at ways to limit them to some degree.

Additionally, aside from paginated leaderboard results, the other main query we must fulfill is calculating a user’s ranking on a given leaderboard. Since the ranking is dependent on the number of rows above the user in a given leaderboard, we have to fetch all efforts that are faster than the user’s entry to determine the rank. This could potentially be the entire leaderboard (if the user is in last place), another very expensive operation.

Caching

The solution to this problem was to put a cache in front of Cassandra to serve common leaderboard requests. This cache would hold a subset of frequently requested leaderboards, stored in a data structure to facilitate quick response times. The cache should be able to serve leaderboard requests faster than Cassandra, and could potentially provide a richer querying API to handle those requests without needing a full scan.

Populating the Cache

Populating the cache should be done on a cache miss as seen from leaderboard read requests. On a miss, the client logs a message into a Kafka topic noting the leaderboard which had the cache miss. A downstream consumer (discussed shortly) consumes the cache miss message, and populates the cache by querying for canonical leaderboard data from Cassandra.

You may be wondering why we didn’t craft the cache as a read through cache, where the client queries Cassandra on a miss, and then caches that response as part of the initial read request. The reason is that we actually cache the entire leaderboard (all efforts), not just the specific response for the specific request. And we do not want to introduce latency to the read request to do this cache operation, so instead it is deferred to a out-of-band downstream consumer.

This may see counterintuitive, but it’s important to note that caching specific leaderboard responses is incredibly hard. Leaderboard responses include a ranking value for each effort returned. This is the effort’s ranking in the leaderboard, noting how many faster efforts there are before it. Caching partial sections of leaderboard standings with a ranking is dangerous — because as new efforts are added or removed from the leaderboard, the ranking value for other efforts on the leaderboard change. For example, if I upload a best effort on a segment with 10,000 athletes and I am the new 250th best effort, the remaining 9,750 efforts all need to have their ranking shifted down by one. If we cached portions of leaderboards, on any given best effort mutation we would have to invalidate all partial responses that had their standing changed by that effort. This is certainly possible, but incredibly challenging and untenable.

Caching, and then invalidating, the entire leaderboard on each new best effort mutation is certainly simpler and easier to reason about. Unfortunately, popular (read: large) leaderboards see tens of updates a day, lowering cache hit rate for that class of leaderboard. This is extra-unfortunate since those popular leaderboards are the slowest to query, and then need caching the most.

The ideal solution is to cache the whole leaderboard in a structure which maintains ranking on updates, but allows partial updates as new efforts are added and removed from the leaderboard. This is tricky to do, as cache population due to cache misses needs to be synchronized with these partial updates. If you process them independently, you could end up with inconsistent data. Imagine Cassandra is queried by the actor processing the cache miss, but before the actor can write the leaderboard to cache, an effort is added to that same leaderboard in Cassandra. This effort was added after the first actor queried Cassandra, but since the leaderboard doesn’t exist yet (we are waiting on that actor to process the miss), the separate actor processing the leaderboard update does not apply the change. The first actor processing the miss then writes the leaderboard to cache, and we’ve lost the leaderboard update.

To achieve this synchronization, we rely on our good friend Kafka topic partitioning. Both cache miss messages, along with leaderboard updates, are logged into the same topic partitioned this time by segment and leaderboard type. This ensures that all writes to a particular type of segment leaderboard — both populates and updates — are serialized, processed by no more than one actor at a time.

Adding cache support was as simple as logging both cache misses and leaderboard updates for the new cache worker to consume. The new cache worker components are highlighted in yellow.

Cache Data Store

What data store will work with this caching strategy? Basic object caches, like Memcache, are out, since they do not support partial updates or ordered data structures. What we need is a cache that has slightly richer features and data structures which support partial updates. As it turns out, Redis is a good candidate for this problem.

The Redis sorted set data structure is a natural fit, because it allows us to sort efforts by their elapsed time. However, due to details outside of the scope of this blog post, the actual implementation of leaderboards in Redis required keeping both a sorted set and a hash in order to efficiently implement all needed leaderboard queries. This represented a challenge, as Redis does not have any sort of transaction isolation, and we did not want to use locks, for reasons mentioned in earlier posts in this series.

However, Redis does have the ability to run Lua scripts via an embedded Lua interpreter, and the entire Lua script runs from start to finish atomically on the Redis instance. Leveraging this fact, we were able to write a suite of Lua scripts which atomically update both the sorted set and hash atomically. The cache worker then simply executes these scripts when processing cache miss and leaderboard update messages.

Finally, it’s important to address part one of this series, where we noted Redis was a “bad choice” for storage. We’re less concerned with the poor Redis ops story in this deployment, as all cache data is ephemeral. If our Redis instance crashes, we will lose all cached data, but the leaderboards system will still have high availability — we can read from Cassandra temporarily until a replacement node is back online.

Achievements

To record top ten achievements, a worker consumes leaderboard mutation messages logged by the cache worker, filtering them out for only efforts on either the KOM or QOM (colloquially called XOM) leaderboards. For each XOM effort seen, we query the leaderboard it appears on, to see if the effort is in the top ten results. If it is, we enqueue a job to record the achievement in our Rails app, which owns the display of these achievements.

Why does the worker need to look up the top ten leaderboard results if we have the leaderboard mutation already? The answer is that the leaderboard mutation does not include the ranking of the user on the leaderboard. This was a conscious decision. While calculating such a rank is possible at effort add time to Cassandra, calculating it is prohibitively expensive as it requires counting all the rows for efforts with a elapsed time faster than the effort just inserted. Rather than slow down the workers updating Cassandra, we decided to do this work via a separate worker after the leaderboard has been updated. That downstream worker is then able to query for leaderboards like any other client (using the cache), and only query the top ten results: a much cheaper query than asking for the ranking of the effort on the whole leaderboard.

Logging cache worker cache mutations works as a signal for the achievements worker to check the leaderboard for achievements. The new achievements worker components are highlighted in yellow.

The tradeoff with this approach is a small chance of missed achievements during a high volume of concurrent effort uploads to the same leaderboard. For instance, if I upload an effort that is the new KOM on a segment, but before the worker calculating achievements processes the leaderboard mutation, my friend uploads their effort which is even faster and takes over the KOM. Technically my effort was the KOM, for the brief moment between my effort upload and my friends. However, when achievements worker actually queries for the top ten based on my effort it would see my effort as second place, with my friends effort as the KOM.

This is certainly not ideal, but this situation is very rare. Even if it does occur, most users would be okay (or even in some cases, unaware) they held the XOM for that short amount of time. Additionally, even if they did know they held it, under normal operating conditions they’d have only held the XOM for a second or two, not long enough to really consider themselves the XOM holder with any authority.

Aggregate Counts

As mentioned above, we maintain two aggregate total effort counts on a segment: the number of efforts ever, and the number of distinct users. The old Scala-powered system updated both counts via addEffort or removeEffort calls. The total effort count was implemented as a denormalized Redis counter, while the distinct user count was simply the HLEN of the redis hash per segment.

For the distinct user count, there is no equivalent O(1) HLEN command for Cassandra. We have to use the more expensive COUNT(*) query on the overall the leaderboard. Since this is so much more expensive, we made the decision to denormalize effort counts into another data store, keyed by the segment. For every leaderboard mutation seen on the overall leaderboard, we issue a COUNT(*) command and write the result to the denormalized store. This will obviously calculate counts for every segment in the whole system, even for segments which no client ever queries for, but popular leaderboards see hundreds of requests for their count per day, so the tradeoff is worth it for predictable O(1) read performance.

Total effort counts are more complicated. We cannot simply increment/decrement counts as we consume effort mutation messages, because that operation is not idempotent. If the consumer crashes and picks up from an earlier offset in the log we will be double incrementing/decrementing efforts. It turns out this is a common problem in distributed systems, with the distinction that we’re not really looking for a counter, really we want a set of all efforts on a segment, using the cardinality of that set as the total count.

However, sets are quite memory intensive; we would need to store every effort ever at Strava to produce accurate counts. This is also another common problem, for which most solutions rely on probabilistic data structures. In our case, a HyperLogLog data structure works well for use case. It supports idempotent adds in O(1), with O(1) cardinality checking. So effort counts are now as simple as consuming effort mutations, adding each effort to a HyperLogLog per segment.

The existing leaderboard updates topic logged by the cache worker is also used to notify the counters worker to update the denormalized leaderboard counts. The new counters worker components are highlighted in yellow.

Unfortunately, as of today, this is not the way our production system maintains total effort counts. We still naively update counts via addEffort or removeEffort calls. As mentioned earlier, to accurately build a HyperLogLog counter for all efforts ever per segment we’d have to play all efforts ever into it. This is a non-trivial backfill operation, and instead we just decided to migrate the counters from the old infrastructure and maintain them the same way. This is obviously not ideal, but is no worse than the current implementation and allowed us to more quickly migrate away from the old leaderboards infrastructure.

Conclusion

Hopefully, after this article, it is clear that a stream processing architecture provides a great foundation to easily build services that produce derivative datasets. We saw it was easy to build several systems — a robust leaderboard cache containing a subset of often-requested leaderboards, a system to detect and publish top ten achievements, and a system to maintain denormalized aggregate counts.

While these datasets are updated asynchronously, with some latency, between their triggering actions upstream and an update reflected in the derivative data store, the latency is generally very low. This is a worthwhile tradeoff — in exchange for a latency hit, we get a system with increased reliability and consistency of updates, decoupling of components, scaling independence and flexibility, and simpler error and retry handling.


Rebuilding the Segment Leaderboards Infrastructure: Part 4: Accessory Systems was originally published in strava-engineering on Medium, where people are continuing the conversation by highlighting and responding to this story.

]]>
<![CDATA[Rebuilding the Segment Leaderboards Infrastructure — Part 3: Design of the New System]]> https://medium.com/strava-engineering/rebuilding-the-segment-leaderboards-infrastructure-part-3-design-of-the-new-system-39fdcf0d5eb4?source=rss----89d4108ce2a3---4 https://medium.com/p/39fdcf0d5eb4 Tue, 07 Nov 2017 18:32:09 GMT 2017-11-07T18:32:29.658Z Over the past year, the Strava platform team has been working to rebuild the segment leaderboards system. This is the third in a series of four blog posts detailing that process. This post describes the implementation details of the new leaderboards system, showing how it achieves the design goals set out in earlier posts, and fixes some common problems seen in the previous leaderboards system. For some added context, please read part one, which details the background of the leaderboards system, and part two, which distilled the problems of the previous leaderboards systems down to a set of principles a new system should solve.

Goals Review

Reflecting back on part two of this series, we have two systems we need to build out for the new leaderboards service:

  1. A stream processing system, which is strongly ordered, partitionable, and idempotent.
  2. A data storage system which is distributed, able to store all leaderboards in a homogenous way, and supports fast writes.

Stream Processing System

If you need a strongly ordered, partitioned backing store for messages in a stream processing system, Kafka is the obvious choice. Out of the box, it offers replication, strong ordering, high availability, and partitioning — exactly the system properties we need. There are certainly other messaging solutions which could be considered; those run the gamut of everything from Redis (via PubSub), to more mature and pure messaging solutions such as ActiveMQ or RabbitMQ. These others messaging systems generally do not have the same durability, availability, or ordering guarantees as Kafka, and we already used Kafka in production and liked it, which made it a relatively easy choice from there.

If you’re not familiar with Kafka, I’d suggest spending some time reading the Kafka documentation, specifically the section on its design. This will make the rest of this post easier to follow.

Design

With Kafka in hand, let’s figure out how to go from efforts being created, updated, or deleted in our Rails app, to an ordered, partitioned, stream of add and remove leaderboard update messages.

A naive solution may be to have the Rails application log the new effort state to a Kafka topic each time the effort is mutated. A downstream consumer could then simply consume those effort mutation messages, and apply updates to the data store as needed.

This seems like it would work, but there are consistency problems. While effort mutations are strongly ordered within the Kafka partition, we’re still at the mercy of the message publishers to log them to that partition in the correct order. As part two of this series points out, efforts are mutated in our Rails application in parallel (occurring in web transactions, background jobs, etc) without any sort of synchronization or ordering. Consequently, effort mutations can (and will) be published out of order, which renders the order of logged mutations more-or-less useless.

There is hope, though. One important property of our system is that for the entire lifecycle of an effort, two important fields are immutable: the segment the effort traversed, and the user whose activity the effort belongs to. Knowing this, we can instead use the effort mutation messages logged by active only as a “notification” that something about the effort changed. The message doesn’t describe what about that effort specifically changed, we only know something changed and the leaderboard store may need to be updated.

Under that model, we can push the ordering requirement further down into the leaderboards system, where we have more control. If the worker consumes the partition of effort mutation in order, as it processes each message it can query our canonical effort storage for the latest effort data, and then make a decision on what kind of update to apply to leaderboards at that point.

No matter what order the effort mutation messages were logged in, the worker will eventually update leaderboard storage to the correct data.

The key takeaway here is that this architecture is eventually consistent, and handles all race conditions and out of order logging of effort mutations from the Rails app. This is due to a couple important properties:

  1. The actual transaction mutating the row in the database for the effort commits before the effort mutation event is logged.
  2. A correct leaderboard update can be determined based on the state found in canonical effort storage, for any possible mutation event.

Even if the worker reads an effort row from canonical storage, and then another actor in the system immediately updates the effort, rendering the worker’s read stale and invalid, the worker can still safely apply its now stale update. This is safe because the worker will eventually consume the mutation logged by the actor due to its effort update. On consumption, the worker will then read the final correct effort state, and update leaderboards accordingly.

Immutability

Before declaring victory with the stream processing system, it’s also important to think about our other stream processing goal of idempotency. What would happen if we replayed a message more than once? Or, since we will be implementing our worker as a Kafka consumer, what happens if it crashes, and then restarts its consumption from an earlier offset in the log? Can leaderboard consistency be maintained?

Thankfully, yes. If we consider each effort mutation as a stateless notification the effort mutated in some way, then being re-notified of a mutation will simply query the latest state again. Our consumer will still attempt to issue the leaderboard update again, but update is based on the most recently queried state from our canonical effort storage. In the even more complicated example of our consumer crashing and restarting its processing from an earlier point in the log, the same property still holds. The worker will attempt to issue the leaderboard update again based on the latest data.

Set Up for Success

The end result of this design is that we have a system which turns a potentially out-of-order series of effort mutations into an ordered sequence of leaderboard updates. As long as sequential processing of a partition occurs, effort updates are idempotent, and rewindable, due to the strong ordering guarantees of a Kafka partition and the causal relationship of updates in the system.

Understanding the properties of messages in your system often times can reveal characteristics you are able to leverage for efficient and accurate processing. In particular, the leaderboards architecture sets us up nicely to use event sourcing and command query responsibility segregation (CQRS) in building later components of the segments leaderboard system. We will discuss those in part four of this series.

Data Store

With our stream processing architecture figured out, it’s time to turn our attention to the data store. To review: in part two of this series we noted the desire for a store that was distributed and highly available, as well as being able to achieve a high write load, and store all leaderboards in a homogenous way.

Influencing our data store decision was the preexisting usage of Cassandra at Strava. We use Cassandra in a variety of other systems already, and it was a common opinion that it could serve as a good candidate for the leaderboards store. On the surface, Cassandra certainly met a lot of the project’s needs — it’s distributed, highly available, able to support a high level of writes, and had a strong emphases on ordering. Consequently, a lot of our work in choosing the leaderboards data store went into determining if Cassandra would be an ideal fit.

Cassandra

Our confidence with Cassandra mostly mostly hinged on two main questions:

  1. Is it possible to construct a suitable data model/table schema using Cassandra?
  2. Will Cassandra’s eventual consistency work for our use case?

Table Schema

Modern Cassandra schemas are generally defined in CQL, a SQL-like abstraction over native Cassandra data structures. So it’s best to think of the Cassandra schema in terms of more traditional SQL-like rows and columns.

Given our leaderboards use case, we crafted a schema we felt would work:

CREATE TABLE leaderboards (
segment_id int,
leaderboard_type int, // overall, male, female, etc.
elapsed_time int,
effort_id bigint,
effort_data blob,
user_id int
)

Each row in a Cassandra table is keyed by a unique PRIMARY KEY. Choosing a PRIMARY KEY, along with Cassandra data modeling in general, is a complicated topic, but some distilled guidance is best summed up via a blog post by Datastax as:

Rule 1: Spread Data Evenly Around the Cluster
You want every node in the cluster to have roughly the same amount of data. […] Rows are spread around the cluster based on a hash of the partition key, which is the first element of the PRIMARY KEY.
Rule 2: Minimize the Number of Partitions Read
Partitions are groups of rows that share the same partition key. When you issue a read query, you want to read rows from as few partitions as possible.

One final note: within a partition, rows are ordered by the remainder of columns in the PRIMARY KEY, known as the clustering key.

Knowing this we might chose our PRIMARY KEY as:

(segment_id, leaderboard_type, elapsed_time, timestamp, effort_id)

Here, segment_id is the partition key, as it is the first element in the primary key. The remaining columns — leaderboard_type, elapsed_time, timestamp, effort_id— make up the clustering key, which defines the ordering of rows within the partition.

This seems great — with segment_id first in the PRIMARY KEY, all rows for a segment are partitioned onto the same node. In aggregate, this should spread all effort rows evenly around the cluster, with any one leaderboard request contained to a single partition. Within a partition, rows will be ordered by the leaderboard_type, and then by elapsed_time — just like we want for an actual leaderboard. This schema also allows us to store all leaderboards in a homogenous way, another one of the properties we wanted in our data store.

Good for Reads, Bad for Writes

While this schema works well for storing ordered sequences of efforts in a leaderboard, it is actually pretty awful at retrieving the effort for one particular user. This is a problem for our aforementioned worker consuming effort mutations. For any given add or remove message processed, our leaderboard service needs to query the leaderboard store for the user’s current best effort to compare it against the incoming effort. Due to the PRIMARY KEY we chose, we can’t efficiently issue that query. Cassandra only allows contiguous sequence of rows to be returned, and a particular user’s rows, for a segment, are interspersed amongst the ordered rows for all users for the segment.

We could maybe adjust the PRIMARY KEY to include the user_id:

segment_id, leaderboard_type, user_id, elapsed_time, timestamp, effort_id

This would make it trivial to query for an user’s best effort for that leaderboard_type, but now rows on disk are ordered by user_id, and not by elapsed_time like we want.

So what do we do? We looked at this and evaluated two options.

First, we considered having two separate tables. One table would have user_id in its PRIMARY KEY to allow efficient querying by user. Then, once that table had been updated, we would write the results to a second table, which had its PRIMARY KEY ordered for a leaderboard. This certainly would work, but keeping two tables in sync like this is tricky, and opens us up to a whole host of processing complications, edge cases, and failures you need to reason about and account for.

Second, we looked at using a Cassandra feature called secondary indexing. Secondary indexes in Cassandra are a way to add an index on, and thus filter by, a column that is not part of the clustering key. There are many people online who discourage the use of secondary indexing. Their objections are based mostly on the fact that while secondary indexes have plenty of use cases where they seem to solve a problem, due to their implementation they do not actually work that well. Additionally, they will slow down writes, as you need to update both the index and table on each write operation.

However, if you follow the guidance of the Cassandra documentation, understand your use case to ensure it fits, and dutifully benchmark your implementation, secondary indexes can work well. And thankfully, our data and query pattern was a good fit for a secondary index on the user_id column, so we created a test schema, benchmarked it, and determined that it would actually work well for us.

There is still one remaining problem with our Cassandra schema. Even with the index on user_id, determining the ranking of a user on a leaderboard is not straightforward. To answer this question, we need to know which number row, in order, the user is from the top of the leaderboard. There is no CQL operation that we can use to achieve this in an efficient way, so we have to query for all rows in the table, and manually determine the user ranking ranking in memory. This is not so bad for small leaderboards of a few hundred users, but many leaderboards are in the high tens of thousands of users in size. The cost of moving that amount of data across the network, combined with the computational cost of processing that many results is likely to be untenable.

This type of query is not handled well by most data stores, so we’re not really missing a whole lot by using Cassandra, but the situation is certainly less than ideal. To combat this problem, we’ll want to ensure that we both minimize the number of queries of this type as well as cache leaderboard data in such a wayas to make this class of queries more efficient. Stay tuned for part four of this series, where we will discuss this problem and the caching system in more detail.

Consistency Model

The other big consideration when using Cassandra is understanding its consistency model. Cassandra operates under last write wins (LWW) consistency, where each INSERT or UPDATE (really, an UPSERT) is blindly appended to the database, without checking if a duplicate record exists. Then, during reads, if Cassandra encounters two versions of the same row, it chooses the newer one. “Newer,” defined as the row with the latest timestamp.

The “timestamp” a row is written with can be used-defined, but generally is the current timestamp. This may sound like a scary way to do conflict resolution (there are plenty of ways it can break), but it’s incredibly fast and easy to reason about. In any running system you will likely see a small degree of data inconsistency, but nearly always that is a worthwhile tradeoff to the benefits of availability, replication and performance.

There are also ways to lower the rate of data inconsistency. Cassandra allows tunable consistency parameters, which you can use to ensure all read and write operations are executed on a quorum number of nodes. Doing so will hurt both read/write latency and availability (as a larger number of machines need to be healthy in order to complete the request), however, you can use this technique to prioritize consistency over availability if the performance hit is manageable for your application. We also run Cassandra configured with 3 replicas of data (r value of 3), allowing us to tolerate the loss of one node and still successfully complete reads and writes on a quorum number of nodes (2). Granted if we lose 2 nodes we will stop serving requests that require those nodes to establish a quorum, but losing two nodes is unlikely to happen in isolation without a more systemic widespread networking issue affecting many parts of the system.

The leaderboard system also structures its updates to reduce the likelihood of conflicting updates. Since leaderboard updates are partitioned by segment/user, the likelihood of conflicting updates is lowered dramatically, as no other actor in the system can be reading or writing the same row at the same moment. There are certainly scenarios where this fact could become false — i.e. a consumer pauses (perhaps due to GC) during message processing, a replacement consumer is started, and then the original consumers resumes processing. Generally these types of situations are incredibly rare, or at least rare enough that the engineering work and system performance hit incurred by engineering to prevent them are not worth the small amount of data inconsistency seen.

After some more benchmarking, testing, and dual writing leaderboard entries to Cassandra, as well as the old system, we eventually determined Cassandra would be a suitable data store for the leaderboards system.

Conclusion

Our leaderboard system is composed of two main components:

  1. A Kafka stream processing system, which consumes effort mutation messages logged from the Rails application, fetches the latest effort data from canonical storage, determines an update to apply, and then applies it to leaderboard storage.
  2. A Cassandra leaderboard store made up of a single CQL table keyed by segment and leaderboard type, with a secondary index on user_id to facilitate querying by user.

These two systems work in conjunction as a pipeline to transform mutations of efforts by our Rails application into a denormalized Cassandra index of the best effort for any given segment/user/leaderboard combination. This index can be used to serve leaderboard read requests quickly and efficiently, with some known drawbacks and deficiencies that can be solved through strategic caching.

While this final architecture may seem simple or obvious, arriving at it took many weeks of analysis, prototyping, and benchmarking. This article also skipped over a decent amount of extra functionality and implementation details of the final production system. Some of that detail will be discussed in part four of this series, where we will review accessory systems built in conjunction with leaderboards, such as a leaderboard aggregate counters and a caching system, as well as enumerating additional benefits of this architecture.


Rebuilding the Segment Leaderboards Infrastructure — Part 3: Design of the New System was originally published in strava-engineering on Medium, where people are continuing the conversation by highlighting and responding to this story.

]]>
<![CDATA[Building the Global Heatmap]]> https://medium.com/strava-engineering/the-global-heatmap-now-6x-hotter-23fc01d301de?source=rss----89d4108ce2a3---4 https://medium.com/p/23fc01d301de Wed, 01 Nov 2017 09:01:01 GMT 2018-04-04T20:42:01.839Z Our Global Heatmap is the largest, richest, and most beautiful dataset of its kind. It is a visualization of two years of trailing data from Strava’s global network of athletes. To give a sense of scale, the new heatmap consists of:

  • 700 million activities
  • 1.4 trillion latitude/longitude points
  • 7.7 trillion pixels rasterized
  • 5 terabytes of raw input data
  • A total distance of 16 billion km (10 billion miles)
  • A total recorded activity duration of 100 thousand years
The Global Heatmap in Moscow, Russia demonstrating Mapbox GL’s rotate/pitch feature.

Beyond simply including more data, a total rewrite of the heatmap code permitted major improvements in rendering quality. Highlights include twice the resolution, rasterizing activity data as paths instead of as points, and an improved normalization technique that ensures a richer and more beautiful visualization.

The heatmap is now available on Strava and the Strava Route Builder. The rest of this post is a technical deep dive on the details of this update.

Background

From 2015 to 2017, there were no updates to the Global Heatmap due to two engineering challenges:

  • Our previous heatmap code was written in low-level C code and was only designed to be run on a single machine. It would have taken months for us to to update the heatmap with this restriction.
  • Accessing stream data required one S3 get request per activity, so reading the input data would have cost thousands of dollars and been challenging to orchestrate.

The heatmap generation code has been fully rewritten using Apache Spark and Scala. The new code leverages new infrastructure enabling bulk activity stream access and is parallelized at every step from input to output. With these changes, we have fully conquered all scaling challenges. The full global heatmap was built across several hundred machines in just a few hours, with a total compute cost of only a few hundred dollars. Going forward, these improvements will enable updating the heatmap on a regular basis.

The remaining sections in this post describe in some detail how each step of Spark job for building the heatmap works, and provides details on the specific rendering improvements that we have made.

Input Data and Filtering

The raw input activity streams data comes from a Spark/S3/Parquet data warehouse. Several algorithms clean up and filter this data.

Most importantly, the heatmap only contains public activities and respects all privacy settings. Go here to learn more.

Additional filters remove erroneous data. Activities at higher than reasonable running speeds are excluded from the running heat layer because they are most likely mislabeled. There is also a higher speed threshold for bike rides to filter data from cars and airplanes.

The intent of the heatmap is to only show data from movement. A new algorithm does a much better job of classifying stopped points within activities. If the magnitude of the time averaged velocity of an activity stream gets too low at any point, subsequent points from that activity are filtered until the activity breaches a specific radius in distance from the initial stopped point.

Comparison of rendering before (left) and after (right) artificial noise was added to disrupt artifacts from devices that correct GPS data to the nearest road.

Many devices (most notably the iPhone) will sometimes “correct” the GPS signal in urban areas by snapping it to known road geometry rather than a raw position. This can lead to an ugly artifact where heat is only one pixel wide along some streets. We now correct for this by adding a random offset (drawn from a 2 meter normal distribution) to all points for every activity. This level of noise is large enough to be effective at preventing this artifact without noticeably blurring other data.

We also exclude any “virtual” activities, such as Zwift rides, because these activities contain fake GPS data.

Heat Rasterization

After filtering, latitude/longitude coordinates of all data points are translated into Web Mercator Tile coordinates at zoom level 16. This zoom level consists of a tessellation of the world into 2¹⁶ by 2¹⁶ tiles each consisting of 256 by 256 pixels.

The old heatmap rasterized each GPS point as exactly one pixel. This simple approach was often hindered because activities can record at most one data point per second. This frequently caused visible artifacts in areas of low heat because the speed and record rate of activities often led to multi pixel gaps . It also caused a bias in heat where activities generally move slower (consider uphill vs downhill). Since the new heatmap renders an additional zoom level (pushing the highest spatial resolution of a single pixel from 4 meters to 2 meters), the problem was made even more visible. The new heatmap instead draws each activity as a pixel-perfect path connecting subsequent GPS points. On average, the length of a segment between two points at zoom level 16 is 4 pixels, so this change is very noticeable.

To accomplish this in a parallel computation, we needed to handle the case where adjacent points in an activity map to different tiles. Each such pair of points is resampled to include intermediate points along the original line segment at the boundary of each tile crossed. After this resampling, all line segments then start and end on the same tile, or have zero length and can be omitted. Thus we can represent our data as (Tile, Array[TilePixel]) tuples, where Array[TilePixel] is a continuous series of tile coordinates that describe the path of a single activity over a tile. This dataset is then grouped by tile, so that all of the data needed to draw a single tile is mapped to a single machine.

Each sequential pair of tile pixel coordinates is next rasterized onto a tile as a line segment using Bresenham’s line algorithm. This line drawing step must be extremely fast, as it runs trillions of times. The tile itself at this stage is simply an Array[Double](256*256) representing the total count of lines to hit each pixel.

Rendering comparison showing advantages of rasterizing paths over points, along with having more data. Location is Mt. Bachelor, Oregon.

At the highest zoom level, we populate more than 30 million tiles. This poses a problem because directly holding every tile in memory as double arrays would require at least 30 million x 256 x 256 x 8 bytes = ~15TB of memory. While this amount of memory is not unreasonable to provision in a temporary cluster, it would be rather wasteful considering that the tiles can on average be highly compressed since the majority of entries are zero. For performance reasons, using a sparse array was not a viable solution. In Spark, we can greatly reduce the maximum memory requirement by ensuring that the parallelism of this stage is many times higher than the number of active tasks in the cluster. Tiles from a finished task are immediately serialized, compressed, and written to disk, so only the set of tiles corresponding to the active set of tasks need to be kept decompressed and in memory at any given time.

Heat Normalization

Normalization is the function that maps raw heat counts for each pixel after rasterization from the unbounded domain [0, Inf) to the bounded range [0, 1] of the color map. The choice of normalization has huge impact on how the heatmap appears visually. The function should be monotonic so that higher heat values are displayed as higher “heat”, but there are many ways to approach this problem. A single global normalization function would mean that only the single most popular areas on Strava would be rendered using the highest “hottest” color.

A slick normalization technique is to use the CDF (cumulative distribution function) of the raw values. That is, the normalized value of a given pixel is the percentage of pixels with a lower heat value. This method yields maximal contrast by ensuring that there are an equal number of pixels of each color. In photo processing, this technique is known as Histogram equalization. We use this technique with a slight modification to prevent quantization artifacts in areas of very low raw heat.

Computing a CDF only for the raw heat values in a single tile will not work well in practice because a map view typically shows at least 5x5 tiles (each tile is 256x256 pixels). Thus, we compute the joint CDF for a tile using that tile and all tile neighbors within a 5 tile radius. This ensures the normalization function can only vary at scales just larger than the size of a typical viewer’s screen.

To actually compute an approximation of the CDF that can be quickly evaluated, you simply sort the input data, and then take some amount of samples. We also found that it is better to compute a biased CDF by sampling more heavily towards the end of the array of samples. This is because in most cases, only a small fraction of the pixels have interesting heat data.

Comparison of normalization methods (left: old, right: new) at 33% zoom to highlight normalization behavior. The new method allows for any range of raw heat data to be visible in a single image. Additionally, bi-linear interpolation of the normalization function between tiles prevents any visible artifacts at tile boundaries. Location is San Francisco Bay.

An advantage of this approach is that the heatmap has perfectly uniform distribution over the colormap. In some sense, this causes the heatmap to convey maximum information about relative heat values. We also subjectively find that it looks really nice.

A disadvantage of this approach is that the heatmap is not absolutely quantitative. The same color only locally represents the same level of heat data. We do offer a more sophisticated product Strava Metro for planning, safety and transportation departments with a quantitative version of the heatmap.

Interpolate Normalization Functions Across Tile Boundaries

So far we have a normalization function for each tile that represents a CDF of pixels within the local neighborhood of a few tiles. However, the CDF will still discontinuously change at tile boundaries in a way that is noticeable as an ugly artifact, especially in areas where there is a large gradient of absolute heat.

To address this, we used bi-linear interpolation. Each pixel’s actual value is computed from a sum of its four nearest neighbor tile bi-linear coefficients given by max(0, (1-x)(1-y)) where x, y are the distances from the tile’s center. This interpolation is expensive because we need to evaluate four CDFs for every pixel instead of one.

Recursion Across Zoom Levels

So far we have only talked about generating heat for a single zoom level. To process lower levels, the raw heat data is simply added together — four tiles become one tile with 1/4th the resolution. Then the normalization step is rerun as well. This continues until the lowest zoom level is reached (a single tile for the whole world).

It is very exciting when stages of a Spark job need to process an exponentially decreasing amount of data, and thus take an exponentially decreasing amount of time. After waiting about an hour for the first level stage to finish, it is a dramatic finish to see the final few levels take less than a second.

Zooming out from a single tile in London, UK to the entire world.

Serving It Up

We finally store normalized heat data for each pixel as a single byte. This is because we display that value using a color map, which is represented as a length 256 array of colors. We store this data in S3, grouping several neighboring tiles into one file to reduce the total number of S3 files required. At request time, the server fetches and caches the corresponding precomputed S3 meta-tile, then generates a PNG on the fly from this data using the requested colormap. Our CDN (Cloudfront) then caches all tile images.

We also made various front-end updates. We are now using Mapbox GL. This allows for smooth zooming, as well as fancy rotation and pitch controls. We hope that you will enjoy exploring this updated heatmap.


Building the Global Heatmap was originally published in strava-engineering on Medium, where people are continuing the conversation by highlighting and responding to this story.

]]>
================================================ FILE: api/test/data/feed/stream ================================================ The Stream Blog https://getstream.io/blog Welcome to the Official Stream Blog. Thu, 24 May 2018 14:53:56 +0000 en-US hourly 1 https://getstream-blog.imgix.net/blog/wp-content/uploads/2016/08/8597527.png?w=32&h=32 The Stream Blog https://getstream.io/blog 32 32 Try out the Stream API with Postman https://getstream.io/blog/try-out-the-stream-api-with-postman/ https://getstream.io/blog/try-out-the-stream-api-with-postman/#respond Thu, 24 May 2018 09:00:43 +0000 https://getstream.io/blog/?p=3102 As many developers are aware, Postman is a fantastic tool for developing and testing RESTful web-services and APIs. Since its inception, Postman has evolved beyond simply sending HTTP requests into a feature-rich product with support for automated testing and team collaboration. Many of us at Stream use Postman regularly as we build and test our […]

The post Try out the Stream API with Postman appeared first on The Stream Blog.

]]>

As many developers are aware, Postman is a fantastic tool for developing and testing RESTful web-services and APIs. Since its inception, Postman has evolved beyond simply sending HTTP requests into a feature-rich product with support for automated testing and team collaboration.

Many of us at Stream use Postman regularly as we build and test our services. We’re also always looking for ways to make it quick and easy for other developers to try the service. One of our goals is to help people see first hand how simple it is to build powerful social apps with Stream.

When we realized that Postman’s newest features provide an opportunity to bundle API request examples, and perform more advanced steps like generating JSON Web Tokens (JWTs) for each request, we were keen to give it a shot with Stream. We’re now happy to publish a Postman collection that demonstrates all of the RESTful API endpoints to the Stream service.

Stream API Postman Collection screenshot
The Stream API Postman Collection

 

Those who’re itching to try it out can head to the Stream documentation and download the collection.

If you’d like to learn a little more about what’s in the collection and how we built it, read on.

What’s in the Collection

The collection contains around 30 requests that demonstrate all of Stream’s major features as well as the individual API calls that correspond to each step in our Getting Started tutorial. This covers adding and modifying activities, retrieving feeds, and maintaining the follower relationships in order to maintain the social graph within an application. This will no doubt broaden even further as we add new API endpoints and expanded features.

One challenge we faced in building the collection was setting up an authentication mechanism to ensure Stream would accept and process the requests initiated by Postman. Although Postman supports several common authentication mechanisms like HTTP Basic Authentication, OAuth, and Bearer Tokens, it lacks built-in support for generating the JWTs which Stream makes use of. Thanks to another helpful Postman feature called Pre-request Scripts, we were presented with an elegant solution. For the Stream requests, a simple custom JavaScript program first generates a JWT and populates the HTTP request header on each request.

Collection-level Pre-Request Script screenshot
The Collection-level Pre-request script generates a JSON web token for authentication.

 

As with all but the most non-trivial APIs, each request includes dynamic data and parameters that relate to the resource and/or operation being requested. Configuration and ‘secrets’ for authentication purposes are also needed. To avoid unnecessary setup steps, we embed appropriate configuration for a “starter” app. This configuration can be updated later via Postman’s environment variables.

Finally, we wanted to not only demonstrate the requests but also help developers begin to understand how they themselves can work with the Stream service. With Postman’s focus on quality API documentation, we were able to include explanations of each resource URL fragment, HTTP header, and the request body (JSON payloads) that are sent. This includes the optional parameters and references to our online API Documentation where more guidance on advanced use cases can be found.

Parameter, Field and HTTP Header Descriptions screenshots
Descriptions are provided for URL query string parameters, body fields, and HTTP headers.

Wrapping up

If you’re interested in the running the Postman Collection, head over to the Stream documentation to download the collection. Fire up Postman and following the README instructions. Don’t forget to star us and feel free to raise issues or submit pull requests if you see any areas for improvement.

This is our first attempt at packaging and sharing a Postman Collection so we’re curious what you think. Chime in on Twitter or shoot us an email at support@getstream.io with your thoughts.

The post Try out the Stream API with Postman appeared first on The Stream Blog.

]]>
https://getstream.io/blog/try-out-the-stream-api-with-postman/feed/ 0
Winds 2.0: It’s Time to Revive RSS https://getstream.io/blog/winds-2-0-its-time-to-revive-rss/ https://getstream.io/blog/winds-2-0-its-time-to-revive-rss/#respond Tue, 22 May 2018 09:21:07 +0000 https://getstream.io/blog/?p=3123 I love using RSS to follow the programming and tech news I care about. Unfortunately, the number of sites supporting RSS has been in rapid decline over the last few years. The reader ecosystem is slowly degrading as well. Facebook and Twitter’s dominance is now delivering its final blow to the open standard of RSS. […]

The post Winds 2.0: It’s Time to Revive RSS appeared first on The Stream Blog.

]]>

I love using RSS to follow the programming and tech news I care about. Unfortunately, the number of sites supporting RSS has been in rapid decline over the last few years. The reader ecosystem is slowly degrading as well. Facebook and Twitter’s dominance is now delivering its final blow to the open standard of RSS.

It’s time to turn the tide. Stream is releasing Winds 2.0, an open-source Podcast & RSS Reader. You can download Winds here or head over to Github for the code.

Many power users of RSS are developers, designers and journalists. Together, we hope to tip the balance and #ReviveRSS. With the help of the community we can build an RSS experience that’s polished, bug free and popular enough to convince publications to improve their support for open standards and RSS.

Winds is not perfect yet, we’re working on it though and with your help we might just manage to #ReviveRSS

A huge thank you to:

And of a course many thanks to the devrel team at Stream for taking what started out as an example app and turning it into such a beautiful polished experience!

Download Winds or checkout the code on Github.

The post Winds 2.0: It’s Time to Revive RSS appeared first on The Stream Blog.

]]>
https://getstream.io/blog/winds-2-0-its-time-to-revive-rss/feed/ 0
Build a scalable Twitter clone with Django and Stream https://getstream.io/blog/build-a-scalable-twitter-clone-with-django-and-stream/ https://getstream.io/blog/build-a-scalable-twitter-clone-with-django-and-stream/#respond Tue, 01 May 2018 09:00:42 +0000 https://getstream.io/blog/?p=3067 In this tutorial, we will build a Twitter clone using Django and Stream, a hosted API for newsfeed development. By the end, you’ll see how easy is to power your newsfeeds with Stream. For brevity, we leave out some basic Django-specific code and recommend referring to the Github project for the complete runnable source code. […]

The post Build a scalable Twitter clone with Django and Stream appeared first on The Stream Blog.

]]>

In this tutorial, we will build a Twitter clone using Django and Stream, a hosted API for newsfeed development.

By the end, you’ll see how easy is to power your newsfeeds with Stream. For brevity, we leave out some basic Django-specific code and recommend referring to the Github project for the complete runnable source code. At the end of this tutorial, we’ll have a Django app (with a profile feed), a timeline feed, and support for following users, hashtags and mentions.

For this tutorial, we’re assuming you’re familiar with Django. If you’re new to Django the official tutorial explains it very well.

Bootstrap the Django application

We will use Python 3.6 and Django 2.0, which is the latest major release at the time of writing.

Make sure you have a working Django project before you continue to the next part of the tutorial.

Create the Django app

Let’s start by creating a new Django app called stream_twitter:

python manage.py startapp stream_twitter

Install stream_django

The stream_django project provides the GetStream integration for Django. It is built on top of thelow-levell stream_python API client.

pip install stream-django

To enable stream_django you need to add it to your INSTALLED_APPS:

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'stream_twitter',
    'stream_django'
)

Stream setup

First of all, we need to create a Stream account. You can signup with Github, which is free for usage below 3 million feed updates per month. Once you’ve signed up, get your API ‘key’ and ‘secret’ from the dashboard and add them to Django’s settings:

STREAM_API_KEY = 'my_api_key'
STREAM_API_SECRET = 'my_api_secret'

The models

In this application we will have three different models: users, tweets and follows.

To keep it as simple as possible, we will use Django’s contrib.auth user model. Have a look below at the initial version of the Tweet and Follow models.

from django.db import models

class Tweet(models.Model):
    user = models.ForeignKey('auth.User', on_delete=models.CASCADE)
    text = models.CharField(max_length=160)
    created_at = models.DateTimeField(auto_now_add=True)

class Follow(models.Model):
    user = models.ForeignKey('auth.User', related_name='friends', on_delete=models.CASCADE)
    target = models.ForeignKey('auth.User', related_name='followers', on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        unique_together = ('user', 'target')

Now, let’s create the schema migrations and apply them:

python manage.py makemigrations stream_twitter
python manage.py migrate

Let’s also setup the view to add tweets:

from django.views.generic.edit import CreateView
from stream_twitter.models import Tweet

class TweetView(CreateView):
    model = Tweet
    fields = ['text']

    def form_valid(self, form):
        form.instance.user = self.request.user
        return super(Tweet, self).form_valid(form)

And, of course, add it to urls.py:

from django.contrib import admin
from django.contrib.auth.decorators import login_required
from django.urls import path

from stream_twitter import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('timeline/', login_required(views.TimelineView.as_view()), name='timeline'),
    re_path(r'^user/(?P<username>.+)/', views.UserView.as_view(), name='user_feed')
]

Now that we have the view setup for creating tweets, we can move on to setting up the newsfeed.

Model integration

We want the tweets to be stored in the author’s feed. This is when we start using the stream_django integration. We can configure the Tweet model so that it will syncronise automatically with feeds.

To do this, we need to make Tweet a subclass of ‘stream_django.activity.Activity’:

We’ll do that by modifying the model we defined earlier in `stream_twitter.models`:

from stream_django import activity

class Tweet(activity.Activity, models.Model):
    ...

From now on, new tweets will be added to the user feed of the author *and* to the feeds of all their followers. The same applies to deleting a tweet.

So, let’s give it a try using Django’s shell:

python manage.py shell
from stream_twitter.models import Tweet
from django.contrib.auth.models import User

user, _created = User.objects.get_or_create(username='tester')

Tweet.objects.create(
    user=user,
    text='Go Cows!')

We’ve now created our first Tweet and, in turn, added an Activity to a Feed via the Stream API. By default, *stream-django* creates and adds the Activity to a feed named after the ‘actor’ property. This can be customized by overriding the `_attr` functions inherited from the `stream_django.activity.Activity` mixin on the Django Model.

Now, this is the first time we talk about Activities and Feeds so let’s take a moment to define what an activity is.

An activity is an object that contains information about an action that is performed by someone involving an object. When you write data to Stream’s feeds, you send this data in the form of activities. The simplest activity is made by these three fields: actor, object and verb. For example: Tommaso tweets ‘Go cows!’

Stream’s APIs allow you to store additional fields in your feeds, as you can see from the documentation here.

We can verify the Activity was added by using the Data Browser in Stream’s Dashboard. In this example you can determine the feed name by inspecting the `activity_actor` property:

>>> t.activity_actor
'auth.User:1'

The Stream Data Explorer:

User feed

So now that every tweet gets stored in the author’s feed, we’ll add a view that reads them.


from django.contrib.auth.models import User
from django.shortcuts import render, get_object_or_404
from django.views.generic import DetailView

from stream_django.enrich import Enrich
from stream_django.feed_manager import feed_manager

enricher = Enrich()

class UserView(DetailView):
    model = User
    template_name = 'stream_twitter/user.html'

    def get_object(self):
        return self.get_queryset().get(username=self.kwargs['username'])

    def get_context_data(self, object):
        user = self.object
        feeds = feed_manager.get_user_feed(user.id)
        activities = feeds.get()['results']
        activities = enricher.enrich_activities(activities)

        return {
            'activities': activities,
            'user': user,
            'login_user': self.request.user
        }

There are two new things that I should explain: the *feed manager* and the *enricher*. As the name suggests, the feed manager takes care of managing the different feeds involved in your app. In this case, we ask the feed manager to give us the user feed for the current user.

We learned before that data is stored as activities within feeds. This is what a tweet looks like when we read it from Stream:

[{
    'actor': 'auth.User:1',
    'object': 'stream_twitter.Tweet:1',
    'verb': 'tweet',
    ... other fields ...
}]

As you can see, ‘object’ field does not contain the tweet itself but a reference to that instead(the same applies to the ‘actor’ field). The enricher replaces these references with model instances.

Templating feeds

*django_stream* comes with a template tag that helps you to show the content from feeds in your templates. This can get quite complex as you add different kinds of activities to your feeds.

Here is a very minimal tweets.html template:

{% load activity_tags %}

{% for activity in activities %}
    {% render_activity activity %}
{% endfor %}

The first time you run this, Django will complain that ‘activity/tweet.html’ is missing. That’s because the render_activity templatetag inspects the activity object and loads the template based on the verb. Because the verb in this case is ‘tweet’, it will look for tweet.html in activity path. The template tag accepts extra options to make your templates as re-usable as possible, see here for the template tag documentation.

Feed Follow

As a next step, well add the ability to follow users to the application. To do this we create a view that creates Follow objects.

from django.views.generic.edit import CreateView, DeleteView
from django.urls import reverse_lazy
from stream_twitter.forms import FollowForm
from stream_twitter.models import Follow

class FollowView(CreateView):
    form_class = FollowForm
    model = Follow
    success_url = reverse_lazy('timeline_feed')

    def form_valid(self, form):
        form.instance.user = self.request.user
        return super(FollowView, self).form_valid(form)

class UnfollowView(DeleteView):
    model = Follow
    success_url = reverse_lazy('timeline_feed')

    def get_object(self):
        target_id = self.kwargs['target_id']
        return self.get_queryset().get(target__id=target_id)

Now we can use Django’s signals to perform follow/unfollow requests on Stream’s APIs.

def unfollow_feed(sender, instance, **kwargs):
    feed_manager.unfollow_user(instance.user_id, instance.target_id)

def follow_feed(sender, instance, created, **kwargs):
    if created:
        feed_manager.follow_user(instance.user_id, instance.target_id)

    post_save.connect(follow_feed, sender=Follow)
    post_delete.connect(unfollow_feed, sender=Follow)

Timeline view (AKA Flat Feed)

The hardest part for a scalable Twitter clone is displaying a feed that shows the tweets from people you follow. This is commonly called the timeline view or newsfeed. The code below shows the timeline.

from django.views.generic import TemplateView

class TimelineView(TemplateView):
    template_name = 'stream_twitter/timeline.html'

def get_context_data(self):
    context = super(TimelineView, self).get_context_data()

    feeds = feed_manager.get_news_feeds(self.request.user.id)
    activities = feeds.get('timeline').get()['results']
    enriched_activities = enricher.enrich_activities(activities)

    context['activities'] = enriched_activities

    return context

This code looks very similar to the code of profile_feed. The main difference is we use feed manager’s get_news_feeds. By default, Stream apps and stream_django come with two newsfeeds predefined: flat and aggregated feeds. When you use `feed_manager.get_news_feeds`, you get a dictionary with flat and aggregated feeds. Since we are not going to use aggregated feeds, we can adjust Django settings:

STREAM_NEWS_FEEDS = dict(flat='flat')

Adding activities

Let’s modify the `TimelineView` to include a form that will accept new tweets:

from django.views.generic.edit import CreateView

class TimelineView(CreateView):
    fields= ['text']
    model = Tweet
    success_url = reverse_lazy('timeline_feed')
    template_name = 'stream_twitter/timeline.html'

    def form_valid(self, form):
        form.instance.user = self.request.user
        return super(TimelineView, self).form_valid(form)

    def get_context_data(self, form=None):
        context = super(TimelineView, self).get_context_data()

        feeds = feed_manager.get_news_feeds(self.request.user.id)
        activities = feeds.get('timeline').get()['results']
        enriched_activities = enricher.enrich_activities(activities)

        context['activities'] = enriched_activities
        context['login_user'] = self.request.user
        context['hashtags'] = Hashtag.objects.order_by('-occurrences')

        return context

Hashtags feeds

We want Twitter style hashtags to work as well – which is surprisingly easy. First, let’s open Stream’s dashboard and create the ‘hashtag’ feed type. Note: by default Stream will setup `user`, `timeline`, `timeline_aggregated` and `notification` feeds. If you more feeds, you need to configure them in the dashboard.

from django.template.defaultfilters import slugify

class Tweet(activity.Activity, models.Model):

    def parse_hashtags(self):
        return [slugify(i) for i in self.text.split() if i.startswith("#")]

Now that we have parsed the hashtags, we could loop over them and publish the same activity to every hashtag feed. Fortunately, there’s a shortcut. Stream allows you to send a copy of an activity to many feeds with a single request.

To do this, we only need to implement the `activity_notify` method to the Twitter model we created previously:

from stream_django.feed_manager import feed_manager

class Tweet(activity.Activity, models.Model):

    @property
    def activity_notify(self):
        targets = []
        for hashtag in self.parse_hashtags():
            targets.append(feed_manager.get_feed('hashtag', hashtag))
        return targets

From now on, activities will be stored to hashtags feeds as well. For instance, the feed ‘hashtag:Django’ will contain all tweets with ‘#Django’.

Again, the view code looks really similar to the other views.

from django.views.generic import TemplateView

from stream_django.enrich import Enrich
from stream_django.feed_manager import feed_manager

class HashtagView(TemplateView):
    template_name = 'stream_twitter/hashtag.html'

    def get_context_data(self, hashtag):
        context = super(TemplateView, self).get_context_data()

        hashtag = hashtag.lower()
        feed = feed_manager.get_feed('user', f'hash_{hashtag}')
        activities = feed.get(limit=25)['results']

        context['hashtag'] = hashtag
        context['activities'] = enricher.enrich_activities(activities)

        return context

Mentions

Now that we found out about the `activity_notify` property, it only takes a bunch of extra lines of code to add user mentions.

class Tweet(activity.Activity, models.Model):

    def parse_mentions(self):
        mentions = [slugify(i) for i in self.text.split() if i.startswith("@")]
        return User.objects.filter(username__in=mentions)

    @property
    def activity_notify(self):
        targets = []
    for hashtag in self.parse_hashtags():
        targets.append(feed_manager.get_feed('hashtag', hashtag))
    for user in self.parse_mentions():
        targets.append(feed_manager.get_news_feeds(user.id)['flat'])
    return targets

Wrapping up

Congratulations, you’ve reached the end of this tutorial! This article showed you how easy it is to build scalable newsfeeds with Django and GetStream.io. It took us just 100 LoC and (I hope) less than one hour to get this far.

You can find the code from this tutorial and the fully functional application on GitHub. The application is also running and can be tested here. I hope you found this interesting and useful and I’d be glad to answer all of your questions.

If you’re new to Django or Stream, I highly recommend the official Django tutorial and the Stream ‘getting started’ tutorial.

The post Build a scalable Twitter clone with Django and Stream appeared first on The Stream Blog.

]]>
https://getstream.io/blog/build-a-scalable-twitter-clone-with-django-and-stream/feed/ 0
Stream and GDPR https://getstream.io/blog/stream-and-gdpr/ https://getstream.io/blog/stream-and-gdpr/#respond Fri, 20 Apr 2018 08:00:23 +0000 https://getstream.io/blog/?p=3055 As an organization who has customers located within the European Union (EU), the General Data Protection Regulation (GDPR) is an important topic for us here at Stream. The GDPR is a regulation by which the European government has intended to strengthen and unify data protection for all individuals within the EU (source). Companies must be […]

The post Stream and GDPR appeared first on The Stream Blog.

]]>

As an organization who has customers located within the European Union (EU), the General Data Protection Regulation (GDPR) is an important topic for us here at Stream. The GDPR is a regulation by which the European government has intended to strengthen and unify data protection for all individuals within the EU (source). Companies must be able to show compliance by May 25, 2018. Failure to comply could mean a €20 million fine or 4% of your organization’s global turnover, whichever is greater.

What it is:

  • Access control – access to personal data must be restricted to people and machines that need to use the data.
  • Historical data – you must have the ability to delete personal data and let users download their provided personal data.
  • Encryption – personal data should be secured through encryption so it can’t be seen.
  • Store and process – you must have a valid reason for storing and processing personal data.
  • Audit and logging – all access to personal data must be logged.

What Stream is doing:

  • Access control – all access is restricted to the minimal set of employees that maintain those systems.
  • Historical data – our API currently allows customers to read all of a user’s data from their feed (which they can then provide to their end users) as well as delete it.
  • Encryption – all API communication with Stream is encrypted, as well as backups.
  • Store and process – Stream only stores the data that our customers put into the activities they send to us. Stream may use this data in personalization of feed content if our customer requests it.
  • Audit and logging – all access to stored data is logged.

What you should do:

The GDPR defines personal data to include name, passport number, and birthdate as well as information that some may not consider to be personally identifiable information (PII) like IP addresses or device IDs. Personal data can even include data about an individual that has been hashed or encrypted. We still recommend our customers do not send us any PII if possible.

If you must send us personal data, we have a DPA addendum for enterprise customers that includes the GDPR forms. Otherwise, our standard terms apply: https://getstream.io/legal/

For a comprehensive list of what GDPR considers personal data, please read Article 4(1) of the GDPR.

Note: the information provided in this blog is strictly for informational purposes. We recommend that if you have any questions, or think the GDPR laws may impact your company, that you contact a lawyer.

The post Stream and GDPR appeared first on The Stream Blog.

]]>
https://getstream.io/blog/stream-and-gdpr/feed/ 0
Using Feed Technology for Travel Use Cases https://getstream.io/blog/using-feed-technology-for-travel-use-cases/ https://getstream.io/blog/using-feed-technology-for-travel-use-cases/#respond Wed, 18 Apr 2018 08:00:17 +0000 https://getstream.io/blog/?p=3058 When we visit sites like Amazon, Netflix, or YouTube, we take for granted the fact these services have been exploring and learning our behavior for years. They know us well – they make relevant recommendations that are unique to the user, drawing us back to their sites time and time again. The big players in […]

The post Using Feed Technology for Travel Use Cases appeared first on The Stream Blog.

]]>

When we visit sites like Amazon, Netflix, or YouTube, we take for granted the fact these services have been exploring and learning our behavior for years. They know us well – they make relevant recommendations that are unique to the user, drawing us back to their sites time and time again. The big players in travel (think Expedia Group, Booking.com, TripAdvisor, etc.) are no different. They have already been using personalization for years and achieving impressive results. Today, travelers are accustomed to online booking, on-demand virtual assistants, and constant access via devices and applications. Whether they’re booking hotels, looking for flights, or browsing unique experiences, they not only expect to be able to browse from their phones they also expect the website (or application) they’re using to provide options that fit the specific criteria they’re looking for.

Whether you’re traveling for pleasure, business, or a combo of the two, travel is becoming more intelligent, diversified and customized. Machine learning and personalization can give travelers on-demand services, customization of unique experiences, and insights (like predictive pricing or delayed forecasting) providing the customer with the unique, tailored experience they desire.

By using personalization methods companies are able to make more relevant recommendations to consumers, improving their experience, typically resulting in increased conversions. We’ve found one of the best ways to do this is by creating a personalized feed. To implement an intelligent feed that displays relevant flights, hotels, trips, or packages to viewers, we recommend these 5 steps.

1. Capture Explicit User Preferences

This is the basis of doing any kind of personalized feed. The service needs to ask the user for the specific criteria they’re looking for in their trip. Obvious criteria or filters include location, price, specific travel dates (or a flex search), activities, and/or experiences.. Most travel sites today have the ability to filter based on these options. Something to consider is presenting the user with a “deal breaker / must have” toggle. Having this toggle, or some kind of sliding scale on how strong of a preference it is, will be fantastic input for your personalization engine later on.

2. Track Implicit User Behavior

As your users interact with the platform, be sure to track their actions and record those analytics. Some behaviors will indicate stronger preferences than others. For instance, sharing a destination or activity with a spouse or friend is a much stronger indicator than viewing some pictures or looking at reviews and moving on.

3. Compare to Other Users

As the models of user preferences are developed and evolve, you will find users who are similar to each other. Once you’ve identified these similar users, you can leverage their actions, flights, destinations, hotel or activities they’re viewing to add options for their counterparts.

4. Rinse, Repeat

The personalization engine evolves over time and requires constant input as well as tweaking. As more and more data is fed into the system, new insights will be gained and profiles will morph. This feedback loop of both positively reinforcing and negatively detracting behaviors will help the model tune itself and become better at making recommendations for each user to view.

5. Bringing It All Together

Once steps 1-4 are in place, the travel platform will be well positioned to capture a market of users that expect to be able to self-serve. This platform will present the most relevant destinations, flights, activities or rental properties to each user, being sure not to show content that is irrelevant.

Now what?

Users of intelligent, highly personalized feeds are more likely to remain engaged, spread the word, and ultimately find their dream vacation. There are many travel companies out there, so providing your clients and prospects with the best user experience is crucial. To gain a broader understanding of the benefits of feed technology and how you can implement them contact us with your questions!

The post Using Feed Technology for Travel Use Cases appeared first on The Stream Blog.

]]>
https://getstream.io/blog/using-feed-technology-for-travel-use-cases/feed/ 0
Winds 2.0 Beta – Now Available for Download https://getstream.io/blog/winds-2-0-beta-now-available/ https://getstream.io/blog/winds-2-0-beta-now-available/#respond Tue, 17 Apr 2018 08:00:20 +0000 https://getstream.io/blog/?p=3046 In case you haven’t already heard, the devrel team at Stream has been working on a really exciting project over the past couple months called Winds 2.0! Tl;Dr Winds is an open-source RSS reader and podcast player built with React & Stream. It’s not only free and open source, but is also created by a […]

The post Winds 2.0 Beta – Now Available for Download appeared first on The Stream Blog.

]]>

In case you haven’t already heard, the devrel team at Stream has been working on a really exciting project over the past couple months called Winds 2.0!

Tl;Dr

Winds is an open-source RSS reader and podcast player built with React & Stream. It’s not only free and open source, but is also created by a company that doesn’t want to make money off of your data. Want to skip the spiel and get right to it? Go download it here → https://getstream.io/winds/.

http://www.hollandresidential.com/platform-at-union-station/

Of course, we hope you’ll take also take a moment to check out Stream.

Winds 2.0 will “blow” your mind

Winds blown

Winds is an open-source podcast player AND RSS reader. The beta is now available for download at https://getstream.io/winds/. You’ll also be able to check out the source code very soon over on GitHub.

This year, we’ve decided to revisit the project and work on Winds 2.0 – a completely new build of the application. We wanted to make a splash (again) and to do so, we needed something profound. We’re excited to announce that we’re introducing podcast discovery and playback support within the Winds application. Although the addition of podcast support may sound trivial, it’s actually quite a difficult task from both a design and development perspective. Combining two vastly different forms of content has proven to be an aesthetic challenge as well (thankfully, our lead designer has come up with a beautiful, unifying design).

The Tech Behind Winds

When building a podcast / RSS reader, there are many different “activity feeds” within the app. Users expect to see lists of episodes and articles from the podcasts and RSS feeds they follow and, because we’ve also built in a social network, they also want to see new status updates from those they follow.

Creating activity feeds for large numbers of users who create many activities can be quite a challenge. Luckily, Stream makes this easy. When a user follows dozens or even thousands of other users, RSS feeds, or podcasts, Stream creates a “timeline” feed in milliseconds (check it out in our tutorial).

Within Winds, we want to make migration from another RSS reader easy (RIP Google Reader, even if that’s a dated reference at this point). If you’re using another RSS reader, just import OPML files and simply drag-and-drop your feeds into Winds. 👍

Winds-add new RSS feed

Now, you’re probably wondering about Winds’ tech stack. The frontend is an Electron app, along with create-react-app. We’re using React, Redux, and React-router, plus SCSS to generate all of the cool styling.

Our backend services are written in Node.js, Express, and Mongoose. There’s an API server, which handles the authentication and CRUD operations. The service workers retrieve new articles and episodes from RSS feeds and podcasts, then adds them to Stream, Algolia, and MongoDB. To generate a new app release and deploy the new API and services, we use a couple of small shell scripts along with Fabric.

It’s also important to mention that we relied on many other services to help build Winds:

  • Algolia for search: search for any user, RSS feed, RSS article, podcast, podcast episode, or playlist in Winds.
  • Mercury for article parsing: turns out that extracting the text of a blog post from an HTML page is pretty hard.
  • MongoDB for our main datastore: hosted on MongoDB Atlas.
  • Sendgrid for email: sends all password resets and “hey you got a new follower!” emails.
  • And, of course, Stream: the reason we don’t get “fail whales” when 10,000 new users sign up. 😄

If You Haven’t Already, Time to Download!

If you want to give Winds a whirl, head on over to getstream.io/winds to download the app. As I previously mentioned, Winds is currently in beta. We’ll be making lots of improvements to this over the next few months, and posting a lot more about the project as a whole, so stay tuned!

And, if you’d like to check out the technology that powers Winds 2.0, check out Stream, where you can build your own applications with personalized and scalable activity feeds.

How can I contribute?

If you’d like to contribute to Winds, we’ll be releasing the source code over on GitHub very soon, where you can download, modify, and start contributing to Winds. If you’re looking for some easy things to fix, check out the issues section at https://github.com/GetStream/winds/issues.

What’s next for Winds?

There’s still loads of features that we want to include in Winds – releasing Windows and React Native versions, sending snippets of podcasts to your friends, and more advanced social features. If there’s a feature you’d love to see, let us know by opening an issue over at https://github.com/GetStream/winds/issues.

The post Winds 2.0 Beta – Now Available for Download appeared first on The Stream Blog.

]]>
https://getstream.io/blog/winds-2-0-beta-now-available/feed/ 0
Go Client Now Available https://getstream.io/blog/go-client-now-available/ https://getstream.io/blog/go-client-now-available/#respond Thu, 05 Apr 2018 08:38:16 +0000 https://getstream.io/blog/?p=3039 Go is one of the fastest growing languages around. We ourselves use it extensively inside the Stream API service. Support for Go was added almost two years ago by MrHenry and HyperWorks, which open-sourced a Go client. We are proud to announce that starting today, we are releasing our official Go API client. You can […]

The post Go Client Now Available appeared first on The Stream Blog.

]]>

Go is one of the fastest growing languages around. We ourselves use it extensively inside the Stream API service. Support for Go was added almost two years ago by MrHenry and HyperWorks, which open-sourced a Go client.

We are proud to announce that starting today, we are releasing our official Go API client. You can find it on GitHub at https://github.com/GetStream/stream-go2.

The new client APIs are more simple and easy to use. Compared to the previous version (which is still available here), the new version has a much smaller code footprint, with about 57% less lines of code. Here’s a list of the key features:

  • Complete test coverage of Stream API endpoints and options
  • Smaller code footprint (less than 900 relevant lines of code)
  • Extensive use of functional options for clearer method calls that, in the future, can be extended without breaking compatibility
  • Utilities for initializing a client directly from environment variables
  • Complete endpoints support
  • Happy Go linter, meaning more consistent docs and idiomatic code
  • Code versioning via gopkg.in

The complete documentation for the client is available via GoDoc, while Stream-specific docs are available on our docs page.

Let’s see how to use it with some simple examples.

Obtaining stream-go2 is straightforward. Type the following to retrieve the latest stable version of the client:
go get gopkg.in/GetStream/stream-go2.v1

Then, we’ll start by creating a new client which we’ll use in our application:

View the code on Gist.

We can now use the newly created client to initialize the feeds we want to interact with:

View the code on Gist.

Flat, aggregated, and notification feeds implement the stream.Feed interface. To retrieve activities, all of them offer a GetActivities method that returns different structs based on the kind of feed:

View the code on Gist.

Feeds pagination via offset and limit can be done using the WithActivitiesOffset and WithActivitiesLimit option functions:

View the code on Gist.

Pagination via activity ID can be done with the WithActivitiesID[GT,GTE,LT,LTE] functions for the feeds that support it.

Moreover, multiple filters can be combined:

View the code on Gist.

Here are all the supported read options.

If you have a flat feed with custom ranking you can retrieve its’ activities by applying one of the ranking methods configured for that feed with the GetActivitiesWithRanking method:

View the code on Gist.

You can add activities to any kind of stream.Feed with the AddActivity and AddActivities methods:

View the code on Gist.

Removing an activity can be done either by its ID or its foreign ID. The stream.Feed interface offers two methods for doing so: RemoveActivityByID and RemoveActivityByForeignID.

View the code on Gist.

Following and unfollowing a feed is done via the Follow and Unfollow methods offered by the Feed interface:

View the code on Gist.

Note: many methods offered by stream.Feed and stream.Client support variadic option functions to customize the behavior of the methods themselves, and by convention, they all start with the “With…” prefix. You can find them all listed on the GoDoc page.

For example, when using a feed’s GetFollowing method to retrieve the feeds which are being followed, you can use these option functions:

View the code on Gist.

Which results in something like this:

View the code on Gist.

Wrapping up

Once again, we would like to thank MrHenry and HyperWorks for their efforts in creating the original stream-go client, a great community contribution which made it possible for many Go developers to use Stream.

The new Go client exposes all Stream’s API features via a clean and easy to use interface. The client was rewritten from scratch, and this approach allowed us to follow Go’s coding best practices and test the entire code base very easily.

The post Go Client Now Available appeared first on The Stream Blog.

]]>
https://getstream.io/blog/go-client-now-available/feed/ 0
Looking Forward to What’s Coming from Stream in 2018 https://getstream.io/blog/looking-forward-whats-coming-from-stream-in-2018/ https://getstream.io/blog/looking-forward-whats-coming-from-stream-in-2018/#respond Wed, 21 Mar 2018 05:06:26 +0000 https://getstream.io/blog/?p=3015 Looking Back 2017 wrapped up with the launch of Stream V2 and multi-region support. The new version of our API uses Go, RocksDB and Raft to power the feeds for over 300 million users. V2 represents our largest improvement in performance so far. Switching from Cassandra to RocksDB was a major step forward for Stream. It’s […]

The post Looking Forward to What’s Coming from Stream in 2018 appeared first on The Stream Blog.

]]>

Looking Back

2017 wrapped up with the launch of Stream V2 and multi-region support. The new version of our API uses Go, RocksDB and Raft to power the feeds for over 300 million users. V2 represents our largest improvement in performance so far. Switching from Cassandra to RocksDB was a major step forward for Stream. It’s also been great to see a similar move by Instagram and other companies who have adopted RocksDB. In terms of numbers, here’s what Stream looks like today:

  • Number of servers: 140
  • Feed updates per month: 34 billion
  • Average API response time: 12 milliseconds
  • Average real-time response time: 2 milliseconds
  • Regions: 4 (US-East, EU-West, Tokyo and Singapore)
  • API requests per month: 1 billion (~20k/minute)
  • Team members: 22

Multi-region support substantially reduced the latency for our customers in Asia and Europe. Sketchfab, for instance, moved from US-east (V1) to Ireland (V2) and noticed an increase in performance, resulting in a round-trip decrease from 146ms to only 12ms.

Our real-time infrastructure also received a full rewrite and greatly improved performance. So, if you want to use feeds for real time use cases such as events, games or discussions between famous users, we’ve got you covered.

In true Stream fashion, we’ve created the following roadmap for 2018 based on customer input. We’d like to encourage all users to email us if you have any questions or feedback.

Here are several enhancements to look forward to in the coming months:

1. Filtering

There are a few different use cases for filtering support:

  • Privacy settings on activities
  • Removing flagged/inappropriate content
  • Filtering mature content
  • Selecting activities of a certain type (ie: showing only posts or likes)
  • Complex follows (ie: houses listed in Boulder below $1 million)

While there is a way to do this currently, it’s not a simple process. Right now, the only way to build that with Stream is to create multiple feed groups. Many of our customers have setup feed groups called user_private, user_friends, user_public, etc. While that approach works, it makes it harder to integrate Stream. Additionally, it doesn’t work if you need more complex filtering criteria or if you have a combination of filtering criteria (ie. supporting both privacy settings and filtering on activities of a certain type).

2. React Components

The popularity of Based, our UI Kit for feeds, has inspired us to create a React component library for feeds. This will make it extremely easy to add notification feeds, activity streams or news feeds to your React based app.

We’re even thinking about including a generator for the React components in the dashboard, making it easier to get up and running with Stream. What do you think?

3. Likes & Comments

Many of our customers want to store likes and comments in their own database. For a long time, we’ve considered likes and comments to be out of scope. To our surprise, many of our enterprise customers asked for us to include this functionality. As we previously mentioned, we believe in the importance of listening to customer feedback and can admit when we’re wrong. In the coming months, we’ll add support for likes, comments and other reactions to Stream’s API. When you read the feed you’ll automatically see the counts and if the user has already liked the given activity.

4. Enrichment and normalization

One of the hardest aspects of integrating with Stream is enrichment. Most of our customers’ store IDs to external objects in the activities. One example is user IDs. When you read the feed you need to:

  • Gather the list of objects referenced
  • Efficiently lookup those objects in cache and your database
  • Replace the IDs with the full objects

While this isn’t very complex it definitely makes it a bit harder to integrate with Stream. Our plan is to remove this complexity from the integration and take care of the whole process transparently.

For example, say you want the actor field of an activity to be a user from your application. Right now you would store the user ID in the actor field and, at read time, replace all IDs with the data from your primary storage.

With the new approach, you can send the data in the actor field as it is and Stream will take care of the rest.

activity = {
  actor:ken,
  verb:run,
  object:run123,
  track:{
     collection:'track',
     id:'123',
     distance:'20 miles'
  }
}


In the example above, Stream could detect that you added a track object, normalized it and stored it separately from the activity. When reading the feed we would simply lookup the “track:123” object and show you the full details. You could update the object using our collections endpoint.

5. Personalization V2

A. Currently, personalization is only supported through our Python SDK. Customers using other languages have to directly use the REST SDKs which isn’t ideal.
Next step: updating our other SDKs to make it easier to integrate personalization.

B. Our analytics endpoint currently doesn’t have a REST API. However many larger customers prefer to integrate analytics on the server side.
Next step: adding a REST endpoint to batch create impressions and events.

C. We’re going to release a “getting started” type of tutorial for personalization. This will make it easier to get up and running with any of the 5 use cases for personalization. Read the docs.

6. Performance & Scalability Improvements

After we released the new version of Stream based on Go, RocksDB, and Raft, we saw a large and immediate performance improvement. There’s still a lot of room left for optimization on the new architecture. This means you’ll continue to see performance improvements in the coming months.

7. Documentation

One thing that always amazed me is that the documentation for many APIs isn’t great – even when the product is! It’s surprising since I know, as a developer, that docs are one of the main things we look at when deciding whether or not to adopt a new tool. Over the past few years, Stream’s documentation has not been kept entirely up-to-date. It’s actually quite difficult to keep the docs completely relevant when your product is moving quickly. We’re going to invest a good amount of time to improving the writing, updating the code and checking all our example apps and integrations.

Send us your Feedback!

Once again, we’d love to get your feedback. Send us an email with your thoughts, product improvements, new features, etc. Even small things like spotting issues in our documentation help make the API easier to use for the entire Stream community. We look forward to hearing from you!

The post Looking Forward to What’s Coming from Stream in 2018 appeared first on The Stream Blog.

]]>
https://getstream.io/blog/looking-forward-whats-coming-from-stream-in-2018/feed/ 0
Dubsmash Switches to Stream from an In-House Solution https://getstream.io/blog/dubsmash-switches-to-stream-from-an-in-house-solution/ https://getstream.io/blog/dubsmash-switches-to-stream-from-an-in-house-solution/#respond Mon, 19 Mar 2018 14:45:25 +0000 https://getstream.io/blog/?p=3019 About Dubsmash Dubsmash is a global entertainment platform that allows users to interact with the content they love. Their team is building the interactive video quote database of the future, allowing users around the world to share, lip-sync, and meme over pop culture content. With over 200M global users who create & interact with 35 […]

The post Dubsmash Switches to Stream from an In-House Solution appeared first on The Stream Blog.

]]>

About Dubsmash

Dubsmash is a global entertainment platform that allows users to interact with the content they love. Their team is building the interactive video quote database of the future, allowing users around the world to share, lip-sync, and meme over pop culture content. With over 200M global users who create & interact with 35 videos every second, Dubsmash is building the entertainment product of the future – one where consumers are actively participating versus passively consuming.

Challenge

Dubsmash has always been a huge fan of not “reinventing the wheel” by using existing solutions, being that they’re a small team operating very quickly. However, they initially believed that they could build an in-house feed solution that would have all the features and functionality they needed, at a lower price than what they saw in the market. They soon discovered that the complexities of building streams and feeds are vast. While they were able to easily construct a simple chronological feed, they ran into many difficulties when attempting to add features such as ranking and personalization. After spending many weeks and valuable resources on development, they realized that continuing to build in-house would not provide them with the best and most sustainable outcome.

“Building out feed technology is quite a challenge. We made the mistake of trying to build it ourselves…and we were just stuck. From a feature perspective, we couldn’t build something as robust as what Stream can provide. I’m simply amazed at how certain features, such as ranking, work. Stream is also very easy to implement and their team has been responsive on Slack!” – Tim Specht, CTO of Dubsmash

Why Stream

Primary Reasons
– Time to market
– Scalability
– Simple implementation

Dubsmash has been familiar with Stream for over two years. They had experience with the original, open source Stream framework and had gone through the Try-the-API tutorials. They had also done extensive research on The Stream Blog and documentation page. When they reached out to Stream, they were in need of a feature-rich solution that could scale for their expected growth while integrating quickly and easily. Dubsmash was particularly impressed with Stream’s easy-to-use ranking feature, and the fact that the API can cover many use cases. Dubsmash uses several ranking methods side by side. The feed in their admin is strictly stored by time and the feed shown to users takes into account both popularity and time decay. What would have taken weeks of development time to build in-house, took a day and a half to implement with the API. With Stream, they just “don’t need to worry about it!”

Moving forward…

Dubsmash is planning on expanding their offerings with more mobile and web-based products built around their core product – their ‘video quote database’. We can’t wait to see what they come up with!

The post Dubsmash Switches to Stream from an In-House Solution appeared first on The Stream Blog.

]]>
https://getstream.io/blog/dubsmash-switches-to-stream-from-an-in-house-solution/feed/ 0
Building a Node.js Powered API with Express, Mongoose & MongoDB https://getstream.io/blog/building-a-node-js-powered-api-with-express-mongoose-mongodb/ https://getstream.io/blog/building-a-node-js-powered-api-with-express-mongoose-mongodb/#respond Thu, 22 Feb 2018 16:19:21 +0000 https://getstream.io/blog/?p=3002 One of my favorite parts of my job as a Developer Evangelist at Stream is building sample applications. It is an enthralling way to engage and interact with potential and existing customers, as well as show off the fun technology we use and build with every single day. The applications I build range from small […]

The post Building a Node.js Powered API with Express, Mongoose & MongoDB appeared first on The Stream Blog.

]]>

One of my favorite parts of my job as a Developer Evangelist at Stream is building sample applications. It is an enthralling way to engage and interact with potential and existing customers, as well as show off the fun technology we use and build with every single day. The applications I build range from small code snippets outlining how to perform basic operations, such as marking an item as “read” in Stream, to large microservice based applications that generally require robust backend architectures, like Winds.

Last year, I created a post on how to build a RESTful API with Restify. Now that Express and Restify are nearly neck and neck in terms of requests per second, I thought it might be interesting to show you how I go about structuring my APIs with Express (just to toss in a little friendly competition / play devil-oper’s advocate 😉).

Structuring Your API

The way you choose to structure your API is one of the most important decisions you’ll make. You must ensure that it’s smart, flexible, and easy to use – this is a must. If it’s not easy to use, other developers will not understand what you’re building nor will they be able to figure out how to build on top of it. Think before you build (I know. Planning sucks. Especially when you are excited to get going, but it *pays off*).

├── build.sh
├── dist
  ├──
├── package.json
├── src
  ├── config
     └── index.js
  ├── controllers
     ├──
  ├── models
     ├──
  ├── package.json
  ├── routes
     ├──
  ├── server.js
  ├── utils
     ├──

All source code is stored in /src. It compiles down from ES6+ to ES5 into the /dist directory for execution on the server. You’re probably asking yourself why you’d take the extra step to write in something that is just going to be compiled down? Good question. ES6+ standards provide some pretty killer additional functionalities, such as arrow functions, modified scoping, destructuring, rest/spread parameter handling, and more!

Let’s have a look at the compilation that takes place in the build.sh file:

View the code on Gist.

That is ALL you need to be able to write in a super awesome language while having it still be supported in all the usual places! That said, the code above *may* look like gibberish, so let’s break it down 🤓:

  1. #!/bin/bash
    • Denotes that this is an executable bash file
  2. rm rf dist && mkdir dist
    • Removes the /dist directory if it exists (cleanup).
    • Creates a new /dist directory.
  3. npx babel src outdir dist ignore node_modules
    • Compiles every file to ES5 and moves the files to the /dist directory, with the exception of node_modules (those are already compiled).
  4. cp src/package.json dist
    • By design, npx doesn’t migrate json files, so we need to copy it ourselves using the cp command.
  5. cd dist && yarn install production modulesfolder node_modules

Move into the /dist directory and install the npm modules using yarn

Running the build is as simple as running the following command from your terminal:

View the code on Gist.

Note: You will need to ensure that the build.sh file is executable…

OR if you are like me and enjoy automating everything, you can create an npm script like so:

View the code on Gist.

Which can be executed by running the following from your terminal:

View the code on Gist.

The Main File

The following file, server.js, contains the most important logic and sits on the top-level of our codebase. The beginning portion imports all of the necessary npm modules, followed by our config and logger utility.

Next, we take advantage of the Express use method to invoke several of our imported middleware libraries (cors, compression, and our body-parser). **Please note** that there are several other middleware libraries that we include for additional functionality (e.g. email, logging, jwt authentication, etc.). Last but not least, after a bit of initialization, we dynamically include all routes and pass the API context to the route for binding.

View the code on Gist.

Note: The customer logger module can be used with most logging services (Papertrail, Loggly, etc.). For this demo, as well as other projects, I like to use Papertrail. You may need to adjust the settings and ENV variables if you use something other than Papertrail.

Routing

To keep things tidy and organized, all routing logic (e.g. GET /users) is kept in its own route file inside of a /routes directory.

View the code on Gist.

As you can see, the contents of the route file above hold all references to the controllers for GET, POST, PUT, and DELETE operations. This works because we import and reference the User Controller, passing along the necessary parameters and/or data with every API call.

Controllers

Controllers include the database model associated with the data that they will be handling, receiving data from the routes, and then making an informed decision on how to handle the data. Finally, the controllers communicate through the models which then talk to the database, and return a status code with a payload.

If you’re a visual person, a production instance should look a little something like this:

Architecture

And, the code for an example user controller would look like this:

View the code on Gist.

Mongoose Models (MongoDB)

Mongoose is a wonderful ODM (Object Data Modeling) library for Node.js and MongoDB. If you’re familiar with the reference ORM (Object Resource Mapping) and libraries for Node.js, such as Sequelize and Bookshelf, Mongoose is pretty straightforward. The massive benefit with Mongoose is how easy it is to structure MongoDB schemas – there’s no need to fuss around with custom business logic.

What’s even more exciting are the many goodies like middleware, plugins, object population, and schema validation either baked in, or one yarn (I love yarn) or one npm install away. It’s truly remarkable how popular the project has become among developers who use MongoDB.

When it comes to Mongoose models, I tend to keep things somewhat flat (or at least a maximum of 3 deeply nested objects) to avoid confusion. Here’s an example of a user model pulled directly from a project currently under development here at Stream:

View the code on Gist.

Note: When it comes to hosting and running MongoDB, I like to use MongoDB Atlas. It’s a database as a service provided by the makers of MongoDB themselves. If you don’t want to use a free MongoDB Atlas instance, you’re welcome to use a local version. Additionally, if you want to monitor your data, MongoDB Compass is an excellent choice!

Utilities

Custom utilities can be used for a variety of things – basically, anything you want. I generally reserve them for separating concerns and keeping my code clean. Some examples include establishing database connections, sending emails, logging to an external service, and even communicating with HTTP based service here at Stream.

I’m often asked the question of when to turn something into a utility and my answer is always the same… When you find yourself 1) reusing code OR 2) jamming third-party services into code where it just doesn’t feel right.

Here’s an example of a utility I wrote to help called the Stream Personalization REST API. This integration was completed in about a dozen lines of code:

View the code on Gist.

The code above can now be called from any file like so:

View the code on Gist.

Final Thoughts

APIs are the building blocks of modern applications. They govern how an application can talk to another, as well as to the database. While we have other flavors of API structures (GraphQL, etc.), RESTful APIs continue to pull their own weight and aren’t going anywhere soon.

If you’re interested in seeing a fully built out skeleton for a REST API built with Node.js, Express, Mongoose, and MongoDB, head over to this GitHub repo.

As always, if you have any questions, please don’t hesitate to reach out to me on Twitter or below in the comments. Thank you!

The post Building a Node.js Powered API with Express, Mongoose & MongoDB appeared first on The Stream Blog.

]]>
https://getstream.io/blog/building-a-node-js-powered-api-with-express-mongoose-mongodb/feed/ 0
Sketchfab Utilizes Stream’s Feed Technology to Increase Performance and Reliability https://getstream.io/blog/sketchfab-utilizes-stream-to-increase-performance/ https://getstream.io/blog/sketchfab-utilizes-stream-to-increase-performance/#respond Wed, 21 Feb 2018 15:48:19 +0000 https://getstream.io/blog/?p=2993 “From posting updates to commenting and more, Stream provided us with the most flexible and scalable solution for displaying all our user’s activities. The Stream team made implementing our news feed solution a collaborative experience and ultimately the right decision for us.” – Paul Chambers, Artist Evangelist at Sketchfab. Sketchfab’s community consists of artists, designers, […]

The post Sketchfab Utilizes Stream’s Feed Technology to Increase Performance and Reliability appeared first on The Stream Blog.

]]>

“From posting updates to commenting and more, Stream provided us with the most flexible and scalable solution for displaying all our user’s activities. The Stream team made implementing our news feed solution a collaborative experience and ultimately the right decision for us.”
– Paul Chambers, Artist Evangelist at Sketchfab.

Sketchfab’s community consists of artists, designers, architects, hobbyists, engineers, brands, museums, game studios, schools and more. Some of the most talented 3D artists showcase their work on Sketchfab’s platform.

Sketchfab’s rapid growth triggered them to research solutions for their feeds. Since conception, they had relied on custom-built feeds that caused several issues. They had no other option but to maintain their own infrastructure in order to support their initial solution (ie. PostgreSQL database and Redis cache). The former implementation also relied on storing user activity in a PostgreSQL table which, as activity grew, it took more and more time to scan and retrieve activities relevant to a unique user. They knew their in-house solution wouldn’t scale indefinitely and adding and maintaining more infrastructure in order to fix it was not an option they wanted to explore.

Solution

Sketchfab heard about Stream since they are a fellow TechStars graduate. They tried out the interactive API tutorial and were impressed with how easy Stream’s API is to use. Before making the final decision to work with Stream, they did their research. The main alternative they considered was building an in-house solution on top of Stream’s open source Stream-Framework. Stream’s built-in support for aggregation, notification feeds and ranking was a major reason for why they chose the hosted solution. Another benefit is the solid performance and reliability offered by the API. Stream’s hosted platform is based on Go and a highly optimized feed storage infrastructure. That level of performance and reliability is hard to achieve when building an in-house solution. The final reason they decided to use Stream’s API is pricing. The team at Sketchfab realized that hosting and maintaining their own Cassandra cluster, worker instances, task broker, real time infrastructure and API workers would simply not be cost-effective.

The end result of this collaboration is the new feed on Sketchfab:

In addition to the news feed, their notification feed is also powered by Stream.

Performance

Sketchfab uses Stream’s region in EU-west. This is right next to their own data center, so the performance is very high. Here’s a graph of their read performance before and after Stream’s switch to Go:

Primary reasons for choosing Stream:

  • Aggregation, ranking and notifications supported out of the box
  • Scalable
  • Feature-as-a-Service
  • TechStars graduates
  • Low maintenance
  • Solid performance and reliability
  • Cost effective compared to in-house
  • Dashboard reporting

 

The post Sketchfab Utilizes Stream’s Feed Technology to Increase Performance and Reliability appeared first on The Stream Blog.

]]>
https://getstream.io/blog/sketchfab-utilizes-stream-to-increase-performance/feed/ 0
Activity Streams and News Feeds for Real-Time Use Cases https://getstream.io/blog/news-feeds-for-real-time-use-cases/ https://getstream.io/blog/news-feeds-for-real-time-use-cases/#respond Wed, 07 Feb 2018 12:00:21 +0000 https://getstream.io/blog/?p=2983 There are many feed use cases where it’s important to show updates in real-time. If a feed has thousands or even millions of followers, this can be pretty hard to do. Over the past months, our team has vastly improved the capacity of our real-time infrastructure, allowing you to: Show live activities for a sporting […]

The post Activity Streams and News Feeds for Real-Time Use Cases appeared first on The Stream Blog.

]]>

There are many feed use cases where it’s important to show updates in real-time. If a feed has thousands or even millions of followers, this can be pretty hard to do. Over the past months, our team has vastly improved the capacity of our real-time infrastructure, allowing you to:

  • Show live activities for a sporting event
  • Organize raids in a video game
  • Notify a user about something important
  • Enable discussions between several famous or popular users
  • Announce a concert that’s going on sale (follow The Weeknd on Bandsintown)
  • Share the latest VR for cats app on Product Hunt (Product Hunt uses Stream)

The metric that matters the most in the examples above is the round-trip time for an activity insert. More specifically, inserting the activity, handling the fanout of notifications, and the latency back to your infrastructure using either websockets, SQS or webhooks. It’s important to note that Stream only fires the real-time event after the insert and fanout are fully completed. This prevents scenarios where your user opens the app from a notification but the activity isn’t there yet.

In the past, our Python-based infrastructure could take up to 2 minutes for a feed update to propagate and for your user to receive the notification. With our new real-time infrastructure, the average round-trip time (including network latency) is around 230 milliseconds. The 99th percentile is 550 milliseconds.

Several recent changes to Stream have enabled this increase in speed. First, our team has made a major migration from Python to Go. You can read more about our Go based infrastructure on StackShare. The second is rewriting our real-time infrastructure from Node to Go.

Looking Forward…

We’re considering adding socket.io support to our real-time infrastructure. This will make it easier to connect to Stream from various platforms such as iOS, Android and React-Native. The team is also working on additional performance improvements, so we suspect the 99th percentile will further improve in the coming months.

We are excited to see what you can build with faster real-time updates. As always, please contact us if you have any feature requests or recommendations.

The post Activity Streams and News Feeds for Real-Time Use Cases appeared first on The Stream Blog.

]]>
https://getstream.io/blog/news-feeds-for-real-time-use-cases/feed/ 0
================================================ FILE: api/test/data/feed/techcrunch ================================================ TechCrunch https://techcrunch.com Startup and Technology News Thu, 31 May 2018 19:04:19 +0000 en-US hourly 1 https://wordpress.org/?v=4.9.6 https://techcrunch.com/wp-content/uploads/2015/02/cropped-cropped-favicon-gradient.png?w=32 TechCrunch https://techcrunch.com 32 32 136296444 Google’s Area 120 incubator aims to improve your NYC subway commute with Pigeon https://techcrunch.com/2018/05/31/area-120-subway-pigeon/ https://techcrunch.com/2018/05/31/area-120-subway-pigeon/#respond Thu, 31 May 2018 18:33:37 +0000 https://techcrunch.com/?p=1648957 There’s a new app coming out of Google’s Area 120 incubator that could help New York City subway commuters navigate the ever-growing number of delays.

While the Pigeon app is already live on the Apple App store, it currently requires an invite code to access, so I wasn’t able to try it out myself.

However, the Pigeon website describes it as a way for users save their favorite routes, then get recommendations on which route to take on a given day based on delays and crowds reported by other users. It’s almost like a transit-oriented version of Google-owned navigation app Waze.

“After years of living in New York City and commuting on the subway, the Pigeon team knows first-hand that public transit can be frustratingly unpredictable,” the website says. “So when we started this project, we decided to create a product that lets subway riders help each other avoid delays, crowds, and incidents that make can make commuting so stressful.”

Pigeon

As a New Yorker myself, I mostly rely on Google Maps for subway navigation — it does a reasonably good job of including arrival times and information about delays provided by the MTA, but there’s definitely room for more up-to-date and accurate data. Plus, I usually don’t check the app on my normal commute, which can mean I end up late to important meetings, or missing them entirely, due to an unexpected delay.

Startups like Transit (backed by Accel Partners) and Moovit (backed by Sequoia and Intel Capital) are also trying to offer better navigation for public transit commuters.

When asked about the app, a Google spokesperson sent us the following statement:

One of the many projects that we’re working on within Area 120 is Pigeon, an iOS app that helps New York City subway goers find the best route with live alerts from other riders. Like other projects within Area 120, it’s a very early experiment so there aren’t many details to share right now.

]]>
https://techcrunch.com/2018/05/31/area-120-subway-pigeon/feed/ 0 1648957
Roblox follows Minecraft into the education market https://techcrunch.com/2018/05/31/roblox-follows-minecraft-into-the-education-market/ https://techcrunch.com/2018/05/31/roblox-follows-minecraft-into-the-education-market/#respond Thu, 31 May 2018 18:18:12 +0000 https://techcrunch.com/?p=1648913 Roblox, the massively multiplayer online game favored by the under 13 crowd, is following in Minecraft’s footsteps with a move into the education market. The company this morning announced a new education initiative, Roblox Education, that will offer a free curriculum to educators, along with international summer coding camps, and a free online “Creator Challenge” in partnership with Universal Brand Development, which will see kids building Roblox games inspired by Jurassic World: Fallen Kingdom.

The gaming company has been around for many years, but only recently reached a critical mass where it was ready to talk about its numbers. Today, Roblox sees over 60 million monthly active users, and its creator community building new worlds for kids to explore has doubled to 2 million this year from the year prior, it said earlier this year.

Roblox gets kids coding by hooking them on the game itself when they’re young – around elementary school age. By middle school, users are downloading Roblox Studio to build their own games and experiences. And by high school, they’ve learned to code to customize their games even further.

And the kids aren’t just building for fun – there’s money to be made, too. The top creators make two to three million a year, the company claims. The games are free, but creators monetize through the sale of virtual goods. Roblox says it paid out $30 million to its creator community last year, and is now cash-flow positive.

With Roblox Education, the aim is to get more kids coding by working with educators directly.

The new curriculum offers teachers 12 hours of step-by-step tutorials, handouts, technical setup guides, outlines, lesson guides, and more. It’s shared freely under a Creative Commons license so teachers can use or modify it as they see fit. In the future, the curriculum will be expanded to include other subjects, as well, like Physics and Design, the company says.

In addition, teaching kids how to use Roblox Studio will be the main focus of more than 500 coding camps and online programs this summer in the U.S., U.K. Hong Kong, Singapore, Canada, Spain, Brazil, and Portugal. The kids will learn how to create, publish and market their games to others.

The company will also run its 4th annual Roblox Summer Accelerator, and host 45 young developers at its HQ for the summer. The program has previously produced some of the more popular Roblox titles, like MeepCity and Lumber Tycoon.

And it will host its annual Roblox Developer Conference in San Francisco July 13-15, 2018, and in Amsterdam August 17-19, 2018. It’s doubling the number of attendees this year at both.

Finally, Roblox will host its first Creator Challenge with Universal, where kids learn tricks of game building via a Jurassic Park-themed, self-paced course.

“Roblox’s mission is to power and fuel imagination while inspiring a new generation of creators,” said Grace Francisco, VP of Developer Relations at Roblox, said in a statement about the launch. ”We are thrilled to be launching our education initiative that gives young people of all ages and backgrounds the chance to develop the crucial skills needed to be tomorrow’s entrepreneurs and creators.”

]]>
https://techcrunch.com/2018/05/31/roblox-follows-minecraft-into-the-education-market/feed/ 0 1648913
Come mix your realities at our AR/VR event in LA in October https://techcrunch.com/2018/05/31/come-mix-your-realities-at-our-ar-vr-event-in-la-in-october/ https://techcrunch.com/2018/05/31/come-mix-your-realities-at-our-ar-vr-event-in-la-in-october/#respond Thu, 31 May 2018 17:49:03 +0000 https://techcrunch.com/?p=1648877 TechCrunch is hosting one of our single-topic Sessions events centered on AR/VR and mixed reality in Los Angeles on October 18th at UCLA’s Royce Hall. We’re going to be doing some very cool stuff that we’re not quite ready to talk about, but at the core we’re looking to have incredible discussions with the best and brightest in reality creation.

The goal is to get folks into one room to see some demos, hear some talks and take part in a salon of sorts about the state of AR/VR. We’ll talk shop, philosophy, hardware, software and inclusion.

As someone who has logged hundreds of hours in a headset, reported on the space and been an advocate of what augmented and virtual realities could do for us, I’m pretty excited. I’ll be programming the event personally, along with our crack reporter in the space, Lucas Matney. The show promises to be bang-up cool with attention paid to the hardware and software that will enable the next generation of experiences in the augmented reality and virtual reality worlds, as well as some more metaphysical chit-chat about how we all go about building these worlds.

Check out the site for Sessions: AR/VR 2018; we’ll be fleshing it out with speakers and more details as we lock them down. You can grab early tickets here for $95, which includes access to all the day’s talks and demos and, if you’re a student, we’ve got special tickets just for you here for $45.

More to come soon. See you in October!

]]>
https://techcrunch.com/2018/05/31/come-mix-your-realities-at-our-ar-vr-event-in-la-in-october/feed/ 0 1648877
Steve Case and JD Vance are speaking at Disrupt SF on startup opportunities outside of Silicon Valley https://techcrunch.com/2018/05/31/steve-case-and-jd-vance-are-speaking-at-disrupt-sf-on-startup-opportunities-outside-of-silicon-valley/ https://techcrunch.com/2018/05/31/steve-case-and-jd-vance-are-speaking-at-disrupt-sf-on-startup-opportunities-outside-of-silicon-valley/#respond Thu, 31 May 2018 17:47:17 +0000 https://techcrunch.com/?p=1648811 We’re excited to announce Steve Case and JD Vance will sit down for a fireside chat at Disrupt SF this September. There’s plenty to talk about, too, including the pair’s latest venture: A massive $150 million seed fund backed by an impressive group of investors that are targeted at startups outside of Silicon Valley.

As The New York Times put it after the fund’s announcement, the complete list of investors in the Rise of the Rest fund “may be the greatest concentration of American wealth and power in one investment fund.” It includes among others Jeff Bezos, Eric Schmidt, John Doerr, Jim Breyer, Dan Gilbert and members of the Walton, Koch and Pritzker families.

This fund is core to what Case and Vance are championing at Revolution . The Washington, D.C.-based venture capital firm primarily backs companies outside of major tech hubs. At Disrupt New York in May, Case told the audience that many regions are overlooked simply because investors can’t “get in their cars and drive to those companies” and he wants to convince other VCs to look outside of their comfort zones.

In August of 2017 Steve Case, founder of AOL and Revolution, tapped JD Vance to run Revolution as its Managing Partner.

“I don’t know if I’m ever going to be comfortable with being the media-dubbed spokesperson,” Vance told TechCrunch at the time. “But I do think you can talk about the issues and try to raise awareness or you can do something about the issues — my goal here is to try to do both. There’s an opportunity I’ve been given here with the platform the book has afforded.”

Vance is seemingly of the same mind as Case. In his book, which is a must read by the way, Hillbilly Elegy, he lays out his upbringing in Appalachia’s working class and explains the importance of striving to overcome obstacles — and startups outside the Valley have different obstacles to overcome than those located around San Francisco. As the managing partner of Revolution, we hear he has a keen focus that resonates with founders. Vance served in the Golf War, eventually graduating from The Ohio State and Yale and went on to serve as a law clerk and a principle at Peter Thiel’s VC firm, Mithril Capital Management LLC.

Steve Case spoke at Disrupt NY last year about his current passion in shining a light on startups outside traditional tech hubs.

“It’s worth remembering that Detroit 75 years ago was like the Silicon Valley,” said Case at Disrupt NY in 2017. “At the time, it was the hottest innovation city in the country, because the automobile was the hot new technology at the time. Silicon Valley was like fruit orchards. These things change. But they lost their way. Detroit lost 60 percent of its population in the last 50 years and they went bankrupt because they lost their entrepreneur mojo.”

Case’s fireside chat was fascinating and we’re thrilled to have him back with Revolution’s managing partner, JD Vance. While Disrupt SF happens in the heart of Silicon Valley, there are plenty of founders, developers and investors who are constantly looking for opportunities in new regions — just like Steve Case and JD Vance.

If you’re looking to purchase tickets to Disrupt, you can grab those right here.

]]>
https://techcrunch.com/2018/05/31/steve-case-and-jd-vance-are-speaking-at-disrupt-sf-on-startup-opportunities-outside-of-silicon-valley/feed/ 0 1648811
The Microsoft Launcher for Android now lets you track your kids’ whereabouts https://techcrunch.com/2018/05/31/the-microsoft-launcher-for-android-now-lets-you-track-your-kids-whereabouts/ https://techcrunch.com/2018/05/31/the-microsoft-launcher-for-android-now-lets-you-track-your-kids-whereabouts/#respond Thu, 31 May 2018 17:46:32 +0000 https://techcrunch.com/?p=1648875 Microsoft is launching an update to its Android launcher today that gives parents the ability to track their kids’ location. This is one out of a number of parent- and kid-focused announcements the company made today. Others include the ability to block sites in Microsoft Edge on Android and the launch of MSN Kids, a new curated news website for children.

At the core of these new features are Microsoft’s family group settings that already allowed you to do things like track a child’s activity on Windows 10 and Xbox One devices or limit screen time in general.

“As a mother to a young and curious daughter, I deeply understand the need for tools to help balance the use of technology in the home as well as out of the home,” writes Shilpa Ranganathan, the General Manager of Microsoft’s Mobile Experiences group, in today’s announcement. “It’s especially near and dear to me as leader of a team building experiences for mobile devices. We emphasize the idea of transparency as a guiding principle for these new experiences.”

The new tracking tool is rolling out with today’s update of the Microsoft Launcher for Android and will put the latest known location of your kids right in its personalized news feed.

I’m not sure how useful blocking access to sites in Edge for Android really is, but if you manage to lock your kids out from Chrome or any other pre-installed browser — and block them from downloading them — then I guess this could work.

As for MSN Kids, Microsoft notes that the site will curate information from trusted sources, including Time for Kids, Popular Science, Sports Illustrated for Kids, National Geographic, and USA TODAY. It’s worth noting that there is no sponsored content or advertising on the site.

 

]]>
https://techcrunch.com/2018/05/31/the-microsoft-launcher-for-android-now-lets-you-track-your-kids-whereabouts/feed/ 0 1648875
Spotify’s CEO says company botched ‘hateful conduct’ policy roll out https://techcrunch.com/2018/05/31/spotifys-ceo-says-company-botched-hateful-conduct-policy-roll-out/ https://techcrunch.com/2018/05/31/spotifys-ceo-says-company-botched-hateful-conduct-policy-roll-out/#respond Thu, 31 May 2018 17:40:50 +0000 https://techcrunch.com/?p=1648897 Two weeks after his company attempted to impose a policy targeted at curbing “hate content and hateful conduct,” Spotify’s CEO admitted the company mishandled its roll out.

During an interview at this week’s Code Conference, Daniel Ek told the crowd, “The whole goal with this was to make sure that we didn’t have hate speech on the service. It was never about punishing one individual artist, or even naming one individual artist as well.”

The policy, introduced on May 10, pulled certain artists from Spotify’s curated content streams over bad conduct in their personal lives. Pushback on the policy was almost instantaneous, and reports surfaced last week that Spotify was rethinking its approach. In particular, rapper XXXTencion, who was one of two artists single out by the service (along with R. Kelly), was reportedly going to be added back to Spotify’s popular Rap Caviar playlist at some unspecified point.

Ek acknowledged that the implementation could have been handled better, and that Spotify’s intention was never to play the role of “moral police.” The executive added that the policy is continuing to evolve, with Spotify soliciting user feedback. Among the many thorny issues the company is navigating here is how to address those artists who have been accused — but not actually charged or convicted — of a given crime.

]]>
https://techcrunch.com/2018/05/31/spotifys-ceo-says-company-botched-hateful-conduct-policy-roll-out/feed/ 0 1648897
Klaxoon gets $50M to try to make boring meetings more interactive and productive https://techcrunch.com/2018/05/31/klaxoon-gets-50m-to-try-to-make-boring-meetings-more-interactive-and-productive/ https://techcrunch.com/2018/05/31/klaxoon-gets-50m-to-try-to-make-boring-meetings-more-interactive-and-productive/#respond Thu, 31 May 2018 17:39:27 +0000 https://techcrunch.com/?p=1648892 If you’ve ever been in a pointless meeting at work, odds are you’ve spent part of the time responding to messages or just putzing around on the Internet — but Klaxoon hopes to convert that into something a bit more productive with more interactive meetings.

The French startup today said it’s raised $50 million in a new financing round led by Idinvest Partners, with early round investors BPI, Sofiouest, Arkea and White Star Capital Fund also participating. The company offers a suite of tools designed to make those meetings more engaging and generally just cut down on useless meetings with a room of bored and generally unengaged people that might be better off working away at their desk or even taking other meetings. The company has raised about $55.6 million in total.

The whole point of Klaxoon is to make meetings more engaging, and there are a couple ways to do that. The obvious point is to translate what some classrooms are doing in the form of making the whole session more engaging with the use of connected devices. You might actually remember those annoying clickers in classrooms used to answer multiple choice questions throughout a session, but it is at least one way to engage people in a room — and offering a more robust way of doing that may be something that helps making the session as a whole more productive.

Klaxoon also offers other tools like an interactive whiteboard (remember Smartboards, also in classrooms?) as well as a closed networks for meeting participants that aims to be air-gapped from a broader network so those employees can conduct a meeting in private or if the room isn’t available. All this is wrapped together with a set of analytics to help employees — or managers — better conduct meetings and generally be more productive. All this is going to be more important going forward as workplaces become more distributed, and it may be tempting to just have a virtual meeting on one screen while either working on a different one — or just messing around on the Internet.

Of course, lame meetings are a known issue — especially within larger companies. So there are multiple interpretations of ways to try to fix that problem, including Worklytics — a company that came out of Y Combinator earlier this year — that are trying to make teams more efficient in general. The idea is that if you are able to reduce the time spent in meetings that aren’t really productive, that’ll increase the output of a team in general. The goal is not to monitor teams closely, but just find ways to encourage them to spend their time more wisely. Creating a better set of productivity tools inside those meetings is one approach, and one Klaxoon seems to hope plays out.

]]>
https://techcrunch.com/2018/05/31/klaxoon-gets-50m-to-try-to-make-boring-meetings-more-interactive-and-productive/feed/ 0 1648892
This newly funded startup wants to help women gauge their reproductive health a lot sooner in life https://techcrunch.com/2018/05/31/this-newly-funded-startup-wants-to-help-women-gauge-their-reproductive-health-a-lot-sooner-in-life/ https://techcrunch.com/2018/05/31/this-newly-funded-startup-wants-to-help-women-gauge-their-reproductive-health-a-lot-sooner-in-life/#respond Thu, 31 May 2018 17:34:01 +0000 https://techcrunch.com/?p=1648791 It’s often the case that women don’t think much about their reproductive health until they have to. Sometimes it begins with an aside from a well-meaning gynecologist — or one’s impatient parents. Sometimes, it’s because a couple is ready to try conceiving and it’s proving harder than they imagined it would be.

A San Francisco-based startup called Modern Fertility wants to educate women about their reproductive health much earlier in their lives, enabling them to become more “proactive” instead of reactive, says co-founder and CEO Afton Vechery, who worked formerly as a product manager at the genetic testing company 23andMe and, before that, at a healthcare-focused private equity firm in Greenwich, Conn.

At both places, she learned a lot about the growing number of companies that are empowering customers with information about their own bodies. She also learned, particularly at 23andMe, about the importance of making that information affordable. Indeed, after shelling out $1,500 for tests run by a reproductive endocrinologist to get a better picture of her own reproductive health, Vechery set out to create similar tests that one needn’t be a Rockefeller to order. Toward that end, an at-home finger-prick hormone test that Modern Fertility began selling today for $199.

The vast difference in price owes to economies of scale, says Vechery. Because there are just 500 infertility clinics in the U.S. and roughly 6,000 endocrinologists — just 2,000 of which are focused on reproductive health — the cost of individual testing has been prohibitively high. Modern Fertility, meanwhile, has “systems and tech and integrations that support a high volume of tests” conducted at the same time, she says, explaining that with volume comes discounted pricing.

Modern Fertility is not analyzing its customers’ hormones. It is using all CLIA-certified labs, including Quest Diagnostics, the 50-year-old, publicly traded clinical laboratory company. “We’re not making new instruments,” says Vechery. “Our differentiation is in access and the information that we provide to women.”

In fact, Modern Fertility is billing itself as more of an educational company than anything else. While it will tell consumers about nine hormone levels related to ovarian reserves and overall reproductive health — which can be important, especially when it comes to considerations around egg freezing — much of what it offers is related to content based on peer-reviewed studies about menopause and when women typically start to lose their fertility.

Customers also receive one optional one-on-one phone consultation with a fertility nurse who won’t give out medical advice but can share more information about which hormones are being tracked and why.

For the price, that may be enough for many women. It was enough for investors. Modern Fertility just closed on $6 million in funding led by Maveron and Union Square Ventures, which were joined by Sound Ventures, #Angels, SV Angel and additional individual investors.

No doubt these backers see a future where an offering like that from Modern Fertility is a perk offered by employers, more of which are offering fertility benefits to keep their employees happy and in place. Already, Vechery says that a “handful of companies” are interested in layering Modern Fertility’s tests into their other wellness benefits.

Modern Fertility is also counting on repeat customers, suggesting to them that re-taking its test every now and then will give a woman a better idea of how her “fertility curve” is changing over time.

Most immediately, says Vechery, Modern Fertility — co-founded by Carly Leahy, a creative strategist who moved to California from Boston in 2014 after Google recruited her, and who most recently logged two years at Uber — will be adding to its current, eight-person team.

It also will be “trying to understand the best way it can get this information” to potential customers, says Vechery. “We want to meet women where they are and educate them that this type of testing is important.”

Pictured above: Modern Fertility co-founders Afton Vechery, left, and Carly Leahy

]]>
https://techcrunch.com/2018/05/31/this-newly-funded-startup-wants-to-help-women-gauge-their-reproductive-health-a-lot-sooner-in-life/feed/ 0 1648791
AWS launches pay-per-session pricing for its QuickSight BI tool https://techcrunch.com/2018/05/31/aws-launches-pay-per-session-pricing-for-its-quicksight-bi-tool/ https://techcrunch.com/2018/05/31/aws-launches-pay-per-session-pricing-for-its-quicksight-bi-tool/#respond Thu, 31 May 2018 17:08:41 +0000 https://techcrunch.com/?p=1648803 Amazon QuickSight, the company’s business intelligence tool for AWS, launched back in 2015, but it’s hard to say how much impact the service has made in the highly competitive BI market. The company has far from given up on this project, though, and today, it’s introducing a new pay-per-session pricing plan for access to QuickSight dashboards that is surely meant to give it a bit of a lift in a market where Tableau and Microsoft’s Power BI have captured much of the mindshare.

Under the new pricing plan, creating and publishing dashboards will stay cost $18 per user and month. For readers, though, who only need to have access to these dashboards, AWS now offers a very simple option: they will now pay $0.30 per session up to a maximum of $5 per month and user. Under this scheme, a session is defined as the first 30 minutes from login.

Previously, AWS offered two tiers of QuickSight plans: a $9 per user/month standard plan and a $24/user/month enterprise edition with support for Active Directory and encryption at rest.

That $9/user/month is still available and probably still makes sense for smaller companies where those who build dashboards and consume them are often the same person. The new pricing plan replaces the existing enterprise edition.

QuickSight already significantly undercuts the pricing of services like Tableau and others, though we’re also talking about a somewhat more limited feature set. This new pay-per-session offering only widens the pricing gap.

“With highly scalable object storage in Amazon Simple Storage Service (Amazon S3), data warehousing at one-tenth the cost of traditional solutions in Amazon Redshift, and serverless analytics offered by Amazon Athena, customers are moving data into AWS at an unprecedented pace,” said Dorothy Nicholls, Vice President of Amazon QuickSight at AWS, in a canned comment. “What’s changed is that virtually all knowledge workers want easy access to that data and the insights that can be derived. It’s been cost-prohibitive to enable that access for entire companies until the Amazon QuickSight pay-per-session pricing — this is a game-changer in terms of information and analytics access.”

Current QuickSight users include the NFL, Siemens, Volvo and AutoTrader.

]]>
https://techcrunch.com/2018/05/31/aws-launches-pay-per-session-pricing-for-its-quicksight-bi-tool/feed/ 0 1648803
Waymo expands autonomous driving partnership with Fiat Chrysler https://techcrunch.com/2018/05/31/waymo-expands-autonomous-driving-partnership-with-fiat-chrysler/ https://techcrunch.com/2018/05/31/waymo-expands-autonomous-driving-partnership-with-fiat-chrysler/#respond Thu, 31 May 2018 16:59:42 +0000 https://techcrunch.com/?p=1648820 On the same day of a massive $2.25 billion Softbank investment into General Motors’ Cruise, Fiat Chrysler Automobiles (FCA) is announcing an expanded partnership with Waymo that will add up to 62,000 more Chrysler Pacifica minivans to Waymo’s self-driving car fleet later this year. This isn’t too surprising, given Waymo said earlier this year that it had ordered thousands of new Chrysler Pacifica’s from FCA.

Waymo and FCA are also exploring ways to license Waymo’s self-driving car technology in order to deploy the tech in cars for consumers.

“FCA is committed to bringing self-driving technology to our customers in a manner that is safe, efficient and realistic,” FCA CEO Sergio Marchionne said in a statement. “Strategic partnerships, such as the one we have with Waymo, will help to drive innovative technology to the forefront.”

This expanded partnership comes a couple of months after Waymo partnered with Jaguar to introduce a premium self-driving car. Earlier this year, Waymo began testing its Chrysler self-driving car fleet in San Francisco. As of May 18, Waymo had 51 cars registered with the state of California for self-driving testing with a safety driver. Waymo has also applied for driverless testing in California.

Waymo’s plan is to launch a full-fledged self-driving transportation service later this year. The idea is for anyone to be able to pop open the Waymo app to request a driverless vehicle. Since 2009, Waymo has logged six million miles driven on public roads, five billion miles in simulated environments and run tests covering more than 20,000 types of driving scenarios.

“Waymo’s goal from day one has been to build the world’s most experienced driver and give people access to self-driving technology that will make our roads safer,” Waymo CEO John Krafcik said in a statement. “We’re excited to deepen our relationship with FCA that will support the launch of our driverless service, and explore future products that support Waymo’s mission.”

]]>
https://techcrunch.com/2018/05/31/waymo-expands-autonomous-driving-partnership-with-fiat-chrysler/feed/ 0 1648820
Philo’s low-cost TV service expands its lineup with Cheddar, Tastemade, and PeopleTV https://techcrunch.com/2018/05/31/philos-low-cost-tv-service-expands-its-lineup-with-cheddar-tastemade-and-peopletv/ https://techcrunch.com/2018/05/31/philos-low-cost-tv-service-expands-its-lineup-with-cheddar-tastemade-and-peopletv/#respond Thu, 31 May 2018 16:29:17 +0000 https://techcrunch.com/?p=1648789 Following the new trend among streaming TV services to combine digital-first channels with traditional TV content, Philo today announced it’s expanding its live TV service with the addition of Cheddar Big News, People TV, and Tastemade. The Tastemade channel goes live today, with the other two shortly after.

Philo is a relative newcomer to the streaming TV market, having launched its service in November following its early endeavors as an on-campus TV provider. Its $16-per-month option is designed for cord cutters who care more about entertainment than they do sports.

By ditching sports programming, Philo undercut its competitors to become one of the cheapest ways to watch traditional cable TV channels, like A&E, AMC, BBC America, Comedy Central, Discovery Channel, Food Network, HGTV, Investigation Discovery (ID), Lifetime, MTV, TLC, Travel Channel, VH1, Viceland and others.

It also later added an expansion pack for $4 more per month that adds nine more channels, while still providing a 30-day cloud DVR and the ability to stream in HD on up to 3 devices at once.

Despite its affordable pricing, Philo is still something of an unknown in a market where even big brands like YouTube TV and Hulu are having to spend large marketing budgets just to create awareness around their live TV offerings. YouTube TV, for example, became a sponsor for the NBA Finals and the World Series to spread the word.

A new angle these services are trying now is to add on digital channels to bring in the internet audience. In April, YouTube TV added its first digital-only networks with the launch of two channels from Cheddar, followed in May by the additions of Tastemade and The Young Turks. Hulu, too, recently added Cheddar. Meanwhile, Sling TV already offers Cheddar, as does Pluto.

These additions also serve as a cheap way to offer viewers more programming, without having to increase prices. The same hold true for Philo, which is keeping the same rates as before, following the expansion.

“We built Philo for everyone who feels like TV was no longer serving them, and this is one more way we can stand apart,” said Philo CEO Andrew McCollum, in a statement.

As for gaining exposure, that’s a harder nut to crack. Philo’s newest attempt here is a just launched referral program, offering a $5 credit for each referral, and $5 for the person referred.

]]>
https://techcrunch.com/2018/05/31/philos-low-cost-tv-service-expands-its-lineup-with-cheddar-tastemade-and-peopletv/feed/ 0 1648789
Scout.fm turns podcasts into personalized talk radio https://techcrunch.com/2018/05/31/scout-fm-turns-podcasts-into-personalized-talk-radio/ https://techcrunch.com/2018/05/31/scout-fm-turns-podcasts-into-personalized-talk-radio/#respond Thu, 31 May 2018 16:00:09 +0000 https://techcrunch.com/?p=1648672 Scout.fm wants to change the way people listen to podcasts. Instead of scouring through the over 500,000 shows in your current podcast app, this startup’s new curated podcast service will just ask you a few questions to find out what you like, then create a podcast station customized to you. The experience is primarily designed for use on smart speakers, like Amazon’s Alexa-powered Echo devices, but is also available as iOS and Android applications.

The company was founded just over a year ago by Cara Meverden (CEO), previously of Google, Twitter, Indiegogo, and Medium; along with Saul Carlin (president and COO), previously head of publisher development at Medium, and before that, Politico; and Daniel McCartney, (CTO) previously an engineer at GrubHub, Klout and Medium.

At Medium, Meverden explains, they saw an explosion of people creating great written content; but now those publishers had begun to create great audio content, as well.

But unlike on Medium, which helps to guide readers to topics they like, people today have to seek out new podcasts for themselves. Scout.fm wants to offer a better system, and hopefully bring more listeners to podcasts as a result.

“We want to take podcast listening mainstream,” she says. “We think the key to that is making podcasts as easy to listen to as the radio – and we think that’s even more critically important, as we enter the smart speaker era.”

The Scout.fm service began as a series of experiments on Alexa.

The company launched over 30 Alexa skills, including a “Game of Thones”-themed podcast radio that was popular while the show was airing on HBO. The goal was to test what worked, what topics and formats drew listeners, and gain feedback through calls-to-action to participate in user surveys.

The result is Scout.fm, a curated podcast service that’s personalized to your listening preferences – and one that improves over time.

Here’s how it works on the Alexa platform. You first launch the app by saying “Alexa, open Scout fm.” The app will respond (using a human voice actor’s voice, not Alexa’s) by explaining briefly what Scout.fm does then asks you to choose one of three types of talk radio stations: “Daily news, brain food, or true stories.”

The first is a news station, similar to Alexa’s “Flash Briefing;” the second, “brain food,” focuses on other interesting and informative content, that’s not day-to-day news; and the last is a true crime podcast station.

The voice app will then ask you a few more questions as part of this setup process to find out what other subjects appeal to you by having you respond, on a scale of one to ten, how much of a history buff you are, or how much you’re interested in culture, like art, film and literature, for example.

On subsequent launches, the app will simply ask if you want to return to your “Brain Food” (or other selected) station. If you say no, you can try one of the other options.

However, once the setup process is over, the experience becomes very much like listening to talk radio.

A podcast will begin playing – Scout.fm favors those without ads at the very beginning – allowing you to listen as long as you’d like, or say “next” to move to the next one. Each new podcast episodes has a brief, spoken introduction that Scout.fm handwrites, so you know what’s coming up. Your listening can go on for hours, offering you a hands-free means of switching podcasts and discovering new favorites.

The app will also adjust to your preferences over time, removing those you tend to skip – much like how the thumbs down works on Pandora.

Scout.fm doesn’t include every podcast that’s out there. Instead, it’s a curated selection of a few hundred with high production values, narrative storytelling and tight editing.

“So if we listen to something and the two co-hosts kind of go on for half an hour at the beginning, that’s not a great podcast for this format,” Meverden says. “We want shows where they’re going to get right into it. That right away limits things, but there’s still an abundance of content.”

For example, some of the podcasts Scout.fm includes come from The Wall St. Journal, The New York Times, ESPN, and podcast networks like Gimlet, Wondery, Parcast and others.

The same curated selection of podcasts is also available in Scout.fm’s mobile apps for iOS and Android, which work with the voice assistant on the phone. (For example, you can tap your AirPods to wake Siri then say “Next” to move between podcasts.)

“If you’re jogging, our apps are an excellent companion because you don’t have to go back to your phone and try to find a new thing to listen to,” notes Meverden.

Since Scout.fm’s launch, it has accrued 1.5 million minutes listened across its network of experimental apps ahead of today’s public debut. The Alexa user base listened for twice as long as mobile users.

Currently, the service is not generating revenue, but, in the future, the team envisions call-to-action ads that could work with the Alexa app to share more information about the products, as well as ways it could utilize the newer in-app purchase mechanisms for Alexa skills.

The company is backed by $1.4M in seed funding from Bloomberg Beta, Precursor Ventures, Advancit and #Angels.

“The Scout team’s unique insight is that podcasts, no matter how good, won’t go mainstream until it is much simpler for consumers to find and listen to the content that’s right for them,” said Charles Hudson, managing partner at Precursor Ventures, in a statement about the investment. “The fast adoption of smart speakers changes this. We can open up podcasts to an entirely new audience,” he said.

Scout.fm is available on Alexa, iOS and Android.

]]>
https://techcrunch.com/2018/05/31/scout-fm-turns-podcasts-into-personalized-talk-radio/feed/ 0 1648672
iOS App Store has seen over 170B downloads, over $130B in revenue since July 2010 https://techcrunch.com/2018/05/31/ios-app-store-has-seen-over-170b-downloads-over-130b-in-revenue-since-july-2010/ https://techcrunch.com/2018/05/31/ios-app-store-has-seen-over-170b-downloads-over-130b-in-revenue-since-july-2010/#respond Thu, 31 May 2018 15:43:11 +0000 https://techcrunch.com/?p=1648732 The App Store has seen over 170 billion downloads over the past decade, totaling over $130 billion in consumer spend. This data was shared this morning by app intelligence firm App Annie, which is marking the App Store’s 10th Anniversary with a look back on the store’s growth and the larger trends it’s seen. These figures aren’t the full picture, however – the App Store launched on July 10, 2008 with just 500 applications, but App Annie arrived in 2010. The historical data for this report, therefore, goes from July 2010 through December 2017.

That means the true numbers are even higher that what App Annie can confirm.

The report paints a picture of the continued growth of the App Store over the years, noting that iOS App Store revenue growth outpaces downloads, and that nearly doubled between 2015 to 2017.

iOS device owners apparently love to spend on apps, too.

The iOS App Store only has a 30 percent share of worldwide downloads, but accounts for 66 percent of consumer spend, the report says.

But this isn’t a complete picture of the iOS vs. Android battle, as Google Play isn’t available in China. App Annie’s data is incomplete on this front as it’s not accounting for the third-party Android app stores in China.

China today plays an outsized role, as App Annie has repeatedly reported, in terms of App Store revenue, even without Google Play. In fact, the APAC region accounts for nearly 60 percent of consumer spend – a trend that began in earnest with the October 2014 release of the iPhone 6 and 6 Plus in China.

But when you look back at the App Store trends to date (or, as of July 2010 – which is as far back as App Annie’s data goes), it’s the U.S. that leads by a slim margin. China has quickly caught up but the U.S. is still the top country for all-time downloads, with 40.1 billion to China’s 39.9 billion; and it has generated $36 billion in consumer spend to China’s $27.7 billion.

iPhone users are heavy app users, too, the report notes.

In several markets, users have 100 or more apps installed, including Australia, India, China, Germany, Brazil, Japan, South Korea, Indonesia, and France. The U.S., U.K., and Mexico come close, with 96, 90, and 89 average monthly apps installed in 2017, respectively.

Of course the numbers of apps used monthly are much smaller, but still range in the high 30’s to low 40’s, App Annie claims.

The report additionally examines the impact of games, which accounted for only 31 percent of downloads in 2017, but generated 75 percent of the revenue. The APAC regions plays a large role here as well, with 3.4 billion game downloads last year, and $19.3 billion in consumer spend.

Subscriptions, meanwhile, are a newer trend, but one that’s already boosting App Store revenues considerably, accounting for $10.6 billion in consumer spend in 2017. This is driven mainly by media streaming apps like Netflix, Pandora, and Tencent Video, for example, but Tinder makes a notable showing as one of the top five worldwide apps by revenue.

Thanks to subscriptions and other trends, App Annie predicts the worldwide iOS App Store revenue will grow 80 percent from 2017 to $75.7 billion by 2022.

And while the App Store today has over 2 million apps, it has seen over 4.5 million apps released on its store to date. Many of these have been removed by Apple or the developers, which is why the number of live apps is so much lower.

The full report with the charts included is here.

]]>
https://techcrunch.com/2018/05/31/ios-app-store-has-seen-over-170b-downloads-over-130b-in-revenue-since-july-2010/feed/ 0 1648732
Canon has sold its last film camera https://techcrunch.com/2018/05/31/canon-has-sold-its-last-film-camera/ https://techcrunch.com/2018/05/31/canon-has-sold-its-last-film-camera/#respond Thu, 31 May 2018 15:29:03 +0000 https://techcrunch.com/?p=1648753 Mark this date on your calendar. It’s the end of yet another tech era. Though, granted, this one’s been been death rattling for nearly a decade now. Canon this week announced with no fanfare that it’s sold its last film camera. The news was spotted by PetaPixel on the camera giant’s Japanese support forum.

The model in question is the EOS-1V, which, incidentally, the company actually stopped making a full eight years ago. Since it has simply been selling out the rest of its stock, which, it seems, has finally depleted. It’s less of a bang than a prolonged whimper, but it’s the end of an era, nonetheless, marking the first time Canon hasn’t offered a film camera since the 30s, when its parent company started offering a device called the “Kwanon.”

Those who are feeling suddenly nostalgic, you can likely pick one up used fairly easily (though this news might bump up their premium a bit), and I’m sure the inevitable Kickstarter project to revive the technology can’t be too far off, because that’s how these things go now.

And, of course, some other brands are still supporting film in one form or other, including, notably, Nikon. As for Canon, the company has promised to continue to offer repair on the EOS-1V until October 31st 2025, though that could end as early as 2020 for some, if parts and inventory run out sooner.

]]>
https://techcrunch.com/2018/05/31/canon-has-sold-its-last-film-camera/feed/ 0 1648753
New York VC Steve Schlafman has a new gig with Primary Venture Partners https://techcrunch.com/2018/05/31/new-york-vc-steve-schlafman-has-a-new-gig-with-primary-venture-partners/ https://techcrunch.com/2018/05/31/new-york-vc-steve-schlafman-has-a-new-gig-with-primary-venture-partners/#respond Thu, 31 May 2018 14:27:47 +0000 https://techcrunch.com/?p=1648474 Steve Schlafman has been an East Coast investor for roughly a decade — scouring deals for the Kraft Group ahead of joining Lerer Hippeau as an early employee, then spending more than four years as a principal with RRE Ventures before announcing on Twitter, to the surprise of some, that he was leaving the New York firm.

Many guessed that Schlafman, like a growing number of people right now, was setting off to create his own venture outfit. Today, Schlafman says it was a consideration and that he did a bit of research toward this end, but that as an identical twin, he’s not really programmed to work on his own. Enter Primary Venture Partners, a seed-stage firm in New York that was previously known as High Peaks Venture Partners and has backed numerous high-profile startups — Jet.com and Coupang among them — even while flying low itself.

Schlafman had been friends for years with co-founders Ben Sun and Brad Svrluga, co-investing with them in the civic app startup PublicStuff (acquired in 2015 by a better-funded peer), and turning to them for advice as he was figuring out his next moves. When they suggested that he join them as a venture partner, he thought the move made perfect sense. “It feels like buying a stock that’s on the rise in some ways,” he tells us.

More from our conversation yesterday, edited for length:

TC: Why did you leave RRE when you did?

SS: It was an incredibly hard decision, but after soul-searching about what I wanted to do long-term, I just felt that seed investing is where my heart is. RRE tends to be a Series A investor, and while I enjoy Series A, my super power is really spotting founders early and helping them along that journey.

TC: Were you thinking about launching your own fund?

SS: I was under the assumption at the time that I’d go start a fund as a solo GP, but after doing work [on the idea] for four or five months, I decided I didn’t want to work alone. I’m a collaborative person by nature, and the idea of working on my own for the next 18 to 36 months as a solo GP just wan’t attractive. I was in touch with Brad and Ben and they said, ‘What would think of joining forces with us?’ They’d been helping me think through different models, and it evolved that I could bring a lot to Primary.

TC: You’ve led deals in some companies that seemed out there at the time. I still remember chatting with you years ago about Breather, the on-demand network of meeting rooms, and thinking it was pretty far out there.

SS: I tend to like the weird things. I think part of the reason Primary works so well is that Ben has worked with transactional marketplaces, and Brad [knows] business-to business applications and I’ve traversed both worlds. I’ve also done things like [crime reporting app] Citizen, [indoor farming startup] Bowery Farming and Groups [an opiate treatment center and community]. That’s just my style, so I think they’re excited to get my brain to the table and bring a new perspective.

TC: ‘Venture partner’ means different things at different firms. Is this a part-time role?

SS: We did spend a lot of time talking about this, and there are a few roles that I’m going to play for them. Certainly, I’ll be being active on the investment team. I’ll also be helping with the broader firm strategy given the perspective I’ve gained by working in three investment firms previously.

But over the last six months, I’ve also been going through training to become an executive performance coach, which is something I really believe in. Not only have I personally gotten the benefit of coaching, but founders who’ve worked with coaches will tell you the experience transforms the way they lead. I plan to bring that to Primary, too.

TC: That’s interesting. Whose coaching program is it, and how involved is it?

It’s 250 hour of classroom [learning] and coaching at Leadership that Works, an accredited coach training program that [renowned VC-turned-coach] Jerry Colonna and other coaches at Reboot [a coaching firm Colonna co-founded nearly four years ago] have gone through.

For me, I’m married to a founder, and she’s been a big inspiration for me as an investor and taught me a lot about the daily grind of running a company. [I’ve learned much more about] not telling a founder how to run their company, but asking questions that ultimately help them make the tough decisions themselves. At the end of the day, I’m showing up for them and meeting them where they are in their process and hopefully helping them get to answers themselves versus being a traditional investor who tries to have all the answers.

TC: Are you on any boards right now?

SS: I’m not. I rolled off all my RRE boards when I left the firm.

TC: A year from now, will you be a general partner with Primary? I’m hearing the firm is raising another fund after closing its last fund with $60 million in 2016.

SS: Part of the appeal of working with Brad and Ben — and much of why I believe in Primary’s current trajectory — is that it’s building out the only true fund that’s focused on New York as a seed platform. Right now, I plan to spend half my time with them, and there will be a certain portion of my time spent evaluating alternative paths, in terms of maybe starting a company, or coaching could certainly be one of those paths I decide to take.

I’ll be working from Primary’s office every day like a team member, but I will have a bit of flexibility to explore a variety of avenues. It’s a fluid role. I imagine I’ll get entrenched pretty quickly, though.

]]>
https://techcrunch.com/2018/05/31/new-york-vc-steve-schlafman-has-a-new-gig-with-primary-venture-partners/feed/ 0 1648474
Alcatel’s $100 Android Go phone hits the U.S. next week https://techcrunch.com/2018/05/31/alcatels-100-android-go-phone-hits-the-u-s-next-week/ https://techcrunch.com/2018/05/31/alcatels-100-android-go-phone-hits-the-u-s-next-week/#comments Thu, 31 May 2018 14:17:13 +0000 https://techcrunch.com/?p=1648717 At MWC, ZTE promised that its Tempo Go would be the first device to bring Android Oreo (Go Edition) to the States. But, well, stuff happened, and the company’s had a lot bigger things to deal with in the intervening months. Alcatel, however, is on the case with the 1X.

TCL announced this morning that the budget device will be hitting Amazon some time next week, priced at an extremely affordable $100, unlocked. It will also be arriving at Best Buy and Walmart soon after, no doubt taking advantage of the fact that it’s the only Android Go handset available in the U.S. for the time being.

The specs are unsurprisingly uninspiring. There’s a 960 x 480 5.3-inch screen, a MediaTek chip and 1GB of RAM. The good news, however, is that the new, lightweight version of Google’s mobile operating system is built for exactly those hardware restraints, which means you ought to get a much smoother Android experience than you would on a similarly specced handset running the full OS.

While the operating system is well positioned to get a foothold in developing countries, Google was quick to point out that it wasn’t limiting Android Go’s availability to those parts of the world. But while a number of manufacturers have signed on, none appeared too eager to launch the handsets in the States — well, aside from ZTE, but we all know how that went.

Another Android Go devices is on the way as well, with HMD bringing the Nokia 2.1 to the States in July.

]]>
https://techcrunch.com/2018/05/31/alcatels-100-android-go-phone-hits-the-u-s-next-week/feed/ 1 1648717
Neighborhood Goods raises $5.75M to reinvent the department store https://techcrunch.com/2018/05/31/neighborhood-goods-seed-funding/ https://techcrunch.com/2018/05/31/neighborhood-goods-seed-funding/#respond Thu, 31 May 2018 14:08:31 +0000 https://techcrunch.com/?p=1648686 Neighborhood Goods, a startup rethinking the traditional department store experience, is announcing that it has raised $5.75 million in seed funding.

Co-founder and CEO Matt Alexander (who co-founded the company with Mark Masinter) told me via email that while the largely static layout and offerings of a department store provide a degree of “consistency and reliability,” they’re also “dull and unchanging,” as well as “fairly transactional with little more to provide.”

So instead, Neighborhood Goods will allow around 15 brands to create their own “activations,” each highlighting the aesthetic and products that the brands choose. (Bulletin is another startup looking to bring a pop-up approach to traditional retail.) The store will also have a restaurant and bar, and communal spaces that could be used for things like speaking events or art installations.

“At Neighborhood Goods, we’re creating something more social and communal around an ever-changing landscape of products,” Alexander said, later adding, “Neighborhood Goods ostensibly takes the polish and approachability of the typical department store, but combines it with the dynamism and community of a pop-up store or pop-up marketplace.”

He also said technology will play a big role in the experience — particularly with an iOS app that will allow customers to learn more about the brands, text the staff, have products brought to them and make purchases.

The funding was led by Forerunner Ventures, with participation from Maveron, CAA Ventures, Global Founders Capital, NextGen Venture Partners, Revolution’s Rise of the Rest Seed Fund, Dollar Shave Club founder Michael Dubin and Retail Connection co-founder Alan P. Shor (who’s also joining the board of directors).

“Community and emotional connection are a big part of what drives consumer spending — something Matt and Mark understand wholeheartedly,” said Forerunner’s Kirsten Green in the funding announcement. “The delicate balance of both experience and discovery is reshaping the retail industry as shoppers crave brands that are unique and worth getting excited over.”

Neighborhood Goods plans to open its first location — a 13,000-square-foot store in Plano, Texas — this fall. Asked why he chose Plano, Alexander said:

Specifically, we’re able to tap into an aggressive consumer market, whilst bringing brands closer to exceptional customers. And we’re able to do so without the brands having to invest exorbitant amounts, hiring extensive retail teams, or developing marketing initiatives from the ground-up in new markets … That’s not to say we won’t look at markets like LA, NY, and SF in future, but, as a launchpad for a new concept, Plano is uniquely good for us today.

]]>
https://techcrunch.com/2018/05/31/neighborhood-goods-seed-funding/feed/ 0 1648686
The queer dating app Her expands with curated community spaces https://techcrunch.com/2018/05/31/her-app-queer-women-communities-rebrand/ https://techcrunch.com/2018/05/31/her-app-queer-women-communities-rebrand/#respond Thu, 31 May 2018 14:00:18 +0000 https://techcrunch.com/?p=1648418 After carving out a niche as the first dating app by and for queer women, Her is broadening its mission. Today, the app formerly known as Dattch is launching a Communities feature — kind of like a set of mini queer subreddits — to let people connect around interests and identity as a group.

“We spent the past three years bringing people together in one on one conversations and introductions — communities is about taking it beyond the one on one,” Her founder Robyn Exton told TechCrunch.

“We started paying attention to the number of queer spaces that are closing,” Exton said, noting that women’s centers, lesbian bars, queer bookshops and other queer IRL spaces are closing in record numbers in recent years. “We actually think they’re needed more than ever.”

Her’s new Communities feature aims to create a digital version of those collective queer spaces, letting users connect with interest and identity-based groups, with message boards custom built for Her’s unique user base. Users can post content in Communities or follow another person’s feed to stay up to date on what’s going in the Her universe.

A curated starter pack of Communities launches today, though Exton plans to add more over time with the potential for user-generated Communities and pop-ups around specific events. The first set includes a space for queer women of color, one centered around mindfulness and wellbeing and another for news and entertainment, among others.

The categories are pretty broad for now, but it sounds like Her plans to adapt Communities to whatever its users end up wanting. That flexibility coupled with Exton’s commitment to maintaining a space that’s “so ragingly queer” set Her apart from dating apps that generally fumble any dating experience that isn’t explicitly for straight people or gay men.

Her also plans to push toward internationalization in 2018 to grow its 3 million registered users. The app is already live in 55 countries and its largest non-English speaking markets are France, Germany, Spain, Italy, Brazil, Mexico, Indonesia and the Philippines. The app will host events tailored toward each of those locales in the coming year.

Just in time for Pride Month, Her is also launching a rebrand aimed at making the app more inclusive and reflective of what Exton calls “the future of fluidity that we believe in.”

“Our community and our audience has changed hugely, even in the last three years,” Exton said. “We needed to reflect that as a brand.”

According to Exton, there’s been a massive spike in Her users under the age of 29 describing their gender as non-binary or their sexuality as pansexual — a shift reflective of language and identity evolution in the queer community at large. The language of the rebrand describes a vision in which “sexuality and gender are found on a spectrum, where labels remain but are not set in stone.”

Exton hopes that Communities will create meaningful spaces in which Her users can gather and explore their own identities as they evolve and change. “So much queerness that happens inside of Her,” Exton said. “People describe it as feeling like you’re coming home.”

]]>
https://techcrunch.com/2018/05/31/her-app-queer-women-communities-rebrand/feed/ 0 1648418
Orange and Google form new partnership to invest in and buy EMEA startups https://techcrunch.com/2018/05/31/orange-google/ https://techcrunch.com/2018/05/31/orange-google/#respond Thu, 31 May 2018 13:06:13 +0000 https://techcrunch.com/?p=1648642 Google, more recently by way of parent company Alphabet, has been a prolific investor in startups across the globe by way of entities like GV and CapitalG. Today, it announced its newest effort in this area, specifically outside of the US. The search and Android giant is partnering with Orange Digital Ventures, the corporate venture fund of the French carrier Orange, on a new effort to find, fund, and potentially acquire startups in the EMEA region, and specifically in the areas of the internet of things, cybersecurity, cloud services, AI, fintech and connectivity solutions.

The two are not disclosing a specific fund size, nor are they talking about any financial terms in this deal at this point, except to note that the investments could potentially be made at any stage, from seed to growth, depending on the startup in question.

The two expect the first investments to be announced later this year.

“Our goal is to join forces in financing the most promising digital startups,” said Marc Rennard, the CEO of Orange Digital Ventures (ODV), said in an interview. “We will then work together to qualify them, and when a common interest is there, we will join forces to invest in them.”

To be clear, Google has confirmed to me that this is not an extension of GV or CapitalG but activity out of its corporate development arm, which also makes investments into companies when they are viewed as strategic to Google and a potential route to an acquisition. (One, slightly outsized, example of one these investments in a third party would be Google’s $1.1 billion deal to buy a part of HTC.)

“We are delighted to support Orange’s ecosystem of start-ups and innovation and to explore alongside them opportunities for co-investment in Europe, Africa and the Middle East (EMEA),” said Carlo d’Asaro Biondo, EMEA President of Google Partnerships, in a statement. “Orange’s ecosystem is consistent with Google’s know-how and our ability to accelerate the growth of start-ups. This partnership is a way to enhance our collective contribution to innovation in this region.”

Indeed, in a sense, the deal is mutually beneficial for both sides.

On the part of Google, the company has strong dealflow and outreach particularly among US startups, in keeping with it being based there, and when it comes to GV or CapitalG either in the US, Europe, or elsewhere, the efforts are not intended primarily to be strategic to Google’s own interests. But when it comes to connecting with startups in EMEA that might be useful companies for Google to work with and potentially acquire to expand its business, it may not be seeing as many of those as it wants to.

Rennard said that Orange, on the other hand, gets on average around 1,200 startups pitching it for investment each year, and that’s before you consider startups that might get introduced through other VCs it works with already like Partech.

The thinking here is that working with Google will help ODV better filter some of those opportunities to make sure that the most interesting startups with the most potential get spotted and backed, and also to help Orange and Google both get in on the best deals in what appears to be a competitive investing environment at the moment.

“Have we missed opportunities? Yes. Can we improve? Yes. Could we have invested in an Amazon or Google before they became what they are now? Yes, and maybe we should have,” said Rennard. He also admitted that Orange has found it a challenge to get in on some of the more obvious and interesting startups in EMEA.

“From time to time, it’s difficult to have a place at the table. When a startup decides to call for investors, they might cover all their needs from others, without any possibility of us entering too,” he said. “But with Google plus Orange, I think the company will think twice before rejecting us, so it may help us.”

There is another reason why it may serve Google well to do more in Europe. The company has been under a lot of scrutiny for its anticompetitive practices in advertising and in its Android mobile operating system. By investing in startups in Europe (and beyond) it’s one way for Google to position itself as a team player, supporting smaller tech businesses.

Orange and Google have been working together for some 10 years already in other aspects of their businesses including developing and building out connectivity solutions in Africa, which has also extended into developing cheap handsets together, and this investment plan is an extension of that as well.

Orange is no stranger to trying to work closer with tech companies to bring some of their ethos, culture, and rapid customer growth to their business — which, like many large carriers, continues to bring in huge amounts of cash and strong margins, but is often based on legacy services and therefore runs the risk of shrinking, being curtailed by regulators, or simply becoming less appealing to consumers. Previously, the company also partnered with Facebook to develop an infrastructure accelerator, also focused on emerging markets.

ODV was first established back in 2015 as a $23 million fund for early stage investments, a way for Orange to gain a better foothold in Silicon Valley, and has since grown to handling just under $500 million in investments across the world. Included in that, the carrier has also partnered with a number of other third parties, such as ad giant Publicis, to invest in companies that could potentially serve them to bring more cutting-edge technology into their businesses.

]]>
https://techcrunch.com/2018/05/31/orange-google/feed/ 0 1648642
Ethereum wallet imToken raises $10M Series A from IDG to expand in the U.S., Asia and Africa https://techcrunch.com/2018/05/31/ethereum-wallet-imtoken-raises-10m-series-a-from-idg-to-expand-in-the-u-s-asia-and-africa/ https://techcrunch.com/2018/05/31/ethereum-wallet-imtoken-raises-10m-series-a-from-idg-to-expand-in-the-u-s-asia-and-africa/#respond Thu, 31 May 2018 13:00:27 +0000 https://techcrunch.com/?p=1648465 imToken, which claims to be the world’s largest Ethereum wallet, will focus on expanding in Asia and the United States after raising a $10 million Series A from IDG Capital, it announced today. The capital will also be used to add new features, including support for Bitcoin, EOS and other blockchains.

imToken is the latest addition to IDG Capital’s cryptocurrency investments, which include Coinbase and Circle. In a press statement, IDG Capital partner Young Guo said “imToken has developed its product into one of the top crypto asset wallets in the world with such a sound reputation. We believe it will become a significant infrastructure for the tokenization manifesto, benefitting both the crypto economy and blockchain technology. We’re excited to back imToken.”

Founded in 2016 by chief executive officer Ben He and based in Hangzhou, imToken’s core market is currently China. The company supports 30,000 tokens, claims more than 4 million monthly active users and says it handled $35 million in pass-through transactions last year.

He tells TechCrunch that the company will use its new capital to study local regulations and launch imToken 2.0 international in new markets. It will focus first on Southeast Asia before looking toward other Asian countries, like Korea, Japan and India, where “regulations are maturing quickly and as a result we’re doing our due diligence amid increasing scrutiny from local governments,” He says.

Then imToken will concentrate on countries in Africa, including Nigeria, where they already have a user base. Its expansion into the U.S. will happen at the same time as the rest of its international roll out.

In addition to the imToken wallet, the company’s services also include Tokenlon, an in-app decentralized exchange in partnership with Kyber Network and 0x, and DApp store, a marketplace for decentralized mobile apps.

In its new markets, especially the U.S., imToken will face several established competitors, including digital services MyEtherWallet, Coinbase and Ledger Nano and a host of hardware wallets. He is sanguine about the competition, saying that the goal of all blockchain companies is to move the technology forward and that imToken has built positive relationships with its rivals.

He adds that imToken’s advantage, however, is “taking a step further than our competitors, as we’re focused on building an ecosystem within imToken for all our users.” The company wants to “move toward a blockchain-agnostic stage,” which means users will be able to store different assets in one imToken wallets. Then it wants to lower the barrier for entry into blockchain tech by making it easier to manage assets across different platforms, including peer-to-peer transactions and merchant payments, with imToken 2.0 International.

]]>
https://techcrunch.com/2018/05/31/ethereum-wallet-imtoken-raises-10m-series-a-from-idg-to-expand-in-the-u-s-asia-and-africa/feed/ 0 1648465
================================================ FILE: api/test/data/feed/tejiendoelmundo.wordpress.com ================================================ El pensante https://www.elpensante.com Tejiendo el mundo Sat, 30 Jun 2018 22:26:39 +0000 es-ES hourly 1 https://wordpress.org/?v=4.9.6 https://www.elpensante.com/wp-content/uploads/2018/06/elpensante.pngEl pensantehttps://www.elpensante.com 32 32 El noble Zopyrus, la treta de Darío y la caída de Babiloniahttps://www.elpensante.com/el-noble-zopyrus-la-treta-de-dario-y-la-caida-de-babilonia/ Sat, 30 Jun 2018 22:26:39 +0000 https://www.elpensante.com/?p=257498 Descubren una nueva especie en África: el Cocodrilo Naranja Cavernícolahttps://www.elpensante.com/descubren-una-nueva-especie-en-africa-el-cocodrilo-naranja-cavernicola/ Sat, 30 Jun 2018 22:20:57 +0000 https://www.elpensante.com/?p=257495 A la caza de los invasores: los iguaneros de Puerto Ricohttps://www.elpensante.com/a-la-caza-de-los-invasores-los-iguaneros-de-puerto-rico/ Sat, 30 Jun 2018 14:57:23 +0000 https://www.elpensante.com/?p=257492 Estudios genéticos revelan que algo extraño sucedió con los hombres hace 7.000 añoshttps://www.elpensante.com/estudios-geneticos-revelan-que-algo-extrano-sucedio-con-los-hombres-hace-7-000-anos/ Sat, 30 Jun 2018 14:41:15 +0000 https://www.elpensante.com/?p=257488 “Cruzada verde” en Pakistán busca sembrar más de mil millones de árboleshttps://www.elpensante.com/cruzada-verde-en-pakistan-busca-sembrar-mas-de-mil-millones-de-arboles/ Fri, 29 Jun 2018 23:11:11 +0000 https://www.elpensante.com/?p=257485 “Caja de ratas”: el extraño “deporte” de apuestas que se volvió muy popular en Inglaterra en el Siglo XIXhttps://www.elpensante.com/caja-de-ratas-el-extrano-deporte-de-apuestas-que-se-volvio-muy-popular-en-inglaterra-en-el-siglo-xix/ Fri, 29 Jun 2018 23:04:25 +0000 https://www.elpensante.com/?p=257482 La Guerra de la Triple Alianza, o de cómo Paraguay casi desaparece de la Historia, parte 2https://www.elpensante.com/la-guerra-de-la-triple-alianza-o-de-como-paraguay-casi-desaparece-de-la-historia-parte-2/ Fri, 29 Jun 2018 02:29:37 +0000 https://www.elpensante.com/?p=257477 Argelia apaga su internet para que estudiantes no hicieran trampa durante una pruebahttps://www.elpensante.com/argelia-apaga-su-internet-para-que-estudiantes-no-hicieran-trampa-durante-una-prueba/ Fri, 29 Jun 2018 01:59:43 +0000 https://www.elpensante.com/?p=257474 Multimillonario George Soros asegura que Europa debe invertir en África para salvar su futurohttps://www.elpensante.com/multimillonario-george-soros-asegura-que-europa-debe-invertir-en-africa-para-salvar-su-futuro/ Thu, 28 Jun 2018 02:51:22 +0000 https://www.elpensante.com/?p=257471 Mujeres guerreras en la Historia: las Amazonas de Dahomeyhttps://www.elpensante.com/mujeres-guerreras-en-la-historia-las-amazonas-de-dahomey/ Thu, 28 Jun 2018 02:39:36 +0000 https://www.elpensante.com/?p=257468 ================================================ FILE: api/test/data/feed/thewildeternal.com ================================================ The Wild Eternal Dev Blog https://www.thewildeternal.com/blog Wed, 31 May 2017 18:48:04 +0000 en-US hourly 1 https://wordpress.org/?v=4.7.10 Patch Notes for The Wild Eternal (version 1.1.1a) https://www.thewildeternal.com/blog/2017/05/31/wild-eternal-patch-notes-v-1-1-1a/ Wed, 31 May 2017 18:27:36 +0000 http://www.thewildeternal.com/blog/?p=1270 Hey! We just pushed out our first patch for The Wild Eternal! There are some treats for you to discover out in the foggy wilderness which may help clear up some things at the end of the game. In addition, we’ve made a large number of mostly minor bug fixes and adjustments to improve usability, and have worked … Continue reading Patch Notes for The Wild Eternal (version 1.1.1a)

The post Patch Notes for The Wild Eternal (version 1.1.1a) appeared first on The Wild Eternal Dev Blog.

]]>
Hey! We just pushed out our first patch for The Wild Eternal!

There are some treats for you to discover out in the foggy wilderness which may help clear up some things at the end of the game. In addition, we’ve made a large number of mostly minor bug fixes and adjustments to improve usability, and have worked to polish some aspects of gameplay, graphics, and the UI.

We want your experience in The Wild Eternal to be as good and polished as it possibly can be, so if you have any trouble at all with the game, please don’t hesitate to bring those issues to our attention!

Version 1.1.1a

Gameplay

  • Befriended rats now have a bit more to offer you.
  • Mysterious statues might be more helpful now, instead of just being creepy.
  • Pogostags are now considerably less demanding, and hopefully a bit more fun to be around.
  • A new type of strange stone statue can be found throughout the world. The big ones appear…hungry?

Graphics

  • Various polish and improvements to characters and lighting.
  • Fog effects have been polished and improved.

Stability

  • Adjustments were made to make for a more stable experience.

Interface

  • Added support for more unconventional resolutions.
  • Added ability to disable gamepad input via Options/Controls menu.

Cheers!

The post Patch Notes for The Wild Eternal (version 1.1.1a) appeared first on The Wild Eternal Dev Blog.

]]>
Post Launch Focus & Cool Fan Stuff https://www.thewildeternal.com/blog/2017/04/17/post-launch-focus-cool-fan-stuff/ Tue, 18 Apr 2017 00:17:48 +0000 http://www.thewildeternal.com/blog/?p=1259 Hey! So, the game’s out…now what? Welp, now we are focusing on the very uncomfortable task of self promotion and marketing! We aren’t great at this, so if you like the game, please help us get the word out in whatever corner of the web (or reality) that you call home. In addition, we’ve managed … Continue reading Post Launch Focus & Cool Fan Stuff

The post Post Launch Focus & Cool Fan Stuff appeared first on The Wild Eternal Dev Blog.

]]>
Hey! So, the game’s out…now what?

Welp, now we are focusing on the very uncomfortable task of self promotion and marketing! We aren’t great at this, so if you like the game, please help us get the word out in whatever corner of the web (or reality) that you call home. In addition, we’ve managed to get some great user reviews on Steam, but could always use more 😉

We’ve also been busy fixing bugs that have been reported in the support forum, and have made some small improvements to the play experience. So expect a small patch in the coming days.

Fan Art

Catching us completely off-guard this weekend, we received our first fan art. We love fan art, we desire more! Please send some in and we’ll post it on the blog!

The first item is a poem! A very kind gentleman named Carson Gardner wrote a wonderful poem about us and our game. Thank you Carson!


SOMEONE DID
by Carson Gardner

Why can’t some Dig. Dev. create
fun game software unique from the gate?
With cool moves and great karma,
where you don’t have to arm a
stone-cold killer to better your fate?

Why ain’t there some Steam release
trading boredom and terror for peace?
Freeing each Sam and Sara
in our ego-damned era
of gamepads from a sniper’s valise?

Why won’t some code engineer
find the guts to at last pioneer
wise/kind flora and fauna,
better press for nirvana?
Someone did—The Wild Eternal is here!


And then we have a super nice watercolor of The Lord of Dreams, by The Kubliest.
The Lord of Dreams, by The Kubliest


That’s all for the time being, but we’ll be sure to post some patch notes and other updates as they come 🙂

Cheers,
Casey

The post Post Launch Focus & Cool Fan Stuff appeared first on The Wild Eternal Dev Blog.

]]>
The Wild Eternal Is Now Available For Purchase! https://www.thewildeternal.com/blog/2017/04/13/wild-eternal-now-available-purchase/ Thu, 13 Apr 2017 16:09:53 +0000 http://www.thewildeternal.com/blog/?p=1253 Yahoo! We pushed a button and the game is now available for Windows PCs on Steam! There’s a launch discount of 25% which lasts through the weekend, so pick up your copy now for $14.99! In addition, we’ve released a launch trailer by the fabulous Derek Lieu, we hope you like it as much as we … Continue reading The Wild Eternal Is Now Available For Purchase!

The post The Wild Eternal Is Now Available For Purchase! appeared first on The Wild Eternal Dev Blog.

]]>
Yahoo! We pushed a button and the game is now available for Windows PCs on Steam! There’s a launch discount of 25% which lasts through the weekend, so pick up your copy now for $14.99!

In addition, we’ve released a launch trailer by the fabulous Derek Lieu, we hope you like it as much as we do 🙂

It’s been a long road up to this point, we hope folks enjoy wandering the foggy wilderness with Ananta and Dhyo.

Cheers <3

Casey & Scott

The post The Wild Eternal Is Now Available For Purchase! appeared first on The Wild Eternal Dev Blog.

]]>
What is The Wild Eternal? https://www.thewildeternal.com/blog/2017/04/10/what-is-the-wild-eternal/ Mon, 10 Apr 2017 17:56:35 +0000 http://www.thewildeternal.com/blog/?p=1234 The Wild Eternal is a story-driven, first-person exploration game with light platforming, maze-solving and progression elements. Players are challenged to find their way through the foggy wilderness, or get lost trying. It is the early 1600’s. You are an old woman named Ananta who has fled a life of suffering in search for lasting peace in the … Continue reading What is The Wild Eternal?

The post What is The Wild Eternal? appeared first on The Wild Eternal Dev Blog.

]]>
The Wild Eternal is a story-driven, first-person exploration game with light platforming, maze-solving and progression elements. Players are challenged to find their way through the foggy wilderness, or get lost trying.

It is the early 1600’s.

You are an old woman named Ananta who has fled a life of suffering in search for lasting peace in the Himalayan wild. After a traumatic life, you long to escape the cycle of reincarnation so that you may finally rest.

Your defiance of reincarnation has landed you in a lush, deserted wilderness covered in fog. A fox-shaped demigod agrees to help you escape your fate, but only if you’ll help him in return.

To escape the cycle of reincarnation, the fox asks you to collect crystalline keys from each of the landmarks that poke up above the fog. These keys unlock sealed doors to other forests where you’ll (supposedly) find what you’re looking for.

Beneath the fog, the wilderness is an overgrown labyrinth. Every forked path is a challenge to remember where you’ve been and where you’re going. Obstacles and critters will often block your way, forcing you to confront them or choose another path.

Additionally, the forests are also filled with content designed to distract you and get you lost. Ancient artifacts and hidden shrines have a particularly alluring pull.

Offering these artifacts as tribute will bestow you with a powerful blessing. Each shrine will reveal one or two unique blessings, and each blessing is transformative in its own right. For instance, a frail old woman is no mountaineer, right?

Wrong! With the “Descender” blessing, you can slide safely down even the steepest of cliffs. There are over 20 unique blessings to discover, as well as a bunch of critters to meet, tools to augment, an intricate story to unravel, a relaxing soundtrack to carry you through colorful atmospheric landscapes, and much more!

You can buy The Wild Eternal on Steam for $14.99 with the 25% early-adopter discount on April 13th. Happy hiking and we’ll see you on the trails!

The post What is The Wild Eternal? appeared first on The Wild Eternal Dev Blog.

]]>
Save the Date https://www.thewildeternal.com/blog/2017/03/22/save-the-date/ Thu, 23 Mar 2017 01:27:30 +0000 http://www.thewildeternal.com/blog/?p=1207 We have a release date! It’s true! I’m not stressed out by that AT ALL. JK I am stressed, but I’m also relieved, and proud! The Wild Eternal arrives on Windows PC (via Steam and Humble Store) on April 13, 2017. That’s like,  soon! For those of you in the back, I repeat, louder: The … Continue reading Save the Date

The post Save the Date appeared first on The Wild Eternal Dev Blog.

]]>
We have a release date!

It’s true! I’m not stressed out by that AT ALL. JK I am stressed, but I’m also relieved, and proud!

The Wild Eternal arrives on Windows PC (via Steam and Humble Store) on April 13, 2017. That’s like,  soon! For those of you in the back, I repeat, louder:

The Wild Eternal
April 13, 2017 on Windows PC

Along with the release date announcement, we are sharing an environmental teaser from the first level. It’s always been very important to us that each level has a unique emotional tone and theme, which we primarily convey through the use of color, environmental design, and audio design. The first level’s theme is Mystery, let us know if you think the teaser hits the mark!

Pre-Orders

The game is now available for pre-order on the website for a discounted $14.99, this discount will last only through launch weekend as a thanks to our supporters.

If you aren’t fully committed yet, you can always wishlist the game on steam and decide later!

Cheers,

Casey

The post Save the Date appeared first on The Wild Eternal Dev Blog.

]]>
Devlog: Better Color Lerping in Shaders https://www.thewildeternal.com/blog/2016/11/04/devlog-better-color-lerping-shaders/ Fri, 04 Nov 2016 17:39:42 +0000 http://www.thewildeternal.com/blog/?p=1049 After reading a few articles about color interpolation, I whipped up a  quick CG solution for lerping colors through the HSV color model. You can read about this in this excellent series by Alan Zucconi. Happy shadering! The Secrets of Colour Interpolation Code Snippet float3 HueToRGB(float hue) { float h = hue * 6; return … Continue reading Devlog: Better Color Lerping in Shaders

The post Devlog: Better Color Lerping in Shaders appeared first on The Wild Eternal Dev Blog.

]]>
After reading a few articles about color interpolation, I whipped up a  quick CG solution for lerping colors through the HSV color model.

You can read about this in this excellent series by Alan Zucconi. Happy shadering!

The Secrets of Colour Interpolation

Code Snippet

float3 HueToRGB(float hue)
{
 float h = hue * 6;

 return saturate(float3(abs(h - 3) - 1, 2 - abs(h - 2), 2 - abs(h - 4)));
}

float3 HSVToRGB(float3 hsv)
{
 float3 rgb = HueToRGB(hsv.x);
 float3 vc = ((rgb - 1) * hsv.y + 1) * hsv.z;

 return vc;
}

float3 RGBToHCV(float3 rgb)
{
 float4 p = (rgb.g &lt; rgb.b) ? float4(rgb.b, rgb.g, -1, 2f / 3f) : float4(rgb.g, rgb.b, 0, -1f / 3f);
 float4 q = (rgb.r &lt; p.x) ? float4(p.x, p.y, p.w, rgb.r) : float4(rgb.r, p.y, p.z, p.x);
 float c = q.x - min(q.w, q.y);
 float h = abs((q.w - q.y) / (6 * c + 1.0e-10f) + q.z);

 return float3(h, c, q.x);
}

float3 RGBToHSV(float3 rgb)
{
 float3 hcv = RGBToHCV(rgb);
 float s = hcv.y / (hcv.z + 1.0e-10f);

 return float3(hcv.x, s, hcv.z);
}

float3 LerpThroughHSV(float3 rgb1, float3 rgb2, float t)
{
 float3 hsv1 = RGBToHSV(rgb1);
 float3 hsv2 = RGBToHSV(rgb2);

 float3 hsv = lerp(hsv1, hsv2, t);

 return HSVToRGB(hsv);
}

The post Devlog: Better Color Lerping in Shaders appeared first on The Wild Eternal Dev Blog.

]]>
Status Update: We are Alive! https://www.thewildeternal.com/blog/2016/09/01/status-update-september/ Thu, 01 Sep 2016 20:18:33 +0000 http://www.thewildeternal.com/blog/?p=1012 Hey there! Yow! It’s been a while huh? The blog’s grown a bit dormant, but we’ve been pretty active on twitter sharing little updates and gameplay videos etc! Hopefully if you are interested in the game you’ve been seeing our progress posted at @TheWildEternal. Soooo, what’s new? Website Update You may have noticed we have a new website, sans … Continue reading Status Update: We are Alive!

The post Status Update: We are Alive! appeared first on The Wild Eternal Dev Blog.

]]>
Hey there!

Yow!

It’s been a while huh? The blog’s grown a bit dormant, but we’ve been pretty active on twitter sharing little updates and gameplay videos etc! Hopefully if you are interested in the game you’ve been seeing our progress posted at @TheWildEternal.

Soooo, what’s new?

The Wild Eternal
This isn’t really new, but look at that cute little rat in front of the waystone!

Website Update

You may have noticed we have a new website, sans trailer (Casey made the website, is still working on the trailer, is currently writing this blog post). We feel pretty okay about it.

Bit Bash

We showed the game at Bit Bash in Chicago a couple of weeks ago, which was fantastic and lovely! We got to watch a bunch of people play The Wild Eternal in an environment that isn’t super conducive to our type of game. Festivals tend to be high energy, and high energy party/multiplayer games tend to be the best fit for that environment.

We actually went into Bit Bash fully aware of this. Scott threw together a festival-focused demo which we hoped would get players quickly into a few different areas with some blessings and a goal. It was okay. We were able to get players into the game relatively quickly but they didn’t necessarily have enough context to really understand their motivations or care about what they were doing. Folks still seemed to enjoy it though, so it was all good. We also played some great games and met some fantastic people while we were there! If you are in the Chicago area, I recommend going to any future Bashes they put on.

Recent Press

That’s all for now, we’re going to talk about the game on the blog again very soon, so please stick around for more updates. Also, please feel free to talk about the game while out in the world with your friends! We need some help with word of mouth, pretty please 😀

Cheers,

Casey

The post Status Update: We are Alive! appeared first on The Wild Eternal Dev Blog.

]]>
Devlog: Reorder Unity Components Automatically https://www.thewildeternal.com/blog/2015/08/31/devlog-force-component-order/ https://www.thewildeternal.com/blog/2015/08/31/devlog-force-component-order/#comments Mon, 31 Aug 2015 21:00:15 +0000 http://www.thewildeternal.com/?p=981 Here’s a little editor script that reorders components on GameObjects to be in a fixed order (scripts use alphabetical base class before MonoBehaviour). I have only tested this on Unity 4.6.  If you are running another version, please verify that the script works in the comment section. Note that I have opted to skip all camera-bearing … Continue reading Devlog: Reorder Unity Components Automatically

The post Devlog: Reorder Unity Components Automatically appeared first on The Wild Eternal Dev Blog.

]]>
Here’s a little editor script that reorders components on GameObjects to be in a fixed order (scripts use alphabetical base class before MonoBehaviour).

I have only tested this on Unity 4.6.  If you are running another version, please verify that the script works in the comment section.

Note that I have opted to skip all camera-bearing GameObjects as they can posses MonoBehaviours that call OnRenderImage, which is an order-dependent method.

Performance

To minimize any performance costs of polling, I decided that reordering need only take place when a new GameObject is selected. Adding new components, removing components, or moving components, will not immediately be reordered; you’ll have to change selection targets.

Support

Not all component types are supported by default, as there are simply too many across the various versions of Unity, not to mention any that you might have created yourself. But unknown types will elicit a Debug Warning to remind you to add them in.

Order

Order is handled by specifying the priority (integer) value for each component type. Ties are then handled alphabetically according to the type name. Here’s what the order method looks like. You’ll want to add support for your own (Component) types here:

  private static int? GetOrder(Component component)
 {
 // physics
 if (component is Collider) return 100;
 if (component is Rigidbody) return 101;
 if (component is Joint) return 102;

 // renderers
 if (component is MeshFilter) return 200;
 if (component is Projector) return 201;
 if (component is Renderer) return 202;
 if (component is Animation) return 203;

 // lights
 if (component is Light) return 300;

 // nav mesh
 if (component is NavMeshAgent) return 400;
 if (component is NavMeshObstacle) return 401;

 // particles
 if (component is ParticleSystem) return 500;

 // environment
 if (component is Tree) return 600;

 // scripts
 if (component is MonoBehaviour)
 {
 int order = 1000;

 // custom script ordering goes here
 // if (component is SpeciallyOrderedMonoBehaviourSubclass) order += 1;

 return order;
 }

 // warning
 Debug.LogWarning("Force Component Order: " + component.GetType().Name + " component is not supported.");
 return null;
 }

Downloads

Update!

The above code works, but for complex scenes will cause the editor to hitch when selecting or de-selecting prefab instances that have colliders and several copies in the scene. I’ve made some minor changes to the script that push it into the Transform component’s context menu rather than executing all the time. You can find my updated source here: http://pastebin.com/37fDAnh4

The post Devlog: Reorder Unity Components Automatically appeared first on The Wild Eternal Dev Blog.

]]>
https://www.thewildeternal.com/blog/2015/08/31/devlog-force-component-order/feed/ 1
Devlog: Immutable Inspector Fields https://www.thewildeternal.com/blog/2014/10/16/devlog-immutable-inspector-fields/ https://www.thewildeternal.com/blog/2014/10/16/devlog-immutable-inspector-fields/#comments Thu, 16 Oct 2014 21:59:21 +0000 http://www.thewildeternal.com/?p=643 Inspired by a question posted on Reddit (Read Only Parameter with SerializeField), I realized that I don’t have a way of communicating to other developers on my team which fields are not designed to be modified while playing in the editor! So I decided to solve this problem by adding a new attribute [Immutable] which disables … Continue reading Devlog: Immutable Inspector Fields

The post Devlog: Immutable Inspector Fields appeared first on The Wild Eternal Dev Blog.

]]>
Inspired by a question posted on Reddit (Read Only Parameter with SerializeField), I realized that I don’t have a way of communicating to other developers on my team which fields are not designed to be modified while playing in the editor! So I decided to solve this problem by adding a new attribute [Immutable] which disables fields in the inspector.

The attribute has two usage patterns: [Immutable], which causes the field to become greyed-out (disabled) when the editor is running, and [Immutable(false)], which causes the field to be greyed-out always (the optional parameter is called isEditable). The attribute is very simple, but useful. Use it well! You might also find this a nice way to learn the syntax for writing your own attributes and property drawers if you haven’t explored that yet.

Example

[SerializeField] [Immutable] private int _inventorySize = 10;
[SerializeField] [Immutable(false)] private int _inventorySearchCount = 3;

This first example is indicative of a system which initializes the inventory system when Awake is called (instantiating enough slots, etc). We don’t want anyone changing this at runtime from inside the editor.

The second is something I wanted to be able to do to protect myself from forgetting how something works without exposing the system to additional dangers. Imagine a search feature that looks through the inventory in some potentially CPU-heavy way. I want to limit how many times this code executes before giving up, but I don’t want to hard-code the number and forget it exists, or have to open the code to find out. Still, I don’t want anyone to change it without know exactly what they’re doing. This forces future-me to go into the code to change the value, but I won’t forget it exists.

Application is not playing.
Application is not playing.
Application is playing.
Application is playing.

Downloads

The post Devlog: Immutable Inspector Fields appeared first on The Wild Eternal Dev Blog.

]]>
https://www.thewildeternal.com/blog/2014/10/16/devlog-immutable-inspector-fields/feed/ 7
Devlog: Borderless Windowed Mode https://www.thewildeternal.com/blog/2014/09/21/devlog-resolution-controller/ https://www.thewildeternal.com/blog/2014/09/21/devlog-resolution-controller/#comments Mon, 22 Sep 2014 05:37:46 +0000 http://www.thewildeternal.com/?p=616 Sometime last week I took on the task of figuring out how to get the Unity3D Windows Standalone Player to play The Wild Eternal in a fullscreen borderless window. The only solution I could find was one that required adding a command line argument to the executable. Not exactly user-friendly… Below is my solution to this … Continue reading Devlog: Borderless Windowed Mode

The post Devlog: Borderless Windowed Mode appeared first on The Wild Eternal Dev Blog.

]]>
Sometime last week I took on the task of figuring out how to get the Unity3D Windows Standalone Player to play The Wild Eternal in a fullscreen borderless window. The only solution I could find was one that required adding a command line argument to the executable. Not exactly user-friendly…

Below is my solution to this problem, which began as a simple fullscreen borderless window toggle but became a general purpose resolution controller. The system remains fairly simple, but it can toggle display modes, resolutions and control the position of the window carefully (even when borderless). It will also guess at the best display settings for a user, and save most of their settings (though you will likely wish to integrate into your own save system).

Resolution Controller Demo
The test build. I expect others will use their own GUI, but this example provides a useful reference for interfacing with the ResolutionController.

How It Works

I found that I needed to use the windows API (user32.dll) to do this, and unfortunately ran into a few problems. I resolved them, but the resolution required deviating from some statements in the windows API’s documentation (scary!)! Thanks to a handful of volunteers, I have tested this algorithm on ~30 unique Windows machines spanning 32-bit and 64-bit Windows 7, and Windows 8. Of the 30-some tests, 100% had identical results. Comforting. The details of what is scary is outlined very carefully in the code in the WindowsHandler.TrySetDisplay method.

Requirements

This is repeated at the header of the ResolutionController.cs script in the shared code, so don’t feel a need to commit it to memory immediately.

For exclusive fullscreen mode, DirectX 9 games must put their Project’s D3D9 Fullscreen Mode in ExclusiveMode, not FullscreenWindow. DirectX 11 games cannot access exclusive fullscreen mode at all due to how it is implemented in Unity. This is likely not a problem as exclusive mode is only necessary for small GPU-related performance considerations, which most DirectX 11 games probably view as negligible. For those who don’t know, as I didn’t, exclusive mode is a mode where the rest of the windows explorer is not rendered (on that display), which can reduce GPU and CPU loads.

I am more than happy to answer any questions in the comments section below. Please let me know of any unexpected behavior or bugs.

Downloads

The post Devlog: Borderless Windowed Mode appeared first on The Wild Eternal Dev Blog.

]]>
https://www.thewildeternal.com/blog/2014/09/21/devlog-resolution-controller/feed/ 10
================================================ FILE: api/test/data/feed/tmz ================================================ TMZ.com http://www.tmz.com Celebrity Gossip and Entertainment News, Covering Celebrity News and Hollywood Rumors. Get All The Latest Gossip at TMZ - Thirty Mile Zone. TMZ.com 144 40 http://www.tmz.com https://assets.tmz.com/www.tmz.com/main/default/cache/images/feedlogo2.v2014_05_09_134122.gif en-us Copyright 2018 TMZ. The contents of this headlines and excerpts feed are available for limited commercial distribution. You may repost this feed to your site provided you link back to the original story, do not edit the material and do not remove this copyright notice. Crowd Fusion http://www.crowdfusion.com/ Kate Spade Depressed Before Suicide Because Husband Wanted a Divorce http://www.tmz.com/2018/06/06/kate-spade-suicide-husband-andy-divorce-depressed/ http://www.tmz.com/2018/06/06/kate-spade-suicide-husband-andy-divorce-depressed/ http://m.tmz.com/site?sid=tmz&pid=Headline.Detail&guid=http://www.tmz.com/2018/06/06/kate-spade-suicide-husband-andy-divorce-depressed/ http://www.tmz.com/2018/06/06/kate-spade-suicide-husband-andy-divorce-depressed/#comments

]]>
TMZ Staff 2018-06-06T01:00:00-07:00
Last 'Wizard of Oz' Munchkin: Jerry Maren Dead at 98 http://www.tmz.com/2018/06/06/last-wizard-of-oz-munchkin-jerry-maren-dead/ http://www.tmz.com/2018/06/06/last-wizard-of-oz-munchkin-jerry-maren-dead/ http://m.tmz.com/site?sid=tmz&pid=Headline.Detail&guid=http://www.tmz.com/2018/06/06/last-wizard-of-oz-munchkin-jerry-maren-dead/ http://www.tmz.com/2018/06/06/last-wizard-of-oz-munchkin-jerry-maren-dead/#comments

]]>
TMZ Staff 2018-06-06T00:50:00-07:00
Kareem Hunt In Alleged Physical Altercation at Ohio Resort http://www.tmz.com/2018/06/06/kareem-hunt-in-alleged-physical-altercation-at-ohio-resort/ http://www.tmz.com/2018/06/06/kareem-hunt-in-alleged-physical-altercation-at-ohio-resort/ http://m.tmz.com/site?sid=tmz&pid=Headline.Detail&guid=http://www.tmz.com/2018/06/06/kareem-hunt-in-alleged-physical-altercation-at-ohio-resort/ http://www.tmz.com/2018/06/06/kareem-hunt-in-alleged-physical-altercation-at-ohio-resort/#comments

]]>
TMZ Staff 2018-06-06T00:45:00-07:00
Whitney Houston's Bible Is For Sale For $95k http://www.tmz.com/2018/06/06/whitney-houston-bible-for-sale-95k/ http://www.tmz.com/2018/06/06/whitney-houston-bible-for-sale-95k/ http://m.tmz.com/site?sid=tmz&pid=Headline.Detail&guid=http://www.tmz.com/2018/06/06/whitney-houston-bible-for-sale-95k/ http://www.tmz.com/2018/06/06/whitney-houston-bible-for-sale-95k/#comments

]]>
TMZ Staff 2018-06-06T00:40:00-07:00
Lil Scrappy Avoids Criminal Charges Over Car Crash Case http://www.tmz.com/2018/06/06/lil-scrappy-avoids-criminal-charges-car-crash-miami/ http://www.tmz.com/2018/06/06/lil-scrappy-avoids-criminal-charges-car-crash-miami/ http://m.tmz.com/site?sid=tmz&pid=Headline.Detail&guid=http://www.tmz.com/2018/06/06/lil-scrappy-avoids-criminal-charges-car-crash-miami/ http://www.tmz.com/2018/06/06/lil-scrappy-avoids-criminal-charges-car-crash-miami/#comments

]]>
TMZ Staff 2018-06-06T00:30:00-07:00
Guess Who This Funny Kid Turned Into! http://www.tmz.com/2018/06/06/guess-who-this-funny-kid-turned-into/ http://www.tmz.com/2018/06/06/guess-who-this-funny-kid-turned-into/ http://m.tmz.com/site?sid=tmz&pid=Headline.Detail&guid=http://www.tmz.com/2018/06/06/guess-who-this-funny-kid-turned-into/ http://www.tmz.com/2018/06/06/guess-who-this-funny-kid-turned-into/#comments

]]>
TMZ Staff 2018-06-06T00:01:00-07:00
Robert F. Kennedy's Daughter Offers Kim Kardashian Political Advice http://www.tmz.com/2018/06/05/robert-f-kennedy-daughter-kerry-kennedy-kardashians-politics-advice/ http://www.tmz.com/2018/06/05/robert-f-kennedy-daughter-kerry-kennedy-kardashians-politics-advice/ http://m.tmz.com/site?sid=tmz&pid=Headline.Detail&guid=http://www.tmz.com/2018/06/05/robert-f-kennedy-daughter-kerry-kennedy-kardashians-politics-advice/ http://www.tmz.com/2018/06/05/robert-f-kennedy-daughter-kerry-kennedy-kardashians-politics-advice/#comments

]]>
TMZ Staff 2018-06-05T17:32:00-07:00
Designer Kate Spade's Suicide Note Tells Daughter, 'Ask Daddy, I Love You' http://www.tmz.com/2018/06/05/kate-spade-suicide-note-daughter-ask-daddy/ http://www.tmz.com/2018/06/05/kate-spade-suicide-note-daughter-ask-daddy/ http://m.tmz.com/site?sid=tmz&pid=Headline.Detail&guid=http://www.tmz.com/2018/06/05/kate-spade-suicide-note-daughter-ask-daddy/ http://www.tmz.com/2018/06/05/kate-spade-suicide-note-daughter-ask-daddy/#comments

]]>
TMZ Staff 2018-06-05T15:47:00-07:00
Gilbert Arenas on Restraining Order, 'My D*ck Is Like Crack' http://www.tmz.com/2018/06/05/gilbert-arenas-restraining-order-d-ck-is-like-crack/ http://www.tmz.com/2018/06/05/gilbert-arenas-restraining-order-d-ck-is-like-crack/ http://m.tmz.com/site?sid=tmz&pid=Headline.Detail&guid=http://www.tmz.com/2018/06/05/gilbert-arenas-restraining-order-d-ck-is-like-crack/ http://www.tmz.com/2018/06/05/gilbert-arenas-restraining-order-d-ck-is-like-crack/#comments

]]>
TMZ Staff 2018-06-05T15:12:00-07:00
David Spade Looking Sad in L.A. Shortly After Kate Spade Suicide News http://www.tmz.com/2018/06/05/david-spade-sad-kate-suicide-sister-in-law/ http://www.tmz.com/2018/06/05/david-spade-sad-kate-suicide-sister-in-law/ http://m.tmz.com/site?sid=tmz&pid=Headline.Detail&guid=http://www.tmz.com/2018/06/05/david-spade-sad-kate-suicide-sister-in-law/ http://www.tmz.com/2018/06/05/david-spade-sad-kate-suicide-sister-in-law/#comments

]]>
TMZ Staff 2018-06-05T15:07:00-07:00
Rick Ross Hits the Boxing Gym with Adrien Broner, Check Out These Hands! http://www.tmz.com/2018/06/05/rick-ross-adrien-broner-boxing/ http://www.tmz.com/2018/06/05/rick-ross-adrien-broner-boxing/ http://m.tmz.com/site?sid=tmz&pid=Headline.Detail&guid=http://www.tmz.com/2018/06/05/rick-ross-adrien-broner-boxing/ http://www.tmz.com/2018/06/05/rick-ross-adrien-broner-boxing/#comments

]]>
TMZ Staff 2018-06-05T14:53:00-07:00
Oprah Flips Out Over Getting Her Own Exhibit at the Smithsonian http://www.tmz.com/2018/06/05/oprah-winfrey-smithsonian-museum-of-african-american-history-culture-exhibit/ http://www.tmz.com/2018/06/05/oprah-winfrey-smithsonian-museum-of-african-american-history-culture-exhibit/ http://m.tmz.com/site?sid=tmz&pid=Headline.Detail&guid=http://www.tmz.com/2018/06/05/oprah-winfrey-smithsonian-museum-of-african-american-history-culture-exhibit/ http://www.tmz.com/2018/06/05/oprah-winfrey-smithsonian-museum-of-african-american-history-culture-exhibit/#comments

]]>
TMZ Staff 2018-06-05T14:50:00-07:00
Miss America Cara Mund Approves of Scrapping Swimsuit Competition http://www.tmz.com/2018/06/05/miss-america-cara-mund-no-more-swimsuit-competition/ http://www.tmz.com/2018/06/05/miss-america-cara-mund-no-more-swimsuit-competition/ http://m.tmz.com/site?sid=tmz&pid=Headline.Detail&guid=http://www.tmz.com/2018/06/05/miss-america-cara-mund-no-more-swimsuit-competition/ http://www.tmz.com/2018/06/05/miss-america-cara-mund-no-more-swimsuit-competition/#comments

]]>
TMZ Staff 2018-06-05T14:44:00-07:00
NFL's Chris McCain Charged with Battering Woman http://www.tmz.com/2018/06/05/nfl-chris-mccain-charged-battery-woman-colts/ http://www.tmz.com/2018/06/05/nfl-chris-mccain-charged-battery-woman-colts/ http://m.tmz.com/site?sid=tmz&pid=Headline.Detail&guid=http://www.tmz.com/2018/06/05/nfl-chris-mccain-charged-battery-woman-colts/ http://www.tmz.com/2018/06/05/nfl-chris-mccain-charged-battery-woman-colts/#comments

]]>
TMZ Staff 2018-06-05T14:32:00-07:00
Songwriter Diane Warren Sued for $20 Mil, Allegedly Stole Chicago's 'Look Away' http://www.tmz.com/2018/06/05/diane-warren-lawsuit-look-away-chicago-stealing-song/ http://www.tmz.com/2018/06/05/diane-warren-lawsuit-look-away-chicago-stealing-song/ http://m.tmz.com/site?sid=tmz&pid=Headline.Detail&guid=http://www.tmz.com/2018/06/05/diane-warren-lawsuit-look-away-chicago-stealing-song/ http://www.tmz.com/2018/06/05/diane-warren-lawsuit-look-away-chicago-stealing-song/#comments

]]>
TMZ Staff 2018-06-05T13:45:00-07:00
Kendall Jenner Kissing Gigi and Bella Hadid's Brother, Anwar http://www.tmz.com/2018/06/05/kendall-jenner-kissing-gigi-bella-hadid-brother-anwar-cfda-awards-party/ http://www.tmz.com/2018/06/05/kendall-jenner-kissing-gigi-bella-hadid-brother-anwar-cfda-awards-party/ http://m.tmz.com/site?sid=tmz&pid=Headline.Detail&guid=http://www.tmz.com/2018/06/05/kendall-jenner-kissing-gigi-bella-hadid-brother-anwar-cfda-awards-party/ http://www.tmz.com/2018/06/05/kendall-jenner-kissing-gigi-bella-hadid-brother-anwar-cfda-awards-party/#comments

]]>
TMZ Staff 2018-06-05T13:08:00-07:00
Donald Trump's 'Screw the Eagles' White House Party http://www.tmz.com/2018/06/05/donald-trump-eagles-white-house-celebration/ http://www.tmz.com/2018/06/05/donald-trump-eagles-white-house-celebration/ http://m.tmz.com/site?sid=tmz&pid=Headline.Detail&guid=http://www.tmz.com/2018/06/05/donald-trump-eagles-white-house-celebration/ http://www.tmz.com/2018/06/05/donald-trump-eagles-white-house-celebration/#comments

]]>
TMZ Staff 2018-06-05T12:54:00-07:00
Fashion Designer Kate Spade Dead at 55, Suicide by Hanging, Coroner Removes Body http://www.tmz.com/2018/06/05/kate-spade-dead-dies/ http://www.tmz.com/2018/06/05/kate-spade-dead-dies/ http://m.tmz.com/site?sid=tmz&pid=Headline.Detail&guid=http://www.tmz.com/2018/06/05/kate-spade-dead-dies/ http://www.tmz.com/2018/06/05/kate-spade-dead-dies/#comments

]]>
TMZ Staff 2018-06-05T11:47:00-07:00
Owner of Dead Dog Claims Delta Air Lines Acted 'Suspicious' http://www.tmz.com/2018/06/05/delta-air-lines-dead-dog-suspicious-bloody-blanket-necropsy-report/ http://www.tmz.com/2018/06/05/delta-air-lines-dead-dog-suspicious-bloody-blanket-necropsy-report/ http://m.tmz.com/site?sid=tmz&pid=Headline.Detail&guid=http://www.tmz.com/2018/06/05/delta-air-lines-dead-dog-suspicious-bloody-blanket-necropsy-report/ http://www.tmz.com/2018/06/05/delta-air-lines-dead-dog-suspicious-bloody-blanket-necropsy-report/#comments

]]>
TMZ Staff 2018-06-05T11:15:00-07:00
Tyrese Sued by Amex for $61,071.35 http://www.tmz.com/2018/06/05/tyrese-sued-american-express/ http://www.tmz.com/2018/06/05/tyrese-sued-american-express/ http://m.tmz.com/site?sid=tmz&pid=Headline.Detail&guid=http://www.tmz.com/2018/06/05/tyrese-sued-american-express/ http://www.tmz.com/2018/06/05/tyrese-sued-american-express/#comments

]]>
TMZ Staff 2018-06-05T10:58:00-07:00
================================================ FILE: api/test/data/feed/torrentedigital.com ================================================ Torrente Digital https://torrentedigital.com Los Mejores Reviews de Tecnología y Productos de China Mon, 02 Apr 2018 15:31:24 +0000 es-ES hourly 1 https://wordpress.org/?v=4.9.6 106188074 DJI Mavic Air Introducción al Dron Más Reciente de DJI https://torrentedigital.com/dji-mavic-air-introduccion-al-dron-mas-reciente-de-dji/ https://torrentedigital.com/dji-mavic-air-introduccion-al-dron-mas-reciente-de-dji/#comments Mon, 02 Apr 2018 15:31:24 +0000 https://torrentedigital.com/?p=2942 Lo Más Reciente de DJI Como ya saben el DJI Mavic Air es el dron más reciente del DJI y es una especia de modelo hibrido transitivo, si es que el puedo decir así, entre el DJI Spark y el DJI Mavic Pro, aunque para decir verdad es aspectos es mejor el Mavic Pro, pero …

La entrada DJI Mavic Air Introducción al Dron Más Reciente de DJI aparece primero en Torrente Digital.

]]>
https://torrentedigital.com/dji-mavic-air-introduccion-al-dron-mas-reciente-de-dji/feed/ 2 2942
DJI Tello Todo lo Que Necesitan Saber https://torrentedigital.com/dji-tello-lo-necesitan-saber/ https://torrentedigital.com/dji-tello-lo-necesitan-saber/#comments Thu, 11 Jan 2018 09:40:44 +0000 https://torrentedigital.com/?p=2922 DJI ha anunciado su mini dron más reciente el pequeño DJI Tello. Es importante mencionar que, a pesar de que DJI ha anunciado este dron bajo su marca, el DJI Tello es más bien el producto de una compañía llamada Ryze Tech, o Ryze Robotics la cual está basada en Shenzhen, China. Ryze ha utilizado …

La entrada DJI Tello Todo lo Que Necesitan Saber aparece primero en Torrente Digital.

]]>
https://torrentedigital.com/dji-tello-lo-necesitan-saber/feed/ 5 2922
Ganador del Gran Sorteo de Torrente Digital https://torrentedigital.com/ganador-del-gran-sorteo-torrente-digital/ https://torrentedigital.com/ganador-del-gran-sorteo-torrente-digital/#comments Tue, 26 Dec 2017 15:38:38 +0000 https://torrentedigital.com/?p=2915 Finalmente hemos seleccionado al ganador del gran sorteo de Torrente Digital, cuyo premio es un dron Xiaomi Mi versión 1080p. Este dron los hemos analizado en Torrente Digital con anterioridad y es uno de los mejores disponibles en el mercado en este rango de precio. Durante el curso de este sorteo fuimos testigos de la …

La entrada Ganador del Gran Sorteo de Torrente Digital aparece primero en Torrente Digital.

]]>
https://torrentedigital.com/ganador-del-gran-sorteo-torrente-digital/feed/ 5 2915
Gran Sorteo de Torrente Digital https://torrentedigital.com/gran-sorteo-de-torrente-digital/ https://torrentedigital.com/gran-sorteo-de-torrente-digital/#comments Fri, 24 Nov 2017 09:42:32 +0000 https://torrentedigital.com/?p=2563 Finalmente, lo que muchos de ustedes esperaban ha llegado. Se trata del gran sorteo de Torrente Digital; con el objetivo de premiar el gran soporte que hemos recibido por parte de una audiencia muy variada. Debido a que los seguidores de Torrente Digital son muchos, haremos más sorteos una vez que este concluya: el dron …

La entrada Gran Sorteo de Torrente Digital aparece primero en Torrente Digital.

]]>
https://torrentedigital.com/gran-sorteo-de-torrente-digital/feed/ 19 2563
Nuevo Dron Wingsland M5 https://torrentedigital.com/nuevo-dron-wingsland-m5/ https://torrentedigital.com/nuevo-dron-wingsland-m5/#comments Mon, 20 Nov 2017 10:13:23 +0000 https://torrentedigital.com/?p=2883 Wingsland ha finalmente ha sacado al mercado el M5, el cual llevaba mucho tiempo en fase de prototipo justo como el Wingsland K3 que posiblemente nunca vea la luz del día. El Wingsland M5 fue anunciado hace mucho tiempo ya, pero su entrada al mercado se retrasó mucho. Este sería el tercer dron que Wingsland …

La entrada Nuevo Dron Wingsland M5 aparece primero en Torrente Digital.

]]>
https://torrentedigital.com/nuevo-dron-wingsland-m5/feed/ 3 2883
Nuevas Gafas FPV Eachine EV200D https://torrentedigital.com/nuevas-gafas-fpv-eachine-ev200d/ https://torrentedigital.com/nuevas-gafas-fpv-eachine-ev200d/#respond Wed, 01 Nov 2017 15:46:42 +0000 https://torrentedigital.com/?p=2869 Eachine, ha sorprendido a la comunidad de aficionados a la tecnología de control remoto y a los pilotos de drones FPV anunciado sus nuevas gafas Eachine EV200D apenas meses después de haber sacado al mercado las Eachine EV100 las cuales se vendieron muy rápidamente. Esta decisión ha sido recibida con una mixtura de júbilo y …

La entrada Nuevas Gafas FPV Eachine EV200D aparece primero en Torrente Digital.

]]>
https://torrentedigital.com/nuevas-gafas-fpv-eachine-ev200d/feed/ 0 2869
Entrega de Burritos a Domicilio con Drones https://torrentedigital.com/entrega-burritos-domicilio-drones/ https://torrentedigital.com/entrega-burritos-domicilio-drones/#respond Wed, 18 Oct 2017 15:37:06 +0000 https://torrentedigital.com/?p=2856 Hoy en día a nadie se le hace raro que los drones se utilicen para misiones de vigilancia y ya sea con objetivos militares o simplemente para evaluar aéreas afectadas por desastres naturales. En realidad, los usos son muchos, así todo, uno de los que más ha llamado la atención es la entrega de paquetes …

La entrada Entrega de Burritos a Domicilio con Drones aparece primero en Torrente Digital.

]]>
https://torrentedigital.com/entrega-burritos-domicilio-drones/feed/ 0 2856
Los Drones de PowerVision https://torrentedigital.com/los-drones-powervision/ https://torrentedigital.com/los-drones-powervision/#respond Tue, 17 Oct 2017 11:34:38 +0000 https://torrentedigital.com/?p=2833 Es posible que no muchas personas conozcan la compañía PowerVision debido a que esta compañía es relativamente nueva. PowerVision comenzó a operar oficialmente en el 2015 y esta se dedica al diseño y fabricación de sistemas de control remoto robóticos no tripulados, tales como drones o vehículos subacuáticos, destinados a misiones de reconocimiento aéreo. Entre …

La entrada Los Drones de PowerVision aparece primero en Torrente Digital.

]]>
https://torrentedigital.com/los-drones-powervision/feed/ 0 2833
LeTV Leeco Le Pro3 Elite https://torrentedigital.com/letv-leeco-le-pro3-elite/ https://torrentedigital.com/letv-leeco-le-pro3-elite/#comments Sun, 01 Oct 2017 13:58:39 +0000 https://torrentedigital.com/?p=2811 Posiblemente muchos de ustedes no estén familiarizados con la compañías LeTV , pero en realidad es una compañía de tecnología gitanesca la cual mantiene negocios en electrónica de consumo, automóviles, cine y otras tecnologías. Es decir, el sector de los móviles es uno de si muchos renglones de inversión. Los móviles que esta compañía produce …

La entrada LeTV Leeco Le Pro3 Elite aparece primero en Torrente Digital.

]]>
https://torrentedigital.com/letv-leeco-le-pro3-elite/feed/ 2 2811
La Armada Secreta de 1000 Drones de Kim Jong-un https://torrentedigital.com/la-armada-secreta-1000-drones-kim-jong/ https://torrentedigital.com/la-armada-secreta-1000-drones-kim-jong/#respond Thu, 21 Sep 2017 16:10:25 +0000 https://torrentedigital.com/?p=2795 Corea del Norte ha acumulado un arsenal de más de 1.000 drones, que se teme pueda ser utilizado para lanzar ataques desde el aire. Un centro de inteligencia de Corea del Sur afirma que Pyongyang, la capital de Corea del Norte se puede poseer cerca de 1.000 drones, que también están siendo utilizados para espiar. …

La entrada La Armada Secreta de 1000 Drones de Kim Jong-un aparece primero en Torrente Digital.

]]>
https://torrentedigital.com/la-armada-secreta-1000-drones-kim-jong/feed/ 0 2795
================================================ FILE: api/test/data/feed/totoyao.wordpress.com ================================================ Ars Philosophiæ Naturalis https://totoyao.wordpress.com Mathematically absorbed; economically oriented; astronomically fascinated; simply complicated... Thu, 15 Mar 2018 20:45:14 +0000 en hourly 1 http://wordpress.com/ https://s2.wp.com/i/buttonw-com.png Ars Philosophiæ Naturalis https://totoyao.wordpress.com ================================================ FILE: api/test/data/feed/treehugger-latest ================================================ <![CDATA[Latest Items from TreeHugger]]>https://www.treehugger.com/feeds/latest/en-usCopyright (c) 2018, TreeHuggerWed, 06 Jun 2018 06:43:00 -0400<![CDATA[7 savory recipes that use rhubarb]]>https://www.treehugger.com/green-food/7-savory-recipes-use-rhubarb.html It's time to break rhubarb out of its pie bubble and get it onto the dinner plate.]]>Wed, 06 Jun 2018 06:43:00 -0400https://www.treehugger.com/green-food/7-savory-recipes-use-rhubarb.htmlLiving It's time to break rhubarb out of its pie bubble and get it onto the dinner plate.]]><![CDATA[UK diesel car sales decline, plug-in hybrids up 72.7% ]]>https://www.treehugger.com/cars/uk-diesel-car-sales-decline-plug-hybrids-727.html Sales of gas cars are up too, so let's not get carried away just yet. ]]>Wed, 06 Jun 2018 06:35:54 -0400https://www.treehugger.com/cars/uk-diesel-car-sales-decline-plug-hybrids-727.htmlTransportation Sales of gas cars are up too, so let's not get carried away just yet. ]]><![CDATA[A new generation of Indian farmers rejects industrial food production]]>https://www.treehugger.com/sustainable-agriculture/new-generation-indian-farmers-rejects-industrial-methods.html Supported by the Amrita Bhoomi Agroecology Centre, young farmers are experimenting with natural farming methods, while saving money and lives in the process.]]>Wed, 06 Jun 2018 05:38:00 -0400https://www.treehugger.com/sustainable-agriculture/new-generation-indian-farmers-rejects-industrial-methods.htmlScience Supported by the Amrita Bhoomi Agroecology Centre, young farmers are experimenting with natural farming methods, while saving money and lives in the process.]]><![CDATA[Is LEED tough enough to stop climate change? Is it even the right question?]]>https://www.treehugger.com/green-architecture/leed-tough-enough-stop-climate-change-it-even-right-question.html What do we really want from a building certification system? ]]>Tue, 05 Jun 2018 15:54:24 -0400https://www.treehugger.com/green-architecture/leed-tough-enough-stop-climate-change-it-even-right-question.htmlDesign What do we really want from a building certification system? ]]><![CDATA[Narendra Modi: India to ban single-use plastic by 2022]]>https://www.treehugger.com/plastic/narendra-modi-india-ban-single-use-plastic-2022.html As other countries dither, India's Prime Minister makes a bold but important promise. ]]>Tue, 05 Jun 2018 14:50:56 -0400https://www.treehugger.com/plastic/narendra-modi-india-ban-single-use-plastic-2022.htmlScience As other countries dither, India's Prime Minister makes a bold but important promise. ]]><![CDATA[Little 376 sq. ft. apartment in old city center is transformed]]>https://www.treehugger.com/interior-design/little-flat-transformation-lviv-replus-design-bureau.html An old apartment is converted into a new, personalized living space for a young couple.]]>Tue, 05 Jun 2018 14:30:29 -0400https://www.treehugger.com/interior-design/little-flat-transformation-lviv-replus-design-bureau.htmlDesign An old apartment is converted into a new, personalized living space for a young couple.]]><![CDATA[Why you should become a 'library tourist']]>https://www.treehugger.com/travel/why-you-should-become-library-tourist.html This could become your new secret traveling mission.]]>Tue, 05 Jun 2018 12:57:00 -0400https://www.treehugger.com/travel/why-you-should-become-library-tourist.htmlLiving This could become your new secret traveling mission.]]><![CDATA[Project Milestone pitched as the first 3D printed housing project]]>https://www.treehugger.com/green-architecture/project-milestone-pitched-first-3d-printed-housing-project.html They are building "five great houses that are comfortable to live in and will have happy occupants." ]]>Tue, 05 Jun 2018 12:42:19 -0400https://www.treehugger.com/green-architecture/project-milestone-pitched-first-3d-printed-housing-project.htmlDesign They are building "five great houses that are comfortable to live in and will have happy occupants." ]]><![CDATA[Reliance on fossil fuels could cause global economic crisis within decades]]>https://www.treehugger.com/economics/reliance-fossil-fuels-could-cause-global-economic-crisis-within-decades.html Time to get off the hard stuff as quickly as humanly possible. ]]>Tue, 05 Jun 2018 10:23:04 -0400https://www.treehugger.com/economics/reliance-fossil-fuels-could-cause-global-economic-crisis-within-decades.htmlBusiness Time to get off the hard stuff as quickly as humanly possible. ]]><![CDATA[People who walk, bike and ride scooters are all fighting over crumbs.]]>https://www.treehugger.com/walking/people-who-walk-bike-and-ride-scooters-are-all-fighting-over-crumbs.html It's time to take back the streets from all the cars and make room for alternative modes of transportation.]]>Tue, 05 Jun 2018 10:22:59 -0400https://www.treehugger.com/walking/people-who-walk-bike-and-ride-scooters-are-all-fighting-over-crumbs.htmlTransportation It's time to take back the streets from all the cars and make room for alternative modes of transportation.]]><![CDATA[Go inside the Carbon Vault: why it’s critical to know what’s beneath the Boreal Forest ]]>https://www.treehugger.com/corporate-responsibility/go-inside-carbon-vault-why-its-critical-know-whats-beneath-boreal-forest.html Forest ecosystems sequester large amounts of carbon in vegetation and soils, off-setting the carbon emissions we produce and mitigating climate change. The boreal forest and its associated wetlands, in particular, provide critical carbon storage ...]]>Tue, 05 Jun 2018 09:50:18 -0400https://www.treehugger.com/corporate-responsibility/go-inside-carbon-vault-why-its-critical-know-whats-beneath-boreal-forest.htmlBusiness Forest ecosystems sequester large amounts of carbon in vegetation and soils, off-setting the carbon emissions we produce and mitigating climate change. The boreal forest and its associated wetlands, in particular, provide critical carbon storage ...]]><![CDATA[10 wellness practices from around the world]]>https://www.treehugger.com/health/10-ways-people-relax-around-world.html From India's laughter yoga to Norway's friluftsliv, these paths to health and relaxation can give your soul a boost.]]>Tue, 05 Jun 2018 07:01:38 -0400https://www.treehugger.com/health/10-ways-people-relax-around-world.htmlLiving From India's laughter yoga to Norway's friluftsliv, these paths to health and relaxation can give your soul a boost.]]><![CDATA[U.S. birth rate has dropped to lowest in 30 years]]>https://www.treehugger.com/family/us-birth-rate-has-dropped-its-lowest-30-years.html Demographers are complaining, but Americans have many good reasons for not wanting so many kids.]]>Tue, 05 Jun 2018 07:01:00 -0400https://www.treehugger.com/family/us-birth-rate-has-dropped-its-lowest-30-years.htmlLiving Demographers are complaining, but Americans have many good reasons for not wanting so many kids.]]><![CDATA[EU chemical industry REACHes the finish line]]>https://www.treehugger.com/environmental-policy/eu-chemical-industry-reaches-finish-line.html It's over. As of midnight on May 31st 2018, data on the hazards and risks of every chemical sold in Europe is available to ensure safety]]>Tue, 05 Jun 2018 06:40:00 -0400https://www.treehugger.com/environmental-policy/eu-chemical-industry-reaches-finish-line.htmlBusiness It's over. As of midnight on May 31st 2018, data on the hazards and risks of every chemical sold in Europe is available to ensure safety]]><![CDATA[Photo: Bee and wildflower, a love story]]>https://www.treehugger.com/slideshows/readers-photos/photo-bee-and-wildflower-love-story/ Our photo of the day stars a beautiful bee clinging to the columbine.]]>Tue, 05 Jun 2018 06:00:00 -0400https://www.treehugger.com/slideshows/readers-photos/photo-bee-and-wildflower-love-story/Science Our photo of the day stars a beautiful bee clinging to the columbine.]]><![CDATA[Hot schools make it harder for kids to learn]]>https://www.treehugger.com/green-architecture/hot-schools-make-it-harder-kids-learn.html A new working paper makes the case that "heat exposure inhibits cognitive skill development".]]>Mon, 04 Jun 2018 14:31:07 -0400https://www.treehugger.com/green-architecture/hot-schools-make-it-harder-kids-learn.htmlDesign A new working paper makes the case that "heat exposure inhibits cognitive skill development".]]><![CDATA[These fireflies flirt with heart-shaped lanterns]]>https://www.treehugger.com/animals/these-fireflies-court-heart-shaped-lanterns.html Each species of flashing firefly has a secret code to attract their mates – these ones do so with a light-up heart.]]>Mon, 04 Jun 2018 13:17:24 -0400https://www.treehugger.com/animals/these-fireflies-court-heart-shaped-lanterns.htmlScience Each species of flashing firefly has a secret code to attract their mates – these ones do so with a light-up heart.]]><![CDATA[Transformer desk could turn into a dining table]]>https://www.treehugger.com/eco-friendly-furniture/transformer-desk-could-turn-dining-table.html Design by Jens Quistgaard stands the test of time.]]>Mon, 04 Jun 2018 12:49:51 -0400https://www.treehugger.com/eco-friendly-furniture/transformer-desk-could-turn-dining-table.htmlDesign Design by Jens Quistgaard stands the test of time.]]><![CDATA[How to raise an independent child]]>https://www.treehugger.com/family/how-raise-independent-child.html Life is so much more pleasant for the whole family when a kid does not fear the world and knows how to navigate it with confidence.]]>Mon, 04 Jun 2018 11:17:00 -0400https://www.treehugger.com/family/how-raise-independent-child.htmlLiving Life is so much more pleasant for the whole family when a kid does not fear the world and knows how to navigate it with confidence.]]><![CDATA[Vision Zero remains a punchline in Toronto, Canada]]>https://www.treehugger.com/cars/vision-zero-remains-punchline-toronto-canada.html City introduces a "Vision Zero Challenge" hackathon instead of actually implementing Vision Zero strategies.]]>Mon, 04 Jun 2018 10:03:00 -0400https://www.treehugger.com/cars/vision-zero-remains-punchline-toronto-canada.htmlTransportation City introduces a "Vision Zero Challenge" hackathon instead of actually implementing Vision Zero strategies.]]><![CDATA[US to demand coal-burning power plants keep pumping out pollution, because National Security]]>https://www.treehugger.com/fossil-fuels/us-demand-coal-burning-power-plants-keep-pumping-out-pollution-because-national-security.html It's in the Fearless Leader's latest move to a planned economy that runs on coal.]]>Mon, 04 Jun 2018 07:44:41 -0400https://www.treehugger.com/fossil-fuels/us-demand-coal-burning-power-plants-keep-pumping-out-pollution-because-national-security.htmlEnergy It's in the Fearless Leader's latest move to a planned economy that runs on coal.]]><![CDATA[What does it mean to be frugal?]]>https://www.treehugger.com/culture/what-does-it-mean-be-frugal.html There is more to frugality than penny-pinching.]]>Mon, 04 Jun 2018 06:44:00 -0400https://www.treehugger.com/culture/what-does-it-mean-be-frugal.htmlLiving There is more to frugality than penny-pinching.]]><![CDATA[Photo: Baby killdeer is all legs and cuteness]]>https://www.treehugger.com/slideshows/readers-photos/photo-baby-killdeer-all-legs-and-cuteness/ Our photo of the day comes from Cranbrook, Canada.]]>Mon, 04 Jun 2018 06:00:00 -0400https://www.treehugger.com/slideshows/readers-photos/photo-baby-killdeer-all-legs-and-cuteness/Science Our photo of the day comes from Cranbrook, Canada.]]><![CDATA[Thank you, Donald Trump, for making Canadians healthier]]>https://www.treehugger.com/economics/thank-you-donald-trump-making-canadians-healthier.html In response to the new American tariffs, Canada responded by taxing American sweets, meats and whiskies.]]>Fri, 01 Jun 2018 15:14:58 -0400https://www.treehugger.com/economics/thank-you-donald-trump-making-canadians-healthier.htmlBusiness In response to the new American tariffs, Canada responded by taxing American sweets, meats and whiskies.]]><![CDATA[Two cute videos teach kids about climate change and smog]]>https://www.treehugger.com/climate-change/two-cute-videos-teach-kids-about-climate-change-and-smog.html Explaining climate science to kids is challenging, which is why clever animated videos can help.]]>Fri, 01 Jun 2018 11:14:00 -0400https://www.treehugger.com/climate-change/two-cute-videos-teach-kids-about-climate-change-and-smog.htmlScience Explaining climate science to kids is challenging, which is why clever animated videos can help.]]><![CDATA[Help get The Teacher-Friendly Guide to Climate Change to every high school in the US]]>https://www.treehugger.com/climate-change/help-get-teacher-friendly-guide-climate-change-every-high-school-us.html Provoked by questionable propaganda, a group of scientists is setting out to offer an antidote. ]]>Fri, 01 Jun 2018 11:09:17 -0400https://www.treehugger.com/climate-change/help-get-teacher-friendly-guide-climate-change-every-high-school-us.htmlScience Provoked by questionable propaganda, a group of scientists is setting out to offer an antidote. ]]><![CDATA[The Three Sisters: Planting corn, beans, and squash together]]>https://www.treehugger.com/lawn-garden/three-sisters-why-you-should-plant-corn-beans-and-squash-together.html This classic companion planting combo encourages each of the three to thrive. Here's why and how to do it.]]>Fri, 01 Jun 2018 11:01:02 -0400https://www.treehugger.com/lawn-garden/three-sisters-why-you-should-plant-corn-beans-and-squash-together.htmlLiving This classic companion planting combo encourages each of the three to thrive. Here's why and how to do it.]]><![CDATA[Cutting out meat and dairy is the best thing you can do for the planet]]>https://www.treehugger.com/green-food/cutting-out-meat-and-dairy-best-thing-you-can-do-planet.html Huge new study reveals that going vegan offers far greater benefits than quitting flying or driving an electric car.]]>Fri, 01 Jun 2018 10:03:00 -0400https://www.treehugger.com/green-food/cutting-out-meat-and-dairy-best-thing-you-can-do-planet.htmlLiving Huge new study reveals that going vegan offers far greater benefits than quitting flying or driving an electric car.]]><![CDATA[I tried getting a manicure and it was terrifying]]>https://www.treehugger.com/organic-beauty/i-tried-getting-manicure-and-it-was-terrifying.html When did cutting off your own skin become a thing?]]>Fri, 01 Jun 2018 09:42:37 -0400https://www.treehugger.com/organic-beauty/i-tried-getting-manicure-and-it-was-terrifying.htmlLiving When did cutting off your own skin become a thing?]]><![CDATA[Homemade pasta is cheap, easy and delicious]]>https://www.treehugger.com/easy-vegetarian-recipes/homemade-pasta-cheap-easy-and-delicious.html Or, how to make a super special meal with just a few ingredients.]]>Fri, 01 Jun 2018 09:00:00 -0400https://www.treehugger.com/easy-vegetarian-recipes/homemade-pasta-cheap-easy-and-delicious.htmlLiving Or, how to make a super special meal with just a few ingredients.]]> ================================================ FILE: api/test/data/feed/ttt.tt ================================================ 烧饼博客 https://sb.sb/ Recent content on 烧饼博客 Hugo -- gohugo.io zh-cmn-Hans sb@sb.sb (Showfom) sb@sb.sb (Showfom) &copy; Showfom Wed, 04 Apr 2018 22:17:06 +0800 Debian 9 安装 LEMP + WHMCS 7.5 教程 https://sb.sb/blog/debian-install-whmcs/ Wed, 04 Apr 2018 22:17:06 +0800 sb@sb.sb (Showfom) https://sb.sb/blog/debian-install-whmcs/ WHMCS 7.5 终于发布了,这货开始支持 PHP 7.2,这里就写个简单的教程记录一下安装方式 1、准备工作 首先,按照《Debian 9 / Debian 8 使用源安装 LEMP 教程》安装好 LEMP 环境,可以选一些需要用到的 PHP 7.2 软件包 我们做出了一个艰难的决定 https://sb.sb/blog/april-fools-2018/ Sun, 01 Apr 2018 17:05:30 +0800 sb@sb.sb (Showfom) https://sb.sb/blog/april-fools-2018/ 由于烧饼博客经营不善,博主带着小姨子跑路了,整个组织濒临破产边缘。经第一届金枪鱼全体代表大会讨论研究决定,烧饼博客名下的 Telegram 群组站将启用免费使用+付费增值模式。具体收费标准如下: 项目 普通用户 青铜会员 白银会员 黄金会员 铂金会员 钻石会员 大师会员 王者 备注 收费标准 免费 $9/mo $19/mo $29/mo $39/mo $49/mo $59/mo $99/mo n/a Telegram 发言 5 条/周 10 条/周 15 条/周 20 条/周 25 条/周 30 条/周 35 条/周 无限条/周 除王者外超出部分 $1/条 Telegram 发言置顶 无 1 条/月 2 条/月 3 条/月 4 条/月 5 条/月 10 条/月 无限条/月 除王者外超出部分 $10/条 其他特权 无 无 无 无 无 Telegram 群红名 上线提醒 享受管理员特权 n/a 此标准发布即日起不执行,本文修改并抄袭自 Tuna Debian 9 安装 rTorrent + ruTorrent + Nginx 搭建自己的 PT / BT 盒子 https://sb.sb/blog/debian-install-rtorrent-rutorrent-nginx/ Wed, 28 Mar 2018 01:56:33 +0800 sb@sb.sb (Showfom) https://sb.sb/blog/debian-install-rtorrent-rutorrent-nginx/ 在阅读本文前,请先了解什么是 Private Tracker (简称 PT) Private Tracker,简称 PT,即私用种子服务器。Private Tracker 可以统计用户的上传和下载量,计算用户的分享率。你可以简单将它理解为 BT 的升级版,在拥有 BT 所有功能的同时,需要达到一定的分享率才能不被删除帐号。PT 下载其实也是 BT 下载的一种,但有两个明显的改进:一是私密的小范围下载,二是进行流量统计,根据上载量决定你的权限。 相关介绍请摸这儿、这儿、这儿 Linux 下使用 acme.sh 和 NS 代管申请 Let's Encrypt 免费通配符证书 https://sb.sb/blog/linux-lets-encrypt-wildcard-ssl/ Mon, 26 Mar 2018 19:55:34 +0800 sb@sb.sb (Showfom) https://sb.sb/blog/linux-lets-encrypt-wildcard-ssl/ 作者: @msg7086 1、简介 在《Linux 下使用 acme.sh 配置 Let&rsquo;s Encrypt 免费 SSL 证书 + 通配符证书》一文中,我们介绍了如何使用 acme.sh 生成 Let&rsquo;s Encrypt 通配符证书,而 DNS 认证签发证书一直是一个麻烦事。例如需要将 API Key 甚至是账号密码与签发脚本保存在一起,会有潜在的安全隐患;有些 DNS 服务商不提供 API,只能每三个月手工修改等等。 Linux 下使用 acme.sh 配置 Let's Encrypt 免费 SSL 证书 + 通配符证书 https://sb.sb/blog/linux-acme-sh-lets-encrypt-ssl/ Tue, 20 Mar 2018 15:20:57 +0800 sb@sb.sb (Showfom) https://sb.sb/blog/linux-acme-sh-lets-encrypt-ssl/ 1、什么是 SSL 证书? SSL 是保护用户数据和防止身份被盗用的最佳方式。拥有 SSL 证书的网站可以告诉用户,他们可以放心的浏览,SSL 可以保护他们的数据安全。不同的 SSL 证书提供不同级别的验证。了解更多 &gt; 目前比较火的适合个人用户的证书就是 Let&rsquo;s Encrypt,这货是免费的,下面我们就介绍一下如何在 Linux 服务器上配置 SSL 证书 2、使用 acme. 使用 Hugo 生成静态博客教程 https://sb.sb/blog/migrate-to-hugo/ Mon, 19 Mar 2018 23:02:58 +0800 sb@sb.sb (Showfom) https://sb.sb/blog/migrate-to-hugo/ 由于 Ghost 这个博客系统依赖 Nodejs,并且这货更新实在是太频繁,隔几天就得去服务器上 ghost update 一次,并不是很适合正式环境使用 并且由于国内众所周知的政策原因,本站域名 sb.sb 已主动申请注销备案,趁着服务器迁移到海外的功夫,顺便我就把烧饼博客更换成了 Hugo,以下为 Hugo 安装和使用教程 Hugo 是一款开源的使用 go 语言写的静态网站生成器,很适合数据量不大的个人博客使用 1、安装 Hugo 使用 Go 语言开发编译后的二进制文件并不需要任何依赖,直接在官方 Github 上下载最新的文件后解压即可运行,参考官网的安装教程 Debian / Ubuntu 搭建 Isso 评论系统教程 https://sb.sb/blog/debian-ubuntu-install-isso/ Mon, 19 Mar 2018 22:55:31 +0800 sb@sb.sb (Showfom) https://sb.sb/blog/debian-ubuntu-install-isso/ 由于某说要关闭,某言对 HTTPS 支持不友好,某易必须登陆才可以且在国外访问卡出翔,剩下国产的服务都一般,而国外服务 Disqus 是个不存在的网站并且会加载一大堆追踪的 JS,对于有洁癖的博主来说,全世界第三方评论系统基本没有一个好用,所以我们可以考虑自己搭建 Isso 评论系统 Isso 是基于 Python 写的一套评论系统,用途就是代替以上说的第三方不靠谱平台,而官网的教程坑很多,新手没有接触过运维工作安装起来难度较大,所以我就整理一下基本的教程,尽量可以让所有用户都能自行搭建评论系统 本文所有操作均在 root 用户下进行,请自行切换 首先,更新系统 apt-get update &amp;&amp; apt-get upgrade 如果您用的 Debian 9. Debian 9 / Ubuntu 16.04 搭建 Ghost 1.x 教程 https://sb.sb/blog/debian-ubuntu-install-upgrade-ghost/ Mon, 19 Mar 2018 22:51:30 +0800 sb@sb.sb (Showfom) https://sb.sb/blog/debian-ubuntu-install-upgrade-ghost/ PS:强烈不推荐使用这个博客系统 1、更新系统并安装必要软件 这个就不需要我多讲了,首先用 root 用户登陆系统,如果不是的话先切换到 root Debian 9.x 下 apt-get update &amp;&amp; apt-get upgrade apt-get -t stretch-backports update &amp;&amp; apt-get -t stretch-backports upgrade Ubuntu 16. Debian 使用 gdnsd 自建 DNS 服务并分区解析 https://sb.sb/blog/debian-install-gdnsd/ Mon, 19 Mar 2018 22:33:47 +0800 sb@sb.sb (Showfom) https://sb.sb/blog/debian-install-gdnsd/ gdnsd 是一款权威 DNS (Authoritative-only DNS)服务器软件,因为自带 GeoIP 插件,所以很适合自建 CDN 做分区解析,著名的喂鸡百科就是使用 gdnsd 进行全球 CDN 分区解析 众所周知,天朝的网络环境,国内访问国外慢,同理国外访问国内也慢,所以我们很有必要搭建 CDN 并且使用 DNS 进行分区解析 而国内比较知名的权威 DNS 服务商如 CloudXNS, DNSpod 他们免费版的 DNS 服务器都在国内,这样会造成国外的用户解析你的域名很慢,同理,如果使用国外的权威 DNS 服务商如 Cloudflare, AWS Route53 他们的 DNS 服务器都部属在国外,国内访问基本要走美国节点,这样会造成国内的用户解析你的域名很慢 前端 CDNJS 库及 Google Fonts、Ajax 和 Gravatar 国内加速服务 https://sb.sb/blog/css-cdn/ Mon, 19 Mar 2018 22:32:23 +0800 sb@sb.sb (Showfom) https://sb.sb/blog/css-cdn/ 由于某些众所周知的原因,好多开源的 JS 库采用的国外 CDN 托管方式在国内访问速度不如人意。所以我们特意制作了这个公益项目,托管了 CDNJS 的所有开源 JS 库以及反代了 Google Fonts、Ajax 和 Gravatar,并且全部支持 http 和 https 1、CDNJS 开源 JS 库 我们采用的方法是每天定时同步 CDNJS 的 Github IP.SB - 在线 IPv4 / IPv6 信息查询 https://sb.sb/blog/ip-sb/ Mon, 19 Mar 2018 22:31:10 +0800 sb@sb.sb (Showfom) https://sb.sb/blog/ip-sb/ 1、IP.SB 的由来 IP.SB 前身是 IP.GS ,一个专门用于查询本地出口 IP 的网站,初衷是为了让用户更方便地知道自己的本地出口 IP,使用的数据库是 IPIP.NET 提供的商业版 随着访问量增加,并且全世界 IPv6 渐渐普及,我们发现仅仅使用 IPIP.NET 的数据库已经无法满足需求,比如他们没有提供 IPv6 数据库,而国外的 Maxmind 的 IPv4 数据库准确性又没有 IPIP. Linux 下编译安装最新版本 Nginx https://sb.sb/blog/linux-install-nginx/ Mon, 19 Mar 2018 22:26:34 +0800 sb@sb.sb (Showfom) https://sb.sb/blog/linux-install-nginx/ 之前介绍过《CentOS / RHEL 7.x 使用 EPEL 安装最新版本 LEMP / LNMP》,其中有两种使用源安装的方法,但是无论是 EPEL 方式或 Nginx 官方源方式,自带的 OpenSSL 版本实在过低,所以本文介绍如何在 CentOS 7.x / RHEL 7. Debian / Ubuntu 更新内核并开启 TCP BBR 拥塞控制算法 https://sb.sb/blog/debian-ubuntu-tcp-bbr/ Mon, 19 Mar 2018 22:22:23 +0800 sb@sb.sb (Showfom) https://sb.sb/blog/debian-ubuntu-tcp-bbr/ BBR (Bottleneck Bandwidth and RTT) 是 Google 提供的 TCP 拥塞控制算法,适用于复杂网络环境下的 TCP 加速。由于众所周知的原因,天朝的网络情况在全世界都排得上号,很多情况下我们不得不进行一些细小的优化才能达到满意的效果。 话不多说了,首先需要准备的条件 Debian 8.x 或者 Debian 9.x 系统,当然以下教程也适合 Ubuntu 14. Debian 9 / Debian 8 安装 vnStat 统计服务器流量 https://sb.sb/blog/debian-install-vnstat/ Mon, 19 Mar 2018 22:05:51 +0800 sb@sb.sb (Showfom) https://sb.sb/blog/debian-install-vnstat/ vnStat 是一款开源的 Linux 下统计网卡流量的软件,可以很方便地查看当前、当天、当月的流量统计报告,下面我们介绍下在 Debian 9.x 下安装 vnstat 的简单方法,本文同样适用于 Debian 8.x 首先,使用 ip a 命令查看你机器的网卡名称,如果是全新的 iso 安装的 Debian 9,那么默认的网卡名称应该为 ens3 或 ens4 Debian 9 Stretch 解决 /etc/rc.local 开机启动问题 https://sb.sb/blog/debian-9-rc-local/ Mon, 19 Mar 2018 22:03:33 +0800 sb@sb.sb (Showfom) https://sb.sb/blog/debian-9-rc-local/ 由于某些软件并没有增加开启启动的服务,很多时候需要手工添加,一般我们都是推荐添加命令到 /etc/rc.local 文件,但是 Debian 9 默认不带 /etc/rc.local 文件,而 rc.local 服务却还是自带的 root@debian9 ~ # cat /lib/systemd/system/rc.local.service # This file is part of systemd. 阿里云通过网络安装全新 Debian 9 Stretch https://sb.sb/blog/install-debian-alibabacloud/ Mon, 19 Mar 2018 22:01:46 +0800 sb@sb.sb (Showfom) https://sb.sb/blog/install-debian-alibabacloud/ 由于众多云主机商家的系统模板总是让人不满意,不是多装了软件就是瞎 JB 写了一些配置,而且 Debian 9.x 都发布一个多月了,国内云主机商能跟上步伐的很少,美团云甚至还停留在 Debian 7.0 时代,而且发了几次工单都没得到任何反应,这是绝对不能忍的 作为一只有洁癖的人,我决定亲自动手重新安装阿里云和美团云的系统,这里我们以阿里云为例,希望安装的操作系统是最新版本 Debian 9.x Stretch 1、准备工作和必要条件 准备工作 账号一枚 开通一个云主机并且选择操作系统选择 Debian 8 泡一杯茶静下心,按照我的教程一步一步来 必要条件 Debian 8 Jessie 升级至 Debian 9 Stretch 教程 https://sb.sb/blog/debian-8-upgrade-to-debian-9/ Mon, 19 Mar 2018 21:59:49 +0800 sb@sb.sb (Showfom) https://sb.sb/blog/debian-8-upgrade-to-debian-9/ Debian 9 Stretch 已经在 2017 年 6 月 17 号发布,而很多商家的步伐并未那么快,比如某千万云,所以我们可以选择自己升级 本教程会指导你如何在 Debian 8 Jessie 的机器上快速升级到 Debian 9 Stretch 以下安装步骤都在 root 用户下完成,请自行使用 su 命令切换到 root 用户 CentOS / RHEL 7 升级 OpenSSL 教程 https://sb.sb/blog/centos-upgrade-openssl/ Mon, 19 Mar 2018 21:56:44 +0800 sb@sb.sb (Showfom) https://sb.sb/blog/centos-upgrade-openssl/ CentOS 7.x 的 OpenSSL 软件版本实在是低,2017 年了还在用人家 2013 年的版本,而且 1.0.1 版本对 ALPN 不支持,已经没法跟上大环境的节奏了 可以看一下默认自带的版本 [root@centos]# openssl version OpenSSL 1.0.1e-fips 11 Feb 2013 所以我们有必要升级 CentOS 7. CentOS / RHEL 7 使用 EPEL 安装 LEMP 教程 https://sb.sb/blog/centos-install-nginx-php-mysql/ Mon, 19 Mar 2018 21:52:47 +0800 sb@sb.sb (Showfom) https://sb.sb/blog/centos-install-nginx-php-mysql/ CentOS 是 RHEL (Red Hat Enterprise Linux) 的免费版,由于红帽的大力推广,在国内外很是流行。因为众多企业和开发者使用,首先要求的是保证稳定,所以 CentOS 下的软件从不追求最新版本。 而很多时候我们不得不用到最新的版本进行一些操作,本文就介绍在 CentOS / RHEL 7.x 下使用 EPEL 以及官网仓库安装最新版本的 LEMP Projects https://sb.sb/projects/ Mon, 19 Mar 2018 21:44:51 +0800 sb@sb.sb (Showfom) https://sb.sb/projects/ 本博客团队目前提供以下免费公益服务 SM.MS 图床 | 官网 U.NU 短网址 | 官网 IP 地址查询 | 官网 | 详细介绍 CSS / JS 前端资源国内加速服务 | 官网 | 详细介绍 Disclaimer / 免责申明 https://sb.sb/disclaimer/ Mon, 19 Mar 2018 21:44:33 +0800 sb@sb.sb (Showfom) https://sb.sb/disclaimer/ 烧饼博客提供的所有内容仅供学习、分享与交流,我们不保证内容的正确性。通过使用本站内容随之而来的风险与本站无关。当使用本站时,代表你已接受本站的免费声明和隐私原则等条款。 隐私原则 烧饼博客目前涉及到浏览者隐私的只有一个地方,就是留言区(文章评论)。当你留言时,你的电子邮箱、Cookies 信息和 IPv4 / IPv6 地址都会被记录。这些信息仅为了改进我们的网站质量和可能的交流沟通。我们不会将这些信息进行展示、出租或出售给任何人。但以下情况除外: 只有透露您的个人资料,才能提供您所要求的产品和服务; 我们需要听从法庭传票、法律命令或遵循法律程序; 我们发现您违反了烧饼博客已发布的条款或声明。 其他声明 烧饼博客所有文章、图片等均为键盘自动生成,包括以上所有文字,由业内高级人工智能自动筛选并记录,谢绝所有人肉和跨省。 烧饼博客的域名 sb.sb 目前暂时不出售。 RSS Subscription / 订阅 https://sb.sb/rss-feed/ Mon, 19 Mar 2018 21:44:23 +0800 sb@sb.sb (Showfom) https://sb.sb/rss-feed/ 如果您想订阅本站,有如下方法: 1、RSS 本站默认的 RSS 订阅地址是 https://sb.sb/atom.xml 或者 https://sb.sb/rss.xml 为了避免本站更换域名的影响,您也可以使用 Google FeedBurner 烧录好的地址 http://feeds.feedburner.com/showfom 2、Telegram 频道 您可以订阅本站 Telegram 频道 @sbDOTsb 获取更新 Links / 友情链接 https://sb.sb/links/ Mon, 19 Mar 2018 21:44:14 +0800 sb@sb.sb (Showfom) https://sb.sb/links/ 友链需要满足以下条件: 独立博客,独立域名 全站 HTTPS 以及,这只是基本要求,但是本站不接受友链申请,如果您的博客或者您和我很熟悉,我会自己加上作为收藏备份,主动要求加友链的一律拒绝。 以下排名不分先后 徒弟小成 垃圾荣荣 死B凤凰卷 可爱的 Jixun 前男友 fdb713 蛇皮肥猫 Ben Wang HJC JerryQu lwl12 DIYgod 暮光博客 超能小紫 stneng joyqi 灰姑娘 呼呼 NBA 2K 中文网 Debian 9 / Debian 8 使用源安装 LEMP 教程 https://sb.sb/blog/debian-install-nginx-php-mysql/ Mon, 19 Mar 2018 21:18:51 +0800 sb@sb.sb (Showfom) https://sb.sb/blog/debian-install-nginx-php-mysql/ Debian 9 代号 Stretch 在 2017 年 6 月 18 号正式发布,由于是最新的系统,原来基于 Dotdeb 安装最新 LEMP 的教程已经过时,本文将介绍使用官方源和第三方源在 Debian 9.x Stretch 安装最新版 LEMP 的教程,并且可以自行选择 PHP 版本。 Ubuntu 16.04 / Ubuntu 14.04 使用源安装 LEMP 教程 https://sb.sb/blog/ubuntu-install-nginx-php-mysql/ Mon, 19 Mar 2018 21:11:31 +0800 sb@sb.sb (Showfom) https://sb.sb/blog/ubuntu-install-nginx-php-mysql/ LEMP 指的是 Linux + Nginx (发音 engine x 所以这里是 E 而不是 N) + MySQL + PHP 的简称,国内有些地方叫做 LNMP (因为 LNMP 没法读出来,而 LEMP 可以直接发音,所以今后本站教程一律都会写 LEMP) Contact / 联系 https://sb.sb/contact/ Mon, 19 Mar 2018 20:14:26 +0800 sb@sb.sb (Showfom) https://sb.sb/contact/ 一般情况下,各路兄弟姐妹们可以通过以下方式联系我 QQ / QQ 群 235701 (好友快满,基本不加人,加群需要收费) WeChat 同上,好友快满,基本不能再加人了 Telegram @Showfom Email showfom at gmail dot com Hangouts 同上 SMS / Google Project Fi +1 (217)288-8888 Twitter @Showfom Facebook Messenger @Showfom Skype Showfom 把我放入您手机的联系人 +1 (217)288-8888 基本绑定手机号码的服务就会出现我 About / 关于 https://sb.sb/about/ Mon, 19 Mar 2018 20:13:02 +0800 sb@sb.sb (Showfom) https://sb.sb/about/ 如无特殊声明,本站所有内容均在 WTFPL 许可下发布 ================================================ FILE: api/test/data/feed/xda-developers.com ================================================ XDA Android – xda-developers https://www.xda-developers.com Android and Windows Phone Development Community Mon, 02 Jul 2018 15:35:15 +0000 en-US hourly 1 https://wordpress.org/?v=4.9.6 How to immediately get OxygenOS updates for the OnePlus 6/5T/5/3T/3 https://www.xda-developers.com/get-oxygenos-update-oneplus-6-oneplus-5t-oneplus-5-oneplus-3t-oneplus-3/ https://www.xda-developers.com/get-oxygenos-update-oneplus-6-oneplus-5t-oneplus-5-oneplus-3t-oneplus-3/#respond Sun, 01 Jul 2018 03:00:33 +0000 https://www.xda-developers.com/?p=221966 One of the most annoying parts of over-the-air (OTA) updates is waiting for the update to be delivered on your device. This varies wildly from device to device, and many factors take part while checking if you’re eligible: your carrier, your OEM, your current Android version, and your actual geographical location/IP, just to name a]]>

One of the most annoying parts of over-the-air (OTA) updates is waiting for the update to be delivered on your device. This varies wildly from device to device, and many factors take part while checking if you’re eligible: your carrier, your OEM, your current Android version, and your actual geographical location/IP, just to name a few. It’s particularly annoying when your OEM doesn’t officially support your country. If you want to skip the wait and immediately get OxygenOS updates on your OnePlus 6, OnePlus 5T, OnePlus 5, OnePlus 3T, or OnePlus 3, then you can use the free Oxygen Updater app to do so.

Skipping the line with Oxygen Updater

I live in Caracas, Venezuela, and I currently use a OnePlus 5T as my daily driver. OnePlus doesn’t officially sell their phones in Venezuela—I had to import mine from the U.S. store and have it shipped to me via a third-party, so OxygenOS updates are sometimes delayed by quite a bit here. I often download update packages with my browser, either from the official OnePlus download section or XDA threads, in order to update my device and then proceed to install it with either TWRP or the Oxygen Recovery.

It’s even worse for other devices made by other manufacturers. Just to cite an example, update rollouts for LG can often take months to roll out from one country to the other. This is pretty common practice in the Android ecosystem. It’s pretty rare to find a phone that actually receives timely security patches, without counting the Google Pixel phones. OnePlus used to be pretty slow when keeping their phones up to date, but they have picked up the pace recently, especially when it comes to security patches. But actual OTA rollouts still take a while to reach everyone. There’s a good reason for that, though, and it’s to ensure that bugs are caught early before the update reaches everyone.

If you don’t want to wait for an update, you can use a VPN to connect to OnePlus’ usual test markets: Germany or Canada. This is exactly what the Oxygen Updater app does for you. Oxygen Updater is a pretty nifty tool that, despite what the name would tell you, is not made by OnePlus or anyone closely related to the company. It’s instead an unofficial tool which focuses on OnePlus devices like the OnePlus 6, OnePlus 5T, OnePlus 5, OnePlus 3T, and OnePlus 3. The concept is pretty simple: you select your device and the app checks whether an update is available.

How to get OxygenOS updates on the OnePlus 6, OnePlus 5T, OnePlus 5, OnePlus 3T, and OnePlus 3 How to get OxygenOS updates on the OnePlus 6, OnePlus 5T, OnePlus 5, OnePlus 3T, and OnePlus 3 How to get OxygenOS updates on the OnePlus 6, OnePlus 5T, OnePlus 5, OnePlus 3T, and OnePlus 3

Oxygen Updater grabs update packages for all currently supported OnePlus devices, including the OnePlus 6, the OnePlus 5/OnePlus 5T, and the OnePlus 3/OnePlus 3T, in both OxygenOS stable and Open Beta channels. It also gives you the option to download partial OTA packages (if you’re unrooted) and full firmware ZIPs, both of which you can install through your recovery of choice. Furthermore, it skips over OnePlus’ OTA rollouts: if an update exists for your device, you’ll be able to download said update right away, even if the Update section in your phone says your device is up to date.

How to get OxygenOS updates on the OnePlus 6, OnePlus 5T, OnePlus 5, OnePlus 3T, and OnePlus 3 How to get OxygenOS updates on the OnePlus 6, OnePlus 5T, OnePlus 5, OnePlus 3T, and OnePlus 3

How to get OxygenOS updates on the OnePlus 6/5T/5/3T/3

For all intents and purposes, it’s just as feature rich as the OxygenOS update manager. Maybe even better. It’s pretty simple to use, actually:

  1. Download Oxygen Updater from the Google Play Store using the button below.
  2. Start the app. It’ll start on the setup screen, where the app will be configured for your device.
  3. Note that the app may check for root access and ask for root permissions. If applicable, then grant it, since it will simply default the update method to “full update” instead of partial update otherwise.
  4. Follow through the setup until you get to the main screen. If it says your device is up to date, then congrats!
  5. If it says an update is available, download it and the update will begin downloading in the background.
  6. After it’s finished, just tap on the notification. The app will follow through the normal update cycle: it’ll reboot, boot into recovery mode, install, then reboot again.

I found it to be a pretty reliable tool during my own testing. I bumped my OnePlus 5T from Open Beta 8 straight to Open Beta 10 in a breeze. As we said before, it’s also compatible with all devices currently supported by OnePlus, so it’s definitely something worth checking out if you’re a OnePlus user. You can download and give Oxygen Updater a shot yourself for free from Google Play.

Oxygen Updater (Free+, Google Play) →

]]> https://www.xda-developers.com/get-oxygenos-update-oneplus-6-oneplus-5t-oneplus-5-oneplus-3t-oneplus-3/feed/ 0 How EAS helps make the Google Pixel the fastest Android phone https://www.xda-developers.com/google-pixel-fastest-android-phone-eas/ https://www.xda-developers.com/google-pixel-fastest-android-phone-eas/#respond Sat, 30 Jun 2018 14:55:01 +0000 https://www.xda-developers.com/?p=185480 Far back in the past when Linux was just an idea in the mind of Linus Torvalds, CPUs were single-core entities which required an immense amount of energy for little power. The first ever commercially available processor, the Intel 4004, ran at a clock-rate of 740kHz on a single core. Back then, there was no need]]>

Far back in the past when Linux was just an idea in the mind of Linus Torvalds, CPUs were single-core entities which required an immense amount of energy for little power. The first ever commercially available processor, the Intel 4004, ran at a clock-rate of 740kHz on a single core. Back then, there was no need for a load scheduler. Load scheduling was reserved for the dual-core “behemoths” such as the IBM Power 4 which came out some decades after. These ran at a beastly 1.1GHz to 1.9GHz and required programs and the system to utilize these cores correctly. How did we get from these machines to software algorithms that make use of multiple cores? You may have heard of Energy Aware Scheduling (EAS) on our forums before. It’s part of the reason why the Google Pixel smartphones perform so well. What’s so great about EAS and how did we even get to this point? Before we can explain that, we need to talk about Linux load schedulers.


The Evolution of the Linux Load Schedulers

Round-Robin Scheduling

Round Robin Processing. Source: Wikipedia

Round robin processing is a simple concept to explain and understand, and an even simpler one to grasp its disadvantages. Round-robin uses time slicing to allocate time to each process. Let’s assume we have four processes running on our computer.

  • Process A
  • Process B
  • Process C
  • Process D

Now, let’s do the job of the round-robin scheduler. We will allocate 100 milliseconds (time-slicing) to each process before moving on to the next. This means Process A can take 100 milliseconds to do its processing, then it moves to Process B and so on. If an application’s job takes 250 milliseconds to do, it will need to go through this process 3 times just to finish its work! Now scale this across different cores, so that Process A and Process B are allocated to core 1, and Process C and Process D are allocated to core 2. This was replaced by O(n) scheduling (which was like round-robin, but using epochs and allowing dynamic allocation of time), then O(1) scheduling (minimized overhead, unlimited process support), then finally the Completely Fair Scheduler (CFS). CFS was merged into the Linux kernel version 2.6.23 in October 2007. It has been overhauled since and is still the default scheduler in Linux systems.

Completely Fair Scheduler

The Completely Fair Scheduler has existed in Android since its inception and is used on non-big.LITTLE devices. It uses an intelligent algorithm to determine processing order, time allocated etc. It is an example of a working implementation of the well-studied scheduling algorithm called “weighted fair queueing.” This basically focuses on providing priority to system processes and other high priority processes running on the machine. If it were to run on a big.LITTLE device, all cores would be perceived as equal. This is bad, as low power cores may be forced to run intensive applications, or even worse, the opposite may occur. The decoding for listening to music may be done on the big core, for example, increasing power consumption needlessly. This is why we need a new scheduler for big.LITTLE, one which can actually recognise and utilise the difference in cores in a power efficient manner. That’s where Heterogeneous Multi-Processing (HMP) comes in, the standard load scheduler most Android phones are running now.

Heterogeneous Multi-Processing

This is the standard load scheduler for any big.LITTLE device released in recent years, other than the Google Pixel. HMP makes use of the big.LITTLE architecture, delegating low priority, less intensive work to the little cores which consume less power. HMP is “safe” wherein it knows what should go to the big cores and what should go to the little cores, without making mistakes. It just works and requires a lot less effort to set up on the development side than something like EAS, which we’ll get into in a moment. HMP is just an extension of CFS to make it power aware.

HMP doesn’t take guesses, nor does it predict future processes. This is good but is why the device cannot be as fluid as those running EAS and is also why it consumes slightly more battery. This, finally, brings us to Energy Aware Scheduling (EAS), which I firmly believe is the future in ROM and kernel development as more OEMs adopt it.

Energy Aware Scheduling

Energy Aware Scheduling (EAS) is the next big thing that users on our forums are talking about. If you use a OnePlus 3 (or a Google Pixel, obviously) you’ve definitely heard about it in the forums. It launched into the mainstream with the Qualcomm Snapdragon 845, so if you have one of these devices you already have an EAS-enabled smartphone. EAS in the form of kernels such as RenderZenith and ROMs such as VertexOS and PureFusion were taking the OnePlus 3 forums by storm in its prime. Of course, the Google Pixel also comes with EAS. With the promises of improved battery life and better performance, what’s the catch?

Energy Aware Scheduling is not as simple as it is not universal to every device like CFS or HMP. EAS requires an understanding of the processor it is running on, based off of an energy model. These energy models are made by teams of engineers constantly testing and working to give an optimal performance. As the Snapdragon 820 and 821 are basically the same, custom kernels on the OnePlus 3 uses the Google Pixel energy model. Devices with the Snapdragon 845 can utilise EAS, and the OnePlus 6 does to some degree. It’s not as tuned as a Google Pixel device would be, but it gets the job done. Here’s an example of how, despite the OnePlus 6 having a better processor with EAS, the Pixel 2 XL still beats it in smoothness. Both of these images were taken from our speed-oriented review of the OnePlus 6.

If you have trouble understanding the graphs, you can take a look at the image below for guidance. Anything exceeding the green line indicates dropped frames and, in the worst cases, noticeable stuttering.

The OnePlus 6 implementation of EAS is interesting, as it doesn’t appear to be a fully-fledged implementation like you’d find on a Google Pixel with the same SoC. The scheduler tunables don’t make much sense either, so that probably explains why it’s not as performance efficient as you’d expect. It’s extremely conservative in power consumption, with the system prioritising the low power cores for the majority of the work.

Tunables are simply a set of parameters that are passed to the CPU governor, which changes how the governor reacts to certain situations in terms of frequency. The scheduler then decides where it places tasks on different processors. The OnePlus 6’s tunables are set to prioritise work on low-powered cores. It also doesn’t help that the Google Pixel 2 has a huge amount of input boost, keeping all 8 cores online all the time. Google also uses an interrupt balancer which helps to remove frame drops and improve performance.

So how does EAS work? Why is it so efficient only in certain conditions?

Energy Aware Scheduling introduces the need to use an energy model, and as mentioned above requires a lot of testing and work to make it perfect. EAS attempts to unify three different core parts of the kernel which all act independently, and the energy model helps to unify them.

  • Linux scheduler (CFS, mentioned above)
  • Linux cpuidle
  • Linux cpufreq

Unifying all 3 parts under the scheduler and calculating them together gives a potential for energy saving, as calculating them together allows them to be as efficient as possible. CPUIdle tries to decide when the CPU should go into an idle mode, while CPUFreq tries to decide when to ramp up or down the CPU. Both of these modules have the primary goal of saving energy. Not only that, it then categorizes processes into four cgroups, being top-app, system-background, foreground, and background. Tasks due to be processed are placed into one of these categories, and then the category is given CPU power and the work is delegated over different CPU cores. top-app is the highest priority of completion, followed by foreground, background, and then system-background. Background technically has the same priority as system-background, but system-background usually also has access to more little cores. In effect, Energy Aware Scheduling is taking core parts of the Linux kernel and unifying it all into one process.

When waking the device, EAS will choose the core in the shallowest idle state, minimising the energy needed to wake the device. This helps to reduce the required power in using the device, as it will not wake up the large cluster if it doesn’t need to. Load tracking is also an extremely crucial part of EAS, and there are two options. “Per-Entity Load Tracking” (PELT) is usually used for load tracking, the information is then used to decide frequencies and how to delegate tasks across the CPU. “Window-Assisted Load Tracking” (WALT) can also be used and is what’s used on the Google Pixel. Many EAS ROMs on our forums, such as VertexOS, opt to use WALT. Many ROMs will release two versions of the kernel with WALT or PELT, so it’s up to the user to decide. WALT is more bursty, with high peaks in CPU frequency while PELT tries to remain more consistent. The load tracker doesn’t actually affect the CPU frequency, it just tells the system what the CPU usage is at. A higher CPU usage requires a higher frequency and so a consistent trait of PELT is that it causes the CPU frequency to ramp up or down slowly. PELT does tend to stray towards higher CPU load reporting, so it may provide higher performance at a higher battery cost. Nobody can really say at this point in time which load tracking system is better, however, as both load tracking methods are getting continually patched and refined.

Either way, it’s obvious that, regardless of the load tracking method used, there is an increase in efficiency. Rather than just processing tasks on any processor, the task is analyzed and the amount of energy required to run it is estimated. This clever task placement means that tasks get completed in a much more efficient manner while also making the system quicker as a whole. EAS is all about getting the smoothest UI possible with minimal power usage. This is where other external components such as schedtune come into play.

Schedtune is defined in each cgroup by two tunables which ensure finer control over the tasks to be completed. It doesn’t just control the spread out of tasks over multiple CPUs, but also if the perceived load should be inflated in order to ensure time-sensitive tasks are completed quicker. This way, foreground applications and services that the user is availing of won’t slow down and cause unnecessary performance issues.

While Energy Aware Scheduling is the next big thing, it can also be argued it’s already here and has been for a while. With more and more devices hitting the mainstream with Energy Aware Scheduling, a new age of mobile processing efficiency is here.

The Pros and Cons of Round-Robin, CFS, HMP and EAS

While my graphics skills are sub-par, I have thrown together an image which should summarize what the pros and cons of each of these schedulers are.


I would like to extend a special thank you to XDA Recognised Contributor Mostafa Wael whose explanations of various aspects of EAS greatly helped in making this article possible. I would also like to thank XDA Recognised Developer joshuous, XDA Recognised Developer RenderBroken and Mostafa Wael for his write up on EAS. For those of you who found interest in EAS-related parts, Linaro has a lot of documentation on EAS which you can read.

]]> https://www.xda-developers.com/google-pixel-fastest-android-phone-eas/feed/ 0 How to enable YouTube Dark Mode on Android right now (Root) https://www.xda-developers.com/enable-youtube-dark-mode-android/ https://www.xda-developers.com/enable-youtube-dark-mode-android/#respond Fri, 29 Jun 2018 17:46:56 +0000 https://www.xda-developers.com/?p=211746 Google recently added a Dark Mode to the YouTube mobile app (following Dark Mode for the desktop website), but there’s just one problem: iOS users get it first. Dark Mode is still “coming soon” to Android and we’re not exactly sure how long it will take. The good news is the Android developer community has once]]>

Google recently added a Dark Mode to the YouTube mobile app (following Dark Mode for the desktop website), but there’s just one problem: iOS users get it first. Dark Mode is still “coming soon” to Android and we’re not exactly sure how long it will take. The good news is the Android developer community has once again come through for us. If you have root access on your Android device, you can get Dark Mode in the app right now.

Update 6/29/18: It has been over 3 months since this article was originally published and the dark theme is still not officially available for Android users. However, the flag to enable dark theme has changed so we have updated this article.

youtube dark mode youtube dark mode youtube dark mode YouTube Dark Theme on Android YouTube Dark Theme on Android

This method requires modifying a value in the shared preferences folder in the app’s data folder. That’s why root access is necessary. If your device is not already rooted, check out your device’s forums for instructions. Once you have root access, you will need the Preferences Manager app and, of course, YouTube.

Here’s how to do it:

Preferences Manager (Free, Google Play) →

  1. Install Preferences Manager from the Google Play Store.
  2. Find YouTube in the list. (If it doesn’t show up, you may need to enable “show system apps” in the menu.)
  3. Tap it to open its preferences files.
  4. You should be on youtube.xml. If not, swipe left/right until you are.
  5. Search for dark
  6. Change both values from false to true. 
    • If you don’t see the values, add them manually (app_theme_dark_developer and app_dark_theme) and set them to true YouTube Dark Theme YouTube Dark Theme
  7. Save the changes.
  8. Force close YouTube.

When you open up the app again it should be in Dark Mode. The app will have a nice dark gray background and white-on-black icons. You can scroll through videos without the blinding white interface. Thanks to XDA member AL_IRAQI for sending in this method and providing screenshots.

YouTube (Free, Google Play) →

]]> https://www.xda-developers.com/enable-youtube-dark-mode-android/feed/ 0 Honor 10 Mini-Review: Two Months Later https://www.xda-developers.com/honor-10-mini-review-two-months-later/ Thu, 28 Jun 2018 15:00:26 +0000 https://www.xda-developers.com/?p=218537 When Honor launched the Honor 10, they promised a phone that would provide a new AI experience. Bringing the AI technology from the Honor View 10, and the build quality and performance of the Honor 9, we got a polished and complete version of Honor’s vision for their smartphones. Honor 10 Specs Chipset Kirin 970]]>

When Honor launched the Honor 10, they promised a phone that would provide a new AI experience. Bringing the AI technology from the Honor View 10, and the build quality and performance of the Honor 9, we got a polished and complete version of Honor’s vision for their smartphones.

Introducing #Honor10 with #BeautyInAI. Our incredibly beautiful phone with independent NPU to provide the best AI experience and smart photography.

@Honorglobal
Honor 10 Specs
Chipset Kirin 970
Display 1080×2280
RAM 4/6GB
Storage 64/128GB
Camera 18+24MP/24MP AI Camera
Battery 3400mAh

Display

The first thing you’ll notice about the Honor 10’s display is the notch. It’s a small un-intrusive guy that can be switched on and off if you don’t like it. The display is slightly better than where we saw in the Honor View 10 and Honor 9, which is just fine for this phone. It offers an impressive media experience for photos and videos. This is one of the better non-AMOLED displays that you’ll find.

The Honor 10 with notched display.

Camera

One of the main selling points of the Honor 10 is the AI Camera. This is designed to use semantic image segmentation to enhance your photos. While the AI mode is definitely an interesting feature, it has received mixed reviews on whether or not is objectively makes the photograph better.

Honor 10 photo without AI Mode

Honor 10 with AI Mode

These photos are a good example of a situation where AI does a great job in enhancing the photo.

Honor 10 photo without AI Mode

Honor 10 with AI Mode

These photos received mixed responses from people when I posted them to twitter. Many people preferred the non-AI version. So while the AI is a nice feature to have, it wont perform well it every circumstance. You can toggle AI off after the fact, if you don’t like the way your picture turned out.

Shoot dynamically and enhance individually with Semantic image segmentation!

@Honorglobal

From my experience with AI mode, it’s a good feature to have but isn’t a revolutionary feature in smartphone cameras. This shouldn’t be a deciding factor in whether or not you buy this phone.

Honor 10 Gallery Video Editor

The Gallery app has many useful tools for editing your videos and photos. Trim your videos and export them at different resolutions. The fast processor in the Honor 10 makes editing media very fast and fluid.

Honor 10 Gallery Photo Editing

In general,the camera is better than any Honor phone we’ve seen so far. The selfie camera is really good with a 24MP sensor. Portrait mode looks particularly nice. Checkout our full camera review video above to see samples.

Performance

When it comes to speed, this phone is very impressive. The Kirin 970 is the newest Kirin chip featuring the NPU which powers all of the AI features in the Honor 10. There are models with 4 and 6GB of RAM. I tested the 4GB model to find that app were launching faster, the UI was quicker, and the phone was all-around smoother than any previous Honor phone.

The battery will easily last you all day and maybe even two days depending on your use. You have several ways to preserve battery with the power saving mode, ultra power saving mode, and adjusting the screen resolution.

The Honor 10 scores a 197981 on AnTuTu benchmark

See how the Honor 10 stacks up against the Honor View 10.

AnTuTu HTML5 Test

GPU, UX and Memory Scores from AnTuTu

197981 Benchmark Score from AnTuTu

EMUI 8.1

The Honor 10 ships with the latest EMUI update, bringing the UI to version 8.1. This is the most stock-like version of EMUI that we have seen. A lot of the old ugly icons and UI elements have been replaced. The useful stuff has remained and been improved, lik the built in screen recorder, the camera app, and the very underrated health app.

EMUI is not without its problems though. The settings menu is baffling and difficult to navigate. The EMUI theme engine has always been a disappointment, features ugly themes and very little customization beyond a slightly modified icons pack, and a background image. Then there’s some strange bloatware, like a mirror app that simple activates your front facing camera. So EMUI, while getting better, still have some room for improvement.

EMUI 8.1 Homescreen

EMUI 8.1 App Drawer

EMUI 8.1 Settings Menu

Design

Since the Honor 8, Honor has proven that build quality is a main focus of their flagship line. The iconic light-catching material that makes up the back of the phone appears once again in the Honor 10, this time branded as the aurora glass design. The design looks best on their newest color called Phantom Green, where the light reflections will reveal several different colors beneath the glass surface.

The Honor 10 with Aurora Glass Design.

 

The Dual Lens AI Camera on the Honor 10

 

Honor 10 Notch on the Top of the Display

 

Honor 10 in Black with Aurora Design

 

Conclusion

Having spent two weeks using the Honor 10 as my primary phone, I’ve realized that I like the phone regardless of its AI features. While the AI is fun to play around with, if it was removed from the phone, my experience wouldn’t change much. If you’re looking for this phone to have a revolutionary AI experience, you’re not going to find it. What you will find is a beautiful phone with shockingly good performance and a crazy low price starting at £399.99.

Join the discussions about the Honor 10 in the XDA Forums.

HiHonor WebsiteHonor 10 Forums

]]> Developers are facing huge drop in new installs after Play Store algorithm changes https://www.xda-developers.com/developers-huge-drop-new-installs-play-store-algorithm-changes/ https://www.xda-developers.com/developers-huge-drop-new-installs-play-store-algorithm-changes/#respond Wed, 27 Jun 2018 22:12:25 +0000 https://www.xda-developers.com/?p=223557 Some Android app and game developers are panicking because their daily installation rates have plummeted in the past week. These developers have noticed new downloads slow down by up to 90%. The affected developers quickly realized they were not alone in these changes to their day-to-day app installation rate with multiple threads on Reddit, a]]>

Some Android app and game developers are panicking because their daily installation rates have plummeted in the past week. These developers have noticed new downloads slow down by up to 90%. The affected developers quickly realized they were not alone in these changes to their day-to-day app installation rate with multiple threads on Reddit, a post on the Unity forums, and even a Gamasutra community blog post popping up to help spread the word that something was amiss. Clearly, something is wrong here, and some indie developers are concerned that their livelihood may be at stake. So what’s going on?


Play Store’s Algorithm Quietly Changes, Tanking Some Apps’ Rankings

It appears that sometime last week, Google tweaked the Play Store’s algorithm that determines app discovery. When we reached out to Google about the matter, we were told that Google is regularly evaluating new ways to improve the Play Store’s ranking algorithms to promote high-quality applications. We would like to stress that there is no evidence that Google is altering the algorithm to intentionally harm indie developers in favor of big-name apps (despite rampant speculation otherwise). The changes are aimed at improving the experience for both users and developers alike.

We do not have any details on exactly how the algorithm was changed (which makes sense, as disclosing that information would give an unfair advantage to certain developers) but it’s clear that the changes are making a significant impact on some independent developers.

Here’s just one example of many:

Google Play Store Algorithm Changes

PickCrafter daily installation statistics

The screenshot shown above is from the Developer Console statistics for a game called “PickCrafter.” The developer graciously shared their Play Store installation metrics with us to demonstrate the issue. As you can see, the app hovered around 3,000-4,500 daily installs until the past week when the rate dipped into the low 1,000s.

PickCrafter - Idle Crafting Game (Free+, Google Play) →

This developer isn’t alone by any means. We’ve heard numerous anecdotes from independent developers over on a dedicated Discord group for the issue. They all told us the same story – starting last week their app’s daily installation numbers tanked and haven’t recovered since. Although most of the affected apps appear to be Android games, several non-gaming apps have also been affected. We do not have any details on how many games versus non-games are affected.

Here’s a brief summary of how hard some developers have been hit by the algorithm changes:

  • Developer peanutbutterlabs reports that their daily downloads dipped to 5,000 from an average of 80,000 per day.
  • Developer Butterbean21 reports an 80% drop in their top-performing apps.
  • Developer Jenzo83 reports an 80-90% drop for their games.
  • Developer snoutup reports their rates dropped by “only” 70%.
  • Developer llliorrr reports an 80% drop for 28 out of their 30 apps.
  • Developer AxPetre reports a drop in installation rates from 12,000/day to 5,000/day.
  • Developer slothinspace reports a drop from 1,500+ downloads to 100+.
  • Developer janikkk reports an 80% drop.
  • Developer zenderfile reports a drop from 12,000/day to 1,500/day.
  • Developer livenets reports a drop from 32,000/day to 4,000/day.

And here are some additional screenshots that show a significant drop in installation numbers, courtesy of Redditor alpha724.

Google Play Store Algorithm Changes Google Play Store Algorithm Changes Google Play Store Algorithm Changes

For what it’s worth, XDA-Developers‘s very own Navigation Gestures app has been unaffected by these changes. However, we’re fortunate in that we would be able to survive a change in the algorithm affecting our rankings – after all, we have a strong following on the Portal, our YouTube channel, our Twitter account, etc through which we can promote the app. Independent developers who rely on organic growth via the Play Store don’t have access to such an audience without spending significant income on advertising, so these affected developers are worried that the changes may harm their apps’ success. Developers that rely on ad views for income are especially concerned with the changes since their revenue is directly dependent on the number of ad impressions they get.

What May Have Caused These Drastic Drops In Numbers?

Developers on the Unity forums have eliminated several possibilities behind the changes, including inaccurate installs reported on the Play Developer Console, issues identified through Android vitals, search rankings, summer exams, and the FIFA World Cup. One possible cause behind the issue that has been identified (and which we can confirm) is a mismatch between an app’s category, description, and content with the apps shown on the “Similar Apps” panel. As you can see below, a game called “Kids Cash Register Grocery Free” has a rather odd assortment of “Similar” apps shown for it.

Play Store

Likewise, another issue seems to be that certain categories aren’t loading for desktop users in certain countries. For instance, the “Casino Games” category fails to load for me and several others in the United States and Canada when browsing the Google Play Store on desktop Google Chrome. However, the category does load appropriately on mobile devices and the Play Store accessed from a Chromebook. We doubt that this particular issue is contributing significantly to the drop in numbers that developers are experiencing, but it’s certainly one possibility.

What Actions Developers Can Take

We do not know if the changes are permanent. Regardless, this should be a clear wake-up call for indie developers that any slight change in the Play Store’s ranking algorithm can significantly impact your app’s success. Developers are encouraged to proactively improve their app’s quality. Google has published recommendations on how to do so on the Android Developers Blog and Quality Guidelines documentation page. If Google tweaks the algorithm again or makes a public statement on the matter, we’ll be sure to let you all know.

]]> https://www.xda-developers.com/developers-huge-drop-new-installs-play-store-algorithm-changes/feed/ 0 YouTube picture-in-picture rolling out more widely in the US for non-Red/Premium users https://www.xda-developers.com/youtube-picture-in-picture-rolling-out-us-non-red-premium-users/ https://www.xda-developers.com/youtube-picture-in-picture-rolling-out-us-non-red-premium-users/#respond Tue, 26 Jun 2018 15:55:50 +0000 https://www.xda-developers.com/?p=223146 Google added picture-in-picture mode support for Android smartphones back in 2017 with the release of Android Oreo. For a long time, only the premium version of YouTube (be it YouTube Red or YouTube Premium) supported the feature, which means you had to pay for it. Last month, some people started noticing that the feature was]]>

Google added picture-in-picture mode support for Android smartphones back in 2017 with the release of Android Oreo. For a long time, only the premium version of YouTube (be it YouTube Red or YouTube Premium) supported the feature, which means you had to pay for it. Last month, some people started noticing that the feature was available for them even though they weren’t using a paid service. Today, we’ve noticed that PiP for YouTube is rolling out more widely.

Some of our own writers noted that picture-in-picture mode started working for them today, though we should note that only our writers located in the United States could confirm that PiP was working. It’s common practice for Google to gradually roll out some features, and it seems that picture-in-picture mode support is definitely one of them. From the looks of it, the feature is rolling out via a server-side switch as our writers with the feature noted that they’re using different versions of the application.

A toggle for the picture-in-picture mode feature also appeared in the YouTube settings. It comes with a little instruction about how to use the feature. You can test it pretty easily. After making sure that you’ve toggled picture-in-picture mode in both the YouTube app and system settings, just open up a video and tap on the home button. If you don’t see the PiP toggle in YouTube’s settings, that means that you haven’t received the feature yet.

Please keep in mind that the uploader of the video can restrict access to picture-in-picture mode (which is why most music videos don’t work). As expected, PiP doesn’t work with most music videos. But, it’s great for watching informative XDA videos and other non-music related content.

]]> https://www.xda-developers.com/youtube-picture-in-picture-rolling-out-us-non-red-premium-users/feed/ 0 3 Samsung Galaxy S10 models may launch w/ one having triple cameras https://www.xda-developers.com/3-samsung-galaxy-s10-models-may-launch-w-one-having-triple-cameras/ https://www.xda-developers.com/3-samsung-galaxy-s10-models-may-launch-w-one-having-triple-cameras/#respond Tue, 26 Jun 2018 03:30:52 +0000 https://www.xda-developers.com/?p=221754 We haven’t even made it to the release of the Samsung Galaxy Note 9 which is scheduled for later this year and there have already been a number of rumors for the company’s next Galaxy S series. Rumors have suggested the upcoming flagship from Samsung will have an in-display fingerprint scanner (which, to be fair, has]]>

We haven’t even made it to the release of the Samsung Galaxy Note 9 which is scheduled for later this year and there have already been a number of rumors for the company’s next Galaxy S series. Rumors have suggested the upcoming flagship from Samsung will have an in-display fingerprint scanner (which, to be fair, has been speculated about since the ill-fated Samsung Galaxy Note 7), three cameras on the back, and a sound-emitting OLED display to replace the earpiece speaker. Here’s another rumor to add to that list: The Samsung Galaxy S10 will come in three variants with the biggest one having the previously rumored triple rear cameras. Also, the latest Samsung flagship may be equipped with UFS 3.0 storage chips and LPDDR5 RAM.

There has been talk about the Galaxy S10 having three cameras for a few weeks now but now the notable Chinese publication ETNews (via @UniverseIce) corroborated this rumor and added further details about the Samsung Galaxy S10 variants and some of their features. If true, it looks as if Samsung will be selling three different variants of their 2019 flagship smartphone. The regular device is said to have a 5.8″ display and come equipped with 1 rear camera. Then we have the middle version which will have a 5.8″ display as well but this one will come with 2 rear cameras. Finally, the third model of the Samsung Galaxy S10 will have a big 6.2″ display with 3 rear cameras. In summary:

  • 5.8″ Samsung Galaxy S10 with 1 Rear Camera
  • 5.8″ Samsung Galaxy S10 with 2 Rear Cameras
  • 6.2″ Samsung Galaxy S10 with 3 Rear Cameras

Having a smartphone with three rear cameras isn’t something that everyone will be taking advantage of to its full extent. On the other hand, the storage performance is something that’ll affect everyone’s experiences. According to @UniverseIce, a notable leaker of Samsung products, the Galaxy S10 will have UFS 3.0 flash storage and LPDDR5 RAM. The addition of UFS 3.0 is a benefit that everyone will see as it will impact application and game launch times, document/image/video creation, and much more. Samsung has also been preparing for mass production of LPDDR5 mobile RAM, so we expect to see performance improvements throughout the OS as well. The timeline has things laid out where Samsung could very well implement them into their first 2019 flagship smartphone.

UFS 2.1 vs 3.0

Source: Wikipedia

Just what is UFS? It stands for the Universal Flash Storage standard that debuted in 2011 with version 1.0 and it aims to bring higher data transfer speed and increased reliability to flash memory storage. Over time we have seen this specification updated from version 1.0, to 1.1, to 2.0, then 2.1 and now to version 3.0. UFS 2.0 and 2.1 had a maximum bandwidth limit of 600 MB/s per lane so its two lanes allowed it to hit a theoretical max of 1,200 MB/s. Version 3.0 of the UFS specification was announced and published back in January of this year and promises faster transfer limits, lower power usage, and a number of new features which are mainly suited for the automotive industry. With UFS 3.0 the specification shows that these storage chips will be able to hit a theoretical maximum of 1,450 MB/s per lane and with it also supporting 2 lanes this means it can go as high as 2,900 MB/s.

Android’s storage benchmark scores have fallen behind the competition so this update to flash storage should help to narrow the gap. Ice Universe says that Samsung will begin mass producing both UFS 3.0 chips as well as LPDDR5 RAM chips in the second half of this year which implies that the Galaxy S10 will benefit from these new technologies.

]]> https://www.xda-developers.com/3-samsung-galaxy-s10-models-may-launch-w-one-having-triple-cameras/feed/ 0 LineageOS 15.1 now supports A/B devices starting with the Motorola Moto Z2 Force https://www.xda-developers.com/lineageos-15-1-supports-a-b-devices-moto-z2-force/ https://www.xda-developers.com/lineageos-15-1-supports-a-b-devices-moto-z2-force/#respond Mon, 25 Jun 2018 15:42:00 +0000 https://www.xda-developers.com/?p=222294 One of the more exciting changes that Android Nougat 7.0 brought was the introduction of A/B dual partition scheme for devices launched with this OS version. This change tackled how Android system updates are applied to devices, with the aim to provide a seamless upgrade experience to the user where a simple and quick reboot]]>

One of the more exciting changes that Android Nougat 7.0 brought was the introduction of A/B dual partition scheme for devices launched with this OS version. This change tackled how Android system updates are applied to devices, with the aim to provide a seamless upgrade experience to the user where a simple and quick reboot brings them into the updated OS. This change also added the benefit of a failsafe which ensured that at least one workable booting system remains on the device during an OTA update, allowing devices to “rollback” to the older system if an OTA fails to boot.

Unfortunately, not every device that has received Android 7.0 supports this A/B dual partition scheme. This A/B partition scheme is mostly seen on devices that originally shipped with Android Nougat 7.0+, as updating a device to Nougat and then supporting this change would require a repartitioning, which was considered a risky proposition by many OEMs. Here is a list of devices that support A/B seamless updates. Alternatively, you can also manually check whether your device supports seamless updates.

While the A/B dual partition scheme is largely well received, it did pose a challenge for the custom ROM community. A/B devices did not come with a recovery partition as the Android system did not have a need for these partitions, so the community had to adapt its ways. TWRP v3.1.0 was released with support for A/B devices, while Magisk brought support for A/B devices with version 14.1.

Now, LineageOS 15.1 is adding in support for A/B devices. Support was delayed on 15.1 as the LineageOS team was working to fix their addon.d script. This script is responsible for backing up GApps and Lineage’s SU addon, and it needed modifications to properly work with A/B devices. The following people were involved in making this development happen (apologies if we missed anyone.)

Contributions to making A/B support possible for LineageOS 15.1

  • XDA Recognized Developer invisiblek – Wrote addon.d-v2/backuptool_ab and contributed original patches to for the A/B updater
  • XDA Senior Member npjohnson – Maintained addon.d-v2/backuptool_ab and implemented some fixes. Worked with external projects (OpenGApps/Magisk) to help get them compatible with the new tool.
  • XDA Senior Member abhishek987 – Maintained addon.d-v2/backuptool_ab, helped debug/fix it along the way,
  • gmrt – Set up the A/B seamless updater, added support for a variety of A/B functions in Updater, build.prop exposure to start releasetools for A/B, switch to unresttrict update_engine (WIP)
  • XDA Recognized Developer tdm – Brought Lineage recovery up, the platform to ship on A/B as the built-in recovery
  • XDA Recognized Developer raymanfx – various recovery patches to allow for installing old style zips and newer payload style zips, some AVB tool work, making addonsu A/B compatible
  • XDA Senior Member intervigil – Android Verified Boot logic, and tool to disable/deal with it
  • XDA Inactive Recognized Developer Rashed97 – addon.d contributions and platform login

Initially, only the Motorola Moto Z2 Force (nash) has been added to the roster, with support expected for more devices in the future. The Moto Z2 Force’s build will roll out tomorrowThe Z2 Force’s build is being maintained by XDA Senior Member npjohnson.

We expect the following devices to soon receive support once all of the device-specific bugs have been fixed:

In fact, we expect the Xiaomi Mi A1 to receive support very soon given the comments here. Likewise, a bug related to the Bluetooth MAC needs to be fixed before the build for the Essential Phone will land. We’ll keep you updated once the official LineageOS 15.1 builds for the other A/B devices start to roll out.

]]> https://www.xda-developers.com/lineageos-15-1-supports-a-b-devices-moto-z2-force/feed/ 0 Huawei P20 Pro update adds 960fps slow motion like the Samsung Galaxy S9 https://www.xda-developers.com/huawei-p20-pro-update-960fps-slow-motion/ https://www.xda-developers.com/huawei-p20-pro-update-960fps-slow-motion/#respond Mon, 25 Jun 2018 14:15:00 +0000 https://www.xda-developers.com/?p=222304 Huawei released the P20 trio (Huawei P20, Huawei P20 Lite, and Huawei P20 Pro) back in April. While the Lite version is a mid-range device, the regular P20 and P20 Pro versions are both flagships. In the recent months, Huawei really stepped up their development. The P20 Pro already comes with Android 8.1 Oreo and]]>

Huawei released the P20 trio (Huawei P20, Huawei P20 Lite, and Huawei P20 Pro) back in April. While the Lite version is a mid-range device, the regular P20 and P20 Pro versions are both flagships. In the recent months, Huawei really stepped up their development. The P20 Pro already comes with Android 8.1 Oreo and as it turns out, it’s getting pretty frequent updates too. Last week, Junior Member at XDA Forums, tamaskurti reported that the device got a new update, with build number CLT-L29C432B131.

The first feature in the update is the June security patch. While it’s been about 2 weeks since the release of this patch, it’s still nice to see that Huawei isn’t delaying security updates any further. True, Essential releases security updates almost instantly after they’re available, but Huawei still manages to bring some competition to the table compared to other large OEMs.

The next new feature is camera improvements. The zoom button is now placed lower on the screen. I think it’s much more comfortable to use now. But, for unknown reasons, the button is now square-shaped, instead of a circle. Maybe it fits with overall UI? I don’t really know.

Users also noticed a new slow motion feature, which works just like Samsung Galaxy S9. It starts recording slow motion video as soon as it detects movement. It’s worth noting that we noticed that S9-like slow motion was coming back in March. Here is it in action, courtesy of XDA Senior Member mmeidl78:

XDA Forum member tamaskurti also provided the official changelog:

“This update optimizes system performance and stability.

  • Optimizes power consumption for longer usage.
  • Improves system performance and stability for smoother operations.
  • Optimizes the wallpaper display for a better experience.
  • Fixes an issue where the other party’s voice was occasionally delayed when answering calls while using OK Google.”

As you see, the changes I’ve explained above aren’t even mentioned in an official changelog, which is a bit strange, but it’s a common practice for Huawei already. Nevertheless, this is definitely a welcome update as it contains some new features while improving stability and security. The update will roll out gradually and it will be available on every Huawei P20 Pro soon.


Source: Huawei P20 Pro XDA Forum

]]> https://www.xda-developers.com/huawei-p20-pro-update-960fps-slow-motion/feed/ 0 Xiaomi Mi Pad 4 is official with an 8-inch display and Snapdragon 660 https://www.xda-developers.com/xiaomi-mi-pad-4-official-specifications-features/ https://www.xda-developers.com/xiaomi-mi-pad-4-official-specifications-features/#respond Mon, 25 Jun 2018 13:40:47 +0000 https://www.xda-developers.com/?p=222955 Android tablets may well face a general decline in demand, but clearly, that hasn’t stopped Xiaomi from releasing a new Android tablet. The company’s Mi Pad series of tablets are some of the few Android tablets that are worth recommending because of their respectable specifications and affordable prices, at a time when most Android tablets]]>

Android tablets may well face a general decline in demand, but clearly, that hasn’t stopped Xiaomi from releasing a new Android tablet. The company’s Mi Pad series of tablets are some of the few Android tablets that are worth recommending because of their respectable specifications and affordable prices, at a time when most Android tablets have outdated specifications.

The Xiaomi Mi Pad 3 was released back in April 2017 with the MediaTek MT8176 SoC. We have exclusively reported some of the specifications of its successor, and Xiaomi has now officially launched it alongside the Xiaomi Redmi 6 Pro.

The Xiaomi Mi Pad 4 is not a typical cheap Android tablet. It has a high-resolution display, a capable SoC in the form of the Snapdragon 660, and metal unibody construction. Let’s take a look at its specifications:

Xiaomi Mi Pad 4 – Specifications at a glance

Xiaomi Mi Pad 4

Xiaomi Mi Pad 4 Specifications
Dimensions and weight 200.2 x 120.3 x 7.9 mm, 342.5g
Software MIUI 9 on top of Android 8.1 Oreo
CPU Octa-core Qualcomm Snapdragon 660 (4x Kryo 260 Performance cores clocked at 2.0GHz + 4x Kryo 260 Efficiency cores clocked at 1.8GHz)
GPU Adreno 512
RAM and storage 3GB of RAM with 32GB of storage / 4GB of RAM with 64GB of storage; dedicated microSD card slot
Battery 6000mAh, 5V/2A charging)
Display 8-inch WUXGA (1920×1200) IPS LCD with a 16:10 aspect ratio
Wi-Fi 802.11ac
Bluetooth Bluetooth 5.0
Ports USB Type-C port, 3.5mm headphone jack; LTE version: Nano SIM slot
Bands LTE version:
FDD-LTE: Bands 1/3/5/7/8
TDD-LTE: Bands 34/38/39/40/41
Rear camera 13MP camera with f/2.0 aperture
Video recording up to 1080p at 30fps
Front-facing camera 5MP front-facing camera

The Mi Pad 4 has metal unibody construction, which instantly gives it a more premium look and feel than most budget Android tablets. The tablet has relatively small bezels, and Xiaomi is promoting how it can be used with one hand. The display’s 16:10 aspect ratio also helps in this respect.

Performance

The Xiaomi Mi Pad 4 is powered by the Qualcomm Snapdragon 660 system-on-chip. The SoC has four big cores in the form of the Kryo 260 Performance (based on Arm Cortex-A73) clocked at 2.0GHz (downlocked in the Mi Pad 4), paired with four Kryo 260 Efficiency (Cortex-A53) cores clocked at 1.8GHz. The Snapdragon 660 uses the Adreno 512 GPU, which is more powerful than the Adreno 509 of the Snapdragon 636.

The tablet comes in two variants: 3GB of RAM with 32GB of storage, and 4GB of RAM with 64GB of storage. The storage is expandable via microSD card slot.

Display

The Mi Pad 4 has an 8-inch WUXGA (1920×1200) IPS LCD with a 16:10 aspect ratio. The display’s aspect ratio and resolution are different from its predecessors. Technically, the Mi Pad 4 features a lower resolution display than the Mi Pad 3 and the Mi Pad 2. The move to a 16:10 aspect ratio from a 4:3 aspect ratio may also be thought of as a downgrade for productivity tasks, but opinions on this can vary.

Connectivity

The tablet is powered by a 6000mAh battery with regular 10W charging. It has Wi-Fi 802.11b/g/n/ac, and Bluetooth 5.0, a USB Type-C port, and a 3.5mm headphone jack.

Software

The Xiaomi Mi Pad 4 is powered by MIUI 9 on top of Android 8.1 Oreo, which means that it’s required to have Project Treble support.

Xiaomi Mi Pad 4 – Pricing and availability

The Xiaomi Mi Pad 4 is available in Black and Rose Gold colors. Pre-orders for the device have gone live in China, with availability scheduled for June 29. The 3GB RAM/32GB storage variant costs CNY 1099 ($170), while the 4GB RAM/64GB storage variant costs CNY 1399 ($215). The LTE variant costs CNY 1499 ($230).

Let us know what you think about the Xiaomi Mi Pad 4 in the comments below.

]]> https://www.xda-developers.com/xiaomi-mi-pad-4-official-specifications-features/feed/ 0 ================================================ FILE: api/test/data/feed/zhukun.net ================================================ 月与灯依旧 https://www.zhukun.net 不见去年人, 泪湿春衫袖。 Wed, 20 Jun 2018 10:47:42 +0000 zh-CN hourly 1 https://wordpress.org/?v=4.9.6 godaddy的.app域名申请一年的免费SSL https://www.zhukun.net/archives/8256 https://www.zhukun.net/archives/8256#comments Wed, 20 Jun 2018 10:44:45 +0000 https://www.zhukun.net/?p=8256 继续阅读 ]]> .app域名是谷歌推出的自带免费SSL证书的域名, 如果你在Godaddy购买了.app域名, 那么你的域名会自动带有一年的免费SSL证书(需要在Godaddy申请), 本文简单写一下申请方法.

假设你申请到的域名是example.app

1, 生成csr
参考Godaddy帮助文档里的这篇文章

$ openssl req -new -newkey rsa:2048 -nodes -keyout example.app.key -out example.app.csr

回车以后会问你一些信息,例如国家,城市等,在询问到Common Name (e.g. server FQDN or YOUR name)时建议填写你的域名信息,例如example.app

然后就会生成下面2个文件
example.app.csr
example.app.key

去Godaddy页面上申请SSL证书, 当然, 需要.csr文件中的内容

只需要几分钟, Godaddy会为你准备好证书, Download之. Download的时候, 由于”Server type”没有”Nginx”, 因此我选择了”Other”

2, 准备SSL证书
参考Godaddy帮助文档里的这篇文章

$ unzip example.app.zip

$ ls    #会解压出来2个文件
8a982df92de94106.crt  gd_bundle-g2-g1.crt  example.app.zip

生成example.app.crt文件

cat 8a982df92de94106.crt gd_bundle-g2-g1.crt >> example.app.crt

3, 配置nginx
把上面的example.app.key和example.app.crt加入到nginx的配置中即可, 这部分不再多说.

$ sudo vim /etc/nginx/sites-available/example.app
server {
        listen 80;
        server_name example.app www.example.app;
        return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;

    server_name example.app www.example.app;
    ssl_certificate     /etc/nginx/ssl/example.app.crt;
    ssl_certificate_key /etc/nginx/ssl/example.app.key;

    root /usr/www/example.app/;
    index index.php  index.html index.htm;

}
]]>
https://www.zhukun.net/archives/8256/feed 1
VMware性能优化 https://www.zhukun.net/archives/8251 https://www.zhukun.net/archives/8251#comments Sat, 12 May 2018 06:47:48 +0000 https://www.zhukun.net/?p=8251 继续阅读 ]]> VMware Player里安装的虚拟机一般都特别卡(即使你的物理机配置很高), 原因是VMware默认设定在本地生成一个swap文件来当作虚拟机的内存(这能不卡吗??), 本文介绍一些优化参数.

将以下选择写入到你的.vmx文件中(仅适用Windows物理机)

MemTrimRate = "0" 
mainMem.useNamedFile = "FALSE"
sched.mem.pshare.enable = "FALSE" 
prefvmx.useRecommendedLockedMemSize = "TRUE"

如果你的物理机是Linux而不是Windows则需要用如下选项代替上面的mainMem.useNamedFile = “FALSE”

mainmem.backing = "swap"

参考文档
Windows 7 kills VMWare performance by disk caching?

]]>
https://www.zhukun.net/archives/8251/feed 1
交叉编译golang程序 https://www.zhukun.net/archives/8250 https://www.zhukun.net/archives/8250#respond Sat, 12 May 2018 04:26:26 +0000 https://www.zhukun.net/?p=8250 继续阅读 ]]> 本文演示了在ubuntu16.04上交叉编译golang程序的过程

配置本地golang环境

$ wget https://dl.google.com/go/go1.10.2.linux-amd64.tar.gz

$ tar zxvf go1.10.2.linux-amd64.tar.gz

$ sudo mv go /usr/local/

$ echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.profile
$ echo 'export GOROOT=/usr/local/go' >> ~/.profile
$ echo 'export GOPATH=~/go' >> ~/.profile      #v2ray的工作目录,down下来的源码和编译生成的文件均在这里

$ source ~/.profile && echo $GOPATH

$ go version
go version go1.10.2 linux/amd64

交叉编译golang程序

$ go get -u v2ray.com/core/...
$ go get -u v2ray.com/ext/...

$ go install v2ray.com/ext/tools/build/vbuild

$ $GOPATH/bin/vbuild -os=linux -arch=arm

编译完成的程序位于$GOPATH目录下.

参考文档
V2Ray 的模块化

]]>
https://www.zhukun.net/archives/8250/feed 0
NGINX on CentOS 7: Install a SSL Certificate(from Godaddy ) https://www.zhukun.net/archives/8248 https://www.zhukun.net/archives/8248#respond Thu, 10 May 2018 05:32:41 +0000 https://www.zhukun.net/?p=8248 继续阅读 ]]> https://www.godaddy.com/help/nginx-on-centos-7-install-a-certificate-27192

]]>
https://www.zhukun.net/archives/8248/feed 0
我要出家当和尚去……… https://www.zhukun.net/archives/8247 https://www.zhukun.net/archives/8247#comments Fri, 04 May 2018 05:03:45 +0000 https://www.zhukun.net/?p=8247 继续阅读 ]]> 我要出家当和尚去
某个大雨倾盆的夜晚
你会偷偷来看我吗
唉,还是别来吧
我会拒绝与你相认

不要在山门静坐
不要和方丈软磨硬泡
不要伪装虔诚的香客
我拒绝与你相认
我在禅房看竖排繁体的肉蒲团

我再也不相信爱情了
猪肉都吃不起
还留在滚滚红尘干啥
如果你非要找我再续前缘
那就——带上一斤绝味鸭脖吧

鸳鸯偎,蝴蝶双飞
小雨在烟雾里盘着腿
你知道在哪里能找到我
女道观的隔壁,墙根下面

——南无阿弥陀佛,在吗?
——急急如律令,快进来!

]]>
https://www.zhukun.net/archives/8247/feed 2
remove pCloud Drive on Ubuntu/Debian https://www.zhukun.net/archives/8245 https://www.zhukun.net/archives/8245#respond Tue, 24 Apr 2018 15:58:09 +0000 https://www.zhukun.net/?p=8245 继续阅读 ]]> Remove pCloud Drive on Ubuntu/Debian system.

1, remove autostart from Tweaks Tool
2, run command

killall pcloud
\rm -rf ~/.pcloud
\rm -rf ~/.local/share/applications/appimagekit-pcloud.desktop
\rm -rf /tmp/.mount_pcloud*
\rm -rf /tmp/pcloud_unix_soc.sock

3, reboot.

]]>
https://www.zhukun.net/archives/8245/feed 0
Django parse a json/dictionary reminder on template https://www.zhukun.net/archives/8242 https://www.zhukun.net/archives/8242#respond Fri, 20 Apr 2018 03:16:43 +0000 https://www.zhukun.net/?p=8242 继续阅读 ]]> 如果想在一个Django template里引入json, 正确的template写法为

python的views.py的写法

# -*- coding: utf-8 -*-
from django.shortcuts import render
from django.http import Http404, HttpResponse

def get_product(request):
    context1 = {}
    context1['env'] = 'production'
    context1['mydict'] = {"key1":"value1", "key2":"value2", "key3":"value3", "key4":"value4"}
    context1['days'] = [1,2,3]

    if request.GET.get("item") == "ec2" or not request.GET.get("item"):
        return render(request, 'main_content.html', context1)
    else:
        raise Http404()

main_content.html使用extends引入index.html

{% extends 'index.html' %}
    {% block content %}
        {% for day in days %}
        <li>day: {{ day }}</li>
        {% endfor %}
    {% endblock %}

index.html使用include引入sidebar.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <div class="header">My page</div>
    <div class="content">
        <div class="sidebar">

            <ul>
                {% if env == 'production' %}
                    {% include 'production.sidebar.html' %}
                {% elif env == 'development' %}
                    {% include 'development.sidebar.html' %}
                {% elif env == 'staging' %}
                    {% include 'staging.sidebar.html' %}
                {% elif env == 'legacy' %}
                    {% include 'legacy.sidebar.html' %}
                {% endif %}
            </ul>

        </div>
        <div class="maincontent">

            {% block content %} {% endblock %}

        </div>
    </div>
</body>
</html>

production.sidebar.html的写法, 注意, 在django template里面是使用.items去遍历所有的key:value的

<li><a href="/api/production/?item=10">production.sub1</a></li>
<li><a href="/api/production/?item=11">production.sub2</a></li>
<li><a href="/api/production/?item=12">Production.sub3</a></li>

{% for id, name in mydict.items %}
<li><a href="/api/production/?item=13&id={{ id }}">production.sub{{ name }}</a></li>
{% endfor %}

参考: how to access dictionary element in django template?

]]>
https://www.zhukun.net/archives/8242/feed 0
iptables delete some rules form a chain https://www.zhukun.net/archives/8239 https://www.zhukun.net/archives/8239#respond Sun, 18 Mar 2018 16:49:07 +0000 https://www.zhukun.net/?p=8239 以下两条命令均可用

iptables -t nat -L PREROUTING --line-numbers | grep RULE_NAME | cut -d" " -f 1 | xargs iptables -t nat -D PREROUTING

for i in $(iptables -t nat -nvL PREROUTING --line-numbers | grep RULE_NAME | grep ^[0-9] | awk '{ print $1 }' | tac); do iptables -t nat -D PREROUTING $i; done
]]>
https://www.zhukun.net/archives/8239/feed 0
How to run a crontab job every X seconds https://www.zhukun.net/archives/8235 https://www.zhukun.net/archives/8235#respond Mon, 26 Feb 2018 02:49:47 +0000 https://www.zhukun.net/?p=8235 继续阅读 ]]> 如果你有一个job, 需要每隔5秒运行一次.

以下写法是错误的

* * * * * sleep 5; /bin/cmd

如果使用这种写法, 会导致在每分钟的第0秒开始, sleep 5秒以后, 再运行/bin/cmd, 然尔运行完就结束了, 不会每隔5秒运行一次.

正确写法1

* * * * * for i in {1..12}; do /bin/cmd; sleep 5; done

正确写法2

* * * * * REMAIN=60 INC=5 ; while ; do /bin/cmd; sleep $INC; REMAIN=$(($REMAIN - $INC)); done

正确写法3

* * * * * /bin/cmd
* * * * * sleep 5; /bin/cmd
* * * * * sleep 10; /bin/cmd
* * * * * sleep 15; /bin/cmd
......
* * * * * sleep 55; /bin/cmd

可以使用systemctl status cron.service -l命令看看cron服务的状态以及最新日志.

参考: How to run a cronjob every X seconds in cron

]]>
https://www.zhukun.net/archives/8235/feed 0
Ubuntu change password in one command line https://www.zhukun.net/archives/8234 https://www.zhukun.net/archives/8234#comments Wed, 21 Feb 2018 15:50:41 +0000 https://www.zhukun.net/?p=8234 继续阅读 ]]> echo user:pass | /usr/sbin/chpasswd

according to https://serverfault.com/questions/336298/can-i-change-a-user-password-in-linux-from-the-command-line-with-no-interactivit

]]>
https://www.zhukun.net/archives/8234/feed 1
================================================ FILE: api/test/data/not-a-url.opml ================================================ Subscriptions ================================================ FILE: api/test/data/og/bildblog.html ================================================ Exklusives Fake-Interview, Macht und Deutungshoheit, Heidis Abgründe — BILDblog

Exklusives Fake-Interview, Macht und Deutungshoheit, Heidis Abgründe

1. „TV Movie“ erfindet Exklusiv-Interview mit „Tatort“-Stars
(dwdl.de, Thomas Lückerath)
Die aktuelle „TV Movie“ wirbt mit einem „Exklusiv-Interview“ mit den „Tatort“-Kommissaren Jan Josef Liefers und Axel Prahl, doch einiges spricht dafür, dass das Gespräch nie stattgefunden hat: Das „Interview“ besteht aus bekannten Textschnipseln und auch die Agentur der beiden Schauspieler weiß von keinem Gespräch. „DWDL“ hat die Bauer Media Group um eine Stellungnahme gebeten. Dort hat man sich 26 Stunden später die folgenden sibyllinischen Worte abgerungen: „Wir sind davon ausgegangen, dass diese Veröffentlichung ordnungsgemäß erfolgt ist. In der Kürze der Zeit können wir leider nicht mehr zu diesem Thema sagen“.

2. FR-Miteigentümer Schöningh: „Unsere Gesprächspartner sitzen jetzt in Hannover“
(horizont.net, Ulrike Simon)
Bereits am Mittwoch schrieb Uwe Vorkötter über die „gemeinsame Sache“ der Medienhäuser DuMont und Madsack, die in Wirklichkeit eine Kapitulation DuMonts sei (Kölsche Kapitulation, horizont.net). Nun beschäftigt sich Ulrike Simon mit den möglichen Auswirkungen auf die „Frankfurter Rundschau“.

3. Der Fall Asef N.: „Es geht um Macht und Deutungshoheit“
(nordbayern.de, Hans-Peter Kastenhuber)
Rund ein Jahr ist es her, dass ein Berufsschullehrer bei den „Nürnberger Nachrichten“ anruft und aufgeregt von einer Polizeiaktion an seiner Schule berichtet. Eine Redakteurin fährt sofort zum Ort des Geschehens und erlebt, wie ein abgelehnter 21-jähriger Asylbewerber aus Afghanistan auf rabiate Weise festgenommen wird. Als sie Tags darauf in der Zeitung die hässlichen Begleitumstände des brutalen Polizeieinsatzes erwähnt, wird sie angefeindet und teilweise übel beleidigt. Mit ihrer Wahrnehmung ist die Journalistin jedoch nicht alleine: Auch ein anwesender Dekan und ein Pressefotograf sind entsetzt. Doch Polizei und CSU-Landesregierung verkünden ihre eigene Wahrheit und begründen den Einsatz mit einer angeblichen Unterwanderung der protestierenden Schüler durch „militante Abschiebegegner“ und linke Chaoten.

4. So setzen sieben deutsche Publisher Facebook-Gruppen ein
(markheywinkel.de)
Der Journalist Mark Heywinkel hat sich umgehört, ob Medien nach Facebooks Änderung des Newsfeeds und Herunterstufung von Seiteninhalten nun verstärkt auf Facebook-Gruppen setzen und wie sie dabei verfahren. Seine zusammengetragenen Erfahrungsberichte ergeben ein interessantes Stimmungsbild: Es ist nicht einfach, aber zumindest alle sind dabei.

5. Heidi ist der Häuptling im Macho-Dorf
(sueddeutsche.de, Carolin Gasteiger)
Viele Menschen schauen sich auch heutzutage das bereits 13 Jahre alte TV-Format „Germany’s Next Topmodel“ (GNTM) an. Dabei gehöre dieser „Abgrund an Menschenfeindlichkeit“ abgeschafft, wie Carolin Gasteiger fordert. Wer einschalte, mache sich mitschuldig: „Man kann GNTM im Jahr 2018 aber nicht mehr ansehen ohne eine Haltung dazu zu entwickeln. Ohne sich einzugestehen, wie ungeniert junge Mädchen ausgenutzt und vorgeführt werden. Ohne zu erkennen, wie falsch und überholt dieses Format ist.“

6. Küss die Hand
(zeit.de, Francesco Giammarco)
Zuschauer des „Neo Magazin Royale“ kennen William Cohn als den onkelhaften Typ mit den quietschigen Pullovern und der tiefen Märchenerzähler-Stimme. Wer ist dieser Cohn? Francesco Giammarco hat sich mit ihm während einer S-Bahn-Fahrt durch Berlin unterhalten.

================================================ FILE: api/test/data/og/google.html ================================================ Google
The 2018 NBA Finals
Watch every game live on YouTube TV
NO THANKS
TRY IT NOW
================================================ FILE: api/test/data/og/kotaku.html ================================================ BlazBlue: Cross Tag Battle Is Dead Simple By Design

BlazBlue: Cross Tag Battle Is Dead Simple By Design

Since its debut in 2008, the BlazBlue franchise has enjoyed a decade of serious growth, with four mainline installments, various revisions, and an expansive cast that rivals even its Arc System Works cousin Guilty Gear. The latest game, BlazBlue: Cross Tag Battle, is a two-on-two crossover fighter that landed in North America today. With characters from Persona 4 Arena, Under Night In-Birth Exe:Late, RWBY, and, of course, BlazBlue, this is an ambitious project that strays from the developer’s traditional path in multiple ways. Compete recently spoke with director Toshimichi Mori about how this release came to fruition and where he sees it fitting into the fighting game landscape.

BlazBlue: Cross Tag Battle began its life over three years ago as a BlazBlue-exclusive title, but Mori felt the new style of gameplay was a chance to “reset the entire playing field” and create a more unique product. This meant paring down the core combat mechanics that had been expanding for years and introducing new franchises to the BlazBlue universe.

The former was daunting, especially when adding in characters and mechanics from radically different franchises. Mori’s team took a variety of steps to simplify BlazBlue: Cross Tag Battle as a way to prevent system bloat, alleviate the need for a complicated controller, and reduce the skill gap between mid- and high-level players.

“I wanted to make it as easy as possible...well, maybe easy’s not the right word,” Mori told Compete. “I wanted to make it as accessible as possible. For one, I reset the entire control scheme to give everyone the same starting line. And second...let’s be honest, arcade sticks are pretty expensive, right? Again, not accessible. Then, there’s the roster. It would be way too much for people to remember. The entire concept around BlazBlue: Cross Tag Battle is to create a fighting game that forgives a little difference in skill and still remains playable and, most importantly, enjoyable.”

Mori’s philosophy is reflected in BlazBlue: Cross Tag Battle’s basic control scheme. Gone are complicated motions, replaced by simple quarter-circles or down-down inputs. Every mechanic is bound to one or two buttons, and characters can even perform simple auto-combos with the repeated press of a single attack. These systems naturally expand and become more complex as they’re used in conjunction, but the barrier for entry has been significantly reduced for new players.

Advertisement

In another interview from earlier this year, Mori explained that his impetus for reducing complexity in BlazBlue: Cross Tag Battle was to reduce the gap between Japanese and non-Japanese players in competition. I found his line of reasoning wholly unsatisfying: I don’t think Japanese players are inherently superior, and believe the performance gap is mostly due to release delays in Western countries and problems with online stability. I asked Mori about this; he mostly didn’t answer, although he did say that Cross Tag Battle was not a game “designed solely for the purpose of competition.”

(It should be noted that a developer’s intentions have little bearing on how a game’s competitive future shakes out. Super Smash Bros. director Masahiro Sakurai has repeatedly stated that he doesn’t consider the franchise a purely competitive property and has even implemented mechanics that negatively impact high-level play, but that hasn’t stopped a dedicated tournament scene from springing up around every release in the series.)

Unlike the years of work Mori’s team spent paring down the complex mechanics from earlier in the BlazBlue series, the foundations for adding new characters from other properties were laid in one interview. In 2016, Mori told Forbes that he wanted to work with the RWBY property, an anime-style web series produced by Rooster Teeth. He was drawn to the individuality of the main cast and mentioned that he hoped to spearhead such a project if the franchise ever became a fighting game. Shortly after the interview was published, Rooster Teeth reached out to Arc System Works, and two years later, their characters are in Mori’s game.

In addition to the RWBY girls, BlazBlue: Cross Tag Battle also introduces characters from Persona 4 Arena, the 2012 fighting game spin-off of the popular Persona roleplaying series, and Under Night In-Birth, the latest from famed Melty Blood developers French Bread and Ecole Software. Arc System Works is intimately familiar with both franchises (they helped develop the former and publish the latter), but instead of creating a neutral ground for these characters to meet, they chose to insert them into the existing BlazBlue universe. When asked about this decision, Mori briefly mentioned “politics beyond my control” as a cause but did not elaborate.

Advertisement

The commitment to accessibility also extends to the price point, though there’s a catch. At $49.99, BlazBlue: Cross Tag Battle is $10 less than the typical video game release, but it’s packaged with a a divisive downloadable content campaign. Arc System Works launched the game in beta with 20 characters supported by another 20 released by additional fees and was immediately hit with a barrage of complaints. Fans complaining to fighting game developers is nothing new, but locking half the roster behind a paywall was particularly blatant, especially when some RWBY cast members were free and some were not. The developer eventually announced that the additional RWBY characters would be free to download and claimed that even with the additional paid downloads, the game would still not cost more than a standard video game.

“The entire concept was to price the game competitively with a full-packaged game when you purchase all the characters,” Mori explained. “I think the even bigger issue is the difference in perception across Japan and the United States. This was a big learning experience for me, too. We really wanted the players to play the game as long as possible. And no joke, we’re in the middle of developing the remaining characters, as we speak. The characters need to function within a tag-team system, which, believe it or not, takes a lot of work. ‘Oh the sprites are already done, so just drop them in!’ I’m afraid it doesn’t work that way. I think the biggest mistake I made with BlazBlue: Cross Tag Battle was focusing too much on [Japanese] consumers. We didn’t have enough research of [non-Japanese] markets.”

As it stands now, BlazBlue: Cross Tag Battle includes characters from four separate franchises, and Mori says it’s “feasible” to add more cameos based on the game’s performance. (Datamining has uncovered voice files that point towards characters from the “unapologetically pervy” Senran Kagura appearing in the game, for instance, but Mori wouldn’t comment on that.) He doesn’t want to “spawn out new characters like rabbits,” though—he has to save some ideas for the next BlazBlue and, Mori confirmed, future Persona projects. This is Arc System Works’ first indication of a new Persona-based fighter since the release of Persona 4 Arena Ultimax in 2013, during which time an entirely new installment of the main series, 2016's Persona 5, was released.

Advertisement

BlazBlue: Cross Tag Battle comes out at an odd time for fighting games. Releases are coming more frequently than ever, and tournaments have gone from low-key church basement gatherings to filling arenas in a few years. With the failure of Marvel vs. Capcom: Infinite, the fighting game community is desperate for a competent team-based fighting game. Dragon Ball FighterZ succeeded in part thanks to its adherence to classic Versus gameplay, but BlazBlue: Cross Tag Battle is making waves in a completely different market. By mixing anime sensibilities with typical Versus mechanics, Arc System Works has developed something truly unique that they hope can bring players together no matter their skill level.

BlazBlue players are hoping to support Cross Tag Battle alongside the main franchise, but that’s not entirely feasible outside specialized tournaments like CEOtaku, which focuses entirely on anime-inspired titles. Evo 2018, the largest fighting game competition in the world, will feature Cross Tag Battle instead of the latest mainline release, BlazBlue: Central Fiction.

Advertisement

“I see it as a great transition for players on the sidelines, players who are interested in 2D fighting games but are too afraid of the barrier to entry,” Mori said of where he sees BlazBlue: Cross Tag Battle fitting into the genre. “In fact, I hope that it will fill that gap. The game’s tempo is really speedy, too. With that demo we recently released, I saw a lot of players say, ‘Wow, time flew by and I didn’t even realize it.’ Not just that, but some of the players said they really didn’t play fighting games much before, and hours flew by. How cool is that? That’s great for the fighting game scene.”

“I want to turn BlazBlue and the BlazBlue: Cross Tag Battle series into a piece of content that will answer everyone’s expectations,” Mori added. “We’re going to do everything we can to meet those expectations.”

Compete is Deadspin and Kotaku’s joint site dedicated to competitive gaming.

Ian Walker loves fighting games and writing about them. You can find him on Twitter at @iantothemax.

================================================ FILE: api/test/data/og/techcrunch.html ================================================ What to expect at WWDC 2018 – TechCrunch

What to expect at WWDC 2018

iOS, MacOS and more will take center stage at Apple's World Wide Development Conference next week

According to the calendar, it’s somehow already June. That means Apple’s annual Worldwide Developers Conference is just around the corner. As matter of fact, things kick off in San Jose on Monday morning at 10AM PT (1PM ET).

As ever, the main thrust of the show will be focused on developers — it’s right there in the name — but Apple also loves to use yearly spotlight as an opportunity to make some big announcements on the consumer side, as well. iOS and MacOS will no doubt be the focus of the show per usual, but ARKit, Home Kit, Watch OS and some hardware are likely to make strong showings at the event, as well.

Apple’s certainly surprised us before, but here’s our best (educated) guesses at what the company will be showing off in the next week.

iOS

The company dropped the latest update to its mobile operating system just week. 11.4 provides some key insight into the state of the ecosystem and, perhaps, a glimpse into where Apple is going as it continues to build connections between its various software offerings. The home was the key this time out, as the company added AirPlay and improved HomePod functionality, among others.

A glimpse at iOS 12 could well be on the schedule for Monday morning. From the sound of leaks, rumors and the like, this latest major upgrade is more about increasing the overall stability of the operating system, rather than focusing on the latest flashy features — including bug fixes and helping improve the updates introduced in its predecessor.

That said, there’s likely to be at least a few interesting new, consumer-facing additions to iOS this time out. NFC-based door unlocking is one of the more compelling rumors, this time around, bringing even more highly personal functionality to Apple’s handsets.

A bigger push into personal health seems like a no-brainer, given everything that Apple’s been focusing on with its wearable. Just this morning, word of a new digital well being features made the rounds, bringing into sharp focus the amount of time users spend on their devices. If “Digital Health” does get added here, it will join the likes of Facebook and Google in a push to give users more insight into their hardware habits.

MacOS

Apple’s desktop operating seems poised to get a little less love that its mobile counterpart, this time out — but honestly, what else is new? In fact, the biggest rumor on this front is the addition of so-called “Universal Apps,” which further blur the line between desktop and mobile. The system would essentially provide seamless syncing between apps on the two operating systems, allowing users to switch between devices, picking up where they left off.

WatchOS
In spite of a recent rename, Wear OS got virtually no love at Google I/O the other week. But Apple’s own wearable initiative has been a much more consistent success story for the company. While the company seems unlikely to actually show off a newer version of the watch itself, we’ll probably get a glimpse at Watch OS 5. What, exactly the wearable OS will look like, however, is strictly conjecture at the moment, though the long-awaited addition of Spotify has been rumored, and fitness features, as ever, seem like a no-brainer.

ARKit

Speaking of no-brainers, Apple could use some news on the augmented reality front, after a full year of hype. ARKIT 2.0 has been rumored for the event, bringing the ability for multiple users to share the same AR environment, to facilitate IRL multi-person games and other activities.

Hardware

This being a developer conference, hardware is never the primary focus for the event, but it always seems to sneak its way in. After all, Apple’s already got the eyes of the tech world on it this week, so why announce some new gadgets?

New MacBook Pros seem like a reasonable candidate for the event. New Intel processors under the hood are the likeliest addition on that front. And then there’s the whole keyboard bit. The new switches have been a headache for the company since they were launched back in 2016, including reports of increased failure rates and the looming specter of class action suits. Now would be the perfect chance for the company to introduce a new-new version of the QWERTY.

Rumors have always been floating around with regard to a new MacBook Air — a product that’s been MIA for some time now, particularly in the wake of the new standard MacBook. A cheaper version of the once revolutionary laptop is said to be coming at some point this year, and WWDC could be just the right launching pad.

iPhones seem pretty unlikely here, given the release schedule the company has adhered to, but much like the MacBook Air, the iPhone SE is due for a refresh. Perhaps the company will mix things up by tossing the four-inch iPhone into the mix.

AirPower is yet another wildcard. The company announced its all-device wireless charging pad in the fall, and we’ve not heard hide nor hair of it since, which is pretty unlike Apple. Maybe we’ll actually get a release timeframe this time out? Also potentially on the list are a refreshed iPad Pro, which was missing at Apple’s recent education event and a cheaper HomePod. The latter seems the least likely of the bunch, but Apple’s smart speaker will likely get some love this time out.

================================================ FILE: api/test/data/og/techcrunch_broken.html ================================================ What to expect at WWDC 2018 – TechCrunch

What to expect at WWDC 2018

iOS, MacOS and more will take center stage at Apple's World Wide Development Conference next week

According to the calendar, it’s somehow already June. That means Apple’s annual Worldwide Developers Conference is just around the corner. As matter of fact, things kick off in San Jose on Monday morning at 10AM PT (1PM ET).

As ever, the main thrust of the show will be focused on developers — it’s right there in the name — but Apple also loves to use yearly spotlight as an opportunity to make some big announcements on the consumer side, as well. iOS and MacOS will no doubt be the focus of the show per usual, but ARKit, Home Kit, Watch OS and some hardware are likely to make strong showings at the event, as well.

Apple’s certainly surprised us before, but here’s our best (educated) guesses at what the company will be showing off in the next week.

iOS

The company dropped the latest update to its mobile operating system just week. 11.4 provides some key insight into the state of the ecosystem and, perhaps, a glimpse into where Apple is going as it continues to build connections between its various software offerings. The home was the key this time out, as the company added AirPlay and improved HomePod functionality, among others.

A glimpse at iOS 12 could well be on the schedule for Monday morning. From the sound of leaks, rumors and the like, this latest major upgrade is more about increasing the overall stability of the operating system, rather than focusing on the latest flashy features — including bug fixes and helping improve the updates introduced in its predecessor.

That said, there’s likely to be at least a few interesting new, consumer-facing additions to iOS this time out. NFC-based door unlocking is one of the more compelling rumors, this time around, bringing even more highly personal functionality to Apple’s handsets.

A bigger push into personal health seems like a no-brainer, given everything that Apple’s been focusing on with its wearable. Just this morning, word of a new digital well being features made the rounds, bringing into sharp focus the amount of time users spend on their devices. If “Digital Health” does get added here, it will join the likes of Facebook and Google in a push to give users more insight into their hardware habits.

MacOS

Apple’s desktop operating seems poised to get a little less love that its mobile counterpart, this time out — but honestly, what else is new? In fact, the biggest rumor on this front is the addition of so-called “Universal Apps,” which further blur the line between desktop and mobile. The system would essentially provide seamless syncing between apps on the two operating systems, allowing users to switch between devices, picking up where they left off.

WatchOS
In spite of a recent rename, Wear OS got virtually no love at Google I/O the other week. But Apple’s own wearable initiative has been a much more consistent success story for the company. While the company seems unlikely to actually show off a newer version of the watch itself, we’ll probably get a glimpse at Watch OS 5. What, exactly the wearable OS will look like, however, is strictly conjecture at the moment, though the long-awaited addition of Spotify has been rumored, and fitness features, as ever, seem like a no-brainer.

ARKit

Speaking of no-brainers, Apple could use some news on the augmented reality front, after a full year of hype. ARKIT 2.0 has been rumored for the event, bringing the ability for multiple users to share the same AR environment, to facilitate IRL multi-person games and other activities.

Hardware

This being a developer conference, hardware is never the primary focus for the event, but it always seems to sneak its way in. After all, Apple’s already got the eyes of the tech world on it this week, so why announce some new gadgets?

New MacBook Pros seem like a reasonable candidate for the event. New Intel processors under the hood are the likeliest addition on that front. And then there’s the whole keyboard bit. The new switches have been a headache for the company since they were launched back in 2016, including reports of increased failure rates and the looming specter of class action suits. Now would be the perfect chance for the company to introduce a new-new version of the QWERTY.

Rumors have always been floating around with regard to a new MacBook Air — a product that’s been MIA for some time now, particularly in the wake of the new standard MacBook. A cheaper version of the once revolutionary laptop is said to be coming at some point this year, and WWDC could be just the right launching pad.

iPhones seem pretty unlikely here, given the release schedule the company has adhered to, but much like the MacBook Air, the iPhone SE is due for a refresh. Perhaps the company will mix things up by tossing the four-inch iPhone into the mix.

AirPower is yet another wildcard. The company announced its all-device wireless charging pad in the fall, and we’ve not heard hide nor hair of it since, which is pretty unlike Apple. Maybe we’ll actually get a release timeframe this time out? Also potentially on the list are a refreshed iPad Pro, which was missing at Apple’s recent education event and a cheaper HomePod. The latter seems the least likely of the bunch, but Apple’s smart speaker will likely get some love this time out.

================================================ FILE: api/test/data/og/techcrunch_instagram.html ================================================ How Instagram’s algorithm works – TechCrunch

How Instagram’s algorithm works

Instagram users were missing 70 percent of all posts and 50 percent of their friends’ posts before the app ditched the reverse chronological feed for an algorithm in July 2016. Despite backlash about confusing ordering, Instagram now says relevancy sorting has led to its 800 million-plus users seeing 90 percent of their friends’ posts and spending more time on the app.

Yet Instagram has never explained exactly how the algorithm chooses what to show you until today. The Facebook-owned company assembled a group of reporters at its under-construction new San Francisco office to take the lid off the Instagram feed ranking algorithm.

Instagram product lead Julian Gutman explains the algorithm

Instagram’s feed ranking criteria

Instagram relies on machine learning based on your past behavior to create a unique feed for everyone. Even if you follow the exact same accounts as someone else, you’ll get a personalized feed based on how you interact with those accounts.

Three main factors determine what you see in your Instagram feed:

  1. Interest: How much Instagram predicts you’ll care about a post, with higher ranking for what matters to you, determined by past behavior on similar content and potentially machine vision analyzing the actual content of the post.
  2. Recency: How recently the post was shared, with prioritization for timely posts over weeks-old ones.
  3. Relationship: How close you are to the person who shared it, with higher ranking for people you’ve interacted with a lot in the past on Instagram, such as by commenting on their posts or being tagged together in photos.

Beyond those core factors, three additional signals that influence rankings are:

  • Frequency: How often you open Instagram, as it will try to show you the best posts since your last visit.
  • Following: If you follow a lot of people, Instagram will be picking from a wider breadth of authors so you might see less of any specific person.
  • Usage: How long you spend on Instagram determines if you’re just seeing the best posts during short sessions, or it’s digging deeper into its catalog if you spend more total time browsing.

Instagram mythbusting

Instagram’s team also responded to many of the most common questions and conspiracy theories about how its feed works. TechCrunch can’t verify the accuracy of these claims, but this is what Instagram’s team told us:

  • Instagram is not at this time considering an option to see the old reverse chronological feed because it doesn’t want to add more complexity (users might forget what feed they’re set to), but it is listening to users who dislike the algorithm.
  • Instagram does not hide posts in the feed, and you’ll see everything posted by everyone you follow if you keep scrolling.
  • Feed ranking does not favor the photo or video format universally, but people’s feeds are tuned based on what kind of content they engage with, so if you never stop to watch videos you might see fewer of them.
  • Instagram’s feed doesn’t favor users who use Stories, Live, or other special features of the app.
  • Instagram doesn’t downrank users for posting too frequently or for other specific behaviors, but it might swap in other content in between someone’s if they rapid-fire separate posts.
  • Instagram doesn’t give extra feed presence to personal accounts or business accounts, so switching won’t help your reach.
  • Shadowbanning is not a real thing, and Instagram says it doesn’t hide people’s content for posting too many hashtags or taking other actions.

Today’s Instagram whiteboard session with reporters, its first, should go a long way to clearing up misunderstandings about how it works. When people feel confident that their posts will reach their favorite people, that they can reliably build a public audience, and that they’ll always see great content, they’ll open the app more often.

Yet on the horizon looms a problem similar to what Facebook’s algorithm experienced around 2015: competition reduces reach. As more users and businesses join Instagram and post more often, but feed browsing time stays stable per user, the average post will get drowned out and receive fewer views. People will inevitably complain that Instagram is trying to force them to buy ads, but it’s a natural and inevitable consequence of increasingly popular algorithmic feeds.

The more Instagram can disarm that problem by pushing excess content creation to Stories and educating users about how the feed operates, the less they’ll complain. Facebook is already uncool, so Instagram must stay in our good graces.

================================================ FILE: api/test/data/podcast-feed/a16z ================================================ Andreessen Horowitz https://a16z.com Software Is Eating the World Wed, 06 Jun 2018 05:55:38 +0000 en hourly 1 http://wordpress.com/ https://a16z.files.wordpress.com/2017/12/cropped-a16z-favicon.png?w=32 Andreessen Horowitz https://a16z.com 32 32 ================================================ FILE: api/test/data/podcast-feed/atlantamonster ================================================ Atlanta Monster http://atlantamonster.com en Copyright 2017 HowStuffWorks and Tenderfoot TV From the producers of Up and Vanished and HowStuffWorks, Atlanta Monster aims to tell the true story of one of Atlanta’s darkest secrets, almost 40 years later. http://static.megaphone.fm/podcasts/84e4a5c4-2de7-11e8-98b7-87f52d4374c4/image/uploads_2F1521733294980-xkcadcjrpar-7faa79cc84d505be934000c158cf54f5_2Fatlanta-monster-main-art.jpg Atlanta Monster http://atlantamonster.com episodic Atlanta Monster HowStuffWorks & Tenderfoot TV From the producers of Up and Vanished and HowStuffWorks, Atlanta Monster aims to tell the true story of one of Atlanta’s darkest secrets, almost 40 years later. HowStuffWorks & Tenderfoot TV applepodcast@howstuffworks.com https://feeds.megaphone.fm/atlantamonster Live from SXSW Live from the TuneIn stage at SXSW, the team gives a behind-the-scenes look at the creation of Atlanta Monster. Moderated by Tracy Kaplan.<br><br>Learn more about advertising on the HowStuffWorks podcasts at <a href='http://www.howstuffworks.com/advertisers.htm'>www.howstuffworks.com/advertisers.htm</a><br><br>And to learn about your ad choices when listening to podcasts, visit <a href='https://www.howstuffworks.com/privacy.htm#ad-choices'>https://www.howstuffworks.com/privacy.htm#ad-choices</a> Fri, 18 May 2018 04:00:00 -0000 HowStuffWorks & Tenderfoot TV Live from SXSW bonus 1 3634 4e168350-5a0b-11e8-bc3c-3b5f5ec75fb3 Questions: Part 2 Payne and the team answer more listener questions.<br><br>Learn more about advertising on the HowStuffWorks podcasts at <a href='http://www.howstuffworks.com/advertisers.htm'>www.howstuffworks.com/advertisers.htm</a><br><br>And to learn about your ad choices when listening to podcasts, visit <a href='https://www.howstuffworks.com/privacy.htm#ad-choices'>https://www.howstuffworks.com/privacy.htm#ad-choices</a> Fri, 04 May 2018 04:00:00 -0000 HowStuffWorks & Tenderfoot TV Questions: Part 2 bonus 1 1785 2b16691e-4ee0-11e8-adb0-cbb311c0cb2a Questions: Part 1 Payne and the team answer listener questions.<br><br>Learn more about advertising on the HowStuffWorks podcasts at <a href='http://www.howstuffworks.com/advertisers.htm'>www.howstuffworks.com/advertisers.htm</a><br><br>And to learn about your ad choices when listening to podcasts, visit <a href='https://www.howstuffworks.com/privacy.htm#ad-choices'>https://www.howstuffworks.com/privacy.htm#ad-choices</a> Fri, 27 Apr 2018 04:00:00 -0000 HowStuffWorks & Tenderfoot TV Questions: Part 1 bonus 1 2295 482bc882-44db-11e8-ba5f-97288c93ffb5 Episode 10: Loose Ends In this case, the truth depends on who you choose to believe.<br><br>Learn more about advertising on the HowStuffWorks podcasts at <a href='http://www.howstuffworks.com/advertisers.htm'>www.howstuffworks.com/advertisers.htm</a><br><br>And to learn about your ad choices when listening to podcasts, visit <a href='https://www.howstuffworks.com/privacy.htm#ad-choices'>https://www.howstuffworks.com/privacy.htm#ad-choices</a> Fri, 23 Mar 2018 04:00:22 -0000 HowStuffWorks & Tenderfoot TV Episode 10: Loose Ends full 1 10 In this case, the truth depends on who you choose to believe. 4139 yes http://www.podtrac.com/pts/redirect.mp3/podcasts.howstuffworks.com/hsw/podcasts/atlm/2018-03-22-atlm-episode-ten.mp3 Episode 09: The Trial Trial by trace evidence<br><br>Learn more about advertising on the HowStuffWorks podcasts at <a href='http://www.howstuffworks.com/advertisers.htm'>www.howstuffworks.com/advertisers.htm</a><br><br>And to learn about your ad choices when listening to podcasts, visit <a href='https://www.howstuffworks.com/privacy.htm#ad-choices'>https://www.howstuffworks.com/privacy.htm#ad-choices</a> Fri, 16 Mar 2018 04:01:21 -0000 HowStuffWorks & Tenderfoot TV Episode 09: The Trial full 1 9 Trial by trace evidence 3047 yes http://www.podtrac.com/pts/redirect.mp3/podcasts.howstuffworks.com/hsw/podcasts/atlm/2018-03-15-atlm-epiosde-nine.mp3 The List One thing is clear -- no one can agree on The List.<br><br>Learn more about advertising on the HowStuffWorks podcasts at <a href='http://www.howstuffworks.com/advertisers.htm'>www.howstuffworks.com/advertisers.htm</a><br><br>And to learn about your ad choices when listening to podcasts, visit <a href='https://www.howstuffworks.com/privacy.htm#ad-choices'>https://www.howstuffworks.com/privacy.htm#ad-choices</a> Fri, 09 Mar 2018 23:30:00 -0000 HowStuffWorks & Tenderfoot TV The List bonus 1 One thing is clear -- no one can agree on The List. 2996 yes https://podcasts.howstuffworks.com/hsw/podcasts/atlm/2018-03-09-atlm-the-list.mp3 Episode 08: CIA What car did Wayne really drive? Where did the reward money go? And was Wayne scouted by the CIA?<br><br>Learn more about advertising on the HowStuffWorks podcasts at <a href='http://www.howstuffworks.com/advertisers.htm'>www.howstuffworks.com/advertisers.htm</a><br><br>And to learn about your ad choices when listening to podcasts, visit <a href='https://www.howstuffworks.com/privacy.htm#ad-choices'>https://www.howstuffworks.com/privacy.htm#ad-choices</a> Fri, 02 Mar 2018 20:20:44 -0000 HowStuffWorks & Tenderfoot TV Episode 08: CIA full 1 8 What car did Wayne really drive? Where did the reward money go? And was Wayne scouted by the CIA? 2787 yes http://www.podtrac.com/pts/redirect.mp3/podcasts.howstuffworks.com/hsw/podcasts/atlm/2018-03-02-atlm-epiosde-08.mp3 The Vault The team behind Atlanta Monster digs deeper into untold stories<br><br>Learn more about advertising on the HowStuffWorks podcasts at <a href='http://www.howstuffworks.com/advertisers.htm'>www.howstuffworks.com/advertisers.htm</a><br><br>And to learn about your ad choices when listening to podcasts, visit <a href='https://www.howstuffworks.com/privacy.htm#ad-choices'>https://www.howstuffworks.com/privacy.htm#ad-choices</a> Fri, 23 Feb 2018 05:21:00 -0000 HowStuffWorks & Tenderfoot TV The Vault bonus 1 The team behind Atlanta Monster digs deeper into untold stories 3645 no http://www.podtrac.com/pts/redirect.mp3/podcasts.howstuffworks.com/hsw/podcasts/atlm/2018-02-22-atlm-vault-p1.mp3 Episode 07: Conspiracy? Payne explores theories of Klan involvement within the case.<br><br>Learn more about advertising on the HowStuffWorks podcasts at <a href='http://www.howstuffworks.com/advertisers.htm'>www.howstuffworks.com/advertisers.htm</a><br><br>And to learn about your ad choices when listening to podcasts, visit <a href='https://www.howstuffworks.com/privacy.htm#ad-choices'>https://www.howstuffworks.com/privacy.htm#ad-choices</a> Fri, 16 Feb 2018 05:00:01 -0000 HowStuffWorks & Tenderfoot TV Episode 07: Conspiracy? full 1 7 Payne explores theories of Klan involvement within the case. 3014 yes http://www.podtrac.com/pts/redirect.mp3/podcasts.howstuffworks.com/hsw/podcasts/atlm/2018-02-15-atlm-episode-seven.mp3 Episode 06: The Splash Payne and the team gear up for a closer look at the so-called "bridge incident."<br><br>Learn more about advertising on the HowStuffWorks podcasts at <a href='http://www.howstuffworks.com/advertisers.htm'>www.howstuffworks.com/advertisers.htm</a><br><br>And to learn about your ad choices when listening to podcasts, visit <a href='https://www.howstuffworks.com/privacy.htm#ad-choices'>https://www.howstuffworks.com/privacy.htm#ad-choices</a> Fri, 09 Feb 2018 05:39:52 -0000 HowStuffWorks & Tenderfoot TV Episode 06: The Splash full 1 6 Payne and the team gear up for a closer look at the so-called "bridge incident." 3135 yes http://www.podtrac.com/pts/redirect.mp3/podcasts.howstuffworks.com/hsw/podcasts/atlm/2018-02-08-atlm-episode-six.mp3 Episode 05: Wayne's World Payne makes contact with the alleged Atlanta Monster.<br><br>Learn more about advertising on the HowStuffWorks podcasts at <a href='http://www.howstuffworks.com/advertisers.htm'>www.howstuffworks.com/advertisers.htm</a><br><br>And to learn about your ad choices when listening to podcasts, visit <a href='https://www.howstuffworks.com/privacy.htm#ad-choices'>https://www.howstuffworks.com/privacy.htm#ad-choices</a> Fri, 02 Feb 2018 05:00:01 -0000 HowStuffWorks & Tenderfoot TV Episode 05: Wayne's World full 1 5 Payne makes contact with the alleged Atlanta Monster. 3262 yes http://www.podtrac.com/pts/redirect.mp3/podcasts.howstuffworks.com/hsw/podcasts/atlm/2018-02-01-atlm-episode-five.mp3 Episode 04: Gemini Wayne Williams through the eyes of those seemingly closest to him...<br><br>Learn more about advertising on the HowStuffWorks podcasts at <a href='http://www.howstuffworks.com/advertisers.htm'>www.howstuffworks.com/advertisers.htm</a><br><br>And to learn about your ad choices when listening to podcasts, visit <a href='https://www.howstuffworks.com/privacy.htm#ad-choices'>https://www.howstuffworks.com/privacy.htm#ad-choices</a> Fri, 26 Jan 2018 05:00:00 -0000 HowStuffWorks & Tenderfoot TV Episode 04: Gemini full 1 4 Wayne Williams through the eyes of those seemingly closest to him... 3677 yes http://www.podtrac.com/pts/redirect.mp3/podcasts.howstuffworks.com/hsw/podcasts/atlm/2018-01-25-atlm-epiosde-four-03.mp3 Episode 03: Atlanta Monster Seized Atlanta asks, who is Wayne Williams?<br><br>Learn more about advertising on the HowStuffWorks podcasts at <a href='http://www.howstuffworks.com/advertisers.htm'>www.howstuffworks.com/advertisers.htm</a><br><br>And to learn about your ad choices when listening to podcasts, visit <a href='https://www.howstuffworks.com/privacy.htm#ad-choices'>https://www.howstuffworks.com/privacy.htm#ad-choices</a> Fri, 19 Jan 2018 05:01:03 -0000 HowStuffWorks & Tenderfoot TV Episode 03: Atlanta Monster Seized full 1 3 Atlanta asks, who is Wayne Williams? 3514 yes http://www.podtrac.com/pts/redirect.mp3/podcasts.howstuffworks.com/hsw/podcasts/atlm/2018-01-18-atlm-episode-three-04.mp3 Episode 02: Manhunt Atlanta’s search for a serial killer becomes more and more convoluted.<br><br>Learn more about advertising on the HowStuffWorks podcasts at <a href='http://www.howstuffworks.com/advertisers.htm'>www.howstuffworks.com/advertisers.htm</a><br><br>And to learn about your ad choices when listening to podcasts, visit <a href='https://www.howstuffworks.com/privacy.htm#ad-choices'>https://www.howstuffworks.com/privacy.htm#ad-choices</a> Fri, 12 Jan 2018 05:02:26 -0000 HowStuffWorks & Tenderfoot TV Episode 02: Manhunt full 1 2 Atlanta’s search for a serial killer becomes more and more convoluted. 2717 yes http://www.podtrac.com/pts/redirect.mp3/podcasts.howstuffworks.com/hsw/podcasts/atlm/2018-01-11-atlm-episode-two-03.mp3 Episode 01: Boogeyman It's 1979 in Atlanta - and children are going missing.<br><br>Learn more about advertising on the HowStuffWorks podcasts at <a href='http://www.howstuffworks.com/advertisers.htm'>www.howstuffworks.com/advertisers.htm</a><br><br>And to learn about your ad choices when listening to podcasts, visit <a href='https://www.howstuffworks.com/privacy.htm#ad-choices'>https://www.howstuffworks.com/privacy.htm#ad-choices</a> Fri, 05 Jan 2018 05:54:00 -0000 HowStuffWorks & Tenderfoot TV Episode 01: Boogeyman full 1 1 It's 1979 in Atlanta - and children are going missing. 2709 no http://www.podtrac.com/pts/redirect.mp3/podcasts.howstuffworks.com/hsw/podcasts/atlm/2018-01-04-atlm-episode-one-03.mp3 Episode Zero: Missing Darron Glass On September 14, 1980, Darron Glass went missing.<br><br>Learn more about advertising on the HowStuffWorks podcasts at <a href='http://www.howstuffworks.com/advertisers.htm'>www.howstuffworks.com/advertisers.htm</a><br><br>And to learn about your ad choices when listening to podcasts, visit <a href='https://www.howstuffworks.com/privacy.htm#ad-choices'>https://www.howstuffworks.com/privacy.htm#ad-choices</a> Mon, 01 Jan 2018 05:00:23 -0000 HowStuffWorks & Tenderfoot TV Episode Zero: Missing Darron Glass trailer On September 14, 1980, Darron Glass went missing. 211 http://www.podtrac.com/pts/redirect.mp3/podcasts.howstuffworks.com/hsw/podcasts/atlm/2017-12-27-atlm-episode-zero.mp3 Official Trailer: Atlanta Monster Hysteria hits as kids disappear from their own neighborhoods.<br><br>Learn more about advertising on the HowStuffWorks podcasts at <a href='http://www.howstuffworks.com/advertisers.htm'>www.howstuffworks.com/advertisers.htm</a><br><br>And to learn about your ad choices when listening to podcasts, visit <a href='https://www.howstuffworks.com/privacy.htm#ad-choices'>https://www.howstuffworks.com/privacy.htm#ad-choices</a> Mon, 25 Dec 2017 11:30:00 -0000 HowStuffWorks & Tenderfoot TV Official Trailer: Atlanta Monster trailer Hysteria hits as kids disappear from their own neighborhoods. 61 http://www.podtrac.com/pts/redirect.mp3/podcasts.howstuffworks.com/hsw/podcasts/atlm/2017-12-22-atlm-official-trailer.mp3 ================================================ FILE: api/test/data/podcast-feed/buffering-the-vampire-slayer ================================================ Buffering the Vampire Slayer | A Buffy the Vampire Slayer Podcast bufferingthevampireslayer@gmail.com (Jenny Owen Youngs) © All rights reserved. https://art19.com/shows/buffering-the-vampire-slayer https://rss.art19.com/buffering-the-vampire-slayer Jenny Owen Youngs bufferingthevampireslayer@gmail.com Jenny Owen Youngs & Kristin Russo en yes whedon,vampire,spike,slayer,joss,Buffy,Angel episodic https://content.production.cdn.art19.com/images/be/a6/a3/9f/bea6a39f-64ec-4a6f-9fba-80efbb45db2c/c9ca312ba4d3ac1415f0c0421adfce07829f7677e20fc272d3e421fb1c180fbc9dc9294d5aa3efa7480153c24daffca835fb436a1de59d4c9efb6453f111968f.jpeg https://art19.com/shows/buffering-the-vampire-slayer Buffering the Vampire Slayer | A Buffy the Vampire Slayer Podcast 4.02: Living Conditions Buffy's college roommate Kathy is here in full force, so you'd better log your calls, label your eggs, and make sure your face is glued on tight!! Passive-aggression is the demonic force at play in Sunnydale this week, and not even the park benches will be safe. *blasts Cher* Today we are discussing S4E2: Living Conditions.


LOCATE YOUR HOSTS UPON THE INTERNET

Jenny Owen Youngs: @jennyowenyoungsjennyowenyoungs.com/buffering

Kristin Russo: @kristinnoelinekristinnoeline.comeveryoneisgay.commykidisgay.com

Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram


HOT HOT TIPS

We're taping a LIVE episode for BEER BAD at Littlefield in Brooklyn on July 8th! Full details at bufferingthevampireslayer.com/jennycalendar!

MERCH MERCH MERCH - so many things back in stock (what's up, muscle tanks) plus preorders for new Just Keep Fighting tees and TOTES, we've got the the Songs From Season 3 CD available, and loads more -- visit bufferingthevampireslayer.com and click SHOP.


Logo: Kristine Thune (kristinethune.com)

]]>
4.02: Living Conditions full Buffy's college roommate Kathy is here in full force, so you'd better log your calls, label your eggs, and make sure your face is glued on tight!! Passive-aggression is the demonic force at play in Sunnydale this week, and not even the park benches will be safe. *blasts Cher* Today we are discussing S4E2: Living Conditions. LOCATE YOUR HOSTS UPON THE INTERNET Jenny Owen Youngs: @jennyowenyoungs; jennyowenyoungs.com/buffering Kristin Russo: @kristinnoeline; kristinnoeline.com, everyoneisgay.com, mykidisgay.com Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram HOT HOT TIPS We're taping a LIVE episode for BEER BAD at Littlefield in Brooklyn on July 8th! Full details at bufferingthevampireslayer.com/jennycalendar! MERCH MERCH MERCH - so many things back in stock (what's up, muscle tanks) plus preorders for new Just Keep Fighting tees and TOTES, we've got the the Songs From Season 3 CD available, and loads more -- visit bufferingthevampireslayer.com and click SHOP. Logo: Kristine Thune (kristinethune.com) Buffy's college roommate Kathy is here in full force, so you'd better log your calls, label your eggs, and make sure your face is glued on tight!! Passive-aggression is the demonic force at play in Sunnydale this week, and not even the park benches will be safe. *blasts Cher* Today we are discussing S4E2: Living Conditions.


LOCATE YOUR HOSTS UPON THE INTERNET

Jenny Owen Youngs: @jennyowenyoungsjennyowenyoungs.com/buffering

Kristin Russo: @kristinnoelinekristinnoeline.comeveryoneisgay.commykidisgay.com

Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram


HOT HOT TIPS

We're taping a LIVE episode for BEER BAD at Littlefield in Brooklyn on July 8th! Full details at bufferingthevampireslayer.com/jennycalendar!

MERCH MERCH MERCH - so many things back in stock (what's up, muscle tanks) plus preorders for new Just Keep Fighting tees and TOTES, we've got the the Songs From Season 3 CD available, and loads more -- visit bufferingthevampireslayer.com and click SHOP.


Logo: Kristine Thune (kristinethune.com)

]]>
gid://art19-episode-locator/V0/gD8SIdpajpULd8yiMf3N___0SJO6wvLXdt3pmGmJobc Wed, 06 Jun 2018 04:00:00 -0000 yes Buffy,whedon,angel,slayer,spike,joss,vampire 01:16:17
4.01: The Freshman Buffy's off to COLLEGE and navigating the many obstacles of higher education matriculation - frathouse Jell-O shots, misogynistic professors, and of course on-campus vampires who kill your new friends, insult your outfit, and read your diary. Hellmouth no! Today we are discussing S4E1: The Freshman.


LOCATE YOUR HOSTS UPON THE INTERNET

Jenny Owen Youngs: @jennyowenyoungsjennyowenyoungs.com/buffering

Kristin Russo: @kristinnoelinekristinnoeline.comeveryoneisgay.commykidisgay.com

Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram


GET TO KNOW OUR BUFFY FASHIONWATCH CORRESPONDENT:

Kate Leth: @katelethkateleth.com


HOT HOT TIPS

We're taping a LIVE episode for BEER BAD at Littlefield in Brooklyn on July 8th! Full details at bufferingthevampireslayer.com/jennycalendar!

MERCH MERCH MERCH - so many things back in stock (what's up, muscle tanks) plus preorders for new Just Keep Fighting tees and TOTES, we've got the the Songs From Season 3 CD available, and loads more -- visit bufferingthevampireslayer.com and click SHOP.


Logo: Kristine Thune (kristinethune.com)

]]>
4.01: The Freshman full Buffy's off to COLLEGE and navigating the many obstacles of higher education matriculation - frathouse Jell-O shots, misogynistic professors, and of course on-campus vampires who kill your new friends, insult your outfit, and read your diary. Hellmouth no! Today we are discussing S4E1: The Freshman. LOCATE YOUR HOSTS UPON THE INTERNET Jenny Owen Youngs: @jennyowenyoungs; jennyowenyoungs.com/buffering Kristin Russo: @kristinnoeline; kristinnoeline.com, everyoneisgay.com, mykidisgay.com Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram GET TO KNOW OUR BUFFY FASHIONWATCH CORRESPONDENT: Kate Leth: @kateleth; kateleth.com HOT HOT TIPS We're taping a LIVE episode for BEER BAD at Littlefield in Brooklyn on July 8th! Full details at bufferingthevampireslayer.com/jennycalendar! MERCH MERCH MERCH - so many things back in stock (what's up, muscle tanks) plus preorders for new Just Keep Fighting tees and TOTES, we've got the the Songs From Season 3 CD available, and loads more -- visit bufferingthevampireslayer.com and click SHOP. Logo: Kristine Thune (kristinethune.com) Buffy's off to COLLEGE and navigating the many obstacles of higher education matriculation - frathouse Jell-O shots, misogynistic professors, and of course on-campus vampires who kill your new friends, insult your outfit, and read your diary. Hellmouth no! Today we are discussing S4E1: The Freshman.


LOCATE YOUR HOSTS UPON THE INTERNET

Jenny Owen Youngs: @jennyowenyoungsjennyowenyoungs.com/buffering

Kristin Russo: @kristinnoelinekristinnoeline.comeveryoneisgay.commykidisgay.com

Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram


GET TO KNOW OUR BUFFY FASHIONWATCH CORRESPONDENT:

Kate Leth: @katelethkateleth.com


HOT HOT TIPS

We're taping a LIVE episode for BEER BAD at Littlefield in Brooklyn on July 8th! Full details at bufferingthevampireslayer.com/jennycalendar!

MERCH MERCH MERCH - so many things back in stock (what's up, muscle tanks) plus preorders for new Just Keep Fighting tees and TOTES, we've got the the Songs From Season 3 CD available, and loads more -- visit bufferingthevampireslayer.com and click SHOP.


Logo: Kristine Thune (kristinethune.com)

]]>
gid://art19-episode-locator/V0/Z7mox2CLpWFT5TPU4nAJ2h1T5hzvRwKp7N-FSN8TlPE Wed, 23 May 2018 08:36:44 -0000 yes Buffy,whedon,angel,slayer,spike,joss,vampire 01:21:43
0.13: Interview with Harry Groener!! WOW, Kristin got the chance to sit down and chat with the mayor of Sunnydale himself, Harry Groener!! We couldn't think of a better way to close out season 3 than to share this fantastic conversation with all of you. You'll hear them dig into Richard Wilkins III's complicated relationship with Faith, discuss how a mayor ascending is similar to Bruce Banner hulking out, and you'll also be delighted (or perhaps terrified) to find that Harry and the mayor have the same laugh... though in this context, it's considerably less ominous. Today we're saying a fond farewell to Season Faith, with this very special Episode Mayor!


LEARN MORE ABOUT WHAT HARRY GROENER'S UP TO:

Antaeus Theatre Company // antaeus.org

A Futile and Stupid Gesture


LOCATE YOUR HOSTS UPON THE INTERNET

Jenny Owen Youngs: @jennyowenyoungsjennyowenyoungs.com/buffering

Kristin Russo: @kristinnoelinekristinnoeline.comeveryoneisgay.commykidisgay.com

Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram


HOT HOT TIPS

Get your Buffy & Faith Erotic Novel Zines in our store! Hot off the presses! Plus you can pre-order the Season 3 CD, there's a new Willow in the Sheets Enamel Pin, and loads more -- visit bufferingthevampireslayer.com and click SHOP.


Logo: Kristine Thune (kristinethune.com)

]]>
0.13: Interview with Harry Groener!! full WOW, Kristin got the chance to sit down and chat with the mayor of Sunnydale himself, Harry Groener!! We couldn't think of a better way to close out season 3 than to share this fantastic conversation with all of you. You'll hear them dig into Richard Wilkins III's complicated relationship with Faith, discuss how a mayor ascending is similar to Bruce Banner hulking out, and you'll also be delighted (or perhaps terrified) to find that Harry and the mayor have the same laugh... though in this context, it's considerably less ominous. Today we're saying a fond farewell to Season Faith, with this very special Episode Mayor! LEARN MORE ABOUT WHAT HARRY GROENER'S UP TO: Antaeus Theatre Company // antaeus.org A Futile and Stupid Gesture LOCATE YOUR HOSTS UPON THE INTERNET Jenny Owen Youngs: @jennyowenyoungs; jennyowenyoungs.com/buffering Kristin Russo: @kristinnoeline; kristinnoeline.com, everyoneisgay.com, mykidisgay.com Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram HOT HOT TIPS Get your Buffy &amp; Faith Erotic Novel Zines in our store! Hot off the presses! Plus you can pre-order the Season 3 CD, there's a new Willow in the Sheets Enamel Pin, and loads more -- visit bufferingthevampireslayer.com and click SHOP. Logo: Kristine Thune (kristinethune.com) WOW, Kristin got the chance to sit down and chat with the mayor of Sunnydale himself, Harry Groener!! We couldn't think of a better way to close out season 3 than to share this fantastic conversation with all of you. You'll hear them dig into Richard Wilkins III's complicated relationship with Faith, discuss how a mayor ascending is similar to Bruce Banner hulking out, and you'll also be delighted (or perhaps terrified) to find that Harry and the mayor have the same laugh... though in this context, it's considerably less ominous. Today we're saying a fond farewell to Season Faith, with this very special Episode Mayor!


LEARN MORE ABOUT WHAT HARRY GROENER'S UP TO:

Antaeus Theatre Company // antaeus.org

A Futile and Stupid Gesture


LOCATE YOUR HOSTS UPON THE INTERNET

Jenny Owen Youngs: @jennyowenyoungsjennyowenyoungs.com/buffering

Kristin Russo: @kristinnoelinekristinnoeline.comeveryoneisgay.commykidisgay.com

Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram


HOT HOT TIPS

Get your Buffy & Faith Erotic Novel Zines in our store! Hot off the presses! Plus you can pre-order the Season 3 CD, there's a new Willow in the Sheets Enamel Pin, and loads more -- visit bufferingthevampireslayer.com and click SHOP.


Logo: Kristine Thune (kristinethune.com)

]]>
gid://art19-episode-locator/V0/om1D-3DA8MI6ad5Ih5mVkEKfcD6BgGIKCG4bOzhHqfg Wed, 04 Apr 2018 07:00:00 -0000 yes Buffy,whedon,angel,slayer,spike,joss,vampire 01:01:04
3.22: Graduation Day Part 2 Angel stands silhouetted in a foggy mist reflecting on his passions whilst Faith and Buffy find each other in a shared dreamscape. Seriously, though, this is the one where the class of '99 RISES UP TO BATTLE SOME MAJOR EVIL. Uh-huh that's right. Today we are discussing S3E22: Graduation Day Part 2.


LOCATE YOUR HOSTS UPON THE INTERNET

Jenny Owen Youngs: @jennyowenyoungsjennyowenyoungs.com/buffering

Kristin Russo: @kristinnoelinekristinnoeline.comeveryoneisgay.commykidisgay.com

Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram


HOT HOT TIPS

New Willow in the Sheets Enamel Pins AND Buffy & Faith Erotic Novel Zines are in our store! Plus you can pre-order the Season 3 CD, our sweatshirts are back in stock, and loads more -- visit bufferingthevampireslayer.com and click SHOP.


Logo: Kristine Thune (kristinethune.com)

]]>
3.22: Graduation Day Part 2 full Angel stands silhouetted in a foggy mist reflecting on his passions whilst Faith and Buffy find each other in a shared dreamscape. Seriously, though, this is the one where the class of '99 RISES UP TO BATTLE SOME MAJOR EVIL. Uh-huh that's right. Today we are discussing S3E22: Graduation Day Part 2. LOCATE YOUR HOSTS UPON THE INTERNET Jenny Owen Youngs: @jennyowenyoungs; jennyowenyoungs.com/buffering Kristin Russo: @kristinnoeline; kristinnoeline.com, everyoneisgay.com, mykidisgay.com Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram HOT HOT TIPS New Willow in the Sheets Enamel Pins AND Buffy &amp; Faith Erotic Novel Zines are in our store! Plus you can pre-order the Season 3 CD, our sweatshirts are back in stock, and loads more -- visit bufferingthevampireslayer.com and click SHOP. Logo: Kristine Thune (kristinethune.com) Angel stands silhouetted in a foggy mist reflecting on his passions whilst Faith and Buffy find each other in a shared dreamscape. Seriously, though, this is the one where the class of '99 RISES UP TO BATTLE SOME MAJOR EVIL. Uh-huh that's right. Today we are discussing S3E22: Graduation Day Part 2.


LOCATE YOUR HOSTS UPON THE INTERNET

Jenny Owen Youngs: @jennyowenyoungsjennyowenyoungs.com/buffering

Kristin Russo: @kristinnoelinekristinnoeline.comeveryoneisgay.commykidisgay.com

Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram


HOT HOT TIPS

New Willow in the Sheets Enamel Pins AND Buffy & Faith Erotic Novel Zines are in our store! Plus you can pre-order the Season 3 CD, our sweatshirts are back in stock, and loads more -- visit bufferingthevampireslayer.com and click SHOP.


Logo: Kristine Thune (kristinethune.com)

]]>
gid://art19-episode-locator/V0/9DYi89Mz-EEaY7vPB7dpnRoMotLIkWjxucSR6P_xkhA Wed, 28 Mar 2018 07:08:40 -0000 yes Buffy,whedon,angel,slayer,spike,joss,vampire 01:24:46
3.21: Graduation Day Part 1 WOW wow wow wow wow THIS IS THE ONE WHERE Buffy puts on some leather pants and Faith's eating a twizzler and then THEY FIGHT aaaaah probably some other stuff happens too but WHO CARES?! Today we're discussing S3E21: Graduation Day Part 1.


LOCATE YOUR HOSTS UPON THE INTERNET

Jenny Owen Youngs: @jennyowenyoungsjennyowenyoungs.com/buffering

Kristin Russo: @kristinnoelinekristinnoeline.comeveryoneisgay.commykidisgay.com

Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram


THANKS TO OUR SPONSORS

Audible: go to audible.com/BUFFERING or text BUFFERING to 500-500 for a 30 day trial and a FREE audio book.

Pretty Litter: go to prettylitter.com and use code BUFFY for 20% off your first order.

Better Help: go to betterhelp.com/BUFFY and use invite code BUFFY to get your first seven days FREE.


HOT HOT TIPS

New soft enamel Randy for Giles pins are in our store! Plus Girl Gang tees, a new Hardcore Smash crewneck sweatshirt, and loads more -- visit bufferingthevampireslayer.com and click SHOP.


Logo: Kristine Thune (kristinethune.com)

]]>
3.21: Graduation Day Part 1 full WOW wow wow wow wow THIS IS THE ONE WHERE Buffy puts on some leather pants and Faith's eating a twizzler and then THEY FIGHT aaaaah probably some other stuff happens too but WHO CARES?! Today we're discussing S3E21: Graduation Day Part 1. LOCATE YOUR HOSTS UPON THE INTERNET Jenny Owen Youngs: @jennyowenyoungs; jennyowenyoungs.com/buffering Kristin Russo: @kristinnoeline; kristinnoeline.com, everyoneisgay.com, mykidisgay.com Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram THANKS TO OUR SPONSORS Audible: go to audible.com/BUFFERING or text BUFFERING to 500-500 for a 30 day trial and a FREE audio book. Pretty Litter: go to prettylitter.com and use code BUFFY for 20% off your first order. Better Help: go to betterhelp.com/BUFFY and use invite code BUFFY to get your first seven days FREE. HOT HOT TIPS New soft enamel Randy for Giles pins are in our store! Plus Girl Gang tees, a new Hardcore Smash crewneck sweatshirt, and loads more -- visit bufferingthevampireslayer.com and click SHOP. Logo: Kristine Thune (kristinethune.com) WOW wow wow wow wow THIS IS THE ONE WHERE Buffy puts on some leather pants and Faith's eating a twizzler and then THEY FIGHT aaaaah probably some other stuff happens too but WHO CARES?! Today we're discussing S3E21: Graduation Day Part 1.


LOCATE YOUR HOSTS UPON THE INTERNET

Jenny Owen Youngs: @jennyowenyoungsjennyowenyoungs.com/buffering

Kristin Russo: @kristinnoelinekristinnoeline.comeveryoneisgay.commykidisgay.com

Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram


THANKS TO OUR SPONSORS

Audible: go to audible.com/BUFFERING or text BUFFERING to 500-500 for a 30 day trial and a FREE audio book.

Pretty Litter: go to prettylitter.com and use code BUFFY for 20% off your first order.

Better Help: go to betterhelp.com/BUFFY and use invite code BUFFY to get your first seven days FREE.


HOT HOT TIPS

New soft enamel Randy for Giles pins are in our store! Plus Girl Gang tees, a new Hardcore Smash crewneck sweatshirt, and loads more -- visit bufferingthevampireslayer.com and click SHOP.


Logo: Kristine Thune (kristinethune.com)

]]>
gid://art19-episode-locator/V0/31gn6UvXDQWd2Z5WSgc8vG8xx1Qaim_9dTPxGT3jz6g Wed, 21 Mar 2018 07:00:00 -0000 yes Buffy,whedon,angel,slayer,spike,joss,vampire 00:59:23
3.20: The Prom Ira Madison III returns to help us discuss the finer points of breaking up with your girlfriend in a sewer, how great Cordelia looks in her prom dress, and the most beautiful umbrella anyone has ever received as a token of gratitude for defending a whole town from the forces of evil. Today we're discussing S3E20: The Prom.


GET TO KNOW OUR GUEST:

Ira Madison III: on twitter @ira, writing on The Daily Beast, and podcasting via KEEP IT!


LOCATE YOUR HOSTS UPON THE INTERNET

Jenny Owen Youngs: @jennyowenyoungsjennyowenyoungs.com/buffering

Kristin Russo: @kristinnoelinekristinnoeline.comeveryoneisgay.commykidisgay.com

Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram


HOT HOT TIPS

Prom Meetups (#promups) are happening in Chicago, Atlanta, New York, Philadelphia, and even PARIS FRANCE — plus we are having a free meet up in Los Angeles the day after our LA prom for all! All details can be found at bufferingthevampireslayer.com/prom

New soft enamel Randy for Giles pins are in our store! Visit bufferingthevampireslayer.com and click SHOP.


Logo: Kristine Thune (kristinethune.com)

]]>
3.20: The Prom full Ira Madison III returns to help us discuss the finer points of breaking up with your girlfriend in a sewer, how great Cordelia looks in her prom dress, and the most beautiful umbrella anyone has ever received as a token of gratitude for defending a whole town from the forces of evil. Today we're discussing S3E20: The Prom. GET TO KNOW OUR GUEST: Ira Madison III: on twitter @ira, writing on The Daily Beast, and podcasting via KEEP IT! LOCATE YOUR HOSTS UPON THE INTERNET Jenny Owen Youngs: @jennyowenyoungs; jennyowenyoungs.com/buffering Kristin Russo: @kristinnoeline; kristinnoeline.com, everyoneisgay.com, mykidisgay.com Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram HOT HOT TIPS Prom Meetups (#promups) are happening in Chicago, Atlanta, New York, Philadelphia, and even PARIS FRANCE — plus we are having a free meet up in Los Angeles the day after our LA prom for all! All details can be found at bufferingthevampireslayer.com/prom New soft enamel Randy for Giles pins are in our store! Visit bufferingthevampireslayer.com and click SHOP. Logo: Kristine Thune (kristinethune.com) Ira Madison III returns to help us discuss the finer points of breaking up with your girlfriend in a sewer, how great Cordelia looks in her prom dress, and the most beautiful umbrella anyone has ever received as a token of gratitude for defending a whole town from the forces of evil. Today we're discussing S3E20: The Prom.


GET TO KNOW OUR GUEST:

Ira Madison III: on twitter @ira, writing on The Daily Beast, and podcasting via KEEP IT!


LOCATE YOUR HOSTS UPON THE INTERNET

Jenny Owen Youngs: @jennyowenyoungsjennyowenyoungs.com/buffering

Kristin Russo: @kristinnoelinekristinnoeline.comeveryoneisgay.commykidisgay.com

Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram


HOT HOT TIPS

Prom Meetups (#promups) are happening in Chicago, Atlanta, New York, Philadelphia, and even PARIS FRANCE — plus we are having a free meet up in Los Angeles the day after our LA prom for all! All details can be found at bufferingthevampireslayer.com/prom

New soft enamel Randy for Giles pins are in our store! Visit bufferingthevampireslayer.com and click SHOP.


Logo: Kristine Thune (kristinethune.com)

]]>
gid://art19-episode-locator/V0/S4Nvkk-ADM0Tj9w4qSAeCRgnbn0q2WdFTe5nk1QGMfk Wed, 07 Mar 2018 08:00:00 -0000 yes Buffy,whedon,angel,slayer,spike,joss,vampire 01:13:22
3.19: Choices Willow is kidnapped! Faith is gifted a fresh-smelling thing of beauty! The Mayor eats a twelve-course meal of spiders! Buffy gets into Northwestern! Angel drops the winch on his burgeoning detective career! Today we're discussing S3E19: Choices.


LOCATE YOUR HOSTS UPON THE INTERNET

Jenny Owen Youngs: @jennyowenyoungsjennyowenyoungs.com/buffering

Kristin Russo: @kristinnoelinekristinnoeline.comeveryoneisgay.commykidisgay.com

Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram


HOT HOT TIPS

February Lyric Sheet proceeds are going to benefit The Brown Boi Project (brownboiproject.org) and you can scoop one by going to bufferingthevampireslayer.bigcartel.com!

Prom Meetups (#promups) are happening in Chicago, Atlanta, and New York — plus we are having a free meet up in Los Angeles the day after our LA prom for all! All details can be found at bufferingthevampireslayer.com/prom

New soft enamel Randy for Giles pins are in our store! Visit bufferingthevampireslayer.com and click SHOP.

Logo: Kristine Thune (kristinethune.com)


]]>
3.19: Choices full Willow is kidnapped! Faith is gifted a fresh-smelling thing of beauty! The Mayor eats a twelve-course meal of spiders! Buffy gets into Northwestern! Angel drops the winch on his burgeoning detective career! Today we're discussing S3E19: Choices. LOCATE YOUR HOSTS UPON THE INTERNET Jenny Owen Youngs: @jennyowenyoungs; jennyowenyoungs.com/buffering Kristin Russo: @kristinnoeline; kristinnoeline.com, everyoneisgay.com, mykidisgay.com Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram HOT HOT TIPS February Lyric Sheet proceeds are going to benefit The Brown Boi Project (brownboiproject.org) and you can scoop one by going to bufferingthevampireslayer.bigcartel.com! Prom Meetups (#promups) are happening in Chicago, Atlanta, and New York — plus we are having a free meet up in Los Angeles the day after our LA prom for all! All details can be found at bufferingthevampireslayer.com/prom New soft enamel Randy for Giles pins are in our store! Visit bufferingthevampireslayer.com and click SHOP. Logo: Kristine Thune (kristinethune.com) Willow is kidnapped! Faith is gifted a fresh-smelling thing of beauty! The Mayor eats a twelve-course meal of spiders! Buffy gets into Northwestern! Angel drops the winch on his burgeoning detective career! Today we're discussing S3E19: Choices.


LOCATE YOUR HOSTS UPON THE INTERNET

Jenny Owen Youngs: @jennyowenyoungsjennyowenyoungs.com/buffering

Kristin Russo: @kristinnoelinekristinnoeline.comeveryoneisgay.commykidisgay.com

Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram


HOT HOT TIPS

February Lyric Sheet proceeds are going to benefit The Brown Boi Project (brownboiproject.org) and you can scoop one by going to bufferingthevampireslayer.bigcartel.com!

Prom Meetups (#promups) are happening in Chicago, Atlanta, and New York — plus we are having a free meet up in Los Angeles the day after our LA prom for all! All details can be found at bufferingthevampireslayer.com/prom

New soft enamel Randy for Giles pins are in our store! Visit bufferingthevampireslayer.com and click SHOP.

Logo: Kristine Thune (kristinethune.com)


]]>
gid://art19-episode-locator/V0/LyxX7iJyaAKs3_DP1rpRIGDgv0Cw083CMX4N5m3mOu4 Wed, 28 Feb 2018 08:00:00 -0000 yes Buffy,whedon,angel,slayer,spike,joss,vampire 01:14:36
3.18: Earshot Our #1 fave Joanna Robinson returns to help us explore the finer points of Herbal Essences commercials, Alex Mack, and the simple fact that when you unexpectedly absorb the silvery blood of a mouthless demon and gain the power to read minds, it's not all sunshine and puppies. Today we're discussing S3E18: Earshot.


GET TO KNOW OUR GUEST:

Joanna Robinson: @jowrotethis; https://www.vanityfair.com/contributor/joanna-robinson


LOCATE YOUR HOSTS UPON THE INTERNET

Jenny Owen Youngs: @jennyowenyoungsjennyowenyoungs.com/buffering

Kristin Russo: @kristinnoelinekristinnoeline.comeveryoneisgay.commykidisgay.com

Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram


HOT HOT TIPS

February Lyric Sheet proceeds are going to benefit The Brown Boi Project (brownboiproject.org) and you can scoop one by going to bufferingthevampireslayer.bigcartel.com!

Pre-order our new "Be The Thing That Monsters Have Nightmares About" tee, designed by Kristine Thune! 100% of the proceeds will go to benefit Time's Up! Just visit bufferingthevampireslayer.com and click SHOP.

Logo: Kristine Thune (kristinethune.com)


SUICIDE PREVENTION HOTLINES

National Suicide Prevention Lifeline: 800-273-8255 • suicidepreventionlifeline.org

The Trevor Project: 866-488-7386 • thetrevorproject.org

]]>
3.18: Earshot full Our #1 fave Joanna Robinson returns to help us explore the finer points of Herbal Essences commercials, Alex Mack, and the simple fact that when you unexpectedly absorb the silvery blood of a mouthless demon and gain the power to read minds, it's not all sunshine and puppies. Today we're discussing S3E18: Earshot. GET TO KNOW OUR GUEST: Joanna Robinson: @jowrotethis; https://www.vanityfair.com/contributor/joanna-robinson LOCATE YOUR HOSTS UPON THE INTERNET Jenny Owen Youngs: @jennyowenyoungs; jennyowenyoungs.com/buffering Kristin Russo: @kristinnoeline; kristinnoeline.com, everyoneisgay.com, mykidisgay.com Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram HOT HOT TIPS February Lyric Sheet proceeds are going to benefit The Brown Boi Project (brownboiproject.org) and you can scoop one by going to bufferingthevampireslayer.bigcartel.com! Pre-order our new "Be The Thing That Monsters Have Nightmares About" tee, designed by Kristine Thune! 100% of the proceeds will go to benefit Time's Up! Just visit bufferingthevampireslayer.com and click SHOP. Logo: Kristine Thune (kristinethune.com) SUICIDE PREVENTION HOTLINES National Suicide Prevention Lifeline: 800-273-8255 • suicidepreventionlifeline.org The Trevor Project: 866-488-7386 • thetrevorproject.org Our #1 fave Joanna Robinson returns to help us explore the finer points of Herbal Essences commercials, Alex Mack, and the simple fact that when you unexpectedly absorb the silvery blood of a mouthless demon and gain the power to read minds, it's not all sunshine and puppies. Today we're discussing S3E18: Earshot.


GET TO KNOW OUR GUEST:

Joanna Robinson: @jowrotethis; https://www.vanityfair.com/contributor/joanna-robinson


LOCATE YOUR HOSTS UPON THE INTERNET

Jenny Owen Youngs: @jennyowenyoungsjennyowenyoungs.com/buffering

Kristin Russo: @kristinnoelinekristinnoeline.comeveryoneisgay.commykidisgay.com

Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram


HOT HOT TIPS

February Lyric Sheet proceeds are going to benefit The Brown Boi Project (brownboiproject.org) and you can scoop one by going to bufferingthevampireslayer.bigcartel.com!

Pre-order our new "Be The Thing That Monsters Have Nightmares About" tee, designed by Kristine Thune! 100% of the proceeds will go to benefit Time's Up! Just visit bufferingthevampireslayer.com and click SHOP.

Logo: Kristine Thune (kristinethune.com)


SUICIDE PREVENTION HOTLINES

National Suicide Prevention Lifeline: 800-273-8255 • suicidepreventionlifeline.org

The Trevor Project: 866-488-7386 • thetrevorproject.org

]]>
gid://art19-episode-locator/V0/JoUgzmz31uSugRYE0Emtxve6igIy3bdQCWpQ50tRt7M Wed, 14 Feb 2018 09:57:25 -0000 yes Buffy,whedon,angel,slayer,spike,joss,vampire 01:33:58
3.17: Enemies This is the one where Buffy and Faith become (Best Fr)ENEMIES, so buckle up for some serious drama. Hrishikesh Hirway of The West Wing Weekly and Song Exploder joins us in our discussion of French films, billowing blouses, and bondage. Today we're discussing S3E17: Enemies.


GET TO KNOW OUR GUEST:

Hrishikesh Hirway: @HrishiHirway; hrishikesh.co


LOCATE YOUR HOSTS UPON THE INTERNET

Jenny Owen Youngs: @jennyowenyoungsjennyowenyoungs.com/buffering

Kristin Russo: @kristinnoelinekristinnoeline.comeveryoneisgay.commykidisgay.com

Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram


HOT HOT TIPS

February Lyric Sheet proceeds are going to benefit The Brown Boi Project (brownboiproject.org) and you can scoop one by going to bufferingthevampireslayer.bigcartel.com!

Pre-order our new "Be The Thing That Monsters Have Nightmares About" tee, designed by Kristine Thune! 100% of the proceeds will go to benefit Time's Up! Just visit bufferingthevampireslayer.com and click SHOP.

Logo: Kristine Thune (kristinethune.com)

]]>
3.17: Enemies full This is the one where Buffy and Faith become (Best Fr)ENEMIES, so buckle up for some serious drama. Hrishikesh Hirway of The West Wing Weekly and Song Exploder joins us in our discussion of French films, billowing blouses, and bondage. Today we're discussing S3E17: Enemies. GET TO KNOW OUR GUEST: Hrishikesh Hirway: @HrishiHirway; hrishikesh.co LOCATE YOUR HOSTS UPON THE INTERNET Jenny Owen Youngs: @jennyowenyoungs; jennyowenyoungs.com/buffering Kristin Russo: @kristinnoeline; kristinnoeline.com, everyoneisgay.com, mykidisgay.com Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram HOT HOT TIPS February Lyric Sheet proceeds are going to benefit The Brown Boi Project (brownboiproject.org) and you can scoop one by going to bufferingthevampireslayer.bigcartel.com! Pre-order our new "Be The Thing That Monsters Have Nightmares About" tee, designed by Kristine Thune! 100% of the proceeds will go to benefit Time's Up! Just visit bufferingthevampireslayer.com and click SHOP. Logo: Kristine Thune (kristinethune.com) This is the one where Buffy and Faith become (Best Fr)ENEMIES, so buckle up for some serious drama. Hrishikesh Hirway of The West Wing Weekly and Song Exploder joins us in our discussion of French films, billowing blouses, and bondage. Today we're discussing S3E17: Enemies.


GET TO KNOW OUR GUEST:

Hrishikesh Hirway: @HrishiHirway; hrishikesh.co


LOCATE YOUR HOSTS UPON THE INTERNET

Jenny Owen Youngs: @jennyowenyoungsjennyowenyoungs.com/buffering

Kristin Russo: @kristinnoelinekristinnoeline.comeveryoneisgay.commykidisgay.com

Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram


HOT HOT TIPS

February Lyric Sheet proceeds are going to benefit The Brown Boi Project (brownboiproject.org) and you can scoop one by going to bufferingthevampireslayer.bigcartel.com!

Pre-order our new "Be The Thing That Monsters Have Nightmares About" tee, designed by Kristine Thune! 100% of the proceeds will go to benefit Time's Up! Just visit bufferingthevampireslayer.com and click SHOP.

Logo: Kristine Thune (kristinethune.com)

]]>
gid://art19-episode-locator/V0/SSZfMpdEfX3PKZy7Ul75U-1VnNu7qb7_i0Bz-iNff6w Wed, 07 Feb 2018 08:00:00 -0000 yes Buffy,whedon,angel,slayer,spike,joss,vampire 01:38:47
3.16: Doppelgängland TWO WILLOWS, NO WAITING! Plus we have a lovely chat with story expert (and Buffy aficionado) Lani Diane Rich, and a mind-bending Buffy FashionWatch from Kate Leth - once you hear it, you'll never be the same. Today we're discussing S3E16: Doppelgängland.


GET TO KNOW OUR GUESTS:

Lani Diane Rich: @lanidianerich; chipperish.com

Kate Leth: @kateleth; kateleth.com


LOCATE YOUR HOSTS UPON THE INTERNET

Jenny Owen Youngs: @jennyowenyoungsjennyowenyoungs.com/buffering

Kristin Russo: @kristinnoelinekristinnoeline.comeveryoneisgay.commykidisgay.com

Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram


HOT HOT TIPS

Listen to Kate Leth's musical ode to this episode OVER AND OVER AGAIN on our Patreon at patreon.com/bufferingcast!

Pre-order our new "Willow in the Streets, Vampire Willow in the Sheets" and "Local Girl Gang - The Slayers" shirts by visiting bufferingthevampireslayer.com and clicking SHOP.

Check out more of Mallory Wolk (designer of the new "Local Girl Gang" tee)'s art at mallorywolkart.tumblr.com!


Logo: Kristine Thune (kristinethune.com)


]]>
3.16: Doppelgängland full TWO WILLOWS, NO WAITING! Plus we have a lovely chat with story expert (and Buffy aficionado) Lani Diane Rich, and a mind-bending Buffy FashionWatch from Kate Leth - once you hear it, you'll never be the same. Today we're discussing S3E16: Doppelgängland. GET TO KNOW OUR GUESTS: Lani Diane Rich: @lanidianerich; chipperish.com Kate Leth: @kateleth; kateleth.com LOCATE YOUR HOSTS UPON THE INTERNET Jenny Owen Youngs: @jennyowenyoungs; jennyowenyoungs.com/buffering Kristin Russo: @kristinnoeline; kristinnoeline.com, everyoneisgay.com, mykidisgay.com Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram HOT HOT TIPS Listen to Kate Leth's musical ode to this episode OVER AND OVER AGAIN on our Patreon at patreon.com/bufferingcast! Pre-order our new "Willow in the Streets, Vampire Willow in the Sheets" and "Local Girl Gang - The Slayers" shirts by visiting bufferingthevampireslayer.com and clicking SHOP. Check out more of Mallory Wolk (designer of the new "Local Girl Gang" tee)'s art at mallorywolkart.tumblr.com! Logo: Kristine Thune (kristinethune.com) TWO WILLOWS, NO WAITING! Plus we have a lovely chat with story expert (and Buffy aficionado) Lani Diane Rich, and a mind-bending Buffy FashionWatch from Kate Leth - once you hear it, you'll never be the same. Today we're discussing S3E16: Doppelgängland.


GET TO KNOW OUR GUESTS:

Lani Diane Rich: @lanidianerich; chipperish.com

Kate Leth: @kateleth; kateleth.com


LOCATE YOUR HOSTS UPON THE INTERNET

Jenny Owen Youngs: @jennyowenyoungsjennyowenyoungs.com/buffering

Kristin Russo: @kristinnoelinekristinnoeline.comeveryoneisgay.commykidisgay.com

Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram


HOT HOT TIPS

Listen to Kate Leth's musical ode to this episode OVER AND OVER AGAIN on our Patreon at patreon.com/bufferingcast!

Pre-order our new "Willow in the Streets, Vampire Willow in the Sheets" and "Local Girl Gang - The Slayers" shirts by visiting bufferingthevampireslayer.com and clicking SHOP.

Check out more of Mallory Wolk (designer of the new "Local Girl Gang" tee)'s art at mallorywolkart.tumblr.com!


Logo: Kristine Thune (kristinethune.com)


]]>
gid://art19-episode-locator/V0/DsPF2MYHtsWqbA69T565XAB1f6E310_zc1WuhrC9Plo Wed, 31 Jan 2018 08:00:00 -0000 yes Buffy,whedon,angel,slayer,spike,joss,vampire 01:46:29
3.15: Consequences We can barely recall when one leather-clad vampire slayer came a-fogging up classroom windows and drawing hearts everywhere - 'twas so like a dream, and only one short week ago. Lo! The winds of change blow harsh through Sunnydale, forcing Buffy and Faith farther apart from one another. Will they ever find their way back?! Today we're discussing S3E15: Consequences.


LOCATE YOUR HOSTS UPON THE INTERNET

Jenny Owen Youngs: @jennyowenyoungsjennyowenyoungs.com/buffering

Kristin Russo: @kristinnoelinekristinnoeline.comeveryoneisgay.commykidisgay.com

Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram


HOT HOT TIPS

Snag a handwritten lyric sheet this January and benefit Time's Up (timesupnow.com) at bufferingthevampireslayer.com/greatergood

Still feeling festive? "Buffy, It's Cold Outside" can be seen & heard at bufferingthevampireslayer.com/tistheseason "Amends" can be downloaded for free at bufferingthevampireslayer.com/amends

Join us on Patreon at patreon.com/bufferingcast

Snag the new "Randy for Giles" pin, designed by Kate Leth, along with heaps of other sweet Buffering merch, by visiting bufferingthevampireslayer.com and clicking SHOP.


Logo: Kristine Thune (kristinethune.com)


]]>
3.15: Consequences full We can barely recall when one leather-clad vampire slayer came a-fogging up classroom windows and drawing hearts everywhere - 'twas so like a dream, and only one short week ago. Lo! The winds of change blow harsh through Sunnydale, forcing Buffy and Faith farther apart from one another. Will they ever find their way back?! Today we're discussing S3E15: Consequences. LOCATE YOUR HOSTS UPON THE INTERNET Jenny Owen Youngs: @jennyowenyoungs; jennyowenyoungs.com/buffering Kristin Russo: @kristinnoeline; kristinnoeline.com, everyoneisgay.com, mykidisgay.com Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram HOT HOT TIPS Snag a handwritten lyric sheet this January and benefit Time's Up (timesupnow.com) at bufferingthevampireslayer.com/greatergood Still feeling festive? "Buffy, It's Cold Outside" can be seen &amp; heard at bufferingthevampireslayer.com/tistheseason "Amends" can be downloaded for free at bufferingthevampireslayer.com/amends Join us on Patreon at patreon.com/bufferingcast Snag the new "Randy for Giles" pin, designed by Kate Leth, along with heaps of other sweet Buffering merch, by visiting bufferingthevampireslayer.com and clicking SHOP. Logo: Kristine Thune (kristinethune.com) We can barely recall when one leather-clad vampire slayer came a-fogging up classroom windows and drawing hearts everywhere - 'twas so like a dream, and only one short week ago. Lo! The winds of change blow harsh through Sunnydale, forcing Buffy and Faith farther apart from one another. Will they ever find their way back?! Today we're discussing S3E15: Consequences.


LOCATE YOUR HOSTS UPON THE INTERNET

Jenny Owen Youngs: @jennyowenyoungsjennyowenyoungs.com/buffering

Kristin Russo: @kristinnoelinekristinnoeline.comeveryoneisgay.commykidisgay.com

Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram


HOT HOT TIPS

Snag a handwritten lyric sheet this January and benefit Time's Up (timesupnow.com) at bufferingthevampireslayer.com/greatergood

Still feeling festive? "Buffy, It's Cold Outside" can be seen & heard at bufferingthevampireslayer.com/tistheseason "Amends" can be downloaded for free at bufferingthevampireslayer.com/amends

Join us on Patreon at patreon.com/bufferingcast

Snag the new "Randy for Giles" pin, designed by Kate Leth, along with heaps of other sweet Buffering merch, by visiting bufferingthevampireslayer.com and clicking SHOP.


Logo: Kristine Thune (kristinethune.com)


]]>
gid://art19-episode-locator/V0/DB29tfPIrQiCeBuadp45NRWQqfiaug1ELQFgWO955Mk Wed, 17 Jan 2018 08:00:00 -0000 yes Buffy,whedon,angel,slayer,spike,joss,vampire 01:12:57
3.14: Bad Girls THE TIME HAS COME FOR ALL BAD GIRLS TO BREATHE FOG ONTO THE WINDOW PANE AND DRAW STAKED HEARTS UPON THE GLASS! Faith and Buffy are spending a LOT of time together this episode, and Jenny can't stop screaming about it. (Kristin is also excited but is playing it characteristically *cool.*)

Kristin has a fantastic talk with the lovely Jack Plotnick (portrayer of deputy mayor Allan!!), Buffering poet laureate Kate Leth delivers the greatest Buffy FashionWatch of all time, and Jess Abbott returns to voice Faith for an outlaw-country bad girls duet! Today we're discussing S3E14: BAD GIRLS!!!!!!!


GET TO KNOW OUR GUESTS

Jack Plotnick: @jackplotnick on twitter; hop to jackplotnick.com for the whole sharknado of Jack-ness!

Jess Abbott: @tancredjess on twitter; get an earful of her band Tancred at tancredmusic.com

Kate Leth: @kateleth on twitter; 360 degrees of our fashion queen at kateleth.com


LOCATE YOUR HOSTS UPON THE INTERNET

Jenny Owen Youngs: @jennyowenyoungsjennyowenyoungs.com/buffering

Kristin Russo: @kristinnoelinekristinnoeline.comeveryoneisgay.commykidisgay.com

Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram


HOT HOT TIPS

Snag a handwritten lyric sheet this January and benefit Time's Up (timesupnow.com) at bufferingthevampireslayer.com/greatergood

Still feeling festive? "Buffy, It's Cold Outside" can be seen & heard at bufferingthevampireslayer.com/tistheseason "Amends" can be downloaded for free at bufferingthevampireslayer.com/amends

Join us on Patreon at patreon.com/bufferingcast

Snag the new "Randy for Giles" pin, designed by Kate Leth, along with heaps of other sweet Buffering merch, by visiting bufferingthevampireslayer.com and clicking SHOP.


Logo: Kristine Thune (kristinethune.com)

]]>
3.14: Bad Girls full THE TIME HAS COME FOR ALL BAD GIRLS TO BREATHE FOG ONTO THE WINDOW PANE AND DRAW STAKED HEARTS UPON THE GLASS! Faith and Buffy are spending a LOT of time together this episode, and Jenny can't stop screaming about it. (Kristin is also excited but is playing it characteristically *cool.*) Kristin has a fantastic talk with the lovely Jack Plotnick (portrayer of deputy mayor Allan!!), Buffering poet laureate Kate Leth delivers the greatest Buffy FashionWatch of all time, and Jess Abbott returns to voice Faith for an outlaw-country bad girls duet! Today we're discussing S3E14: BAD GIRLS!!!!!!! GET TO KNOW OUR GUESTS Jack Plotnick: @jackplotnick on twitter; hop to jackplotnick.com for the whole sharknado of Jack-ness! Jess Abbott: @tancredjess on twitter; get an earful of her band Tancred at tancredmusic.com Kate Leth: @kateleth on twitter; 360 degrees of our fashion queen at kateleth.com LOCATE YOUR HOSTS UPON THE INTERNET Jenny Owen Youngs: @jennyowenyoungs; jennyowenyoungs.com/buffering Kristin Russo: @kristinnoeline; kristinnoeline.com, everyoneisgay.com, mykidisgay.com Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram HOT HOT TIPS Snag a handwritten lyric sheet this January and benefit Time's Up (timesupnow.com) at bufferingthevampireslayer.com/greatergood Still feeling festive? "Buffy, It's Cold Outside" can be seen &amp; heard at bufferingthevampireslayer.com/tistheseason "Amends" can be downloaded for free at bufferingthevampireslayer.com/amends Join us on Patreon at patreon.com/bufferingcast Snag the new "Randy for Giles" pin, designed by Kate Leth, along with heaps of other sweet Buffering merch, by visiting bufferingthevampireslayer.com and clicking SHOP. Logo: Kristine Thune (kristinethune.com) THE TIME HAS COME FOR ALL BAD GIRLS TO BREATHE FOG ONTO THE WINDOW PANE AND DRAW STAKED HEARTS UPON THE GLASS! Faith and Buffy are spending a LOT of time together this episode, and Jenny can't stop screaming about it. (Kristin is also excited but is playing it characteristically *cool.*)

Kristin has a fantastic talk with the lovely Jack Plotnick (portrayer of deputy mayor Allan!!), Buffering poet laureate Kate Leth delivers the greatest Buffy FashionWatch of all time, and Jess Abbott returns to voice Faith for an outlaw-country bad girls duet! Today we're discussing S3E14: BAD GIRLS!!!!!!!


GET TO KNOW OUR GUESTS

Jack Plotnick: @jackplotnick on twitter; hop to jackplotnick.com for the whole sharknado of Jack-ness!

Jess Abbott: @tancredjess on twitter; get an earful of her band Tancred at tancredmusic.com

Kate Leth: @kateleth on twitter; 360 degrees of our fashion queen at kateleth.com


LOCATE YOUR HOSTS UPON THE INTERNET

Jenny Owen Youngs: @jennyowenyoungsjennyowenyoungs.com/buffering

Kristin Russo: @kristinnoelinekristinnoeline.comeveryoneisgay.commykidisgay.com

Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram


HOT HOT TIPS

Snag a handwritten lyric sheet this January and benefit Time's Up (timesupnow.com) at bufferingthevampireslayer.com/greatergood

Still feeling festive? "Buffy, It's Cold Outside" can be seen & heard at bufferingthevampireslayer.com/tistheseason "Amends" can be downloaded for free at bufferingthevampireslayer.com/amends

Join us on Patreon at patreon.com/bufferingcast

Snag the new "Randy for Giles" pin, designed by Kate Leth, along with heaps of other sweet Buffering merch, by visiting bufferingthevampireslayer.com and clicking SHOP.


Logo: Kristine Thune (kristinethune.com)

]]>
gid://art19-episode-locator/V0/uAJ10n-d062A2kekTdHOUNNLpI7xuf7xpX-FxVPZpWk Wed, 10 Jan 2018 08:21:41 -0000 yes Buffy,whedon,angel,slayer,spike,joss,vampire 01:43:30
3.13: The Zeppo It's Season Faith, Episode Xander, and Andrew Ti (of the Yo, Is This Racist? blog & podcast) joins us for a deep dive into the patriarchy and macramé owls! Plus!! The incredible Chris Farren returns, performing and producing the song that we wrote for this week's episode. Today we're discussing S3E13: The Zeppo.


GET TO KNOW OUR GUESTS

Andrew Ti: @ANDREWTI on twitter; yoisthisracist.com and earwolf.com/show/yo-is-this-racist

Chris Farren: @chrisfarren on twitter; witness his full web presence at chrisfarren.com


LOCATE YOUR HOSTS UPON THE INTERNET

Jenny Owen Youngs: @jennyowenyoungsjennyowenyoungs.com/buffering

Kristin Russo: @kristinnoelinekristinnoeline.comeveryoneisgay.commykidisgay.com

Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram


HOT HOT TIPS

Snag a handwritten lyric sheet this January and benefit Time's Up (timesupnow.com) at bufferingthevampireslayer.com/greatergood

Still feeling festive? "Buffy, It's Cold Outside" can be seen & heard at bufferingthevampireslayer.com/tistheseason "Amends" can be downloaded for free at bufferingthevampireslayer.com/amends

Join us on Patreon at patreon.com/bufferingcast

Snag the new "Randy for Giles" pin, designed by Kate Leth, along with heaps of other sweet Buffering merch, by visiting bufferingthevampireslayer.com and clicking SHOP.


Logo: Kristine Thune (kristinethune.com)

]]>
3.13: The Zeppo full It's Season Faith, Episode Xander, and Andrew Ti (of the Yo, Is This Racist? blog &amp; podcast) joins us for a deep dive into the patriarchy and macramé owls! Plus!! The incredible Chris Farren returns, performing and producing the song that we wrote for this week's episode. Today we're discussing S3E13: The Zeppo. GET TO KNOW OUR GUESTS Andrew Ti: @ANDREWTI on twitter; yoisthisracist.com and earwolf.com/show/yo-is-this-racist Chris Farren: @chrisfarren on twitter; witness his full web presence at chrisfarren.com LOCATE YOUR HOSTS UPON THE INTERNET Jenny Owen Youngs: @jennyowenyoungs; jennyowenyoungs.com/buffering Kristin Russo: @kristinnoeline; kristinnoeline.com, everyoneisgay.com, mykidisgay.com Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram HOT HOT TIPS Snag a handwritten lyric sheet this January and benefit Time's Up (timesupnow.com) at bufferingthevampireslayer.com/greatergood Still feeling festive? "Buffy, It's Cold Outside" can be seen &amp; heard at bufferingthevampireslayer.com/tistheseason "Amends" can be downloaded for free at bufferingthevampireslayer.com/amends Join us on Patreon at patreon.com/bufferingcast Snag the new "Randy for Giles" pin, designed by Kate Leth, along with heaps of other sweet Buffering merch, by visiting bufferingthevampireslayer.com and clicking SHOP. Logo: Kristine Thune (kristinethune.com) It's Season Faith, Episode Xander, and Andrew Ti (of the Yo, Is This Racist? blog & podcast) joins us for a deep dive into the patriarchy and macramé owls! Plus!! The incredible Chris Farren returns, performing and producing the song that we wrote for this week's episode. Today we're discussing S3E13: The Zeppo.


GET TO KNOW OUR GUESTS

Andrew Ti: @ANDREWTI on twitter; yoisthisracist.com and earwolf.com/show/yo-is-this-racist

Chris Farren: @chrisfarren on twitter; witness his full web presence at chrisfarren.com


LOCATE YOUR HOSTS UPON THE INTERNET

Jenny Owen Youngs: @jennyowenyoungsjennyowenyoungs.com/buffering

Kristin Russo: @kristinnoelinekristinnoeline.comeveryoneisgay.commykidisgay.com

Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram


HOT HOT TIPS

Snag a handwritten lyric sheet this January and benefit Time's Up (timesupnow.com) at bufferingthevampireslayer.com/greatergood

Still feeling festive? "Buffy, It's Cold Outside" can be seen & heard at bufferingthevampireslayer.com/tistheseason "Amends" can be downloaded for free at bufferingthevampireslayer.com/amends

Join us on Patreon at patreon.com/bufferingcast

Snag the new "Randy for Giles" pin, designed by Kate Leth, along with heaps of other sweet Buffering merch, by visiting bufferingthevampireslayer.com and clicking SHOP.


Logo: Kristine Thune (kristinethune.com)

]]>
gid://art19-episode-locator/V0/Q9UvOMEIddyeP8Mebp9RLu2cMqAQ-HvfdsV0P3kYJvA Wed, 03 Jan 2018 08:00:00 -0000 yes Buffy,whedon,angel,slayer,spike,joss,vampire 01:30:02
0.12: Santa Barbara, The Mayor, & Nerf Herder In this VERY SPECIAL EPISODE, we venture to Santa Barbara (aka Sunnydale) at the request of THE MAYOR (Helene Schneider, who is, as best we can tell, not evil *at all* but a totally lovely human, as well as a Buffy fan)! We chat with Helene -- and also Parry Gripp and Steve Sherlock of Nerf Herder (!!!) who of course you know WROTE AND PERFORMED the Buffy theme (eeeeeee) and brought us an unbelievable gift. This week, we're totally convinced that Santa Barbara is the real Sunnydale!


FIND NERF HERDER ON TWITTER: @NerfHerder_band

Our closing song this week is "The Chosen One" by Heather Stevenson. You can find it on her album Golden, available on iTunes and Spotify!


LOCATE YOUR HOSTS UPON THE INTERNET

Jenny Owen Youngs: @jennyowenyoungsjennyowenyoungs.com/buffering

Kristin Russo: @kristinnoelinekristinnoeline.comeveryoneisgay.commykidisgay.com

Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram


HOT HOT TIPS

"Buffy, It's Cold Outside" can be seen & heard at bufferingthevampireslayer.com/tistheseason

"Amends" can be downloaded for free at bufferingthevampireslayer.com/amends

Join us on Patreon at patreon.com/bufferingcast

Snag the new "Randy for Giles" pin, designed by Kate Leth, along with heaps of other sweet Buffering merch, by visiting bufferingthevampireslayer.com and clicking SHOP. Snag 15% off your purchase through the end of the year with code BYE2017.


Logo: Kristine Thune (kristinethune.com)

]]>
0.12: Santa Barbara, The Mayor, & Nerf Herder full In this VERY SPECIAL EPISODE, we venture to Santa Barbara (aka Sunnydale) at the request of THE MAYOR (Helene Schneider, who is, as best we can tell, not evil *at all* but a totally lovely human, as well as a Buffy fan)! We chat with Helene -- and also Parry Gripp and Steve Sherlock of Nerf Herder (!!!) who of course you know WROTE AND PERFORMED the Buffy theme (eeeeeee) and brought us an unbelievable gift. This week, we're totally convinced that Santa Barbara is the real Sunnydale! FIND NERF HERDER ON TWITTER: @NerfHerder_band Our closing song this week is "The Chosen One" by Heather Stevenson. You can find it on her album Golden, available on iTunes and Spotify! LOCATE YOUR HOSTS UPON THE INTERNET Jenny Owen Youngs: @jennyowenyoungs; jennyowenyoungs.com/buffering Kristin Russo: @kristinnoeline; kristinnoeline.com, everyoneisgay.com, mykidisgay.com Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram HOT HOT TIPS "Buffy, It's Cold Outside" can be seen &amp; heard at bufferingthevampireslayer.com/tistheseason "Amends" can be downloaded for free at bufferingthevampireslayer.com/amends Join us on Patreon at patreon.com/bufferingcast Snag the new "Randy for Giles" pin, designed by Kate Leth, along with heaps of other sweet Buffering merch, by visiting bufferingthevampireslayer.com and clicking SHOP. Snag 15% off your purchase through the end of the year with code BYE2017. Logo: Kristine Thune (kristinethune.com) In this VERY SPECIAL EPISODE, we venture to Santa Barbara (aka Sunnydale) at the request of THE MAYOR (Helene Schneider, who is, as best we can tell, not evil *at all* but a totally lovely human, as well as a Buffy fan)! We chat with Helene -- and also Parry Gripp and Steve Sherlock of Nerf Herder (!!!) who of course you know WROTE AND PERFORMED the Buffy theme (eeeeeee) and brought us an unbelievable gift. This week, we're totally convinced that Santa Barbara is the real Sunnydale!


FIND NERF HERDER ON TWITTER: @NerfHerder_band

Our closing song this week is "The Chosen One" by Heather Stevenson. You can find it on her album Golden, available on iTunes and Spotify!


LOCATE YOUR HOSTS UPON THE INTERNET

Jenny Owen Youngs: @jennyowenyoungsjennyowenyoungs.com/buffering

Kristin Russo: @kristinnoelinekristinnoeline.comeveryoneisgay.commykidisgay.com

Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram


HOT HOT TIPS

"Buffy, It's Cold Outside" can be seen & heard at bufferingthevampireslayer.com/tistheseason

"Amends" can be downloaded for free at bufferingthevampireslayer.com/amends

Join us on Patreon at patreon.com/bufferingcast

Snag the new "Randy for Giles" pin, designed by Kate Leth, along with heaps of other sweet Buffering merch, by visiting bufferingthevampireslayer.com and clicking SHOP. Snag 15% off your purchase through the end of the year with code BYE2017.


Logo: Kristine Thune (kristinethune.com)

]]>
gid://art19-episode-locator/V0/IZx4kirijUX_W_iD3nsTagch5sop1icaEZ3QZpRLqXg Wed, 27 Dec 2017 08:00:00 -0000 yes Buffy,whedon,angel,slayer,spike,joss,vampire 01:02:39
3.12: Helpless Will Buffy get to go to the ice show for her birthday? Will Angel finish his cheese plate? These are just a couple of the questions we're examining today, PLUS Jeff Kober joins us to talk about playing Zachary Kralik!! In case you forgot, this is the one where Quentin Travers, the head of the Watchers Council, is all "Hi Buffy, we'll be drugging you without your knowledge before locking you, in your weakened state, inside a deteriorating old boarding house with a former serial killer/current vampire." Today we're discussing S3E12: Helpless.


FIND OUR GUEST ON TWITTER!

Jeff Kober: @jeffkober


LOCATE YOUR HOSTS UPON THE INTERNET

Jenny Owen Youngs: @jennyowenyoungsjennyowenyoungs.com/buffering

Kristin Russo: @kristinnoelinekristinnoeline.comeveryoneisgay.commykidisgay.com

Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram


HOT HOT TIPS

"Buffy, It's Cold Outside" can be seen & heard at bufferingthevampireslayer.com/tistheseason

"Amends" can be downloaded for free at bufferingthevampireslayer.com/amends

Join us on Patreon at patreon.com/bufferingcast

Snag the new "Randy for Giles" pin, designed by Kate Leth, along with heaps of other sweet Buffering merch, by visiting bufferingthevampireslayer.com and clicking SHOP.


Logo: Kristine Thune (kristinethune.com)


]]>
3.12: Helpless full Will Buffy get to go to the ice show for her birthday? Will Angel finish his cheese plate? These are just a couple of the questions we're examining today, PLUS Jeff Kober joins us to talk about playing Zachary Kralik!! In case you forgot, this is the one where Quentin Travers, the head of the Watchers Council, is all "Hi Buffy, we'll be drugging you without your knowledge before locking you, in your weakened state, inside a deteriorating old boarding house with a former serial killer/current vampire." Today we're discussing S3E12: Helpless. FIND OUR GUEST ON TWITTER! Jeff Kober: @jeffkober LOCATE YOUR HOSTS UPON THE INTERNET Jenny Owen Youngs: @jennyowenyoungs; jennyowenyoungs.com/buffering Kristin Russo: @kristinnoeline; kristinnoeline.com, everyoneisgay.com, mykidisgay.com Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram HOT HOT TIPS "Buffy, It's Cold Outside" can be seen &amp; heard at bufferingthevampireslayer.com/tistheseason "Amends" can be downloaded for free at bufferingthevampireslayer.com/amends Join us on Patreon at patreon.com/bufferingcast Snag the new "Randy for Giles" pin, designed by Kate Leth, along with heaps of other sweet Buffering merch, by visiting bufferingthevampireslayer.com and clicking SHOP. Logo: Kristine Thune (kristinethune.com) Will Buffy get to go to the ice show for her birthday? Will Angel finish his cheese plate? These are just a couple of the questions we're examining today, PLUS Jeff Kober joins us to talk about playing Zachary Kralik!! In case you forgot, this is the one where Quentin Travers, the head of the Watchers Council, is all "Hi Buffy, we'll be drugging you without your knowledge before locking you, in your weakened state, inside a deteriorating old boarding house with a former serial killer/current vampire." Today we're discussing S3E12: Helpless.


FIND OUR GUEST ON TWITTER!

Jeff Kober: @jeffkober


LOCATE YOUR HOSTS UPON THE INTERNET

Jenny Owen Youngs: @jennyowenyoungsjennyowenyoungs.com/buffering

Kristin Russo: @kristinnoelinekristinnoeline.comeveryoneisgay.commykidisgay.com

Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram


HOT HOT TIPS

"Buffy, It's Cold Outside" can be seen & heard at bufferingthevampireslayer.com/tistheseason

"Amends" can be downloaded for free at bufferingthevampireslayer.com/amends

Join us on Patreon at patreon.com/bufferingcast

Snag the new "Randy for Giles" pin, designed by Kate Leth, along with heaps of other sweet Buffering merch, by visiting bufferingthevampireslayer.com and clicking SHOP.


Logo: Kristine Thune (kristinethune.com)


]]>
gid://art19-episode-locator/V0/IGCPy2ViYKw3OZ7oWQ7apk3_7U7aecePnJCo6lMrHfk Wed, 13 Dec 2017 08:00:00 -0000 yes Buffy,whedon,angel,slayer,spike,joss,vampire 01:49:14
3.11: Gingerbread Grab your pitchforks and brace yourselves for some mob mentality, Sunnydale-style - we've arrived at Season Faith, Episode M.O.O.! Also, holy cheese wheels, we talked to Elizabeth Anne Allen (who plays Amy Madison) about nearly getting burned at the stake on her birthday, meeting the rat-actor who played her character's rat-self, and loads more! Today we're discussing S3E11: Gingerbread.


LOCATE YOUR HOSTS UPON THE INTERNET

Jenny Owen Youngs: @jennyowenyoungsjennyowenyoungs.com/buffering

Kristin Russo: @kristinnoelinekristinnoeline.comeveryoneisgay.commykidisgay.com

Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram


HOT HOT TIPS

"Buffy, It's Cold Outside" can be seen & heard at bufferingthevampireslayer.com/tistheseason

"Amends" can be downloaded for free at bufferingthevampireslayer.com/amends

Join us on Patreon at patreon.com/bufferingcast

Snag the new "Randy for Giles" pin, designed by Kate Leth, along with heaps of other sweet Buffering merch, by visiting bufferingthevampireslayer.com and clicking SHOP.


Logo: Kristine Thune (kristinethune.com)

]]>
3.11: Gingerbread full Grab your pitchforks and brace yourselves for some mob mentality, Sunnydale-style - we've arrived at Season Faith, Episode M.O.O.! Also, holy cheese wheels, we talked to Elizabeth Anne Allen (who plays Amy Madison) about nearly getting burned at the stake on her birthday, meeting the rat-actor who played her character's rat-self, and loads more! Today we're discussing S3E11: Gingerbread. LOCATE YOUR HOSTS UPON THE INTERNET Jenny Owen Youngs: @jennyowenyoungs; jennyowenyoungs.com/buffering Kristin Russo: @kristinnoeline; kristinnoeline.com, everyoneisgay.com, mykidisgay.com Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram HOT HOT TIPS "Buffy, It's Cold Outside" can be seen &amp; heard at bufferingthevampireslayer.com/tistheseason "Amends" can be downloaded for free at bufferingthevampireslayer.com/amends Join us on Patreon at patreon.com/bufferingcast Snag the new "Randy for Giles" pin, designed by Kate Leth, along with heaps of other sweet Buffering merch, by visiting bufferingthevampireslayer.com and clicking SHOP. Logo: Kristine Thune (kristinethune.com) Grab your pitchforks and brace yourselves for some mob mentality, Sunnydale-style - we've arrived at Season Faith, Episode M.O.O.! Also, holy cheese wheels, we talked to Elizabeth Anne Allen (who plays Amy Madison) about nearly getting burned at the stake on her birthday, meeting the rat-actor who played her character's rat-self, and loads more! Today we're discussing S3E11: Gingerbread.


LOCATE YOUR HOSTS UPON THE INTERNET

Jenny Owen Youngs: @jennyowenyoungsjennyowenyoungs.com/buffering

Kristin Russo: @kristinnoelinekristinnoeline.comeveryoneisgay.commykidisgay.com

Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram


HOT HOT TIPS

"Buffy, It's Cold Outside" can be seen & heard at bufferingthevampireslayer.com/tistheseason

"Amends" can be downloaded for free at bufferingthevampireslayer.com/amends

Join us on Patreon at patreon.com/bufferingcast

Snag the new "Randy for Giles" pin, designed by Kate Leth, along with heaps of other sweet Buffering merch, by visiting bufferingthevampireslayer.com and clicking SHOP.


Logo: Kristine Thune (kristinethune.com)

]]>
gid://art19-episode-locator/V0/EJKZnc0_LKopjN1UIVBhe3_9tYhdVTfHkiYd-kcpMds Wed, 06 Dec 2017 08:00:00 -0000 yes Buffy,whedon,angel,slayer,spike,joss,vampire 01:40:31
3.10: Amends It's that magical time of year when tree lights twinkle, snowfall dusts the distant hilltops, and the ghosts of those you've murdered in cold blood come back to haunt you. Gaby Dunn RETURNS and Joanna Robinson pops by for a quick Buffy FeelingsWatch (and brings her impression of Angel's impression of an Irish accent). Today we're discussing S3E10: Amends.


GET TO KNOW OUR GUESTS

Gaby Dunn: @gabydunn on twitter; youtube.com/justbetweenusshow; and read her book(!) smarturl.it/IHEBYbook 

Joanna Robinson: @jowrotethis on twitter; read her freaking VANITY FAIR COVER STORY about the Marvel Cinematic Universe; listen to her podcasts current & past such as A Storm of Spoilers, A Cast of Kings, Decoding Westworld, Little Gold Men, GenPop, and... jesus she's everywhere.


LOCATE YOUR HOSTS UPON THE INTERNET

Jenny Owen Youngs: @jennyowenyoungs; jennyowenyoungs.com/buffering

Kristin Russo: @kristinnoeline; kristinnoeline.com, everyoneisgay.com, mykidisgay.com

Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram


HOT HOT TIPS

"Buffy, It's Cold Outside" can be seen & heard at bufferingthevampireslayer.com/tistheseason

"Amends" can be downloaded for free at bufferingthevampireslayer.com/amends

Join us on Patreon at patreon.com/bufferingcast

Snag the new "Randy for Giles" pin, designed by Kate Leth, along with heaps of other sweet Buffering merch, by visiting bufferingthevampireslayer.com and clicking SHOP.


Logo: Kristine Thune (kristinethune.com)




]]>
3.10: Amends full It's that magical time of year when tree lights twinkle, snowfall dusts the distant hilltops, and the ghosts of those you've murdered in cold blood come back to haunt you. Gaby Dunn RETURNS and Joanna Robinson pops by for a quick Buffy FeelingsWatch (and brings her impression of Angel's impression of an Irish accent). Today we're discussing S3E10: Amends. GET TO KNOW OUR GUESTS Gaby Dunn: @gabydunn on twitter; youtube.com/justbetweenusshow; and read her book(!) smarturl.it/IHEBYbook  Joanna Robinson: @jowrotethis on twitter; read her freaking VANITY FAIR COVER STORY about the Marvel Cinematic Universe; listen to her podcasts current &amp; past such as A Storm of Spoilers, A Cast of Kings, Decoding Westworld, Little Gold Men, GenPop, and... jesus she's everywhere. LOCATE YOUR HOSTS UPON THE INTERNET Jenny Owen Youngs: @jennyowenyoungs; jennyowenyoungs.com/buffering Kristin Russo: @kristinnoeline; kristinnoeline.com, everyoneisgay.com, mykidisgay.com Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram HOT HOT TIPS "Buffy, It's Cold Outside" can be seen &amp; heard at bufferingthevampireslayer.com/tistheseason "Amends" can be downloaded for free at bufferingthevampireslayer.com/amends Join us on Patreon at patreon.com/bufferingcast Snag the new "Randy for Giles" pin, designed by Kate Leth, along with heaps of other sweet Buffering merch, by visiting bufferingthevampireslayer.com and clicking SHOP. Logo: Kristine Thune (kristinethune.com) It's that magical time of year when tree lights twinkle, snowfall dusts the distant hilltops, and the ghosts of those you've murdered in cold blood come back to haunt you. Gaby Dunn RETURNS and Joanna Robinson pops by for a quick Buffy FeelingsWatch (and brings her impression of Angel's impression of an Irish accent). Today we're discussing S3E10: Amends.


GET TO KNOW OUR GUESTS

Gaby Dunn: @gabydunn on twitter; youtube.com/justbetweenusshow; and read her book(!) smarturl.it/IHEBYbook 

Joanna Robinson: @jowrotethis on twitter; read her freaking VANITY FAIR COVER STORY about the Marvel Cinematic Universe; listen to her podcasts current & past such as A Storm of Spoilers, A Cast of Kings, Decoding Westworld, Little Gold Men, GenPop, and... jesus she's everywhere.


LOCATE YOUR HOSTS UPON THE INTERNET

Jenny Owen Youngs: @jennyowenyoungs; jennyowenyoungs.com/buffering

Kristin Russo: @kristinnoeline; kristinnoeline.com, everyoneisgay.com, mykidisgay.com

Buffering the Vampire Slayer: @bufferingcast on twitter, facebook, and instagram


HOT HOT TIPS

"Buffy, It's Cold Outside" can be seen & heard at bufferingthevampireslayer.com/tistheseason

"Amends" can be downloaded for free at bufferingthevampireslayer.com/amends

Join us on Patreon at patreon.com/bufferingcast

Snag the new "Randy for Giles" pin, designed by Kate Leth, along with heaps of other sweet Buffering merch, by visiting bufferingthevampireslayer.com and clicking SHOP.


Logo: Kristine Thune (kristinethune.com)




]]>
gid://art19-episode-locator/V0/metiRfEXW9d6OYURzBsMlaR5YZrvU1V4JlXTr33ifVE Wed, 29 Nov 2017 08:00:00 -0000 yes Buffy,whedon,angel,slayer,spike,joss,vampire 01:43:04
3.09: The Wish Bored now? Of course you're not!! There's ANYA! And VAMPIRE WILLOW! Today we're discussing S3E9: The Wish.

Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at www.jennyowenyoungs.com/buffering

Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at www.everyoneisgay.com and www.mykidisgay.com.

Get to know Buffy FashionWatch Correspondent and general dreamboat Kate Leth better at www.kateleth.com and on twitter @kateleth!

Follow Buffering the Vampire Slayer on Twitter, Facebook, and Instagram @bufferingcast!

In honor of today's episode, we've got a new BORED MEOW shirt up in our online store, featuring a magical kitten and designed by Diana Kresge! We've also got a goth-friendly new version of our Smash the Demon Lizard Patriarchy tee, designed by Devan Power - plus a new baby onesie and plenty of restocks!  www.bufferingthevampireslayer.com - just click on SHOP.

Looking for our jingles?! They're all right here: www.bufferingthevampireslayer.com/jingles 

**PLEASE NOTE** our "The Patriarchy" jingle is available as a free download TO ALL on Patreon! Click on the "jingles" tag on the left to find it fast!

www.patreon.com/bufferingcast. 

Logo: Kristine Thune (www.kristinethune.com).

]]>
3.09: The Wish full Bored now? Of course you're not!! There's ANYA! And VAMPIRE WILLOW! Today we're discussing S3E9: The Wish. Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at www.jennyowenyoungs.com/buffering Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at www.everyoneisgay.com and www.mykidisgay.com. Get to know Buffy FashionWatch Correspondent and general dreamboat Kate Leth better at www.kateleth.com and on twitter @kateleth! Follow Buffering the Vampire Slayer on Twitter, Facebook, and Instagram @bufferingcast! In honor of today's episode, we've got a new BORED MEOW shirt up in our online store, featuring a magical kitten and designed by Diana Kresge! We've also got a goth-friendly new version of our Smash the Demon Lizard Patriarchy tee, designed by Devan Power - plus a new baby onesie and plenty of restocks!  www.bufferingthevampireslayer.com - just click on SHOP. Looking for our jingles?! They're all right here: www.bufferingthevampireslayer.com/jingles  **PLEASE NOTE** our "The Patriarchy" jingle is available as a free download TO ALL on Patreon! Click on the "jingles" tag on the left to find it fast! www.patreon.com/bufferingcast.  Logo: Kristine Thune (www.kristinethune.com). Bored now? Of course you're not!! There's ANYA! And VAMPIRE WILLOW! Today we're discussing S3E9: The Wish.

Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at www.jennyowenyoungs.com/buffering

Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at www.everyoneisgay.com and www.mykidisgay.com.

Get to know Buffy FashionWatch Correspondent and general dreamboat Kate Leth better at www.kateleth.com and on twitter @kateleth!

Follow Buffering the Vampire Slayer on Twitter, Facebook, and Instagram @bufferingcast!

In honor of today's episode, we've got a new BORED MEOW shirt up in our online store, featuring a magical kitten and designed by Diana Kresge! We've also got a goth-friendly new version of our Smash the Demon Lizard Patriarchy tee, designed by Devan Power - plus a new baby onesie and plenty of restocks!  www.bufferingthevampireslayer.com - just click on SHOP.

Looking for our jingles?! They're all right here: www.bufferingthevampireslayer.com/jingles 

**PLEASE NOTE** our "The Patriarchy" jingle is available as a free download TO ALL on Patreon! Click on the "jingles" tag on the left to find it fast!

www.patreon.com/bufferingcast. 

Logo: Kristine Thune (www.kristinethune.com).

]]>
gid://art19-episode-locator/V0/8A4DLBRvVLqrXZ_tYAVe-CtuBklKN83NmcZPX0OEDwo Wed, 15 Nov 2017 08:05:07 -0000 yes Buffy,whedon,angel,slayer,spike,joss,vampire 01:22:32
3.08: Lover's Walk Official Spike fan-club president Joanna Robinson returns because GUESS WHO JUST DROVE THROUGH THE SUNNYDALE SIGN AGAIN!!! Also Angel is reading Sartre's Nausea by the fire in the original French and we NEED to talk about it. Today we're discussing S3E8: Lover's Walk.

Follow earth angel Joanna Robinson on twitter @jowrotethis, read her writings on VanityFair.com, and listen to her podcast on Storm Of Spoilers, Little Gold Men, and perhaps also on every podcast ever, because she is everywhere & everything.

Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at www.jennyowenyoungs.com/buffering

Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at www.everyoneisgay.com and www.mykidisgay.com.

Follow Buffering the Vampire Slayer on Twitter, Facebook, and Instagram @bufferingcast!

WE HAVE NEW MERCH! There's fresh and toasty "Awoo" baseball tees, Smash the Demon Lizard Patriarchy hoodies, an "Awooooooooooooooo" knit beanie w/ pom, and STICKERS (!!!! - it's all happening over at www.bufferingthevampireslayer.com - just click on SHOP.

We've also got CDs of both SONGS FROM SEASON TWO and SONGS FROM SEASON ONE in the store, or if you prefer your music in non-corporeal form, both albums are both available now on iTunes, or wherever you get your digital music. 

You can now support the show on Patreon at www.patreon.com/bufferingcast. **PLEASE NOTE** our new "The Patriarchy" jingle is available as a free download TO ALL on Patreon! click on the "jingles" tag on the left to find it fast!

Logo: Kristine Thune (www.kristinethune.com).

]]>
3.08: Lover's Walk full Official Spike fan-club president Joanna Robinson returns because GUESS WHO JUST DROVE THROUGH THE SUNNYDALE SIGN AGAIN!!! Also Angel is reading Sartre's Nausea by the fire in the original French and we NEED to talk about it. Today we're discussing S3E8: Lover's Walk. Follow earth angel Joanna Robinson on twitter @jowrotethis, read her writings on VanityFair.com, and listen to her podcast on Storm Of Spoilers, Little Gold Men, and perhaps also on every podcast ever, because she is everywhere &amp; everything. Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at www.jennyowenyoungs.com/buffering Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at www.everyoneisgay.com and www.mykidisgay.com. Follow Buffering the Vampire Slayer on Twitter, Facebook, and Instagram @bufferingcast! WE HAVE NEW MERCH! There's fresh and toasty "Awoo" baseball tees, Smash the Demon Lizard Patriarchy hoodies, an "Awooooooooooooooo" knit beanie w/ pom, and STICKERS (!!!! - it's all happening over at www.bufferingthevampireslayer.com - just click on SHOP. We've also got CDs of both SONGS FROM SEASON TWO and SONGS FROM SEASON ONE in the store, or if you prefer your music in non-corporeal form, both albums are both available now on iTunes, or wherever you get your digital music.  You can now support the show on Patreon at www.patreon.com/bufferingcast. **PLEASE NOTE** our new "The Patriarchy" jingle is available as a free download TO ALL on Patreon! click on the "jingles" tag on the left to find it fast! Logo: Kristine Thune (www.kristinethune.com). Official Spike fan-club president Joanna Robinson returns because GUESS WHO JUST DROVE THROUGH THE SUNNYDALE SIGN AGAIN!!! Also Angel is reading Sartre's Nausea by the fire in the original French and we NEED to talk about it. Today we're discussing S3E8: Lover's Walk.

Follow earth angel Joanna Robinson on twitter @jowrotethis, read her writings on VanityFair.com, and listen to her podcast on Storm Of Spoilers, Little Gold Men, and perhaps also on every podcast ever, because she is everywhere & everything.

Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at www.jennyowenyoungs.com/buffering

Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at www.everyoneisgay.com and www.mykidisgay.com.

Follow Buffering the Vampire Slayer on Twitter, Facebook, and Instagram @bufferingcast!

WE HAVE NEW MERCH! There's fresh and toasty "Awoo" baseball tees, Smash the Demon Lizard Patriarchy hoodies, an "Awooooooooooooooo" knit beanie w/ pom, and STICKERS (!!!! - it's all happening over at www.bufferingthevampireslayer.com - just click on SHOP.

We've also got CDs of both SONGS FROM SEASON TWO and SONGS FROM SEASON ONE in the store, or if you prefer your music in non-corporeal form, both albums are both available now on iTunes, or wherever you get your digital music. 

You can now support the show on Patreon at www.patreon.com/bufferingcast. **PLEASE NOTE** our new "The Patriarchy" jingle is available as a free download TO ALL on Patreon! click on the "jingles" tag on the left to find it fast!

Logo: Kristine Thune (www.kristinethune.com).

]]>
gid://art19-episode-locator/V0/FUxhq-m5ccEeiO_B0vomcPgLv2lacXzn6Tm1L1h0TJg Wed, 08 Nov 2017 08:00:00 -0000 yes Buffy,whedon,angel,slayer,spike,joss,vampire 01:36:22
3.07: Revelations Live from The NerdMelt Showroom! Special guests Kristine Thune, Ira Madison III, Kate Leth, and Gaby Dunn (who somehow forced her way on stage) help us sort through our feelings about Gwendolyn Post, Slayer Tension, and The Glove of Non-Monogamy! Today we're discussing S3E7: Revelations.

Follow our amazing guests on Twitter :

Kristine Thune - @kristinetuna

Ira Madison III - @ira

Kate Leth - @kateleth

Gaby Dunn - @gabydunn

Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at www.jennyowenyoungs.com/buffering

Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at www.everyoneisgay.com and www.mykidisgay.com.

Follow Buffering the Vampire Slayer on Twitter, Facebook, and Instagram @bufferingcast!

WE HAVE NEW MERCH! There's fresh and toasty "Awoo" baseball tees, Smash the Demon Lizard Patriarchy hoodies, an "Awooooooooooooooo" knit beanie w/ pom, and STICKERS (!!!! - it's all happening over at www.bufferingthevampireslayer.com - just click on SHOP.

We've also got CDs of both SONGS FROM SEASON TWO and SONGS FROM SEASON ONE in the store, or if you prefer your music in non-corporeal form, both albums are both available now on iTunes, or wherever you get your digital music. 

You can now support the show on Patreon at www.patreon.com/bufferingcast. **PLEASE NOTE** our new "The Patriarchy" jingle is available as a free download TO ALL on Patreon! click on the "jingles" tag on the left to find it fast!

Logo: Kristine Thune (www.kristinethune.com).

]]>
3.07: Revelations full Live from The NerdMelt Showroom! Special guests Kristine Thune, Ira Madison III, Kate Leth, and Gaby Dunn (who somehow forced her way on stage) help us sort through our feelings about Gwendolyn Post, Slayer Tension, and The Glove of Non-Monogamy! Today we're discussing S3E7: Revelations. Follow our amazing guests on Twitter : Kristine Thune - @kristinetuna Ira Madison III - @ira Kate Leth - @kateleth Gaby Dunn - @gabydunn Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at www.jennyowenyoungs.com/buffering Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at www.everyoneisgay.com and www.mykidisgay.com. Follow Buffering the Vampire Slayer on Twitter, Facebook, and Instagram @bufferingcast! WE HAVE NEW MERCH! There's fresh and toasty "Awoo" baseball tees, Smash the Demon Lizard Patriarchy hoodies, an "Awooooooooooooooo" knit beanie w/ pom, and STICKERS (!!!! - it's all happening over at www.bufferingthevampireslayer.com - just click on SHOP. We've also got CDs of both SONGS FROM SEASON TWO and SONGS FROM SEASON ONE in the store, or if you prefer your music in non-corporeal form, both albums are both available now on iTunes, or wherever you get your digital music.  You can now support the show on Patreon at www.patreon.com/bufferingcast. **PLEASE NOTE** our new "The Patriarchy" jingle is available as a free download TO ALL on Patreon! click on the "jingles" tag on the left to find it fast! Logo: Kristine Thune (www.kristinethune.com). Live from The NerdMelt Showroom! Special guests Kristine Thune, Ira Madison III, Kate Leth, and Gaby Dunn (who somehow forced her way on stage) help us sort through our feelings about Gwendolyn Post, Slayer Tension, and The Glove of Non-Monogamy! Today we're discussing S3E7: Revelations.

Follow our amazing guests on Twitter :

Kristine Thune - @kristinetuna

Ira Madison III - @ira

Kate Leth - @kateleth

Gaby Dunn - @gabydunn

Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at www.jennyowenyoungs.com/buffering

Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at www.everyoneisgay.com and www.mykidisgay.com.

Follow Buffering the Vampire Slayer on Twitter, Facebook, and Instagram @bufferingcast!

WE HAVE NEW MERCH! There's fresh and toasty "Awoo" baseball tees, Smash the Demon Lizard Patriarchy hoodies, an "Awooooooooooooooo" knit beanie w/ pom, and STICKERS (!!!! - it's all happening over at www.bufferingthevampireslayer.com - just click on SHOP.

We've also got CDs of both SONGS FROM SEASON TWO and SONGS FROM SEASON ONE in the store, or if you prefer your music in non-corporeal form, both albums are both available now on iTunes, or wherever you get your digital music. 

You can now support the show on Patreon at www.patreon.com/bufferingcast. **PLEASE NOTE** our new "The Patriarchy" jingle is available as a free download TO ALL on Patreon! click on the "jingles" tag on the left to find it fast!

Logo: Kristine Thune (www.kristinethune.com).

]]>
gid://art19-episode-locator/V0/SUzXcI7AGQy0cYX6vOf0_D4CYHWrl5gOZvQuKynP0Ak Wed, 01 Nov 2017 07:00:00 -0000 yes Buffy,whedon,angel,slayer,spike,joss,vampire 01:33:52
3.06: Band Candy Kristine Sutherland (!!!) and Kate Leth guest -- ARE YOU EFFING KIDDING US, IT'S EFFING BAND CANDY!!!!! We mean *ahem* -- today we're discussing S3E6: Band Candy.

Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at www.jennyowenyoungs.com/buffering

Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at www.everyoneisgay.com and www.mykidisgay.com.

Get to know Buffy FashionWatch Correspondent and general dreamboat Kate Leth better at www.kateleth.com and on twitter @kateleth!

Follow Buffering the Vampire Slayer on Twitter, Facebook, and Instagram @bufferingcast!

WE HAVE NEW MERCH! There's fresh and toasty "Awoo" baseball tees, Smash the Demon Lizard Patriarchy hoodies, an "Awooooooooooooooo" knit beanie w/ pom, and STICKERS (!!!! - it's all happening over at www.bufferingthevampireslayer.com - just click on SHOP.

We've also got CDs of both SONGS FROM SEASON TWO and SONGS FROM SEASON ONE in the store, or if you prefer your music in non-corporeal form, both albums are both available now on iTunes, or wherever you get your digital music. 

You can now support the show on Patreon at www.patreon.com/bufferingcast. **PLEASE NOTE** our new "The Patriarchy" jingle is available as a free download TO ALL on Patreon! click on the "jingles" tag on the left to find it fast!

Logo: Kristine Thune (www.kristinethune.com).

]]>
3.06: Band Candy full Kristine Sutherland (!!!) and Kate Leth guest -- ARE YOU EFFING KIDDING US, IT'S EFFING BAND CANDY!!!!! We mean *ahem* -- today we're discussing S3E6: Band Candy. Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at www.jennyowenyoungs.com/buffering Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at www.everyoneisgay.com and www.mykidisgay.com. Get to know Buffy FashionWatch Correspondent and general dreamboat Kate Leth better at www.kateleth.com and on twitter @kateleth! Follow Buffering the Vampire Slayer on Twitter, Facebook, and Instagram @bufferingcast! WE HAVE NEW MERCH! There's fresh and toasty "Awoo" baseball tees, Smash the Demon Lizard Patriarchy hoodies, an "Awooooooooooooooo" knit beanie w/ pom, and STICKERS (!!!! - it's all happening over at www.bufferingthevampireslayer.com - just click on SHOP. We've also got CDs of both SONGS FROM SEASON TWO and SONGS FROM SEASON ONE in the store, or if you prefer your music in non-corporeal form, both albums are both available now on iTunes, or wherever you get your digital music.  You can now support the show on Patreon at www.patreon.com/bufferingcast. **PLEASE NOTE** our new "The Patriarchy" jingle is available as a free download TO ALL on Patreon! click on the "jingles" tag on the left to find it fast! Logo: Kristine Thune (www.kristinethune.com). Kristine Sutherland (!!!) and Kate Leth guest -- ARE YOU EFFING KIDDING US, IT'S EFFING BAND CANDY!!!!! We mean *ahem* -- today we're discussing S3E6: Band Candy.

Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at www.jennyowenyoungs.com/buffering

Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at www.everyoneisgay.com and www.mykidisgay.com.

Get to know Buffy FashionWatch Correspondent and general dreamboat Kate Leth better at www.kateleth.com and on twitter @kateleth!

Follow Buffering the Vampire Slayer on Twitter, Facebook, and Instagram @bufferingcast!

WE HAVE NEW MERCH! There's fresh and toasty "Awoo" baseball tees, Smash the Demon Lizard Patriarchy hoodies, an "Awooooooooooooooo" knit beanie w/ pom, and STICKERS (!!!! - it's all happening over at www.bufferingthevampireslayer.com - just click on SHOP.

We've also got CDs of both SONGS FROM SEASON TWO and SONGS FROM SEASON ONE in the store, or if you prefer your music in non-corporeal form, both albums are both available now on iTunes, or wherever you get your digital music. 

You can now support the show on Patreon at www.patreon.com/bufferingcast. **PLEASE NOTE** our new "The Patriarchy" jingle is available as a free download TO ALL on Patreon! click on the "jingles" tag on the left to find it fast!

Logo: Kristine Thune (www.kristinethune.com).

]]>
gid://art19-episode-locator/V0/C_aCMXnXN-tXPRoCyGK_fd1HRuJ-S8rzV8iwORVhokM Wed, 18 Oct 2017 07:42:27 -0000 yes Buffy,whedon,angel,slayer,spike,joss,vampire 01:17:33
3.05: Homecoming BUFFERING 3.05: Homecoming

GET IN THE LIMO! It's the episode that launched a zillion Cordelia/Spatula fan fics! Buckle up for SlayerFest 98! Today we're discussing S3E5: Homecoming.

Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at www.jennyowenyoungs.com/buffering

Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at www.everyoneisgay.com and www.mykidisgay.com.

Follow Buffering the Vampire Slayer on Twitter, Facebook, and Instagram @bufferingcast!

WE HAVE NEW MERCH! There's fresh and toasty "Awoo" baseball tees, Smash the Demon Lizard Patriarchy hoodies, an "Awooooooooooooooo" knit beanie w/ pom, and STICKERS (!!!! - it's all happening over at www.bufferingthevampireslayer.com - just click on SHOP.

We've also got CDs of both SONGS FROM SEASON TWO and SONGS FROM SEASON ONE in the store, or if you prefer your music in non-corporeal form, both albums are both available now on iTunes, or wherever you get your digital music. 

You can now support the show on Patreon at www.patreon.com/bufferingcast. **PLEASE NOTE** our new "The Patriarchy" jingle is available as a free download TO ALL on Patreon! click on the "jingles" tag on the left to find it fast!

Logo: Kristine Thune (www.kristinethune.com).

]]>
3.05: Homecoming full BUFFERING 3.05: Homecoming GET IN THE LIMO! It's the episode that launched a zillion Cordelia/Spatula fan fics! Buckle up for SlayerFest 98! Today we're discussing S3E5: Homecoming. Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at www.jennyowenyoungs.com/buffering Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at www.everyoneisgay.com and www.mykidisgay.com. Follow Buffering the Vampire Slayer on Twitter, Facebook, and Instagram @bufferingcast! WE HAVE NEW MERCH! There's fresh and toasty "Awoo" baseball tees, Smash the Demon Lizard Patriarchy hoodies, an "Awooooooooooooooo" knit beanie w/ pom, and STICKERS (!!!! - it's all happening over at www.bufferingthevampireslayer.com - just click on SHOP. We've also got CDs of both SONGS FROM SEASON TWO and SONGS FROM SEASON ONE in the store, or if you prefer your music in non-corporeal form, both albums are both available now on iTunes, or wherever you get your digital music.  You can now support the show on Patreon at www.patreon.com/bufferingcast. **PLEASE NOTE** our new "The Patriarchy" jingle is available as a free download TO ALL on Patreon! click on the "jingles" tag on the left to find it fast! Logo: Kristine Thune (www.kristinethune.com). BUFFERING 3.05: Homecoming

GET IN THE LIMO! It's the episode that launched a zillion Cordelia/Spatula fan fics! Buckle up for SlayerFest 98! Today we're discussing S3E5: Homecoming.

Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at www.jennyowenyoungs.com/buffering

Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at www.everyoneisgay.com and www.mykidisgay.com.

Follow Buffering the Vampire Slayer on Twitter, Facebook, and Instagram @bufferingcast!

WE HAVE NEW MERCH! There's fresh and toasty "Awoo" baseball tees, Smash the Demon Lizard Patriarchy hoodies, an "Awooooooooooooooo" knit beanie w/ pom, and STICKERS (!!!! - it's all happening over at www.bufferingthevampireslayer.com - just click on SHOP.

We've also got CDs of both SONGS FROM SEASON TWO and SONGS FROM SEASON ONE in the store, or if you prefer your music in non-corporeal form, both albums are both available now on iTunes, or wherever you get your digital music. 

You can now support the show on Patreon at www.patreon.com/bufferingcast. **PLEASE NOTE** our new "The Patriarchy" jingle is available as a free download TO ALL on Patreon! click on the "jingles" tag on the left to find it fast!

Logo: Kristine Thune (www.kristinethune.com).

]]>
gid://art19-episode-locator/V0/66jSMKE_BL3z3bnlRGji5yFOSq7u2vyt1cbyUeqHcpU Wed, 11 Oct 2017 07:00:00 -0000 yes Buffy,whedon,angel,slayer,spike,joss,vampire 01:17:53
3.04: Beauty and the Beasts BUFFERING 3.04: Beauty and the Beasts

In this episode, Buffy finds herself surrounded by all kinds of man-beasts, Faith coins the phrase "kickin the gearshift" (now a timeless classic), and Xander takes a very poorly-timed nap. We also talk to Red McCormick about her experience in working with survivors of domestic violence, and how that intersects with this episode of Buffy. Today we're discussing S3E4: Beauty and the Beasts.


Resources for survivors of domestic violence in the US:

National Coalition of Anti-Violence Programs: https://avp.org/ncavp/

National Domestic Violence Hotline: http://www.thehotline.org/

Battered Women's Justice Project: http://www.bwjp.org/

NW Network Resource List (LGBT Specific): http://www.nwnetwork.org/helpful-links/


Australia Domestic Violence Resources:

http://www.anothercloset.com.au (specifically queer)

http://www.acon.org.au (specifically queer)

http://www.sass.org.au/directory/ (this is a resource that contains info on multiple orgs, primarily for sexual assault, but many for DV as well).

http://www.dvrcv.org.au


UK Domestic Violence Resources:

The National Domestic Violence Helpline - 0808 200 0247

National Centre for Domestic Violence Helpline - 0844 804 4999 - for free legal advice and help getting a restraining order.

ManKind Helpline - for male victims of domestic abuse - 01823 334244

Respect Helpline for perpetrators of Domestic abuse - 0808 802 4040

The Samaritans if you just need someone to listen - 08457 90 90 90

If you are in immediate danger, always phone 999. 


Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering

Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com.

Follow Buffering the Vampire Slayer on Twitter, Facebook, and Instagram @bufferingcast

WE HAVE NEW MERCH! There's fresh and toasty "Awoo" baseball tees, Smash the Demon Lizard Patriarchy hoodies, an "Awooooooooooooooo" knit beanie w/ pom, and STICKERS (!!!!) - it's all happening over at bufferingthevampireslayer.com - just click on SHOP.

We've also got CDs of both SONGS FROM SEASON TWO and SONGS FROM SEASON ONE in the store, or if you prefer your music in non-corporeal form, both albums are both available now on iTunes, or wherever you get your digital music.

**PLEASE NOTE** our new "The Patriarchy" jingle is available as a free download TO ALL! Just visit patreon.com/bufferingcastand click on the "jingles" tag on the left to find it fast!

You can now support the show on Patreon at patreon.com/bufferingcast.

Logo: Kristine Thune (kristinethune.com). 

]]>
3.04: Beauty and the Beasts full BUFFERING 3.04: Beauty and the Beasts In this episode, Buffy finds herself surrounded by all kinds of man-beasts, Faith coins the phrase "kickin the gearshift" (now a timeless classic), and Xander takes a very poorly-timed nap. We also talk to Red McCormick about her experience in working with survivors of domestic violence, and how that intersects with this episode of Buffy. Today we're discussing S3E4: Beauty and the Beasts. Resources for survivors of domestic violence in the US: National Coalition of Anti-Violence Programs: https://avp.org/ncavp/ National Domestic Violence Hotline: http://www.thehotline.org/ Battered Women's Justice Project: http://www.bwjp.org/ NW Network Resource List (LGBT Specific): http://www.nwnetwork.org/helpful-links/ Australia Domestic Violence Resources: http://www.anothercloset.com.au (specifically queer) http://www.acon.org.au (specifically queer) http://www.sass.org.au/directory/ (this is a resource that contains info on multiple orgs, primarily for sexual assault, but many for DV as well). http://www.dvrcv.org.au UK Domestic Violence Resources: The National Domestic Violence Helpline - 0808 200 0247 National Centre for Domestic Violence Helpline - 0844 804 4999 - for free legal advice and help getting a restraining order. ManKind Helpline - for male victims of domestic abuse - 01823 334244 Respect Helpline for perpetrators of Domestic abuse - 0808 802 4040 The Samaritans if you just need someone to listen - 08457 90 90 90 If you are in immediate danger, always phone 999.  Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering.  Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Follow Buffering the Vampire Slayer on Twitter, Facebook, and Instagram @bufferingcast!  WE HAVE NEW MERCH! There's fresh and toasty "Awoo" baseball tees, Smash the Demon Lizard Patriarchy hoodies, an "Awooooooooooooooo" knit beanie w/ pom, and STICKERS (!!!!) - it's all happening over at bufferingthevampireslayer.com - just click on SHOP. We've also got CDs of both SONGS FROM SEASON TWO and SONGS FROM SEASON ONE in the store, or if you prefer your music in non-corporeal form, both albums are both available now on iTunes, or wherever you get your digital music. **PLEASE NOTE** our new "The Patriarchy" jingle is available as a free download TO ALL! Just visit patreon.com/bufferingcastand click on the "jingles" tag on the left to find it fast! You can now support the show on Patreon at patreon.com/bufferingcast. Logo: Kristine Thune (kristinethune.com).  BUFFERING 3.04: Beauty and the Beasts

In this episode, Buffy finds herself surrounded by all kinds of man-beasts, Faith coins the phrase "kickin the gearshift" (now a timeless classic), and Xander takes a very poorly-timed nap. We also talk to Red McCormick about her experience in working with survivors of domestic violence, and how that intersects with this episode of Buffy. Today we're discussing S3E4: Beauty and the Beasts.


Resources for survivors of domestic violence in the US:

National Coalition of Anti-Violence Programs: https://avp.org/ncavp/

National Domestic Violence Hotline: http://www.thehotline.org/

Battered Women's Justice Project: http://www.bwjp.org/

NW Network Resource List (LGBT Specific): http://www.nwnetwork.org/helpful-links/


Australia Domestic Violence Resources:

http://www.anothercloset.com.au (specifically queer)

http://www.acon.org.au (specifically queer)

http://www.sass.org.au/directory/ (this is a resource that contains info on multiple orgs, primarily for sexual assault, but many for DV as well).

http://www.dvrcv.org.au


UK Domestic Violence Resources:

The National Domestic Violence Helpline - 0808 200 0247

National Centre for Domestic Violence Helpline - 0844 804 4999 - for free legal advice and help getting a restraining order.

ManKind Helpline - for male victims of domestic abuse - 01823 334244

Respect Helpline for perpetrators of Domestic abuse - 0808 802 4040

The Samaritans if you just need someone to listen - 08457 90 90 90

If you are in immediate danger, always phone 999. 


Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering

Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com.

Follow Buffering the Vampire Slayer on Twitter, Facebook, and Instagram @bufferingcast

WE HAVE NEW MERCH! There's fresh and toasty "Awoo" baseball tees, Smash the Demon Lizard Patriarchy hoodies, an "Awooooooooooooooo" knit beanie w/ pom, and STICKERS (!!!!) - it's all happening over at bufferingthevampireslayer.com - just click on SHOP.

We've also got CDs of both SONGS FROM SEASON TWO and SONGS FROM SEASON ONE in the store, or if you prefer your music in non-corporeal form, both albums are both available now on iTunes, or wherever you get your digital music.

**PLEASE NOTE** our new "The Patriarchy" jingle is available as a free download TO ALL! Just visit patreon.com/bufferingcastand click on the "jingles" tag on the left to find it fast!

You can now support the show on Patreon at patreon.com/bufferingcast.

Logo: Kristine Thune (kristinethune.com). 

]]>
gid://art19-episode-locator/V0/T2Tkukct-FJ7N-jh1Q8Mj9ICuumnJHh4N0GBIJak8QY Wed, 04 Oct 2017 07:00:00 -0000 yes Buffy,whedon,angel,slayer,spike,joss,vampire 01:16:17
3.03: Faith, Hope & Trick Lock up your daughters because FAITH IS HERE!! Prepare for pleather pants, alligator wrestling, and a hearty Boston accent, and then brace for impact because *something* is about to fall out of the sky. ALSO this episode features our first musical guest & songwriting collaborator, Jess Abbott (of Tancred) in the role of Faith!! Today we're discussing S3E3: Faith, Hope & Trick.

Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering

Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com.

Follow Jess Abbott on twitter (@tancredjess) and check out her band Tancred at tancredmusic.com.

Follow Buffering the Vampire Slayer on Twitter, Facebook, and Instagram @bufferingcast

Transform into a Buffering burrito by ensconcing yourself in a wolf-y AWOO shirt designed by Isabella Rotman, an ADORABLE "even a werewolf is better than misogyny" tee designed by Cameron Glavin, and the JUST KEEP FIGHTING tee in a new color! We've also got CDs of both SONGS FROM SEASON TWO and SONGS FROM SEASON ONE. Visit bufferingthevampireslayer.com and click on SHOP to check out our little cabinet of WONDERS. If you prefer your music in non-corporeal form, Buffering the Vampire 

**PLEASE NOTE** our new "The Patriarchy" jingle is available as a free download TO ALL! Just visit patreon.com/bufferingcastand click on the "jingles" tag on the left to find it fast!

You can now support the show on Patreon at patreon.com/bufferingcast.

Logo: Kristine Thune (kristinethune.com). 

]]>
3.03: Faith, Hope & Trick full Lock up your daughters because FAITH IS HERE!! Prepare for pleather pants, alligator wrestling, and a hearty Boston accent, and then brace for impact because *something* is about to fall out of the sky. ALSO this episode features our first musical guest &amp; songwriting collaborator, Jess Abbott (of Tancred) in the role of Faith!! Today we're discussing S3E3: Faith, Hope &amp; Trick. Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering.  Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Follow Jess Abbott on twitter (@tancredjess) and check out her band Tancred at tancredmusic.com. Follow Buffering the Vampire Slayer on Twitter, Facebook, and Instagram @bufferingcast!  Transform into a Buffering burrito by ensconcing yourself in a wolf-y AWOO shirt designed by Isabella Rotman, an ADORABLE "even a werewolf is better than misogyny" tee designed by Cameron Glavin, and the JUST KEEP FIGHTING tee in a new color! We've also got CDs of both SONGS FROM SEASON TWO and SONGS FROM SEASON ONE. Visit bufferingthevampireslayer.com and click on SHOP to check out our little cabinet of WONDERS. If you prefer your music in non-corporeal form, Buffering the Vampire  **PLEASE NOTE** our new "The Patriarchy" jingle is available as a free download TO ALL! Just visit patreon.com/bufferingcastand click on the "jingles" tag on the left to find it fast! You can now support the show on Patreon at patreon.com/bufferingcast. Logo: Kristine Thune (kristinethune.com).  Lock up your daughters because FAITH IS HERE!! Prepare for pleather pants, alligator wrestling, and a hearty Boston accent, and then brace for impact because *something* is about to fall out of the sky. ALSO this episode features our first musical guest & songwriting collaborator, Jess Abbott (of Tancred) in the role of Faith!! Today we're discussing S3E3: Faith, Hope & Trick.

Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering

Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com.

Follow Jess Abbott on twitter (@tancredjess) and check out her band Tancred at tancredmusic.com.

Follow Buffering the Vampire Slayer on Twitter, Facebook, and Instagram @bufferingcast

Transform into a Buffering burrito by ensconcing yourself in a wolf-y AWOO shirt designed by Isabella Rotman, an ADORABLE "even a werewolf is better than misogyny" tee designed by Cameron Glavin, and the JUST KEEP FIGHTING tee in a new color! We've also got CDs of both SONGS FROM SEASON TWO and SONGS FROM SEASON ONE. Visit bufferingthevampireslayer.com and click on SHOP to check out our little cabinet of WONDERS. If you prefer your music in non-corporeal form, Buffering the Vampire 

**PLEASE NOTE** our new "The Patriarchy" jingle is available as a free download TO ALL! Just visit patreon.com/bufferingcastand click on the "jingles" tag on the left to find it fast!

You can now support the show on Patreon at patreon.com/bufferingcast.

Logo: Kristine Thune (kristinethune.com). 

]]>
gid://art19-episode-locator/V0/3auAj0U1digr5Lx98WUp72XbQf35opCnC8qsox800iw Wed, 20 Sep 2017 07:00:00 -0000 yes Buffy,whedon,angel,slayer,spike,joss,vampire 01:18:56
3.02: Dead Man's Party LIVE FROM FLAMECON in Brooklyn NY, this episode features guest appearances from musician Mal Blum, senior Autostraddle editor Heather Hogan, and our beloved Kate Leth! We talk about zombie cats, zombie humans, and of course... Joyce and Pat. This week we're discussing s3e2: Dead Man's Party

**PLEASE NOTE** our new "The Patriarchy" jingle is available as a free download TO ALL! Just visit patreon.com/bufferingcast and click on the "jingles" tag on the left to find it fast!

Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering

Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com.

Follow Buffering the Vampire Slayer on Twitter, Facebook, and Instagram @bufferingcast! And while you're at it, find our guests on twitter too: @malblum, @theheatherhogan, and @kateleth

Thanks to this episode's sponsors! 

MERCH REMAINS IN STOCK, including a wolf-y AWOO shirt designed by Isabella Rotman, an ADORABLE "even a werewolf is better than misogyny" tee designed by Cameron Glavin, and the JUST KEEP FIGHTING tee in a new color! We've also got CDs ready to order - limited quantities of both SONGS FROM SEASON TWO and SONGS FROM SEASON ONE. Visit bufferingthevampireslayer.com and click on SHOP to check out our little cabinet of WONDERS. If you prefer your music in non-corporeal form, Buffering the Vampire Slayer: Songs From Season One is available now on iTunes, or wherever you get your digital music.

You can now support the show on Patreon at patreon.com/bufferingcast.

Logo: Kristine Thune (kristinethune.com). 

]]>
3.02: Dead Man's Party full LIVE FROM FLAMECON in Brooklyn NY, this episode features guest appearances from musician Mal Blum, senior Autostraddle editor Heather Hogan, and our beloved Kate Leth! We talk about zombie cats, zombie humans, and of course... Joyce and Pat. This week we're discussing s3e2: Dead Man's Party.  **PLEASE NOTE** our new "The Patriarchy" jingle is available as a free download TO ALL! Just visit patreon.com/bufferingcast and click on the "jingles" tag on the left to find it fast! Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering.  Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Follow Buffering the Vampire Slayer on Twitter, Facebook, and Instagram @bufferingcast! And while you're at it, find our guests on twitter too: @malblum, @theheatherhogan, and @kateleth!  Thanks to this episode's sponsors!  MERCH REMAINS IN STOCK, including a wolf-y AWOO shirt designed by Isabella Rotman, an ADORABLE "even a werewolf is better than misogyny" tee designed by Cameron Glavin, and the JUST KEEP FIGHTING tee in a new color! We've also got CDs ready to order - limited quantities of both SONGS FROM SEASON TWO and SONGS FROM SEASON ONE. Visit bufferingthevampireslayer.com and click on SHOP to check out our little cabinet of WONDERS. If you prefer your music in non-corporeal form, Buffering the Vampire Slayer: Songs From Season One is available now on iTunes, or wherever you get your digital music. You can now support the show on Patreon at patreon.com/bufferingcast. Logo: Kristine Thune (kristinethune.com).  LIVE FROM FLAMECON in Brooklyn NY, this episode features guest appearances from musician Mal Blum, senior Autostraddle editor Heather Hogan, and our beloved Kate Leth! We talk about zombie cats, zombie humans, and of course... Joyce and Pat. This week we're discussing s3e2: Dead Man's Party

**PLEASE NOTE** our new "The Patriarchy" jingle is available as a free download TO ALL! Just visit patreon.com/bufferingcast and click on the "jingles" tag on the left to find it fast!

Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering

Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com.

Follow Buffering the Vampire Slayer on Twitter, Facebook, and Instagram @bufferingcast! And while you're at it, find our guests on twitter too: @malblum, @theheatherhogan, and @kateleth

Thanks to this episode's sponsors! 

MERCH REMAINS IN STOCK, including a wolf-y AWOO shirt designed by Isabella Rotman, an ADORABLE "even a werewolf is better than misogyny" tee designed by Cameron Glavin, and the JUST KEEP FIGHTING tee in a new color! We've also got CDs ready to order - limited quantities of both SONGS FROM SEASON TWO and SONGS FROM SEASON ONE. Visit bufferingthevampireslayer.com and click on SHOP to check out our little cabinet of WONDERS. If you prefer your music in non-corporeal form, Buffering the Vampire Slayer: Songs From Season One is available now on iTunes, or wherever you get your digital music.

You can now support the show on Patreon at patreon.com/bufferingcast.

Logo: Kristine Thune (kristinethune.com). 

]]>
gid://art19-episode-locator/V0/Lfj9IhtB0w8HaC7MQJ5Xx92cwYitt423ooYMXUKjlRg Wed, 13 Sep 2017 07:00:00 -0000 yes Buffy,whedon,angel,slayer,spike,joss,vampire 01:00:25
3.01: Anne HOLY HELLMOUTH WE ARE BACK!! We're kicking off Season 3 with a supersize episode, complete with a Buffy FashionWatch fix from Kate Leth and an interview with the *delightful* Julia Lee Stander, who plays Lily/Anne in this ep and was going by Chanterelle all the way back in 2.07: Lie to Me. This week we're SO THRILLED to be discussing s3e1: Anne

**PLEASE NOTE** our new "The Patriarchy" jingle is available as a free download TO ALL! Just visit patreon.com/bufferingcast and click on the "jingles" tag on the left to find it fast!

Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering

Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com.

Get to know Buffy Fashion-Watch correspondent Kate Leth better at kateleth.com, or give her a shout on twitter (@kateleth). 

Follow Buffering the Vampire Slayer on Twitter, Facebook, and Instagram @bufferingcast!

Thanks to this episode's sponsors! 

-Lola: For 60% off your first order, visit mylola.com and enter BUFFY when you subscribe.

-Casper: Get $50 toward any mattress purchase when you visit casper.com/BUFFY and use offer code BUFFY. 

-RXBAR: For 25% off your first order, visit RXBAR.com/BUFFY and enter promo code BUFFY at checkout. 

Try Stitcher Premium for an ad-free experience, and to access oodles of exclusive content from a variety of podcasts & creators. Stitcher Premium is offering our listeners a free month-long trial, and $5 off the first year of an annual plan - just visit stitcherpremium.com/buffy and use promo code buffy.

We've got NEW MERCH, including a wolf-y AWOO shirt designed by Isabella Rotman, an ADORABLE "even a werewolf is better than misogyny" tee designed by Cameron Glavin, and the JUST KEEP FIGHTING tee in a new color! We've also got CDs ready to order - limited quantities of both SONGS FROM SEASON TWO and SONGS FROM SEASON ONE. Visit bufferingthevampireslayer.com and click on SHOP to check out our little shop of WONDERS. If you prefer your music in non-corporeal form, Buffering the Vampire Slayer: Songs From Season One is available now on iTunes, or wherever you get your digital music.

You can now support the show on Patreon at patreon.com/bufferingcast.

Logo: Kristine Thune (kristinethune.com

]]>
3.01: Anne full HOLY HELLMOUTH WE ARE BACK!! We're kicking off Season 3 with a supersize episode, complete with a Buffy FashionWatch fix from Kate Leth and an interview with the *delightful* Julia Lee Stander, who plays Lily/Anne in this ep and was going by Chanterelle all the way back in 2.07: Lie to Me. This week we're SO THRILLED to be discussing s3e1: Anne.  **PLEASE NOTE** our new "The Patriarchy" jingle is available as a free download TO ALL! Just visit patreon.com/bufferingcast and click on the "jingles" tag on the left to find it fast! Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering.  Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Get to know Buffy Fashion-Watch correspondent Kate Leth better at kateleth.com, or give her a shout on twitter (@kateleth).  Follow Buffering the Vampire Slayer on Twitter, Facebook, and Instagram @bufferingcast! Thanks to this episode's sponsors!  -Lola: For 60% off your first order, visit mylola.com and enter BUFFY when you subscribe. -Casper: Get $50 toward any mattress purchase when you visit casper.com/BUFFY and use offer code BUFFY.  -RXBAR: For 25% off your first order, visit RXBAR.com/BUFFY and enter promo code BUFFY at checkout.  Try Stitcher Premium for an ad-free experience, and to access oodles of exclusive content from a variety of podcasts &amp; creators. Stitcher Premium is offering our listeners a free month-long trial, and $5 off the first year of an annual plan - just visit stitcherpremium.com/buffy and use promo code buffy. We've got NEW MERCH, including a wolf-y AWOO shirt designed by Isabella Rotman, an ADORABLE "even a werewolf is better than misogyny" tee designed by Cameron Glavin, and the JUST KEEP FIGHTING tee in a new color! We've also got CDs ready to order - limited quantities of both SONGS FROM SEASON TWO and SONGS FROM SEASON ONE. Visit bufferingthevampireslayer.com and click on SHOP to check out our little shop of WONDERS. If you prefer your music in non-corporeal form, Buffering the Vampire Slayer: Songs From Season One is available now on iTunes, or wherever you get your digital music. You can now support the show on Patreon at patreon.com/bufferingcast. Logo: Kristine Thune (kristinethune.com)  HOLY HELLMOUTH WE ARE BACK!! We're kicking off Season 3 with a supersize episode, complete with a Buffy FashionWatch fix from Kate Leth and an interview with the *delightful* Julia Lee Stander, who plays Lily/Anne in this ep and was going by Chanterelle all the way back in 2.07: Lie to Me. This week we're SO THRILLED to be discussing s3e1: Anne

**PLEASE NOTE** our new "The Patriarchy" jingle is available as a free download TO ALL! Just visit patreon.com/bufferingcast and click on the "jingles" tag on the left to find it fast!

Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering

Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com.

Get to know Buffy Fashion-Watch correspondent Kate Leth better at kateleth.com, or give her a shout on twitter (@kateleth). 

Follow Buffering the Vampire Slayer on Twitter, Facebook, and Instagram @bufferingcast!

Thanks to this episode's sponsors! 

-Lola: For 60% off your first order, visit mylola.com and enter BUFFY when you subscribe.

-Casper: Get $50 toward any mattress purchase when you visit casper.com/BUFFY and use offer code BUFFY. 

-RXBAR: For 25% off your first order, visit RXBAR.com/BUFFY and enter promo code BUFFY at checkout. 

Try Stitcher Premium for an ad-free experience, and to access oodles of exclusive content from a variety of podcasts & creators. Stitcher Premium is offering our listeners a free month-long trial, and $5 off the first year of an annual plan - just visit stitcherpremium.com/buffy and use promo code buffy.

We've got NEW MERCH, including a wolf-y AWOO shirt designed by Isabella Rotman, an ADORABLE "even a werewolf is better than misogyny" tee designed by Cameron Glavin, and the JUST KEEP FIGHTING tee in a new color! We've also got CDs ready to order - limited quantities of both SONGS FROM SEASON TWO and SONGS FROM SEASON ONE. Visit bufferingthevampireslayer.com and click on SHOP to check out our little shop of WONDERS. If you prefer your music in non-corporeal form, Buffering the Vampire Slayer: Songs From Season One is available now on iTunes, or wherever you get your digital music.

You can now support the show on Patreon at patreon.com/bufferingcast.

Logo: Kristine Thune (kristinethune.com

]]>
gid://art19-episode-locator/V0/8X9cvcutKUurW_1rUOFLLNbjYaXXEwigRR07A-JcmZo Wed, 06 Sep 2017 07:00:00 -0000 yes Buffy,whedon,angel,slayer,spike,joss,vampire 01:41:37
0.09: Season 2 Wrap-Up Today we stand on a mountaintop, shading our eyes from the glare of the sun, looking back on all that we have endured together over these last 22 episodes. The second chapter of Buffy the Vampire Slayer has some high highs and some LOW lows, and we're discussing our favorite moments as well as some truly painful ones. You'll also hear from Gaby Dunn, Joanna Robinson, Brittani Nichols, and of COURSE Kate Leth! This is our Season 2 Wrap Up

Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering

Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com.

Get to know Buffy Fashion-Watch correspondent Kate Leth better at kateleth.com, or give her a shout on twitter (@kateleth). 

Twitter it up with our special guests Gaby Dunn (@gabydunn), Brittani Nichols (@bishilarious), and Joanna Robinson (@jowrotethis).

Follow Buffering the Vampire Slayer on twitter (@bufferingcast) and on facebook (facebook.com/bufferingcast)!

Thanks to this episode's sponsors! 

-RXBAR: For 25% off your first order, visit RXBAR.com/BUFFY and enter promo code BUFFY at checkout. 

-Book of the Month: Go to bookofthemonth.com/BUFFERING and get your first book for $10.

-ModCloth: Shop on ModCloth.com and enter promo code "BUFFY" at checkout to get 30% off your order of $100 or more. 

-And remember to check out the new LeVar Burton Reads podcast!  

Try Stitcher Premium for an ad-free experience, and to access oodles of exclusive content from a variety of podcasts & creators. Stitcher Premium is offering our listeners a free month-long trial, and $5 off the first year of an annual plan - just visit stitcherpremium.com/buffy and use promo code buffy.

We've got NEW MERCH, including a wolf-y AWOO shirt designed by Isabella Rotman, an ADORABLE "even a werewolf is better than misogyny" tee designed by Cameron Glavin, and the JUST KEEP FIGHTING tee in a new color! We've also got CDs ready to order - limited quantities of both SONGS FROM SEASON TWO and SONGS FROM SEASON ONE. Visit bufferingthevampireslayer.com and click on SHOP to check out our little shop of WONDERS. If you prefer your music in non-corporeal form, Buffering the Vampire Slayer: Songs From Season One is available now on iTunes, or wherever you get your digital music.

You can now support the show on Patreon at patreon.com/bufferingcast.

Logo: Kristine Thune (kristinethune.com

]]>
0.09: Season 2 Wrap-Up full Today we stand on a mountaintop, shading our eyes from the glare of the sun, looking back on all that we have endured together over these last 22 episodes. The second chapter of Buffy the Vampire Slayer has some high highs and some LOW lows, and we're discussing our favorite moments as well as some truly painful ones. You'll also hear from Gaby Dunn, Joanna Robinson, Brittani Nichols, and of COURSE Kate Leth! This is our Season 2 Wrap Up!  Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering.  Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Get to know Buffy Fashion-Watch correspondent Kate Leth better at kateleth.com, or give her a shout on twitter (@kateleth).  Twitter it up with our special guests Gaby Dunn (@gabydunn), Brittani Nichols (@bishilarious), and Joanna Robinson (@jowrotethis). Follow Buffering the Vampire Slayer on twitter (@bufferingcast) and on facebook (facebook.com/bufferingcast)! Thanks to this episode's sponsors!  -RXBAR: For 25% off your first order, visit RXBAR.com/BUFFY and enter promo code BUFFY at checkout.  -Book of the Month: Go to bookofthemonth.com/BUFFERING and get your first book for $10. -ModCloth: Shop on ModCloth.com and enter promo code "BUFFY" at checkout to get 30% off your order of $100 or more.  -And remember to check out the new LeVar Burton Reads podcast!   Try Stitcher Premium for an ad-free experience, and to access oodles of exclusive content from a variety of podcasts &amp; creators. Stitcher Premium is offering our listeners a free month-long trial, and $5 off the first year of an annual plan - just visit stitcherpremium.com/buffy and use promo code buffy. We've got NEW MERCH, including a wolf-y AWOO shirt designed by Isabella Rotman, an ADORABLE "even a werewolf is better than misogyny" tee designed by Cameron Glavin, and the JUST KEEP FIGHTING tee in a new color! We've also got CDs ready to order - limited quantities of both SONGS FROM SEASON TWO and SONGS FROM SEASON ONE. Visit bufferingthevampireslayer.com and click on SHOP to check out our little shop of WONDERS. If you prefer your music in non-corporeal form, Buffering the Vampire Slayer: Songs From Season One is available now on iTunes, or wherever you get your digital music. You can now support the show on Patreon at patreon.com/bufferingcast. Logo: Kristine Thune (kristinethune.com)  Today we stand on a mountaintop, shading our eyes from the glare of the sun, looking back on all that we have endured together over these last 22 episodes. The second chapter of Buffy the Vampire Slayer has some high highs and some LOW lows, and we're discussing our favorite moments as well as some truly painful ones. You'll also hear from Gaby Dunn, Joanna Robinson, Brittani Nichols, and of COURSE Kate Leth! This is our Season 2 Wrap Up

Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering

Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com.

Get to know Buffy Fashion-Watch correspondent Kate Leth better at kateleth.com, or give her a shout on twitter (@kateleth). 

Twitter it up with our special guests Gaby Dunn (@gabydunn), Brittani Nichols (@bishilarious), and Joanna Robinson (@jowrotethis).

Follow Buffering the Vampire Slayer on twitter (@bufferingcast) and on facebook (facebook.com/bufferingcast)!

Thanks to this episode's sponsors! 

-RXBAR: For 25% off your first order, visit RXBAR.com/BUFFY and enter promo code BUFFY at checkout. 

-Book of the Month: Go to bookofthemonth.com/BUFFERING and get your first book for $10.

-ModCloth: Shop on ModCloth.com and enter promo code "BUFFY" at checkout to get 30% off your order of $100 or more. 

-And remember to check out the new LeVar Burton Reads podcast!  

Try Stitcher Premium for an ad-free experience, and to access oodles of exclusive content from a variety of podcasts & creators. Stitcher Premium is offering our listeners a free month-long trial, and $5 off the first year of an annual plan - just visit stitcherpremium.com/buffy and use promo code buffy.

We've got NEW MERCH, including a wolf-y AWOO shirt designed by Isabella Rotman, an ADORABLE "even a werewolf is better than misogyny" tee designed by Cameron Glavin, and the JUST KEEP FIGHTING tee in a new color! We've also got CDs ready to order - limited quantities of both SONGS FROM SEASON TWO and SONGS FROM SEASON ONE. Visit bufferingthevampireslayer.com and click on SHOP to check out our little shop of WONDERS. If you prefer your music in non-corporeal form, Buffering the Vampire Slayer: Songs From Season One is available now on iTunes, or wherever you get your digital music.

You can now support the show on Patreon at patreon.com/bufferingcast.

Logo: Kristine Thune (kristinethune.com

]]>
gid://art19-episode-locator/V0/PYj7Y8uZTyGJCysVSazJU8YGx_jxZf0iHS5ho9-XAQ4 Wed, 19 Jul 2017 08:29:18 -0000 yes Buffy,whedon,angel,slayer,spike,joss,vampire 01:14:16
0.08: Wonder Woman! THE AMAZONS ARE TRAINING ON THE ISLAND!!!! On this very special episode of Buffering the Vampire Slayer, Jenny, Kristin, and Wonder Woman aficionado Heather Hogan dig into Diana, Themyscira, and the shockingly deep feminist roots of this DC character. This week we're discussing Wonder Woman! 

Read Heather's work on autostraddle.com and follow her on twitter @theheatherhogan!

Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering

Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com.

Follow Buffering the Vampire Slayer on twitter (@bufferingcast) and on facebook (facebook.com/bufferingcast)!

This episode was sponsored by:

Reality Bytes: Check out this fantastic new podcast about love, dating, and connection in the digital age. Your faves Jenny and Kristin were featured on a recent episode!

ModCloth: Shop at modcloth.com and use promo code "BUFFY" for 30% off your order of $100 or more.

Care/Of: Visit TakeCareOf.com, and use offer code BUFFERING for 50% off your first order.

We've got NEW MERCH, including a wolf-y AWOO shirt designed by Isabella Rotman, an ADORABLE "even a werewolf is better than misogyny" tee designed by Cameron Glavin, and the JUST KEEP FIGHTING tee in a new color! We've also got CDs ready to order - limited quantities of both SONGS FROM SEASON TWO and SONGS FROM SEASON ONE. Visit bufferingthevampireslayer.com and click on SHOP to check out our little shop of WONDERS. If you prefer your music in non-corporeal form, Buffering the Vampire Slayer: Songs From Season One is available now on iTunes, or wherever you get your digital music.

You can now support the show on Patreon at patreon.com/bufferingcast.

Logo: Kristine Thune (kristinethune.com


HEATHER HOGAN'S SUGGESTED ADDITIONAL WONDER WOMAN READING:


Wonder Woman history books: 

+ Wonder Women: Unbound, by Tim Hanley

+ The Secret History of Wonder Woman, by Jill Lepore


Wonder Woman's best Greek Mythology arcs:

+ Wonder Woman: The Golden Age Omnibus/The Wonder Woman Chronicles

+ Wonder Woman Vol. 2, #1-24 (1987)

+ Wonder Woman: Eyes of the Gorgon (1987)

+ Wonder Woman: Earth One (1996)

+ Wonder Woman: Year One (1997)


Wonder Woman comics that focus on mythology and run into Batwoman:

+ Wonder Woman: Blood collects issues 1-6 of Wonder Woman's run in the New 52 (2012)

+ Wonder Woman: Guts collects issues 7-12 (2013)


Pair with: 

+ Batwoman: Elegy (collects Wonder Woman's Detective Comics run, first run after comes out at as a lesbian)

+ Batwoman: Hydrology (collects Batwoman 1-6, first issues of her solo comic)

+ Batwoman: To Drown the World (collects Batwoman 7-12)

+ Batwoman World's Finest (collects 13-17, the Wonder Woman tag-team, and WW's engagement to her girlfriend)

]]>
0.08: Wonder Woman! full THE AMAZONS ARE TRAINING ON THE ISLAND!!!! On this very special episode of Buffering the Vampire Slayer, Jenny, Kristin, and Wonder Woman aficionado Heather Hogan dig into Diana, Themyscira, and the shockingly deep feminist roots of this DC character. This week we're discussing Wonder Woman!  Read Heather's work on autostraddle.com and follow her on twitter @theheatherhogan! Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering.  Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Follow Buffering the Vampire Slayer on twitter (@bufferingcast) and on facebook (facebook.com/bufferingcast)! This episode was sponsored by: Reality Bytes: Check out this fantastic new podcast about love, dating, and connection in the digital age. Your faves Jenny and Kristin were featured on a recent episode! ModCloth: Shop at modcloth.com and use promo code "BUFFY" for 30% off your order of $100 or more. Care/Of: Visit TakeCareOf.com, and use offer code BUFFERING for 50% off your first order. We've got NEW MERCH, including a wolf-y AWOO shirt designed by Isabella Rotman, an ADORABLE "even a werewolf is better than misogyny" tee designed by Cameron Glavin, and the JUST KEEP FIGHTING tee in a new color! We've also got CDs ready to order - limited quantities of both SONGS FROM SEASON TWO and SONGS FROM SEASON ONE. Visit bufferingthevampireslayer.com and click on SHOP to check out our little shop of WONDERS. If you prefer your music in non-corporeal form, Buffering the Vampire Slayer: Songs From Season One is available now on iTunes, or wherever you get your digital music. You can now support the show on Patreon at patreon.com/bufferingcast. Logo: Kristine Thune (kristinethune.com)  HEATHER HOGAN'S SUGGESTED ADDITIONAL WONDER WOMAN READING: Wonder Woman history books:  + Wonder Women: Unbound, by Tim Hanley + The Secret History of Wonder Woman, by Jill Lepore Wonder Woman's best Greek Mythology arcs: + Wonder Woman: The Golden Age Omnibus/The Wonder Woman Chronicles + Wonder Woman Vol. 2, #1-24 (1987) + Wonder Woman: Eyes of the Gorgon (1987) + Wonder Woman: Earth One (1996) + Wonder Woman: Year One (1997) Wonder Woman comics that focus on mythology and run into Batwoman: + Wonder Woman: Blood collects issues 1-6 of Wonder Woman's run in the New 52 (2012) + Wonder Woman: Guts collects issues 7-12 (2013) Pair with:  + Batwoman: Elegy (collects Wonder Woman's Detective Comics run, first run after comes out at as a lesbian) + Batwoman: Hydrology (collects Batwoman 1-6, first issues of her solo comic) + Batwoman: To Drown the World (collects Batwoman 7-12) + Batwoman World's Finest (collects 13-17, the Wonder Woman tag-team, and WW's engagement to her girlfriend) THE AMAZONS ARE TRAINING ON THE ISLAND!!!! On this very special episode of Buffering the Vampire Slayer, Jenny, Kristin, and Wonder Woman aficionado Heather Hogan dig into Diana, Themyscira, and the shockingly deep feminist roots of this DC character. This week we're discussing Wonder Woman! 

Read Heather's work on autostraddle.com and follow her on twitter @theheatherhogan!

Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering

Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com.

Follow Buffering the Vampire Slayer on twitter (@bufferingcast) and on facebook (facebook.com/bufferingcast)!

This episode was sponsored by:

Reality Bytes: Check out this fantastic new podcast about love, dating, and connection in the digital age. Your faves Jenny and Kristin were featured on a recent episode!

ModCloth: Shop at modcloth.com and use promo code "BUFFY" for 30% off your order of $100 or more.

Care/Of: Visit TakeCareOf.com, and use offer code BUFFERING for 50% off your first order.

We've got NEW MERCH, including a wolf-y AWOO shirt designed by Isabella Rotman, an ADORABLE "even a werewolf is better than misogyny" tee designed by Cameron Glavin, and the JUST KEEP FIGHTING tee in a new color! We've also got CDs ready to order - limited quantities of both SONGS FROM SEASON TWO and SONGS FROM SEASON ONE. Visit bufferingthevampireslayer.com and click on SHOP to check out our little shop of WONDERS. If you prefer your music in non-corporeal form, Buffering the Vampire Slayer: Songs From Season One is available now on iTunes, or wherever you get your digital music.

You can now support the show on Patreon at patreon.com/bufferingcast.

Logo: Kristine Thune (kristinethune.com


HEATHER HOGAN'S SUGGESTED ADDITIONAL WONDER WOMAN READING:


Wonder Woman history books: 

+ Wonder Women: Unbound, by Tim Hanley

+ The Secret History of Wonder Woman, by Jill Lepore


Wonder Woman's best Greek Mythology arcs:

+ Wonder Woman: The Golden Age Omnibus/The Wonder Woman Chronicles

+ Wonder Woman Vol. 2, #1-24 (1987)

+ Wonder Woman: Eyes of the Gorgon (1987)

+ Wonder Woman: Earth One (1996)

+ Wonder Woman: Year One (1997)


Wonder Woman comics that focus on mythology and run into Batwoman:

+ Wonder Woman: Blood collects issues 1-6 of Wonder Woman's run in the New 52 (2012)

+ Wonder Woman: Guts collects issues 7-12 (2013)


Pair with: 

+ Batwoman: Elegy (collects Wonder Woman's Detective Comics run, first run after comes out at as a lesbian)

+ Batwoman: Hydrology (collects Batwoman 1-6, first issues of her solo comic)

+ Batwoman: To Drown the World (collects Batwoman 7-12)

+ Batwoman World's Finest (collects 13-17, the Wonder Woman tag-team, and WW's engagement to her girlfriend)

]]>
gid://art19-episode-locator/V0/r3UiVrOnHZ81ETRpHVUonUBDjhHMGRH95s_8DP6J_2M Wed, 12 Jul 2017 08:28:40 -0000 yes Buffy,whedon,angel,slayer,spike,joss,vampire 01:07:10
2.22: Becoming (Part 2) Buckle up for a heavy one, friends, because it's a very emotional day in Sunnydale. Angel wants to destroy the world, and Buffy wants to stop him. This episode is SUCH a doozy that Kate Leth decided to forgo fashion talk and record a Buffy FEELINGS-Watch! This week we're discussing s2e22: Becoming (Part 2)

This episode is brought to you by Book of the Month. Get your first book for $10 at bookofthemonth.com/BUFFERING.

This episode is also sponsored by Care/of. Go to TakeCareOf.com now and get a personalized vitamin recommendation, then use code BUFFERING to get 50% off your first order.

Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering

Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com.

Get to know Buffy FEELINGS-Watch correspondent Kate Leth better at kateleth.com, or give her a shout on twitter (@kateleth). 

Follow Buffering the Vampire Slayer on twitter (@bufferingcast) and on facebook (facebook.com/bufferingcast)!

Try Stitcher Premium for an ad-free experience, and to access oodles of exclusive content from a variety of podcasts & creators. Stitcher Premium is offering our listeners a free month-long trial, and $5 off the first year of an annual plan - just visit stitcherpremium.com/buffy and use promo code buffy.

We've got NEW MERCH, including a wolf-y AWOO shirt designed by Isabella Rotman, an ADORABLE "even a werewolf is better than misogyny" tee designed by Cameron Glavin, and the JUST KEEP FIGHTING tee in a new color! We've also got CDs ready to order - limited quantities of both SONGS FROM SEASON TWO and SONGS FROM SEASON ONE. Visit bufferingthevampireslayer.com and click on SHOP to check out our little shop of WONDERS. If you prefer your music in non-corporeal form, Buffering the Vampire Slayer: Songs From Season One is available now on iTunes, or wherever you get your digital music.

You can now support the show on Patreon at patreon.com/bufferingcast.

Logo: Kristine Thune (kristinethune.com

]]>
2.22: Becoming (Part 2) full Buckle up for a heavy one, friends, because it's a very emotional day in Sunnydale. Angel wants to destroy the world, and Buffy wants to stop him. This episode is SUCH a doozy that Kate Leth decided to forgo fashion talk and record a Buffy FEELINGS-Watch! This week we're discussing s2e22: Becoming (Part 2).  This episode is brought to you by Book of the Month. Get your first book for $10 at bookofthemonth.com/BUFFERING. This episode is also sponsored by Care/of. Go to TakeCareOf.com now and get a personalized vitamin recommendation, then use code BUFFERING to get 50% off your first order. Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering.  Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Get to know Buffy FEELINGS-Watch correspondent Kate Leth better at kateleth.com, or give her a shout on twitter (@kateleth).  Follow Buffering the Vampire Slayer on twitter (@bufferingcast) and on facebook (facebook.com/bufferingcast)! Try Stitcher Premium for an ad-free experience, and to access oodles of exclusive content from a variety of podcasts &amp; creators. Stitcher Premium is offering our listeners a free month-long trial, and $5 off the first year of an annual plan - just visit stitcherpremium.com/buffy and use promo code buffy. We've got NEW MERCH, including a wolf-y AWOO shirt designed by Isabella Rotman, an ADORABLE "even a werewolf is better than misogyny" tee designed by Cameron Glavin, and the JUST KEEP FIGHTING tee in a new color! We've also got CDs ready to order - limited quantities of both SONGS FROM SEASON TWO and SONGS FROM SEASON ONE. Visit bufferingthevampireslayer.com and click on SHOP to check out our little shop of WONDERS. If you prefer your music in non-corporeal form, Buffering the Vampire Slayer: Songs From Season One is available now on iTunes, or wherever you get your digital music. You can now support the show on Patreon at patreon.com/bufferingcast. Logo: Kristine Thune (kristinethune.com)  Buckle up for a heavy one, friends, because it's a very emotional day in Sunnydale. Angel wants to destroy the world, and Buffy wants to stop him. This episode is SUCH a doozy that Kate Leth decided to forgo fashion talk and record a Buffy FEELINGS-Watch! This week we're discussing s2e22: Becoming (Part 2)

This episode is brought to you by Book of the Month. Get your first book for $10 at bookofthemonth.com/BUFFERING.

This episode is also sponsored by Care/of. Go to TakeCareOf.com now and get a personalized vitamin recommendation, then use code BUFFERING to get 50% off your first order.

Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering

Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com.

Get to know Buffy FEELINGS-Watch correspondent Kate Leth better at kateleth.com, or give her a shout on twitter (@kateleth). 

Follow Buffering the Vampire Slayer on twitter (@bufferingcast) and on facebook (facebook.com/bufferingcast)!

Try Stitcher Premium for an ad-free experience, and to access oodles of exclusive content from a variety of podcasts & creators. Stitcher Premium is offering our listeners a free month-long trial, and $5 off the first year of an annual plan - just visit stitcherpremium.com/buffy and use promo code buffy.

We've got NEW MERCH, including a wolf-y AWOO shirt designed by Isabella Rotman, an ADORABLE "even a werewolf is better than misogyny" tee designed by Cameron Glavin, and the JUST KEEP FIGHTING tee in a new color! We've also got CDs ready to order - limited quantities of both SONGS FROM SEASON TWO and SONGS FROM SEASON ONE. Visit bufferingthevampireslayer.com and click on SHOP to check out our little shop of WONDERS. If you prefer your music in non-corporeal form, Buffering the Vampire Slayer: Songs From Season One is available now on iTunes, or wherever you get your digital music.

You can now support the show on Patreon at patreon.com/bufferingcast.

Logo: Kristine Thune (kristinethune.com

]]>
gid://art19-episode-locator/V0/7bCL05E4RtRy-d8CcMuHW3s0yuN4frof2xbkN6K4jcY Wed, 05 Jul 2017 07:00:00 -0000 yes Buffy,whedon,angel,slayer,spike,joss,vampire 01:20:26
2.21: Becoming (Part 1) WOW Buffy and Willow find a very important floppy disk, an old friend comes to visit from far away, and Angelus decides he wants to bring forth the demon Acathla and destroy the world. HOLY HECK the Scoobies are in some serious peril! This week we're discussing s2e21: Becoming (Part 1)

Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering

Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com.

Follow Buffering the Vampire Slayer on twitter (@bufferingcast) and on facebook (facebook.com/bufferingcast)!

Today's episode is brought to you by Bold Food. Learn more about the incredible, curated food adventures that Bold Food organizes over at boldfoodco.com!

If you loved Becoming (Part 1) and just must must must listen to our finale episode for (Becoming Part 2) RIGHT NOW... we totally feel you. Stitcher Premium members are able to listen to s2e22: Becoming (Part Two) right this very moment! Head on over to stitcherpremium.com/buffy and use promo code BUFFY for a free first month!

We've got NEW MERCH, including a wolf-y AWOO shirt designed by Isabella Rotman, an ADORABLE "even a werewolf is better than misogyny" tee designed by Cameron Glavin, and the JUST KEEP FIGHTING tee in a new color! We've also got CDs ready to order - limited quantities of both SONGS FROM SEASON TWO and SONGS FROM SEASON ONE. Visit bufferingthevampireslayer.com and click on SHOP to check out our little shop of WONDERS. If you prefer your music in non-corporeal form, Buffering the Vampire Slayer: Songs From Season One is available now on iTunes, or wherever you get your digital music.

You can now support the show on Patreon at patreon.com/bufferingcast.

Logo: Kristine Thune (kristinethune.com

]]>
2.21: Becoming (Part 1) full WOW Buffy and Willow find a very important floppy disk, an old friend comes to visit from far away, and Angelus decides he wants to bring forth the demon Acathla and destroy the world. HOLY HECK the Scoobies are in some serious peril! This week we're discussing s2e21: Becoming (Part 1).  Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering.  Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Follow Buffering the Vampire Slayer on twitter (@bufferingcast) and on facebook (facebook.com/bufferingcast)! Today's episode is brought to you by Bold Food. Learn more about the incredible, curated food adventures that Bold Food organizes over at boldfoodco.com! If you loved Becoming (Part 1) and just must must must listen to our finale episode for (Becoming Part 2) RIGHT NOW... we totally feel you. Stitcher Premium members are able to listen to s2e22: Becoming (Part Two) right this very moment! Head on over to stitcherpremium.com/buffy and use promo code BUFFY for a free first month! We've got NEW MERCH, including a wolf-y AWOO shirt designed by Isabella Rotman, an ADORABLE "even a werewolf is better than misogyny" tee designed by Cameron Glavin, and the JUST KEEP FIGHTING tee in a new color! We've also got CDs ready to order - limited quantities of both SONGS FROM SEASON TWO and SONGS FROM SEASON ONE. Visit bufferingthevampireslayer.com and click on SHOP to check out our little shop of WONDERS. If you prefer your music in non-corporeal form, Buffering the Vampire Slayer: Songs From Season One is available now on iTunes, or wherever you get your digital music. You can now support the show on Patreon at patreon.com/bufferingcast. Logo: Kristine Thune (kristinethune.com)  WOW Buffy and Willow find a very important floppy disk, an old friend comes to visit from far away, and Angelus decides he wants to bring forth the demon Acathla and destroy the world. HOLY HECK the Scoobies are in some serious peril! This week we're discussing s2e21: Becoming (Part 1)

Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering

Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com.

Follow Buffering the Vampire Slayer on twitter (@bufferingcast) and on facebook (facebook.com/bufferingcast)!

Today's episode is brought to you by Bold Food. Learn more about the incredible, curated food adventures that Bold Food organizes over at boldfoodco.com!

If you loved Becoming (Part 1) and just must must must listen to our finale episode for (Becoming Part 2) RIGHT NOW... we totally feel you. Stitcher Premium members are able to listen to s2e22: Becoming (Part Two) right this very moment! Head on over to stitcherpremium.com/buffy and use promo code BUFFY for a free first month!

We've got NEW MERCH, including a wolf-y AWOO shirt designed by Isabella Rotman, an ADORABLE "even a werewolf is better than misogyny" tee designed by Cameron Glavin, and the JUST KEEP FIGHTING tee in a new color! We've also got CDs ready to order - limited quantities of both SONGS FROM SEASON TWO and SONGS FROM SEASON ONE. Visit bufferingthevampireslayer.com and click on SHOP to check out our little shop of WONDERS. If you prefer your music in non-corporeal form, Buffering the Vampire Slayer: Songs From Season One is available now on iTunes, or wherever you get your digital music.

You can now support the show on Patreon at patreon.com/bufferingcast.

Logo: Kristine Thune (kristinethune.com

]]>
gid://art19-episode-locator/V0/p1X2r05UyTUnlsAa07KXtkFmI2Vi5PIInh9eLgqSKh0 Wed, 28 Jun 2017 07:00:00 -0000 yes Buffy,whedon,angel,slayer,spike,joss,vampire 01:07:23
0.07: Welcome to the Mailbag Vol. 5 0.07: Welcome to the Mailbag Vol. 5 full SPECIAL DELIVERY: Answers! Here's some HellMath for you - your emails + our responses = this episode! This is Welcome to the Mailbag: Vol. 5! Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering.  Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Follow Buffering the Vampire Slayer on twitter (@bufferingcast) and on facebook (facebook.com/bufferingcast)! We've got NEW MERCH, including a wolf-y AWOO shirt designed by Isabella Rotman, an ADORABLE "even a werewolf is better than misogyny" tee designed by Cameron Glavin, and the JUST KEEP FIGHTING tee in a new color! We've also got CDs ready to order - limited quantities of both SONGS FROM SEASON TWO and SONGS FROM SEASON ONE. Visit bufferingthevampireslayer.com and click on SHOP to check out our little shop of WONDERS. If you prefer your music in non-corporeal form, Buffering the Vampire Slayer: Songs From Season One is available now on iTunes, or wherever you get your digital music. Try Stitcher Premium for an ad-free experience, and to access oodles of exclusive content from a variety of podcasts & creators. Stitcher Premium is offering our listeners a free month-long trial, and $5 off the first year of an annual plan - just visit stitcherpremium.com/buffy and use promo code buffy. BTW: you can now support the show on Patreon at patreon.com/bufferingcast. Logo: Kristine Thune (kristinethune.com) gid://art19-episode-locator/V0/17i6EI4Q47EPOSgQhpbVAqLp_1awh99Ptv2-Z-2izas Wed, 21 Jun 2017 07:00:00 -0000 yes Buffy,whedon,angel,slayer,spike,joss,vampire 00:41:59 2.20: Go Fish 2.20: Go Fish full Brittany Ashley joins us to discuss the *FISHY* business going on with the Sunnydale Swim Team! Also LOOK AT THAT FREAKING TURTLENECK ON GAGE! This week we're discussing s2e20: Go Fish. Today's episode is brought to you by Bold Food, a San Francisco Bay Area-based company that teaches the science of cooking and organizes food-focused travel tours. Learn more at boldfoodco.com, and use code BUFFY to save $300 off your first food tour! This episode was also sponsored by Shudder, the premium streaming video service devoted to thrillers, horror, and suspense. Go to shudder.com and receive your first month free when you use the code BUFFERING. Follow Brittany Ashley on twitter & instagram @britt27ash, and check out Sicker Sadder World, the Daria podcast she co-hosts with Laura Zak - available on iTunes and Bumpers! (We can confirm that this podcast is SICK. But not sad.) Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering.  Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Get to know Buffy FashionWatch correspondent Kate Leth better at kateleth.com, or give her a shout on twitter (@kateleth). Follow Buffering the Vampire Slayer on twitter (@bufferingcast) and on facebook (facebook.com/bufferingcast)! Try Stitcher Premium for an ad-free experience, and to access oodles of exclusive content from a variety of podcasts & creators. Stitcher Premium is offering our listeners a free month-long trial, and $5 off the first year of an annual plan - just visit stitcherpremium.com/buffy and use promo code buffy. You can now support the show on Patreon at patreon.com/bufferingcast. We've got SMASH THE DEMON LIZARD PATRIARCHY tees & tanks, plus so much more - go to bufferingthevampireslayer.com and click on SHOP to check out our little shop of WONDERS. Also! Buffering the Vampire Slayer: Songs From Season One is available now on iTunes, or wherever you get your digital music. Logo: Kristine Thune (kristinethune.com) gid://art19-episode-locator/V0/lUqWBKb_CnemwD8oI6Hz1b4KMz4oLv7h9Qm6w8SSj1o Wed, 14 Jun 2017 07:49:21 -0000 yes Buffy,whedon,angel,slayer,spike,joss,vampire 01:10:20 2.19: I Only Have Eyes For You 2.19: I Only Have Eyes For You full It's time for the Sadie Hawkins dance, and I think we all know just how much poltergeists hate this particular high school event. Watch out for bees, snakes, and melting floors! This week we're discussing s2e19: I Only Have Eyes For You. Today's episode is brought to you by Bold Food, a San Francisco Bay Area-based company that teaches the science of cooking and organizes food-focused travel tours. Learn more at boldfoodco.com, and use code BUFFY to save $300 off your first food tour! This episode was also sponsored by Shudder, the premium streaming video service devoted to thrillers, horror, and suspense. Go to shudder.com and receive your first month free when you use the code BUFFERING. Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering.  Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Follow Buffering the Vampire Slayer on twitter (@bufferingcast) and on facebook (facebook.com/bufferingcast)! Try Stitcher Premium for an ad-free experience, and to access oodles of exclusive content from a variety of podcasts & creators. Stitcher Premium is offering our listeners a free month-long trial, and $5 off the first year of an annual plan - just visit stitcherpremium.com/buffy and use promo code buffy. You can now support the show on Patreon at patreon.com/bufferingcast. We've got SMASH THE DEMON LIZARD PATRIARCHY tees & tanks, plus so much more over at bufferingthevampireslayer.bigcartel.com. Also! Buffering the Vampire Slayer: Songs From Season One is available now on iTunes, or wherever you get your digital music. Logo: Kristine Thune (kristinethune.com) gid://art19-episode-locator/V0/TVBY7ee2JHsRIwgaxm-dc7QaZT_-5h-OnXw83f3Dzbs Wed, 07 Jun 2017 07:28:37 -0000 yes Buffy,whedon,angel,slayer,spike,joss,vampire 00:59:28 2.18: Killed By Death 2.18: Killed By Death full Recorded live at A-Camp, this episode features guest appearances from Kate Leth, El Sanchez, Heather Hogan, and the unsinkable Gaby Dunn! This is the one where it's Nightmare On Elm Street but Elm Street happens to be in Sunnydale! This week we're discussing s2e18: Killed By Death. Today's episode is brought to you by Shudder, the premium streaming video service devoted to thrillers, horror, and suspense. Go to shudder.com and receive your first month free when you use the code BUFFERING. Find all of our amazing guests on twitter: Kate Leth (@kateleth), El Sanchez (@el_sanchovilla), Heather Hogan (@theheatherhogan), and Gaby Dunn (@gabydunn)! Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering.  Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Follow Buffering the Vampire Slayer on twitter (@bufferingcast) and on facebook (facebook.com/bufferingcast)! Try Stitcher Premium for an ad-free experience, and to access oodles of exclusive content from a variety of podcasts & creators. Stitcher Premium is offering our listeners a free month-long trial, and $5 off the first year of an annual plan - just visit stitcherpremium.com/buffy and use promo code buffy. You can now support the show on Patreon at patreon.com/bufferingcast. We've got SMASH THE DEMON LIZARD PATRIARCHY tees & tanks, plus so much more over at bufferingthevampireslayer.bigcartel.com. Also! Buffering the Vampire Slayer: Songs From Season One is available now on iTunes, or wherever you get your digital music. Logo: Kristine Thune (kristinethune.com) gid://art19-episode-locator/V0/hhuQ_HaU9TdJjk51ztiTBdqzjQMraLw-E0Yz8M1hWXA Wed, 31 May 2017 07:00:00 -0000 yes Buffy,whedon,slayer,spike,Angel,joss,vampire 01:10:15 2.17: Passion 2.17: Passion full Angel spends this episode doing a lot of voice over, sketching multiple people whilst they sleep, and being a general creep. We also say goodbye to one of the good guys. Hope you brought tissues to this episode, friend. This week we're discussing s2e17: Passion. Today's episode is brought to you by Shudder, the premium streaming video service devoted to thrillers, horror, and suspense. Go to shudder.com and receive your first month free when you use the code BUFFERING. Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering.  Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Follow Buffering the Vampire Slayer on twitter (@bufferingcast) and on facebook (facebook.com/bufferingcast)! Try Stitcher Premium for an ad-free experience, and to access oodles of exclusive content from a variety of podcasts & creators. Stitcher Premium is offering our listeners a free month-long trial, and $5 off the first year of an annual plan - just visit stitcherpremium.com/buffy and use promo code buffy. You can now support the show on Patreon at patreon.com/bufferingcast. We've got SMASH THE DEMON LIZARD PATRIARCHY tees & tanks, plus so much more over at bufferingthevampireslayer.bigcartel.com. Also! Buffering the Vampire Slayer: Songs From Season One is available now on iTunes, or wherever you get your digital music. Logo: Kristine Thune (kristinethune.com) gid://art19-episode-locator/V0/j3LypONP3_kvOyZcQlhTgKkjiSuWg2PkKNXoAZqwV8M Wed, 24 May 2017 05:00:00 -0000 yes Buffy,whedon,slayer,spike,Angel,joss,vampire 01:02:52 2.16: Bewitched, Bothered and Bewildered 2.16: Bewitched, Bothered and Bewildered full The world has turned upside-down and everyone is in love with Xander! Also someone you care about gets turned into a rat. We hope this cautionary tale encourages you to think twice before you go blackmailing your peers into casting revenge spells on your behalf.  Dan Kois (slate.com, Mom and Dad Are Fighting) joins us to talk best practices for parenting on the Hellmouth, and of course to speak for all men! This week we're discussing s2e16: Bewitched, Bothered and Bewildered.   Read Dan Kois's writing on slate.com, find him on twitter @dankois, and listen to Mom and Dad are Fighting, the Slate parenting podcast he cohosted before he shipped off with his family to live abroad for a year! This episode is sponsored by MACK WELDON. Visit mackweldon.com and get 20% off your purchase using the promo code BUFFY. This episode is also sponsored by SHUDDER. Go to shudder.com and receive your first month free when you use the code BUFFERING. Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering.  Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Follow Buffering the Vampire Slayer on twitter (@bufferingcast) and on facebook (facebook.com/bufferingcast)! Try Stitcher Premium for an ad-free experience, and to access oodles of exclusive content from a variety of podcasts & creators. Stitcher Premium is offering our listeners a free month-long trial, and $5 off the first year of an annual plan - just visit stitcherpremium.com/buffy and use promo code buffy. Support the show on Patreon at patreon.com/bufferingcast. Visit our store for SMASH THE DEMON LIZARD PATRIARCHY tees & tanks, plus so much more at bufferingthevampireslayer.bigcartel.com. Also! Buffering the Vampire Slayer: Songs From Season One is available now on iTunes, or wherever you get your digital music. Logo: Kristine Thune (kristinethune.com) gid://art19-episode-locator/V0/gdeqmxitpMtmtOWdOjWRBHmHQl09B6dqXlG3ynAdD7Y Wed, 10 May 2017 07:00:00 -0000 yes Buffy,whedon,slayer,spike,Angel,joss,vampire 01:10:16 2.15: Phases 2.15: Phases full Ye gods! There's a werewolf loose in Sunnydale, and it's tearing up Lover's Lane, The Bronze, and Cordelia's cloth-top convertible too! Also, today's episode features PEAK Patriarchy, a great scream by Willow, and another installment of HellMath. This week we're discussing s2e15: Phases. Today's episode is brought to you by Mack Weldon. Go to MackWeldon.com and get 20% off your purchase using the promo code BUFFY. Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering.  Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Follow Buffering the Vampire Slayer on twitter (@bufferingcast) and on facebook (facebook.com/bufferingcast)! Try Stitcher Premium for an ad-free experience, and to access oodles of exclusive content from a variety of podcasts & creators. Stitcher Premium is offering our listeners a free month-long trial, and $5 off the first year of an annual plan - just visit stitcherpremium.com/buffy and use promo code buffy. You can also support the show on Patreon at patreon.com/bufferingcast. We've got SMASH THE DEMON LIZARD PATRIARCHY tees & tanks, plus so much more over at bufferingthevampireslayer.bigcartel.com. Also! Buffering the Vampire Slayer: Songs From Season One is available now on iTunes, or wherever you get your digital music. Logo: Kristine Thune (kristinethune.com) gid://art19-episode-locator/V0/WZXLPNgnvl8BKT4eAsz9FyIRgKPaoq68qqCk1v62JVo Wed, 03 May 2017 07:00:00 -0000 yes Buffy,whedon,slayer,spike,Angel,joss,vampire 01:11:19 2.14: Innocence 2.14: Innocence full Dream-guest Joanna Robinson swings by Buffering this week to teach us some new soul-related math and also to talk about this massively pivotal episode. EEEEEEEEEK! Spoiler alert: claddagh-on-claddagh flashbacks occur! This week we're discussing s2e14: Innocence. Follow Joanna Robinson on twitter @jowrotethis, read the many great things she writes on VanityFair.com, and listen to her cohost the hell out of glorious podcasts like Storm of Spoilers, GenPop, Little Gold Men, Decoding Westworld, and Cast of Kings (to name but a fraction of her catalog)! Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering. Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Get to know Buffy FashionWatch correspondent Kate Leth better at kateleth.com, or give her a shout on twitter (@kateleth). Follow Buffering the Vampire Slayer on twitter (@bufferingcast) and on facebook (facebook.com/bufferingcast)! You can now support the show on Patreon at patreon.com/bufferingcast. We've got SMASH THE DEMON LIZARD PATRIARCHY tees & tanks, plus so much more over at bufferingthevampireslayer.bigcartel.com. Also! Buffering the Vampire Slayer: Songs From Season One is available now on iTunes, or wherever you get your digital music. Logo: Kristine Thune (kristinethune.com) b7e40c062cc9b4e70a6700f09e905ea2 Wed, 26 Apr 2017 07:00:15 -0000 yes whedon,buffy,angel,slayer,spike,joss,vampire 01:29:13 2.13: Surprise 2.13: Surprise full SOMETHING BIG HAPPENS IN THIS EPISODE and no we don't mean the exchange of claddagh rings omfgaskfadjfdaffjadhfgjf!!!!!!! There's *so* much to deal with here, and we're thrilled that special guest Carolyn Yates stopped by to help us sort through it. I can't tell you what she's an expert in because SPOILERS. This week we're discussing s2e13: Surprise. Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering. Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Get to know more about Carolyn Yates at carolynyates.com, or give her a shout on twitter @c_yates! Follow Buffering the Vampire Slayer on twitter (@bufferingcast) and on facebook (facebook.com/bufferingcast)! You can now support the show on Patreon, at patreon.com/bufferingcast. We've got SMASH THE DEMON LIZARD PATRIARCHY shirts and so much more over at bufferingthevampireslayer.bigcartel.com. Also! Buffering the Vampire Slayer: Songs From Season One is available now on iTunes, or wherever you get your digital music. Logo: Kristine Thune (kristinethune.com) e87d99f03334b196eb29be8061807b82 Wed, 19 Apr 2017 07:00:00 -0000 yes whedon,buffy,angel,slayer,spike,joss,vampire 01:13:15 0.06: Welcome to the Mailbag Vol. 4 0.06: Welcome to the Mailbag Vol. 4 full Ding dong! Who's there? Why it's the Buffering the Vampire Slayer postal worker with SO MANY EMAILS FROM YOU GUYS! We've got answers! PLUS a live performance of some listener-created lyrics for "Staking Time!" Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering. Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Follow Buffering the Vampire Slayer on twitter (@bufferingcast) and on facebook (facebook.com/bufferingcast)! You can now support the show on Patreon, at patreon.com/bufferingcast. We're restocked on our new shirts & everything else over at bufferingthevampireslayer.bigcartel.com. Also! Buffering the Vampire Slayer: Songs From Season One is available now on iTunes, or wherever you get your digital music. Logo: Kristine Thune, kristinethune.com a57899949ae253dd00c97ae31faf32d6 Wed, 12 Apr 2017 07:00:00 -0000 yes whedon,buffy,angel,slayer,spike,joss,vampire 00:45:29 2.12: Bad Eggs 2.12: Bad Eggs full GROSS gross gross gross this episode is FULL OF EGG BUGS grooooooss but *also* there is a LOT of making out, so... win some lose some? This week we're discussing s2e12: Bad Eggs. Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering. Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Follow Buffering the Vampire Slayer on twitter (@bufferingcast) and on facebook (facebook.com/bufferingcast)! You can now support the show on Patreon, at patreon.com/bufferingcast. We're restocked on our new shirts & everything else over at bufferingthevampireslayer.bigcartel.com. Also! Buffering the Vampire Slayer: Songs From Season One is available now on iTunes, or wherever you get your digital music. Logo: Kristine Thune (kristinethune.com) 71e67c7b7d36ab4a4112e3fa94d26083 Wed, 05 Apr 2017 06:12:02 -0000 yes whedon,buffy,angel,slayer,spike,joss,vampire 01:05:22 2.11: Ted 2.11: Ted full Shannon Woodward (Westworld, Raising Hope) brings her android expertise to the table to help us sort out Joyce's new robot boyfriend. Pass the mini pizzas! This week we're discussing s2e11: Ted. Follow Shannon on twitter @shannonwoodward! You should also probably re-watch season 1 of Westworld for good measure. Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering. Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Follow Buffering the Vampire Slayer on twitter (@bufferingcast) and on facebook (facebook.com/bufferingcast)! You can now support the show on Patreon, at patreon.com/bufferingcast. We're restocked on our new shirts & everything else over at bufferingthevampireslayer.bigcartel.com. Also! Buffering the Vampire Slayer: Songs From Season One is available now on iTunes, or wherever you get your digital music. Logo: Kristine Thune (kristinethune.com) 0f1b9f9e5a6ef0eac51a70192f55f29d Wed, 29 Mar 2017 07:00:00 -0000 yes whedon,buffy,angel,slayer,spike,joss,vampire 01:04:13 2.10: What's My Line (Part 2) 2.10: What's My Line (Part 2) full Two truths and a lie about this episode: 1) Angel can't keep his shirt buttoned, 2) Buffy and Kendra braid each other's hair, and 3) two sworn enemies smooch unexpectedly. PLUS the wonderful Kelly Connell joins us to discuss his portrayal of the Terrakan "man of mealworms!" This week we're discussing s2e10: What's My Line (Part 2). Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering. Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Get to know Buffy FashionWatch correspondent Kate Leth better at kateleth.com, or give her a shout on twitter (@kateleth). Follow Buffering the Vampire Slayer on twitter (@bufferingcast) and on facebook (facebook.com/bufferingcast)! You can now support the show on Patreon, at patreon.com/bufferingcast! We've also got 2 BRAND NEW SHIRTS over at bufferingthevampireslayer.bigcartel.com - one that will remind you to JUST KEEP FIGHTING and one to help you smash the DEMON LIZARD PATRIARCHY... as well as a sweet new enamel pin based on our logo by the great Kristine Thune (kristinethune.com)! Also! Buffering the Vampire Slayer: Songs From Season One is available now on iTunes, or wherever you get your digital music. b6f167e8d5706667c05d1a9bf711b6e0 Wed, 22 Mar 2017 07:00:00 -0000 yes whedon,buffy,angel,slayer,spike,joss,vampire 01:00:39 2.09: What's My Line (Part 1) 2.09: What's My Line (Part 1) full Buffy's got those low-down Career Week blues! She's also being hunted by members of the Order of Terraka, including a dude made entirely of mealworms. YECHH! On top of everything else, a mysterious woman in silk pajama bottoms has arrived in Sunnydale to complicate Buffy's life even further. This week we're discussing s2e9: What's My Line (Part 1). Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering. Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Follow Buffering the Vampire Slayer on twitter (@bufferingcast) and on facebook (facebook.com/bufferingcast)! You can now support the show on Patreon, at patreon.com/bufferingcast! We've also got 2 BRAND NEW SHIRTS over at bufferingthevampireslayer.bigcartel.com - one that will remind you to JUST KEEP FIGHTING and one to help you smash the DEMON LIZARD PATRIARCHY... as well as a sweet new enamel pin based on our logo by the great Kristine Thune (kristinethune.com)! Also! Buffering the Vampire Slayer: Songs From Season One is available now on iTunes, or wherever you get your digital music. bbf451a577e13ec012784fb946c77b5f Wed, 15 Mar 2017 07:11:03 -0000 yes whedon,buffy,angel,slayer,spike,joss,vampire 00:56:38 0.05: Happy 20th Anniversary, Buffy! 0.05: Happy 20th Anniversary, Buffy! full Today marks the 20th Anniversary of Buffy the Vampire Slayer, and we are SO excited about it that we made you a bonus mini-episode! We talk about how we came to the show, and why it means so much to us. Jenny wrote an original song as a tribute to the series called “Demons to Fight," and you can download it on our website for free (bufferingthevampireslayer.com)! We hope that it helps you celebrate all that Buffy has brought to the world for the past two decades. 3eca1c38125a73971b36b57a4b1eea14 Fri, 10 Mar 2017 08:27:56 -0000 yes whedon,buffy,angel,slayer,spike,joss,vampire 00:18:22 2.08: The Dark Age 2.08: The Dark Age full At a certain point in a young girl's life, she will be forced to confront the reality that her Watcher was once her age. For Buffy, that time is now. Stuart McLean (who plays Philip Henry) drops by to talk morgue drawers and zombie makeup, and Kate Leth returns with a tweed-ful installment of Buffy FashionWatch! This week we're discussing s2e8: The Dark Age. Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering. Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Find Stuart McLean on twitter (@SirStuartMcLean) and keep an eye out for The Midnighters, premiering at the Phoenix Film Festival next month! Get to know Buffy FashionWatch correspondent Kate Leth better at kateleth.com, or give her a shout on twitter (@kateleth). Follow Buffering the Vampire Slayer on twitter (@bufferingcast) and on facebook (facebook.com/bufferingcast)! You can now support the show on Patreon, at patreon.com/bufferingcast! We've also got 2 BRAND NEW SHIRTS over at bufferingthevampireslayer.bigcartel.com - one that will remind you to JUST KEEP FIGHTING and one to help you smash the DEMON LIZARD PATRIARCHY. Also! You can snag the album Buffering the Vampire Slayer: Songs From Season One on iTunes or wherever you get your digital music! Logo: Kristine Thune, kristinethune.com bc58bef468d68360adf26aedf448868f Wed, 08 Mar 2017 08:00:00 -0000 yes whedon,buffy,angel,slayer,spike,joss,vampire 01:08:34 2.07: Lie To Me 2.07: Lie To Me full You know that *classic* thing where your fifth-grade crush shows up at your new high school and tries to trade you to vampires in exchange for being made immortal? What about that thing where your girlfriend won't stop talking to a dead bird in a cage? No? Weird. This week we're discussing s2e7: Lie To Me. Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering. Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Follow Buffering the Vampire Slayer on twitter (@bufferingcast) and on facebook (facebook.com/bufferingcast)! You can now support the show on Patreon, at patreon.com/bufferingcast! We've also got a rad merch store over at bufferingthevampireslayer.bigcartel.com, where you can find a Buffering tee and Slayerette/Cordette pins. You can snag the album Buffering the Vampire Slayer: Songs From Season One on iTunes or wherever you get your digital music! Logo: Kristine Thune, kristinethune.com 1339959e879affde1813d83958a26eff Wed, 01 Mar 2017 08:00:00 -0000 yes whedon,buffy,angel,slayer,spike,joss,vampire 01:11:41 0.04: Welcome to the Mailbag Vol. 3 0.04: Welcome to the Mailbag Vol. 3 full Today we dip back into the old Buffering mailbag to share some more of your fantastic questions, comments, and clarifications! You all are really great communicators. PLUS: the debut of the Patrol Cat theme song! Hooray! Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering. Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Follow Buffering the Vampire Slayer on twitter (@bufferingcast) and on facebook (facebook.com/bufferingcast)! You can now support the show on Patreon! We've also got a rad merch store over at bufferingthevampireslayer.bigcartel.com, where you can find a Buffering tee and Slayerette/Cordette pins. You can snag the album Buffering the Vampire Slayer: Songs From Season One on iTunes or wherever you get your digital music! Logo: Kristine Thune, kristinethune.com f12ae89310334467d010c9929f999180 Wed, 22 Feb 2017 07:11:23 -0000 yes whedon,buffy,angel,slayer,spike,joss,vampire 00:42:42 2.06: Halloween 2.06: Halloween full Kate Leth returns, and not a moment too soon! Sunnydale residents are being mystically transformed into their costumes - Buffy is a helpless 17th century noblewoman, Willow is an accidental sexy ghost, Xander is a soldier, and Cordelia is... well she's Cordelia, but in a cat costume. Across town, Oz wonders aloud for the zillionth time, "Who IS that girl?" and we wonder aloud "Will he ever find out??" This week we're discussing s2e6: Halloween. Kate Leth is a comics writer and artist (Patsy Walker, A.K.A. Hellcat!; Spell On Wheels), an eyeshadow warlock, and our Buffy FashionWatch Correspondent. Get to know her better at kateleth.com, patreon.com/kateleth, or give her a shout on twitter (@kateleth). Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering. Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Follow Buffering the Vampire Slayer on twitter @bufferingcast and on facebook facebook.com/bufferingcast. You can now support the show on Patreon! We've also got a rad merch store over at bufferingthevampireslayer.bigcartel.com, where you can find a Buffering tee and Slayerette/Cordette pins. You can also snag the album Buffering the Vampire Slayer: Songs From Season One on iTunes or wherever you get your digital music! Logo: Kristine Thune, kristinethune.com 1b9b5274ffbe22e5943fd5f3233b33bf Wed, 15 Feb 2017 07:45:35 -0000 yes whedon,buffy,angel,slayer,spike,joss,vampire 01:08:42 2.05: Reptile Boy 2.05: Reptile Boy full Our first live episode, recorded at the NerdMelt Showroom in Los Angeles!!! This is the one where white dudes with rich dads sacrifice women to a demon lizard for financial gain... why does that sound kind of familiar? Plus we've got THREE glorious guests - Chris Farren, Brittani Nichols, and (first repeat guest!) Gaby Dunn - helping us sort through the wreckage left at the intersection of Patriarchy Ave and Demon Worship Alley. This week we're discussing s2e5: Reptile Boy. Chris Farren is a perfect songwriter and Jenny's hair-twin. (twitter: @chrisfarren // chrisfarren.com) Brittani Nichols is a comedian, writer, and actor who is funny beyond reason and attractive beyond belief. (twitter: @bishilarious // brittaninichols.com) Gaby Dunn is an actor, writer, YouTuber, and the host of the excellent podcast Bad With Money. (twitter: @gabydunn // youtube.com/justbetweenusshow) Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering. Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Buffering the Vampire Slayer is on twitter @bufferingcast and on facebook facebook.com/bufferingcast. You can now support the show on Patreon! We've also got a rad merch store over at bufferingthevampireslayer.bigcartel.com, where you can find a Buffering tee and Slayerette/Cordette pins. You can also snag the album Buffering the Vampire Slayer: Songs From Season One on iTunes or wherever you get your digital music! Logo: Kristine Thune, kristinethune.com 585c050914047fc557184165d98e0284 Wed, 08 Feb 2017 08:07:29 -0000 yes whedon,buffy,angel,slayer,spike,joss,vampire 01:10:59 2.04: Inca Mummy Girl 2.04: Inca Mummy Girl full Mey Rude (Trans Editor at Autostraddle.com) joins us to talk about this episode, which centers around how hard the dating scene can be when you're a 500-year-old mummy. Kate Leth returns with what is arguably the greatest installment of Buffy FashionWatch ever! We also touch on Cordelia-on-Cordelia fanfic (which is a thing! that totally exists! because of course it is!). This week we're discussing s2e4: Inca Mummy Girl. Read a zillion amazing things Mey Rude has written on Autostraddle, and give her a shout on twitter @meyrude! Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering. Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Get to know Buffy FashionWatch correspondent Kate Leth better at kateleth.com, or give her a shout on twitter (@kateleth). Buffering the Vampire Slayer is on twitter @bufferingcast and on facebook facebook.com/bufferingcast. You can now support the show on Patreon! We've also got a rad merch store over at bufferingthevampireslayer.bigcartel.com, where you can find a Buffering tee and Slayerette/Cordette pins... and that's where you can grab a Buffering the Vampire Slayer: Songs From Season One CD (we've still got a few copies left). You can also snag the album on iTunes or wherever you get your digital music! Logo: Kristine Thune, kristinethune.com d5f058cbdce76a66866e8b50f0febc86 Wed, 01 Feb 2017 07:29:20 -0000 yes whedon,buffy,angel,slayer,spike,joss,vampire 01:10:25 2.03: School Hard 2.03: School Hard full This week WHATEVER WHO CARES SPIKE AND DRUSILLA ARE HERE! If you must know more, though, it's also Parent-Teacher Night at Sunnydale High, Cordelia & Willow lock themselves in a utility closet, Angel is still an ensouled vampire, and WHATEVER SPIKE AND DRUSILLA ARE HERE. This week we're discussing s2e3: School Hard. Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering. Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Buffering the Vampire Slayer is on twitter @bufferingcast and on facebook facebook.com/bufferingcast. You can now support the show on Patreon! We've also got a rad merch store over at bufferingthevampireslayer.bigcartel.com, where you can find a Buffering tee and Slayerette/Cordette pins... and that's where you can grab a Buffering the Vampire Slayer: Songs From Season One CD (we've still got a few copies left). You can also snag the album on iTunes or wherever you get your digital music! Logo: Kristine Thune, kristinethune.com af261e10e5b08f485c466834c4b6064c Wed, 25 Jan 2017 14:02:06 -0000 yes whedon,buffy,angel,slayer,spike,joss,vampire 01:07:46 2.02: Some Assembly Required 2.02: Some Assembly Required full Hilarious geniuses Cameron Esposito and Rhea Butcher (!!!) join us to discuss that magical time in a young man's life when he dies and then his science-nerd brother brings him back to life (Frankenstein's monster-style) only to realize that life as a reanimated zombie guy is meaningless if you have no one to share it with. Zombie Guy's ideal eternal partner? Cordelia of course! This week we're discussing s2e2: Some Assembly Required. Find Cameron Esposito and Rhea Butcher on twitter (@cameronesposito and @rheabutcher), check out their standup podcast Put Your Hands Together, and watch the complete first season of their fantastic show Take My Wife on Seeso! Put Your Hands Together: feralaudio.com/show/pyht-with-cam-and-rhea Take My Wife: seeso.com/view/series/take-my-wife Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering. Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Buffering the Vampire Slayer is on twitter @bufferingcast and on facebook facebook.com/bufferingcast. You can now support the show on Patreon! We've also got a rad merch store over at bufferingthevampireslayer.bigcartel.com, where you can find a Buffering tee and Slayerette/Cordette pins... and that's where you can grab a Buffering the Vampire Slayer: Songs From Season One CD (we've still got a few copies left). You can also snag the album on iTunes or wherever you get your digital music! Logo: Kristine Thune, kristinethune.com d9067cfdd2780fe18981153b64130d72 Wed, 18 Jan 2017 15:59:14 -0000 yes whedon,buffy,angel,slayer,spike,joss,vampire 01:21:51 2.01: When She Was Bad 2.01: When She Was Bad full Buffy's back from LA, where she apparently spent her summer vacation developing a TERRIBLE ATTITUDE. She's got a whole lot of unprocessed trauma, and she's taking it out on her closest friends (and also Cordelia). Also OMFG Cibo Matto is playing at The Bronze!!! This week we're discussing s2e1: When She Was Bad. Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering. Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Get to know Buffy FashionWatch correspondent Kate Leth better at kateleth.com, or give her a shout on twitter (@kateleth). Buffering the Vampire Slayer is on twitter @bufferingcast and on facebook facebook.com/bufferingcast. You can now support the show on Patreon! We've also got a rad merch store over at bufferingthevampireslayer.bigcartel.com, where you can find a Buffering tee and Slayerette/Cordette pins... and that's where you can grab a Buffering the Vampire Slayer: Songs From Season One CD (we've still got a few copies left). You can also snag the album on iTunes or wherever you get your digital music! Logo: Kristine Thune, kristinethune.com 9f043f170ecacf685de20349ac3d27bb Wed, 11 Jan 2017 08:19:47 -0000 yes whedon,buffy,angel,slayer,spike,joss,vampire 01:09:27 0.03: Welcome to the Mailbag Vol. 2 0.03: Welcome to the Mailbag Vol. 2 full WE'RE BAAAAAAAA-AAAAAAAAAAACK! Today we're answering some of your most fascinating and hilarious emails, as well as sharing some of your favorite moments from Season 1. Next week we'll be back to talk about the first episode of Season 2. AAAH! Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering. Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Buffering the Vampire Slayer is on twitter @bufferingcast and on facebook facebook.com/bufferingcast. You can now support the show on Patreon! We've also got a rad little merch store over at bufferingthevampireslayer.bigcartel.com, where you can find a Buffering tee and Slayerette & Cordette pins... and that's where you can snag Buffering the Vampire Slayer: Songs From Season One CD (we've still got a few copies left). You can also snag the album on iTunes or wherever you get your digital music! Logo: Kristine Thune, kristinethune.com 9adc4435e3a81ca7c4125e0ac2c6b9d9 Wed, 04 Jan 2017 11:49:19 -0000 yes whedon,buffy,angel,slayer,spike,joss,vampire 00:45:32 1.12: Prophecy Girl 1.12: Prophecy Girl full Holy shit. The hellmouth is open, Angel is back, Buffy faces The Master, and Cordelia drives her car through the hallways of Sunnydale High School. This week we're discussing the finale of Season One, s1e12: Prophecy Girl. Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering. Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Get to know Buffy FashionWatch correspondent Kate Leth better at kateleth.com, or give her a shout on twitter (@kateleth). Buffering the Vampire Slayer is on twitter @bufferingcast and on facebook facebook.com/bufferingcast. You can support the show by leaving us a review on iTunes, or by visiting bufferingthevampireslayer.com and clicking 'donate.' We've also got a rad little merch store going over at bufferingthevampireslayer.bigcartel.com, where you can find a Buffering tee and Slayerette & Cordette pins... and right now, that's where you can (deep breath) pre-order physical copies of Buffering the Vampire Slayer: Songs From Season One, which will be officially out in a week or two. AAAAAAAH! Logo: Kristine Thune, kristinethune.com a7c79c14cec71e627e1aea1c27464b46 Wed, 07 Dec 2016 08:22:52 -0000 yes whedon,buffy,angel,slayer,spike,joss,vampire 01:12:31 1.11: Out of Mind, Out of Sight 1.11: Out of Mind, Out of Sight full An invisible girl is terrorizing the school, and her main target seems to be *gasp* CORDELIA. NO! KEEP CORDELIA SAFE AT ALL COSTS!! This week we're discussing Buffy the Vampire Slayer s1e11: Out of Mind, Out of Sight. Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering. Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Get to know Buffy FashionWatch correspondent Kate Leth better at kateleth.com, or give her a shout on twitter (@kateleth). Buffering the Vampire Slayer is on twitter @bufferingcast and on facebook facebook.com/bufferingcast. You can support the show by leaving us a review on iTunes, by snagging a Buffering the Vampire Slayer tee or Slayerette/Cordette pin at bufferingthevampireslayer.bigcartel.com, or by visiting bufferingthevampireslayer.com and clicking 'donate.' Logo: Kristine Thune, kristinethune.com 472456014275d5bfe090db2b8cfc802a Wed, 30 Nov 2016 07:27:38 -0000 yes whedon,buffy,angel,slayer,spike,joss,vampire 01:04:54 1.10: Nightmares 1.10: Nightmares full TARANTULAS IN A TEXTBOOK? CLOWNS WITH KNIVES? NO THANKS. This week we're discussing Buffy the Vampire Slayer s1e10: Nightmares. *spooky music* Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering. Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Get to know Buffy FashionWatch correspondent Kate Leth better at kateleth.com, or give her a shout on twitter (@kateleth). Buffering the Vampire Slayer is on twitter @bufferingcast and on facebook facebook.com/bufferingcast. You can support the show by leaving us a review on iTunes, or by visiting bufferingthevampireslayer.com and clicking 'donate.' Logo: Kristine Thune, kristinethune.com 0af6fbcdff027e9c566eaa2125ab92f4 Wed, 23 Nov 2016 08:00:32 -0000 yes whedon,buffy,angel,slayer,spike,joss,vampire 01:03:44 0.02: An Interview with Armin Shimerman 0.02: An Interview with Armin Shimerman full In this special bonus episode, we speak with Armin Shimerman, who plays Principal Snyder. WHAT A DELIGHT! Armin Shimerman is @shimermanarmin on twitter, and you can learn more about Antaeus Theatre Company, where he serves as artistic director, at antaeus.org. Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering. Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Buffering the Vampire Slayer is on twitter @bufferingcast and on facebook facebook.com/bufferingcast. You can support the show by leaving us a review on iTunes, or by visiting bufferingthevampireslayer.com and clicking 'donate.' Logo: Kristine Thune, kristinethune.com 6dc39b21cda2ae2bc64a5007b4dc07f8 Sat, 19 Nov 2016 22:19:24 -0000 yes whedon,buffy,angel,slayer,spike,joss,vampire 00:24:39 1.09: The Puppet Show 1.09: The Puppet Show full The Sunnydale High School Talent Show is upon us, and no one is safe... from Cordelia's singing. Also, is it just us or is there a living ventriloquist's dummy on the loose? This week we're discussing Buffy the Vampire Slayer s1e9: The Puppet Show. Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering. Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Get to know Kate Leth better at kateleth.com, patreon.com/kateleth, or give her a shout on twitter (@kateleth). Buffering the Vampire Slayer is on twitter @bufferingcast and on facebook facebook.com/bufferingcast. You can support the show by leaving us a review on iTunes, or by visiting bufferingthevampireslayer.com and clicking 'donate.' Logo: Kristine Thune, kristinethune.com 2925429237d7707b268c8b4cec386f3b Wed, 16 Nov 2016 05:00:00 -0000 yes whedon,buffy,angel,slayer,spike,joss,vampire 01:04:00 1.08: I, Robot... You, Jane 1.08: I, Robot... You, Jane full Gaby Dunn (Just Between Us, Bad With Money) joins us this week to talk about catfishing, the unbearable beauty of Ms. Calendar, and the basics of a Harry Potter/Buffy parallel. We've also got a fresh installment of Buffy FashionWatch for you, courtesy of the one and only Kate Leth! This week we're discussing Buffy the Vampire Slayer s1e8: I, Robot... You, Jane. Watch Gaby's hilarious videos at youtube.com/justbetweenusshow, listen to her fascinating and mega-layered podcast Bad With Money (on iTunes or wherever you get your podcasts), or follow her on twitter @gabydunn. She's also got another podcast called Finale Rally, where three people watch the series finale of a show they've never seen before... which seems like something you might be into. Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering. Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Get to know Kate Leth better at kateleth.com, patreon.com/kateleth, or give her a shout on twitter (@kateleth). Buffering the Vampire Slayer is on twitter @bufferingcast and on facebook facebook.com/bufferingcast. You can support the show by leaving us a review on iTunes, or by visiting bufferingthevampireslayer.com and clicking 'donate.' Logo: Kristine Thune, kristinethune.com 5eef5f3247a6c361f55f991472ec183d Wed, 09 Nov 2016 09:05:38 -0000 yes whedon,buffy,angel,slayer,spike,joss,vampire 01:12:39 1.07: Angel 1.07: Angel full OMFG CAN YOU EVEN BELIEVE WHAT WE FIND OUT ABOUT ANGEL THIS EPISODE?!?!?!?! SQUEEEEEEEEEEEEEEEE Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering. Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Buffering the Vampire Slayer is on twitter @bufferingcast and on facebook facebook.com/bufferingcast. You can support the show by leaving us a review on iTunes, or by visiting bufferingthevampireslayer.com and clicking 'donate.' Logo: Kristine Thune, kristinethune.com. 1fe0d95999661cccfc147385cf206c56 Wed, 02 Nov 2016 14:13:00 -0000 yes whedon,buffy,angel,slayer,spike,joss,vampire 01:02:18 0.01: Welcome to the Mailbag! 0.01: Welcome to the Mailbag! full This mailbag episode is all about YOU! We answer your toughest questions, like "When will the recap songs be available for download?" and "When can we all watch an episode together?!" and "Why are Jenny and Kristin digging out the complete Buffy DVD box set and no longer watching on Netflix?" YOU NEED ONLY LISTEN TO THIS MAILBAG EPISODE, AND ALL SHALL BE REVEALED TO YOU, GENTLE LISTENER! Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering. Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Buffering the Vampire Slayer is on twitter @bufferingcast and on facebook facebook.com/bufferingcast. You can support the show by leaving us a review on iTunes, or by visiting bufferingthevampireslayer.com and clicking 'donate.' Logo: Kristine Thune, kristinethune.com dac9cef7d9c9bd748bbb551d8a2e6007 Wed, 26 Oct 2016 07:00:00 -0000 yes whedon,buffy,angel,slayer,spike,joss,vampire 00:32:17 1.06: The Pack 1.06: The Pack full When Xander and a group of stereotypical mean kids get possessed by some kind of supernatural hyena spirit, heads (and eyes) may roll! Buckle your heart-belts: two beautiful souls don't make it out of this episode alive. We chat with our pal STEVEN SMITH (Steven's Untitled Rock Show; Going Off Track podcast) who played Adam (from the infamous hot dog picnic table scene) about his experience acting in two episodes of Buffy, and KATE LETH returns for the first official installment of Buffy FashionWatch! Check out Steven's awesome podcast Going Off Track (cohosted by another of our favorite people, Jonah Bayer) at goingofftrack.com, and find Steven on twitter @stevensmithsays! Jenny Owen Youngs is @jennyowenyoungs on twitter, and you can check out some of her non-Buffy songs at jennyowenyoungs.com/buffering. Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Get to know Kate Leth better at kateleth.com, patreon.com/kateleth, or give her a shout on twitter (@kateleth). Buffering the Vampire Slayer is on twitter @bufferingcast and on facebook facebook.com/bufferingcast. Logo: Kristine Thune, kristinethune.com 312bf4c1771dc0aef98ed8de169c086f Wed, 19 Oct 2016 04:01:00 -0000 yes whedon,buffy,angel,slayer,spike,joss,vampire 01:05:03 1.05: Never Kill a Boy on the First Date 1.05: Never Kill a Boy on the First Date full Writer and artist KATE LETH (Marvel's Hellcat) joins us to discuss the difficulties of dating if you're The Slayer, the likelihood of high school boys actually reading Emily Dickinson, and Xander's chronic case of being The Worst. This week we're discussing Buffy the Vampire Slayer s1e5: Never Kill a Boy on the First Date. If you enjoy this podcast, consider leaving us a review on iTunes! Get to know Kate better at kateleth.com, patreon.com/kateleth, or give her a shout on twitter (@kateleth). Jenny Owen Youngs is @jennyowenyoungs on twitter. You can check out all the songs she writes about non-Buffy things at jennyowenyoungs.com. Kristin Russo is @kristinnoeline on twitter. Learn more about the resources she creates for LGBTQ individuals and their families at everyoneisgay.com and mykidisgay.com. Buffering the Vampire Slayer is on twitter @bufferingcast and on facebook facebook.com/bufferingcast. Logo: Kristine Thune, kristinethune.com MEGA-THANKS to the amazing Mike Tuccillo, who saved the day by giving us some much-needed mixing support on this episode! Seriously, this episode almost perished in the flames. THANKS MIKE! <3 bf9954e383b0c1b8cc7ed1537f0575b0 Wed, 12 Oct 2016 16:56:59 -0000 yes whedon,buffy,angel,slayer,spike,joss,vampire 00:59:04 1.04: Teacher's Pet 1.04: Teacher's Pet full When a giant she-mantis comes to town and masquerades as a smokin' hot substitute science teacher, lives (and masculinity) are in peril! This week we're discussing Buffy the Vampire Slayer s1e4: Teacher's Pet. If you're into this podcast, perhaps you'd like to leave us a review on iTunes?! Hit us up on twitter: Jenny Owen Youngs (@jennyowenyoungs). Kristin Russo (@kristinnoeline). Buffering the Vampire Slayer (@bufferingcast). You can also join us on facebook.com/bufferingcast. Logo: Kristine Thune, kristinethune.com a08de7d6f73480356d0efc32e5f515e2 Wed, 05 Oct 2016 18:28:15 -0000 yes whedon,buffy,angel,slayer,spike,joss,vampire 00:50:17 1.03: Witch 1.03: Witch full In Sunnydale, even driver's ed is spooky and unsafe! This week we're discussing Buffy the Vampire Slayer s1e3: Witch. If you like the show, why not leave us a review on iTunes? Thanks! Feel free to give us a shout on twitter: Jenny Owen Youngs (@jennyowenyoungs). Kristin Russo (@kristinnoeline). Buffering the Vampire Slayer (@bufferingcast). You can also join us on facebook.com/bufferingcast. Logo: Kristine Thune, kristinethune.com f04e9108fee45b8c5108e91366ab8096 Wed, 28 Sep 2016 13:26:15 -0000 yes whedon,buffy,angel,slayer,spike,joss,vampire 00:53:54 1.02: The Harvest 1.02: The Harvest full Did Buffy make it out of that casket where Luke had her pinned last week? LET'S FIND OUT TOGETHER! (If she didn't, the remaining 6 seasons might be kind of hard to pull off.) This week we're discussing Buffy the Vampire Slayer s1e2: The Harvest. If you like the show, consider leaving us a review on iTunes! Give us a holler on twitter: Jenny Owen Youngs (@jennyowenyoungs). Kristin Russo (@kristinnoeline). Buffering the Vampire Slayer (@bufferingcast). You can also join us on facebook.com/bufferingcast. Logo: Kristine Thune, kristinethune.com f82002730846201518deec406af8c803 Wed, 21 Sep 2016 14:09:16 -0000 yes whedon,buffy,angel,slayer,spike,joss,vampire 00:49:44 1.01: Welcome to the Hellmouth 1.01: Welcome to the Hellmouth full This week on the very first episode of Buffering the Vampire Slayer, Jenny and Kristin watch and discuss Buffy the Vampire Slayer Season 1 Episode 1: Welcome to the Hellmouth. If you like the show, feel free to leave us a review on iTunes - that would be so rad of you! Give us a shout on twitter: Jenny Owen Youngs (@jennyowenyoungs). Kristin Russo (@kristinnoeline). Buffering the Vampire Slayer (@bufferingcast). You can also join us on facebook.com/bufferingcast. Logo: Kristine Thune, kristinethune.com Special thanks to Mike Tuccillo, mix consultant on our theme music. eab6ee17fdaaf22ede6ff36b80979937 Wed, 14 Sep 2016 15:08:32 -0000 yes whedon,buffy,angel,slayer,spike,joss,vampire 00:46:13 0.00: New Podcast Rising 0.00: New Podcast Rising full Buffering the Vampire Slayer is a weekly podcast in which your hosts Jenny Owen Youngs (professional musician and recreational Whedonverse aficionado) and Kristin Russo (professional writer and former goth teen) discuss Buffy the Vampire Slayer, one episode at a time. *wolf howl* Get at us on twitter: Jenny Owen Youngs (@jennyowenyoungs). Kristin Russo (@kristinnoeline). Buffering the Vampire Slayer (@bufferingcast). Logo: Kristine Thune, kristinethune.com bae90912acfb6c0524b1d5ab62a52397 Fri, 02 Sep 2016 01:39:50 -0000 yes whedon,buffy,angel,slayer,spike,joss,vampire 00:01:35
================================================ FILE: api/test/data/podcast-feed/design-details ================================================ Design Details https://simplecast.com A show about the people who design our favorite products. Hosted by Bryn Jackson and Brian Lovin. © 2017 Spec Network, Inc. en Wed, 23 May 2018 05:00:00 -0700 Thu, 31 May 2018 05:02:59 -0700 http://spec.fm/show/design-details https://media.simplecast.com/podcast/image/1034/1471485006-artwork.jpg Design Details http://spec.fm/show/design-details https://rss.simplecast.com/podcasts/1034/rss Spec A show about the people who design our favorite products. Hosted by Bryn Jackson and Brian Lovin. A show about the people who design our favorite products. no design, design details, technology, brian lovin, bryn jackson episodic Spec Network, Inc. shows@spec.fm 249: Hi/Lo Technical (feat. Priyanka Kodikal) ea7d9ec7-e730-4c47-9444-5ac782b52cb7 http://designdetails.simplecast.fm/priyanka-kodikal Today we caught up with Priyanka Kodikal, a product designer currently working at WhatsApp. In this episode we dig into Priyanka's work at WhatsApp and what it's like shipping to more than a billion people around the world. We also learn about Priyanka's journey from India to WhatsApp, and the winding path it took to land at her dream job. Today we caught up with Priyanka Kodikal, a product designer currently working at WhatsApp. In this episode we dig into Priyanka's work at WhatsApp and what it's like shipping to more than a billion people around the world. We also learn about Priyanka's journey from India to WhatsApp, and the winding path it took to land at her dream job.

Priyanka on the web
Sponsors

Thanks to Abstract for sponsoring today's episode!

✨Abstract is a secure version-controlled hub for your design files.

Salespeople have Salesforce, Developers have Github, Marketers have Marketo and now designers have Abstract.

You can try Abstract free for one month! Just visit www.goabstract.com for more information.

]]>
Wed, 23 May 2018 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:12:12 Today we caught up with Priyanka Kodikal, a product designer currently working at WhatsApp. In this episode we dig into Priyanka's work at WhatsApp and what it's like shipping to more than a billion people around the world. We also learn about Priyanka's journey from India to WhatsApp, and the winding path it took to land at her dream job. Today we caught up with Priyanka Kodikal, a product designer currently working at WhatsApp. In this episode we dig into Priyanka's work at WhatsApp and what it's like shipping to more than a billion people around the world. We also learn about Priyanka's technology, web, design no full 250
248: OshKoshFigJosh (feat. Josh Dunsterville) ee0887e3-d76e-4d7c-9541-dc0683951d66 http://designdetails.simplecast.fm/josh-dunsterville Today we caught up with Josh Dunsterville, a designer and community manager currently building the community at Figma. In this episode we dig into Josh's work at Figma, diving deep into what it really means to grow a healthy online community. We also caught up with Josh about his journey into design, coming from a small town in Nevada to working remote for a technology company. Today we caught up with Josh Dunsterville, a designer and community manager currently building the community at Figma. In this episode we dig into Josh's work at Figma, diving deep into what it really means to grow a healthy online community. We also caught up with Josh about his journey into design, coming from a small town in Nevada to working remote for a technology company.

Josh on the web
Sponsors

Thanks to Swipies & Abstract for sponsoring today's episode!

✨Abstract, is a secure version-controlled hub for your design files.

Salespeople have Salesforce, Developers have Github, Marketers have Marketo and now designers have Abstract.

You can try Abstract free for one month! Just visit www.goabstract.com for more information.

📝Swipies are a reusable, durable, synthetic paper made for creative, productive people.

They're designed to be used with wet-erase pens, allowing your work to stay put until rinsed with water. They're the perfect companion in the home and in the office.

We use them here at Spec and now listeners will receive 10% off the entire store with promo code SPECFM

Check it out and make the switch at http://www.swipi.es/

Get in Touch

If you'd like to talk about today's episode, ask us or today's guest a question or just say, "hello", We've got a place for that in our Spectrum.chat community channel

]]>
Wed, 16 May 2018 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:23:47 Today we caught up with Josh Dunsterville, a designer and community manager currently building the community at Figma. In this episode we dig into Josh's work at Figma, diving deep into what it really means to grow a healthy online community. We also caught up with Josh about his journey into design, coming from a small town in Nevada to working remote for a technology company. Today we caught up with Josh Dunsterville, a designer and community manager currently building the community at Figma. In this episode we dig into Josh's work at Figma, diving deep into what it really means to grow a healthy online community. We also caug technology, web, design, figma no full 249
247: Give A Goat A Gobstopper (feat. Kyle Turman) 5adf05a1-4bef-4e55-a4a3-0b9fb13e26a0 http://designdetails.simplecast.fm/kyle-turman Today we caught up with Kyle Turman, a product designer on the design systems team at Etsy. In this episode we dig into Kyle's work at Etsy on building seller-facing design systems, working remotely, the value of craft, and Bryn and Brian get a free therapy session. Today we caught up with Kyle Turman, a product designer on the design systems team at Etsy. In this episode we dig into Kyle's work at Etsy on building seller-facing design systems, working remotely, the value of craft, and Bryn and Brian get a free therapy session.

Kyle on the web
Sponsors

Thanks to Swipies & Abstract for sponsoring today's episode!

✨Abstract, is a secure version-controlled hub for your design files.

Salespeople have Salesforce, Developers have Github, Marketers have Marketo and now designers have Abstract.

You can try Abstract free for one month! Just visit www.goabstract.com for more information.

📝Swipies are a reusable, durable, synthetic paper made for creative, productive people.

They're designed to be used with wet-erase pens, allowing your work to stay put until rinsed with water. They're the perfect companion in the home and in the office.

We use them here at Spec and now listeners will receive 10% off the entire store with promo code SPECFM

Check it out and make the switch at http://www.swipi.es/

]]>
Wed, 09 May 2018 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:46:23 Today we caught up with Kyle Turman, a product designer on the design systems team at Etsy. In this episode we dig into Kyle's work at Etsy on building seller-facing design systems, working remotely, the value of craft, and Bryn and Brian get a free therapy session. Today we caught up with Kyle Turman, a product designer on the design systems team at Etsy. In this episode we dig into Kyle's work at Etsy on building seller-facing design systems, working remotely, the value of craft, and Bryn and Brian get a free thera technology, web, design no full 248
246: Cats & Design Systems (feat. Diana Mounter & Brent Jackson) d87f6b1d-d6d0-40e7-b253-e665ae627fd5 http://designdetails.simplecast.fm/design-systems Today we dipped into a double-guest episode with our friends Diana Mounter and Brent Jackson! Diana and Brent are some of the best people working on design systems today, and in this episode we get to dig into the tools and workflows they've developed when working on systems, what they're excited about in design systems, and we even get technical to talk about the technologies that are change the way we build. Today we dipped into a double-guest episode with our friends Diana Mounter and Brent Jackson! Diana and Brent are some of the best people working on design systems today, and in this episode we get to dig into the tools and workflows they've developed when working on systems, what they're excited about in design systems, and we even get technical to talk about the technologies that are change the way we build.

Diana on the web
Brent on the web
Sponsors

Thanks to Swipies & Abstract for sponsoring today's episode!

✨Abstract, is a secure version-controlled hub for your design files.

Salespeople have Salesforce, Developers have Github, Marketers have Marketo and now designers have Abstract.

You can try Abstract free for one month! Just visit www.goabstract.com for more information.

📝Swipies are a reusable, durable, synthetic paper made for creative, productive people.

They're designed to be used with wet-erase pens, allowing your work to stay put until rinsed with water. They're the perfect companion in the home and in the office.

We use them here at Spec and now listeners will receive 10% off the entire store with promo code SPECFM

Check it out and make the switch at http://www.swipi.es/

]]>
Wed, 02 May 2018 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:44:55 Today we dipped into a double-guest episode with our friends Diana Mounter and Brent Jackson! Diana and Brent are some of the best people working on design systems today, and in this episode we get to dig into the tools and workflows they've developed when working on systems, what they're excited about in design systems, and we even get technical to talk about the technologies that are change the way we build. Today we dipped into a double-guest episode with our friends Diana Mounter and Brent Jackson! Diana and Brent are some of the best people working on design systems today, and in this episode we get to dig into the tools and workflows they've developed whe technology, web, design no full 247
245: Sandwich Principal (feat. Tom Moor) 98b12666-8576-44fc-8353-558731a826d6 http://designdetails.simplecast.fm/tom-moor Today we caught up with Tom Moor, a software engineer building Abstract. In this episode we dig into Tom's journey with startups, including his work at Buffer, Sqwiggle, Speak, Outline, and now Abstract. We also get to talk about Tom's current work at Abstract, evolving the design review, and so much more. Today we caught up with Tom Moor, a software engineer building Abstract. In this episode we dig into Tom's journey with startups, including his work at Buffer, Sqwiggle, Speak, Outline, and now Abstract. We also get to talk about Tom's current work at Abstract, evolving the design review, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

Tom on the web

Thanks to 📝 Swipies for sponsoring Today's Episode!

Swipies are a reusable, durable, synthetic paper made for creative, productive people. They're designed to be used with wet-erase pens, allowing your work to stay put until rinsed with water. They're the perfect companion in the home and in the office.

We use them here at Spec and now listeners will receive 10% off the entire store with promo code SPECFM

Check it out and make the switch at http://www.swipi.es/

]]>
Wed, 25 Apr 2018 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:21:16 Today we caught up with Tom Moor, a software engineer building Abstract. In this episode we dig into Tom's journey with startups, including his work at Buffer, Sqwiggle, Speak, Outline, and now Abstract. We also get to talk about Tom's current work at Abstract, evolving the design review, and so much more. Today we caught up with Tom Moor, a software engineer building Abstract. In this episode we dig into Tom's journey with startups, including his work at Buffer, Sqwiggle, Speak, Outline, and now Abstract. We also get to talk about Tom's current work at Abs technology, web, design no full 246
244: Peter Piper Pizza Party (feat. Claudio Vallejo) ac81c9e1-9f0c-4074-a1e3-14a80d50eeea http://designdetails.simplecast.fm/claudio-vallejo Today we caught up with Claudio Vallejo, a product designer currently working at Managed by Q in New York. In this episode we dig into Claudio's current work as a designer solving meat-space problems, his journey from Mexico to the United States, self discipline and burnout, and so much more. Today we caught up with Claudio Vallejo, a product designer currently working at Managed by Q in New York. In this episode we dig into Claudio's current work as a designer solving meat-space problems, his journey from Mexico to the United States, self discipline and burnout, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

Claudio on the web
]]>
Wed, 18 Apr 2018 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:11:10 Today we caught up with Claudio Vallejo, a product designer currently working at Managed by Q in New York. In this episode we dig into Claudio's current work as a designer solving meat-space problems, his journey from Mexico to the United States, self discipline and burnout, and so much more. Today we caught up with Claudio Vallejo, a product designer currently working at Managed by Q in New York. In this episode we dig into Claudio's current work as a designer solving meat-space problems, his journey from Mexico to the United States, self dis technology, web, design no full 245
243: Maximum Potassium (feat. Vlad Magdalin) 02fa5036-ba5e-4897-8a60-6bf89568b184 http://designdetails.simplecast.fm/vlad-magdalin Today we caught up with Vlad Magdalin, co-founder and CEO of Webflow. In this episode we dig into Vlad's history, moving from Russia to the US, his journey to Webflow, the challenges of starting up, raising money, and so much more. Today we caught up with Vlad Magdalin, co-founder and CEO of Webflow. In this episode we dig into Vlad's history, moving from Russia to the US, his journey to Webflow, the challenges of starting up, raising money, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

Vlad on the web
]]>
Wed, 11 Apr 2018 05:00:00 -0700 shows@spec.fm (Spec) Spec 02:02:24 Today we caught up with Vlad Magdalin, co-founder and CEO of Webflow. In this episode we dig into Vlad's history, moving from Russia to the US, his journey to Webflow, the challenges of starting up, raising money, and so much more. Today we caught up with Vlad Magdalin, co-founder and CEO of Webflow. In this episode we dig into Vlad's history, moving from Russia to the US, his journey to Webflow, the challenges of starting up, raising money, and so much more. no full 244
242: Traitor Joe (feat. Victor Kernes) 5fd708ec-423a-4f19-9616-4a3ab74c06d6 http://designdetails.simplecast.fm/victor-kernes Today we caught up with Victor Kernes, a designer working on reversing type 2 diabetes at Virta. In this episode we dig into transitioning from marketing to design, working in the healthcare industry, advice to young designers, the traitor named Joe, and so much more. Today we caught up with Victor Kernes, a designer working on reversing type 2 diabetes at Virta. In this episode we dig into transitioning from marketing to design, working in the healthcare industry, advice to young designers, the traitor named Joe, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

Victor on the web
]]>
Wed, 04 Apr 2018 05:00:00 -0700 shows@spec.fm (Spec) Spec 00:51:12 Today we caught up with Victor Kernes, a designer working on reversing type 2 diabetes at Virta. In this episode we dig into transitioning from marketing to design, working in the healthcare industry, advice to young designers, the traitor named Joe, and so much more. Today we caught up with Victor Kernes, a designer working on reversing type 2 diabetes at Virta. In this episode we dig into transitioning from marketing to design, working in the healthcare industry, advice to young designers, the traitor named Joe, and no full 243
241: Toast, The Bread (feat. Meg Robichaud) b69fce24-36c8-4c92-9f2e-28fb2281a482 http://designdetails.simplecast.fm/meg-robichaud Today we caught up once again with our good friend Meg Robichaud. Meg draws things for money, and is currently doing so at Lyft. In this episode we dig into what she's been up to over the last two years, the journey to Lyft, freelance vs. in-house, moving to San Francisco, and so much more. Today we caught up once again with our good friend Meg Robichaud. Meg draws things for money, and is currently doing so at Lyft. In this episode we dig into what she's been up to over the last two years, the journey to Lyft, freelance vs. in-house, moving to San Francisco, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

Meg on the web:
]]>
Wed, 28 Mar 2018 05:00:00 -0700 shows@spec.fm (Spec) Spec 00:57:35 Today we caught up once again with our good friend Meg Robichaud. Meg draws things for money, and is currently doing so at Lyft. In this episode we dig into what she's been up to over the last two years, the journey to Lyft, freelance vs. in-house, moving to San Francisco, and so much more. Today we caught up once again with our good friend Meg Robichaud. Meg draws things for money, and is currently doing so at Lyft. In this episode we dig into what she's been up to over the last two years, the journey to Lyft, freelance vs. in-house, moving no full 242
240: Proxima Nova Revolution (feat. Hardik Pandya) 4ff3795f-7271-4bcb-a70f-5ce19189aa54 http://designdetails.simplecast.fm/hardik-pandya Today we caught up with Hardik Pandya, a product designer at Google in India, currently working on GSuite and Google Photos. In this episode we dig into Hardik's background and discovery of design, working from startups to Google, the design scene and tech landscape in India, and so much more. Today we caught up with Hardik Pandya, a product designer at Google in India, currently working on GSuite and Google Photos. In this episode we dig into Hardik's background and discovery of design, working from startups to Google, the design scene and tech landscape in India, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

Hardik on the web:
]]>
Wed, 21 Mar 2018 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:07:43 Today we caught up with Hardik Pandya, a product designer at Google in India, currently working on GSuite and Google Photos. In this episode we dig into Hardik's background and discovery of design, working from startups to Google, the design scene and tech landscape in India, and so much more. Today we caught up with Hardik Pandya, a product designer at Google in India, currently working on GSuite and Google Photos. In this episode we dig into Hardik's background and discovery of design, working from startups to Google, the design scene and tec no full 241
239: Data Ultra (feat. Lin Wang) 753558f1-0af4-4f49-8b72-45059a28ff66 http://designdetails.simplecast.fm/lin-wang Today we caught up with Lin Wang, a product designer working on the Core Passenger team at Lyft. In this episode we dig into Lin's background, her journey from China to SF, moving from graphic to product design, and how she eventually landed a job at Lyft. Today we caught up with Lin Wang, a product designer working on the Core Passenger team at Lyft. In this episode we dig into Lin's background, her journey from China to SF, moving from graphic to product design, and how she eventually landed a job at Lyft.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

Lin on the web:
]]>
Wed, 14 Mar 2018 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:10:23 Today we caught up with Lin Wang, a product designer working on the Core Passenger team at Lyft. In this episode we dig into Lin's background, her journey from China to SF, moving from graphic to product design, and how she eventually landed a job at Lyft. Today we caught up with Lin Wang, a product designer working on the Core Passenger team at Lyft. In this episode we dig into Lin's background, her journey from China to SF, moving from graphic to product design, and how she eventually landed a job at Lyft no full 240
238: Grocery Social (feat. Julie Delanoy) 296dd012-3282-4063-8524-d277bdfe67de http://designdetails.simplecast.fm/julie-delanoy Today we caught up with Julie Delanoy, a product designer currently building things at Product Hunt. In this episode we dig into Julie's journey to Product Hunt, working remotely, designing for communities, and so much more. Today we caught up with Julie Delanoy, a product designer currently building things at Product Hunt. In this episode we dig into Julie's journey to Product Hunt, working remotely, designing for communities, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

Julie on the web:
]]>
Wed, 07 Mar 2018 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:07:35 Today we caught up with Julie Delanoy, a product designer currently building things at Product Hunt. In this episode we dig into Julie's journey to Product Hunt, working remotely, designing for communities, and so much more. Today we caught up with Julie Delanoy, a product designer currently building things at Product Hunt. In this episode we dig into Julie's journey to Product Hunt, working remotely, designing for communities, and so much more. no full 239
237: Hoppy Borthdoy (feat. Hartley Miller) 04299e25-0c85-40cf-9564-36abf919cc9d http://designdetails.simplecast.fm/hartley-miller Today we caught up with Hartley Miller, a product designer at Pinterest. In this episode we dig into what Hartley's working on, the ups and downs of not having a plan, finding meaning in work, and so much more. Today we caught up with Hartley Miller, a product designer at Pinterest. In this episode we dig into what Hartley's working on, the ups and downs of not having a plan, finding meaning in work, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

Hartley on the Web:
]]>
Wed, 28 Feb 2018 05:00:00 -0800 shows@spec.fm (Spec) Spec 00:49:08 Today we caught up with Hartley Miller, a product designer at Pinterest. In this episode we dig into what Hartley's working on, the ups and downs of not having a plan, finding meaning in work, and so much more. Today we caught up with Hartley Miller, a product designer at Pinterest. In this episode we dig into what Hartley's working on, the ups and downs of not having a plan, finding meaning in work, and so much more. no full 237
236: TI-85 (feat. Charlie Cheever) 7b2955cc-51a3-477d-82f5-485c73ede8b7 http://designdetails.simplecast.fm/charlie-cheever Today we caught up with Charlie Cheever, the founder of Expo, an open source toolchain that helps people build native mobile apps (which we're using to build Spectrum!). In this episode we dig into the Charlie's path to working on Expo, including building calculator games, building Facebook Platform, co-founding Quora, and so much more. Today we caught up with Charlie Cheever, the founder of Expo, an open source toolchain that helps people build native mobile apps (which we're using to build Spectrum!). In this episode we dig into the Charlie's path to working on Expo, including building calculator games, building Facebook Platform, co-founding Quora, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

Charlie on the Web:
]]>
Wed, 21 Feb 2018 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:05:19 Today we caught up with Charlie Cheever, the founder of Expo, an open source toolchain that helps people build native mobile apps (which we're using to build Spectrum!). In this episode we dig into the Charlie's path to working on Expo, including building calculator games, building Facebook Platform, co-founding Quora, and so much more. Today we caught up with Charlie Cheever, the founder of Expo, an open source toolchain that helps people build native mobile apps (which we're using to build Spectrum!). In this episode we dig into the Charlie's path to working on Expo, including building no full 236
235: Incremental Correctness (feat. Guillermo Rauch) a13d044c-e55e-45bc-8815-a1555f5fb3c6 http://designdetails.simplecast.fm/238 Today we caught up with Guillermo Rauch, the founder of Zeit. We're huge fans of Guillermo's work, his contributions to the open source community, and the work that his team is doing at Zeit to make cloud computing more accessible. In this episode we dig into Guillermo's philosophies for building products, dive into the nitty gritty technical details of JavaScript and React, learn Guillermo's favorite mental models, and so much more. Today we caught up with Guillermo Rauch, the founder of Zeit. We're huge fans of Guillermo's work, his contributions to the open source community, and the work that his team is doing at Zeit to make cloud computing more accessible. In this episode we dig into Guillermo's philosophies for building products, dive into the nitty gritty technical details of JavaScript and React, learn Guillermo's favorite mental models, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

Guillermo on the Web:
]]>
Wed, 14 Feb 2018 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:40:25 Today we caught up with Guillermo Rauch, the founder of Zeit. We're huge fans of Guillermo's work, his contributions to the open source community, and the work that his team is doing at Zeit to make cloud computing more accessible. In this episode we dig into Guillermo's philosophies for building products, dive into the nitty gritty technical details of JavaScript and React, learn Guillermo's favorite mental models, and so much more. Today we caught up with Guillermo Rauch, the founder of Zeit. We're huge fans of Guillermo's work, his contributions to the open source community, and the work that his team is doing at Zeit to make cloud computing more accessible. In this episode we dig no full 238
234: Maximum Effort (feat. PJ Buddhari) 31b4a10f-8f93-4fbb-94d3-54025a645684 http://designdetails.simplecast.fm/234 To kick off 2018 we caught up with PJ Buddhari, a product designer currently working on the design systems team at Adobe. In this episode we dig into what it takes to put together a design system across such a huge lineup of products, moving to the US, PJ's path into design, and so much more. To kick off 2018 we caught up with PJ Buddhari, a product designer currently working on the design systems team at Adobe. In this episode we dig into what it takes to put together a design system across such a huge lineup of products, moving to the US, PJ's path into design, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

Sponsors:
  • Reaktor - Reaktor is a product design studio in NYC, designing and building for forward-thinking businesses and organizations. And they're hiring someone like you!
PJ on the Web:
]]>
Wed, 07 Feb 2018 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:00:35 To kick off 2018 we caught up with PJ Buddhari, a product designer currently working on the design systems team at Adobe. In this episode we dig into what it takes to put together a design system across such a huge lineup of products, moving to the US, PJ's path into design, and so much more. To kick off 2018 we caught up with PJ Buddhari, a product designer currently working on the design systems team at Adobe. In this episode we dig into what it takes to put together a design system across such a huge lineup of products, moving to the US, PJ no full 237
233: Recapisode #4 (Looking Back at 2017) 5be907a0-b9d1-40b6-bc03-02b092c15121 http://designdetails.simplecast.fm/25d299d3 Every year at this time we take a break and reflect on all of the wonderful conversations we've had during the past year. Every year at this time we take a break and reflect on all of the wonderful conversations we've had during the past year.

For people who are new to Design Details, we hope this is a nice sample of some of the topics and people we were able to meet in 2017. And for long-time listeners, we hope that like us, you'll enjoy this opportunity to recap everything we talked about last year.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

Sponsors:
  • Reaktor - Reaktor is a product design studio in NYC, designing and building for forward-thinking businesses and organizations. And they're hiring someone like you!
Design Details on the Web:
]]>
Wed, 31 Jan 2018 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:42:17 Every year at this time we take a break and reflect on all of the wonderful conversations we've had during the past year. Every year at this time we take a break and reflect on all of the wonderful conversations we've had during the past year. no full 236
232: Recapisode #3 (Looking Back at 2017) 61539795-6918-4032-a0cc-10068c8a557c http://designdetails.simplecast.fm/9e9d5010 Every year at this time we take a break and reflect on all of the wonderful conversations we've had during the past year. Every year at this time we take a break and reflect on all of the wonderful conversations we've had during the past year.

For people who are new to Design Details, we hope this is a nice sample of some of the topics and people we were able to meet in 2017. And for long-time listeners, we hope that like us, you'll enjoy this opportunity to recap everything we talked about last year.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

Sponsors:
  • Reaktor - Reaktor is a product design studio in NYC, designing and building for forward-thinking businesses and organizations. And they're hiring someone like you!
Design Details on the Web:
]]>
Wed, 24 Jan 2018 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:27:14 Every year at this time we take a break and reflect on all of the wonderful conversations we've had during the past year. Every year at this time we take a break and reflect on all of the wonderful conversations we've had during the past year. no full 235
231: Recapisode #2 (Looking Back at 2017) 87429047-b8ab-44bb-a8d6-0f6d35110c69 http://designdetails.simplecast.fm/69457eca Every year at this time we take a break and reflect on all of the wonderful conversations we've had during the past year. Every year at this time we take a break and reflect on all of the wonderful conversations we've had during the past year.

For people who are new to Design Details, we hope this is a nice sample of some of the topics and people we were able to meet in 2017. And for long-time listeners, we hope that like us, you'll enjoy this opportunity to recap everything we talked about last year.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

Sponsors:
  • Reaktor - Reaktor is a product design studio in NYC, designing and building for forward-thinking businesses and organizations. And they're hiring someone like you!
Design Details on the Web:
]]>
Wed, 17 Jan 2018 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:20:39 Every year at this time we take a break and reflect on all of the wonderful conversations we've had during the past year. Every year at this time we take a break and reflect on all of the wonderful conversations we've had during the past year. no full 234
230: Recapisode #1 (Looking Back At 2017) 332b42fa-376c-44f5-927e-9a0c092fec9a http://designdetails.simplecast.fm/cc0c2106 Every year at this time we take a break and reflect on all of the wonderful conversations we've had during the past year. Every year at this time we take a break and reflect on all of the wonderful conversations we've had during the past year.

For people who are new to Design Details, we hope this is a nice sample of some of the topics and people we were able to meet in 2017. And for long-time listeners, we hope that like us, you'll enjoy this opportunity to recap everything we talked about last year.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

Design Details on the Web:
]]>
Wed, 10 Jan 2018 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:24:57 Every year at this time we take a break and reflect on all of the wonderful conversations we've had during the past year. Every year at this time we take a break and reflect on all of the wonderful conversations we've had during the past year. no full 233
229: Graphic DeSpyner (feat. Christina Nguyen) 8ab4404f-0fef-42d4-9677-c34874a3792b http://designdetails.simplecast.fm/6b1f6508 Today we caught up with Christina Nguyen, a designer in San Francisco currently working on Guilded. In this episode we get nostalgic about video games, talk about balancing hobbies and work when they overlap, going from dream job to startup, and so much more. Today we caught up with Christina Nguyen, a designer in San Francisco currently working on Guilded. In this episode we get nostalgic about video games, talk about balancing hobbies and work when they overlap, going from dream job to startup, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

Sponsor:
  • Fuse - Build native apps on iOS and Android. Use the promo code 'dd' to save 70% off the professional plan!
Christina on the Web:
]]>
Wed, 03 Jan 2018 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:16:40 Today we caught up with Christina Nguyen, a designer in San Francisco currently working on Guilded. In this episode we get nostalgic about video games, talk about balancing hobbies and work when they overlap, going from dream job to startup, and so much more. Today we caught up with Christina Nguyen, a designer in San Francisco currently working on Guilded. In this episode we get nostalgic about video games, talk about balancing hobbies and work when they overlap, going from dream job to startup, and so much m no full 232
228: Empathy & Impostors (feat. Coleen Baik) f1a975fa-4b80-438d-a640-4ac8432b726e http://designdetails.simplecast.fm/901ecbb7 Today we caught up with Coleen Baik, an independent designer and advisor en route to NYC via SF. In this episode we talk about Coleen's path into design, her work at Twitter, the responsibilities of designing at scale, expanding perspectives by traveling to North Korea, and so much more. Today we caught up with Coleen Baik, an independent designer and advisor en route to NYC via SF. In this episode we talk about Coleen's path into design, her work at Twitter, the responsibilities of designing at scale, expanding perspectives by traveling to North Korea, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

Sponsors:
  • .design domains - porkbun is running a promotion on .design domain names - get your non-premium .design domain for $35 today, with promo code 'SPEC'
  • Figma - Figma is hiring designers, design advocates, and content writers to help them build the future of design tools.
Coleen on the Web:
  • Website
  • Twitter
  • Medium
  • Dribbble We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

Sponsors:
  • Fuse - Build native apps on iOS and Android. Use the promo code 'dd' to save 70% off the professional plan!
Coleen on the Web:
]]>
Wed, 27 Dec 2017 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:02:04 Today we caught up with Coleen Baik, an independent designer and advisor en route to NYC via SF. In this episode we talk about Coleen's path into design, her work at Twitter, the responsibilities of designing at scale, expanding perspectives by traveling to North Korea, and so much more. Today we caught up with Coleen Baik, an independent designer and advisor en route to NYC via SF. In this episode we talk about Coleen's path into design, her work at Twitter, the responsibilities of designing at scale, expanding perspectives by traveling no full 231
227: Hype Down (feat. Kathleen Warner) dafb892c-d807-4eac-b558-47b9c98c6132 http://designdetails.simplecast.fm/8b506099 Today we caught up with Kathleen Warner, a product designer working at Facebook on the newsfeed team. In this episode we dig into Kathleen's path from music to product design, music production, getting to Facebook, and so much more. Today we caught up with Kathleen Warner, a product designer working at Facebook on the newsfeed team. In this episode we dig into Kathleen's path from music to product design, music production, getting to Facebook, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

Sponsors:
  • .design domains - porkbun is running a promotion on .design domain names - get your non-premium .design domain for $35 today, with promo code 'SPEC'
  • Figma - Figma is hiring designers, design advocates, and content writers to help them build the future of design tools.
Kathleen on the Web:
]]>
Wed, 20 Dec 2017 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:14:09 Today we caught up with Kathleen Warner, a product designer working at Facebook on the newsfeed team. In this episode we dig into Kathleen's path from music to product design, music production, getting to Facebook, and so much more. Today we caught up with Kathleen Warner, a product designer working at Facebook on the newsfeed team. In this episode we dig into Kathleen's path from music to product design, music production, getting to Facebook, and so much more. no full 230
226: Mood Lightning (feat. Rafael Conde) 5ff21a8d-9a4a-4298-bba2-a35e54fe5fc8 http://designdetails.simplecast.fm/3fd0a219 Today we caught up with Rafael Conde, a designer at Netlify and co-host of the Layout podcast. In this episode we talk about our own existential crises, the paths of ICs and managers, Rafa's story and journey to design, and so much more. Today we caught up with Rafael Conde, a designer at Netlify and co-host of the Layout podcast. In this episode we talk about our own existential crises, the paths of ICs and managers, Rafa's story and journey to design, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

Sponsors:
  • Reaktor - Reaktor is hiring designers and product-minded people to come build exceptional products.
  • Figma - Figma is hiring designers, design advocates, and content writers to help them build the future of design tools.
Rafa on the Web:
]]>
Wed, 13 Dec 2017 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:12:34 Today we caught up with Rafael Conde, a designer at Netlify and co-host of the Layout podcast. In this episode we talk about our own existential crises, the paths of ICs and managers, Rafa's story and journey to design, and so much more. Today we caught up with Rafael Conde, a designer at Netlify and co-host of the Layout podcast. In this episode we talk about our own existential crises, the paths of ICs and managers, Rafa's story and journey to design, and so much more. no full 229
225: D.D.P.D. (feat. Zach Johnston) 349851c4-67ae-43bb-b8d5-eb3e4f316ab6 http://designdetails.simplecast.fm/33b89eb6 Today we caught up with Zach Johnston, a designer currently working on the design system at Dropbox. In this episode we talk about design systems, the role of a design system team, Zach's journey to and within Dropbox, and so much more. Today we caught up with Zach Johnston, a designer currently working on the design system at Dropbox. In this episode we talk about design systems, the role of a design system team, Zach's journey to and within Dropbox, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

Sponsors:
  • .design domains - porkbun is running a promotion on .design domain names - get your non-premium .design domain for $35 today, with promo code 'SPEC'
  • Fuse - Build native apps on iOS and Android. Use the promo code 'dd' to save 70% off the professional plan!
Zach on the Web:
]]>
Wed, 06 Dec 2017 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:14:07 Today we caught up with Zach Johnston, a designer currently working on the design system at Dropbox. In this episode we talk about design systems, the role of a design system team, Zach's journey to and within Dropbox, and so much more. Today we caught up with Zach Johnston, a designer currently working on the design system at Dropbox. In this episode we talk about design systems, the role of a design system team, Zach's journey to and within Dropbox, and so much more. no full 228
224: Maybe It's The Carrots? (feat. Courtland Allen) 268f36d5-3a20-44fa-be5a-40353774c495 http://designdetails.simplecast.fm/60ea9c64 Today we caught up with Courtland Allen, the creator of Indie Hackers. In this episode we dig into Courtland's background in engineering, design, and product building, how he ended up creating Indie Hackers, the journey to the Stripe acquisition, and so much more. Today we caught up with Courtland Allen, the creator of Indie Hackers. In this episode we dig into Courtland's background in engineering, design, and product building, how he ended up creating Indie Hackers, the journey to the Stripe acquisition, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

Sponsor:
  • .design - Porkbun is running a promotion on .design domain names - get your non-premium .design domain for $35 today, with promo code 'SPEC'
  • Fuse - Build native apps on iOS and Android. Use the promo code 'dd' to save 70% off the professional plan!
Courtland on the Web:
]]>
Wed, 29 Nov 2017 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:19:48 Today we caught up with Courtland Allen, the creator of Indie Hackers. In this episode we dig into Courtland's background in engineering, design, and product building, how he ended up creating Indie Hackers, the journey to the Stripe acquisition, and so much more. Today we caught up with Courtland Allen, the creator of Indie Hackers. In this episode we dig into Courtland's background in engineering, design, and product building, how he ended up creating Indie Hackers, the journey to the Stripe acquisition, and so m no full 227
223: Demystified Denim (feat. Jessica Karle) 0be94b0d-6def-4437-aeff-e7f26cd86fc1 http://designdetails.simplecast.fm/9501a1ed Today we caught up with Jess Karle, the head of digital design at Everlane. In this episode we dig into Jess's work at the intersection of retail and e-commerce, hiring a design team, navigating startups to big-co, and so much more. Today we caught up with Jess Karle, the head of digital design at Everlane. In this episode we dig into Jess's work at the intersection of retail and e-commerce, hiring a design team, navigating startups to big-co, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

Sponsor:
  • Figma - Figma is hiring product designers, a community manager, and a content writer. Join this team and build the future of design tools!
  • Fuse - Build native apps on iOS and Android. Use the promo code 'dd' to save 70% off the professional plan!
Jess on the Web:
]]>
Wed, 15 Nov 2017 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:13:36 Today we caught up with Jess Karle, the head of digital design at Everlane. In this episode we dig into Jess's work at the intersection of retail and e-commerce, hiring a design team, navigating startups to big-co, and so much more. Today we caught up with Jess Karle, the head of digital design at Everlane. In this episode we dig into Jess's work at the intersection of retail and e-commerce, hiring a design team, navigating startups to big-co, and so much more. no full 226
222: Almost as Good as Cheese (feat. Fiona Rolander) 1c59897f-5b7b-405b-8358-5332965debdf http://designdetails.simplecast.fm/35a677e2 Today we caught up with Fiona Rolander, a designer currently doing work at Spotify. In this episode we dig into Fiona's journey to becoming a designer, the ups and downs of freelancing, nomading, cheese, and so much more! Today we caught up with Fiona Rolander, a designer currently doing work at Spotify. In this episode we dig into Fiona's journey to becoming a designer, the ups and downs of freelancing, nomading, cheese, and so much more!

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

Sponsor:
  • Figma - Figma is hiring product designers, a community manager, and a content writer. Join this team and build the future of design tools!
  • Fuse - Build native apps on iOS and Android. Use the promo code 'dd' to save 70% off the professional plan!
Fiona on the Web:
]]>
Wed, 08 Nov 2017 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:09:45 Today we caught up with Fiona Rolander, a designer currently doing work at Spotify. In this episode we dig into Fiona's journey to becoming a designer, the ups and downs of freelancing, nomading, cheese, and so much more! Today we caught up with Fiona Rolander, a designer currently doing work at Spotify. In this episode we dig into Fiona's journey to becoming a designer, the ups and downs of freelancing, nomading, cheese, and so much more! no full 225
221: Rate The Fire (feat. Chikezie Ejiasi) 5ebcf70c-bbd5-4a75-b5f7-cf8be72388f8 http://designdetails.simplecast.fm/390fcdc1 Today we caught up with Chikezie Ejiasi, a designer currently working on Daydream at Google. In this episode we dig into building for VR, moving from softwared to hardware to virtual reality, design tooling, career navigation, and so much more. Today we caught up with Chikezie Ejiasi, a designer currently working on Daydream at Google. In this episode we dig into building for VR, moving from softwared to hardware to virtual reality, design tooling, career navigation, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

Sponsor:
  • Webflow - Webflow has launched Interactions 2.0! Now with features like parallax scrolling, sequenced and scroll-based animations, it's never been easier to build a responsive website without touching a line of code.
    • Fuse - Build native apps on iOS and Android. Use the promo code 'dd' to save 70% off the professional plan!
Chikezie on the Web:
]]>
Wed, 01 Nov 2017 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:12:03 Today we caught up with Chikezie Ejiasi, a designer currently working on Daydream at Google. In this episode we dig into building for VR, moving from softwared to hardware to virtual reality, design tooling, career navigation, and so much more. Today we caught up with Chikezie Ejiasi, a designer currently working on Daydream at Google. In this episode we dig into building for VR, moving from softwared to hardware to virtual reality, design tooling, career navigation, and so much more. no full 224
220: Turtle Tiles (feat. Melody Quintana) 182cc6b1-4e48-4ec7-a2f3-7f3b82e7dcf9 http://designdetails.simplecast.fm/cf0841f7 Today we caught up with Melody Quintana, a designer and writer currently working at Dropbox. In this episode we dive into Melody's work on Dropbox Home, moving from content strategy to design, finding the Goldilocks company size, and so much more. Today we caught up with Melody Quintana, a designer and writer currently working at Dropbox. In this episode we dive into Melody's work on Dropbox Home, moving from content strategy to design, finding the Goldilocks company size, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

Sponsor:
  • Webflow - Webflow has launched Interactions 2.0! Now with features like parallax scrolling, sequenced and scroll-based animations, it's never been easier to build a responsive website without touching a line of code.
  • Figma - Figma is hiring product designers, a community manager, and a content writer. Join this team and build the future of design tools!
Melody on the Web:
]]>
Wed, 25 Oct 2017 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:04:28 Today we caught up with Melody Quintana, a designer and writer currently working at Dropbox. In this episode we dive into Melody's work on Dropbox Home, moving from content strategy to design, finding the Goldilocks company size, and so much more. Today we caught up with Melody Quintana, a designer and writer currently working at Dropbox. In this episode we dive into Melody's work on Dropbox Home, moving from content strategy to design, finding the Goldilocks company size, and so much more. no full 223
219: Artisanal Iceman (feat. Patrick Wong) a9dd432f-5a5e-49c5-9e6a-e81c48b49248 http://designdetails.simplecast.fm/08875161 Today we caught up with Patrick Wong, a design manager currently working at Lyft. In this episode we dig into Patricks journey into design, transitioning into management, preserving culture as a design team scales, working with design systems, and so much more. Today we caught up with Patrick Wong, a design manager currently working at Lyft. In this episode we dig into Patricks journey into design, transitioning into management, preserving culture as a design team scales, working with design systems, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

Sponsor:
  • Webflow - Webflow is gearing up to launch Interactions 2.0 which adds features like parallax scrolling, sequenced and scroll-based animations, and much more.
  • Figma - Figma is hiring product designers, a community manager, and a content writer. Join this team and build the future of design tools!
Patrick on the Web:
]]>
Wed, 18 Oct 2017 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:09:02 Today we caught up with Patrick Wong, a design manager currently working at Lyft. In this episode we dig into Patricks journey into design, transitioning into management, preserving culture as a design team scales, working with design systems, and so much more. Today we caught up with Patrick Wong, a design manager currently working at Lyft. In this episode we dig into Patricks journey into design, transitioning into management, preserving culture as a design team scales, working with design systems, and so much no full 222
218: How Dutch Can I Go? (feat. Owen Williams) d436ccc2-9ad3-4628-8813-9e89d366efa0 http://designdetails.simplecast.fm/eeb6c1a3 Today we caught up with Owen Williams, a writer, developer, marketer, and most recently, full-time freelancer. In this episode we dig into building side projects with profitability in mind, making the leap to freelancing, being a generalist, and so much more. Today we caught up with Owen Williams, a writer, developer, marketer, and most recently, full-time freelancer. In this episode we dig into building side projects with profitability in mind, making the leap to freelancing, being a generalist, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

Sponsor:
  • Fuse - Build native apps on iOS and Android. Simpler. Faster. Use the discount code 'dd' to save 70% on Fuse Professional.
Owen on the Web:
]]>
Wed, 04 Oct 2017 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:17:46 Today we caught up with Owen Williams, a writer, developer, marketer, and most recently, full-time freelancer. In this episode we dig into building side projects with profitability in mind, making the leap to freelancing, being a generalist, and so much more. Today we caught up with Owen Williams, a writer, developer, marketer, and most recently, full-time freelancer. In this episode we dig into building side projects with profitability in mind, making the leap to freelancing, being a generalist, and so much m no full 221
217: Mystery Lifestyle (feat. Tyler Thompson) 00aa9105-4329-4798-9693-bafdecb4ccee http://designdetails.simplecast.fm/6d49cf37 Today we caught up with Tyler Thompson, a designer and artist currently working at Stripe in San Francisco. In this episode we dig into Tyler's background as an artist, creative direction, job titles, escaping tech, and so much more. Today we caught up with Tyler Thompson, a designer and artist currently working at Stripe in San Francisco. In this episode we dig into Tyler's background as an artist, creative direction, job titles, escaping tech, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

Tyler on the Web:
]]>
Wed, 27 Sep 2017 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:13:51 Today we caught up with Tyler Thompson, a designer and artist currently working at Stripe in San Francisco. In this episode we dig into Tyler's background as an artist, creative direction, job titles, escaping tech, and so much more. Today we caught up with Tyler Thompson, a designer and artist currently working at Stripe in San Francisco. In this episode we dig into Tyler's background as an artist, creative direction, job titles, escaping tech, and so much more. no full 220
216: Topo Geeko (feat. John Rodriguez) 05a7f85d-6195-4719-8882-a5667188fee1 http://designdetails.simplecast.fm/405a549d Today we caught up with John Rodriguez, aka J-Ro, a brand and marketing strategist currently working at Stage Two. In this episode we dig into the world of building hardware, brand and product marketing, working with early stage startups, and so much more. Today we caught up with John Rodriguez, aka J-Ro, a brand and marketing strategist currently working at Stage Two. In this episode we dig into the world of building hardware, brand and product marketing, working with early stage startups, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

J-Ro on the Web:
]]>
Wed, 20 Sep 2017 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:03:13 Today we caught up with John Rodriguez, aka J-Ro, a brand and marketing strategist currently working at Stage Two. In this episode we dig into the world of building hardware, brand and product marketing, working with early stage startups, and so much more. Today we caught up with John Rodriguez, aka J-Ro, a brand and marketing strategist currently working at Stage Two. In this episode we dig into the world of building hardware, brand and product marketing, working with early stage startups, and so much more no full 219
215: Shared Coolness Mood Board (feat. Salih Abdul-Karim) d9d112ca-0127-4190-ad89-1314f5707d58 http://designdetails.simplecast.fm/31c920da Today we caught up with Salih Abdul-Karim, an experience and motion designer at AirBnb and a member of the team that created Lottie, an open source tool to easily add animations to native apps. In this episode we dig into Salih's journey into motion design, moving from NYC to SF, freelancing versus big co work, and so much more. Today we caught up with Salih Abdul-Karim, an experience and motion designer at AirBnb and a member of the team that created Lottie, an open source tool to easily add animations to native apps. In this episode we dig into Salih's journey into motion design, moving from NYC to SF, freelancing versus big co work, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

Sponsor:
  • Fuse - Build native apps on iOS and Android. Simpler. Faster. Use the discount code 'designdetails' to save 50% on Fuse Professional.
Salih on the Web:
]]>
Wed, 13 Sep 2017 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:02:53 Today we caught up with Salih Abdul-Karim, an experience and motion designer at AirBnb and a member of the team that created Lottie, an open source tool to easily add animations to native apps. In this episode we dig into Salih's journey into motion design, moving from NYC to SF, freelancing versus big co work, and so much more. Today we caught up with Salih Abdul-Karim, an experience and motion designer at AirBnb and a member of the team that created Lottie, an open source tool to easily add animations to native apps. In this episode we dig into Salih's journey into motion desig no full 218
214: Hot Weather Hugs (feat. Greyson MacAlpine) 4745f10e-9eed-40ed-b6d8-ed2ef21c7add http://designdetails.simplecast.fm/e43b2f70 Today we caught up with Greyson MacAlpine, a freelance designer currently working on Wild & Grey, a new creative studio. In this episode we dig into growing up, changing career paths, Greyson's road to design, and so much more. Today we caught up with Greyson MacAlpine, a freelance designer currently working on Wild & Grey, a new creative studio. In this episode we dig into growing up, changing career paths, Greyson's road to design, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

Sponsor:
  • Fuse - Build native apps on iOS and Android. Simpler. Faster. Use the discount code 'designdetails' to save 50% on Fuse Professional.
Greyson on the Web:

Thanks To Today's Sponsor: Fuse

Fuse is making app development faster, easier and more fun for both developers and designers, and it's completely FREE for individual users, but if you're a part of a company and want a plan they're giving Design Details listeners 50% off the retail price of Fuse Professional for 12 months after having been redeemed.

Check them out at Fusetools.com and if you want that discount just use "designdetails" at checkout.

]]>
Wed, 06 Sep 2017 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:11:58 Today we caught up with Greyson MacAlpine, a freelance designer currently working on Wild & Grey, a new creative studio. In this episode we dig into growing up, changing career paths, Greyson's road to design, and so much more. Today we caught up with Greyson MacAlpine, a freelance designer currently working on Wild & Grey, a new creative studio. In this episode we dig into growing up, changing career paths, Greyson's road to design, and so much more. no full 217
213: 5,000 Horsepower (feat. Will Peng) 3819a3b6-f1f8-4993-86c2-7e0e4e5115f8 http://designdetails.simplecast.fm/580fd692 Today we caught up with Will Peng, a designer, investor, and co-founder of a new startup, Northstar. In this episode we talk about building a company, transitioning from design to VC, making the leap out of VC, and so much more. Today we caught up with Will Peng, a designer, investor, and co-founder of a new startup, Northstar. In this episode we talk about building a company, transitioning from design to VC, making the leap out of VC, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

Will on the Web:
]]>
Wed, 30 Aug 2017 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:11:09 Today we caught up with Will Peng, a designer, investor, and co-founder of a new startup, Northstar. In this episode we talk about building a company, transitioning from design to VC, making the leap out of VC, and so much more. Today we caught up with Will Peng, a designer, investor, and co-founder of a new startup, Northstar. In this episode we talk about building a company, transitioning from design to VC, making the leap out of VC, and so much more. no full 216
212: Extreme Portfolio Makeover (feat. Conway Anderson) d09d382b-e97e-4fa5-9c6a-8b7cb7a1c603 http://designdetails.simplecast.fm/3ddd1d51 Today we caught up with Conway Anderson, a designer and developer currently working on connecting designers and opportunities with a new, unreleased product. In this episode we dig into Conway's beginnings, finding design, hiring and getting hired, faking it, and so much more. Today we caught up with Conway Anderson, a designer and developer currently working on connecting designers and opportunities with a new, unreleased product. In this episode we dig into Conway's beginnings, finding design, hiring and getting hired, faking it, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

Sponsor:
  • Abstract - Abstract is a platform for modern design teams to work together. Join now to try Abstract free for one month.
Conway on the Web:
]]>
Wed, 23 Aug 2017 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:17:34 Today we caught up with Conway Anderson, a designer and developer currently working on connecting designers and opportunities with a new, unreleased product. In this episode we dig into Conway's beginnings, finding design, hiring and getting hired, faking it, and so much more. Today we caught up with Conway Anderson, a designer and developer currently working on connecting designers and opportunities with a new, unreleased product. In this episode we dig into Conway's beginnings, finding design, hiring and getting hired, faking no full 215
211: Sunshine In A Bag (feat. Mercedes Bazan) f00c1e9a-5113-401e-9c74-cd60a4aa27c1 http://designdetails.simplecast.fm/1776b01e Today we caught up with Mercedes Bazan, a designer at Stripe by way of Argentina. In this episode we dig into Mechi's background, her journey into design, moving to the US, designing for print inside a high tech company, and so much more. Today we caught up with Mercedes Bazan, a designer at Stripe by way of Argentina. In this episode we dig into Mechi's background, her journey into design, moving to the US, designing for print inside a high tech company, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

Sponsor:
  • Abstract - Abstract is a platform for modern design teams to work together. Join now to try Abstract free for one month.
Mercedes on the Web:
]]>
Wed, 16 Aug 2017 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:01:07 Today we caught up with Mercedes Bazan, a designer at Stripe by way of Argentina. In this episode we dig into Mechi's background, her journey into design, moving to the US, designing for print inside a high tech company, and so much more. Today we caught up with Mercedes Bazan, a designer at Stripe by way of Argentina. In this episode we dig into Mechi's background, her journey into design, moving to the US, designing for print inside a high tech company, and so much more. no full 214
210: Did I Write This? (feat. Jules Forrest) 4a68519d-ebc5-4f13-bb75-2f5a6892e9e7 http://designdetails.simplecast.fm/213 Today we caught up with Jules Forrest, a product designer making her way to Credit Karma by way of Sequoia, Medium, Optimizely, and more. In this episode we dig into Jules' background, building and launching side projects, discovering design systems, and so much more. Today we caught up with Jules Forrest, a product designer making her way to Credit Karma by way of Sequoia, Medium, Optimizely, and more. In this episode we dig into Jules' background, building and launching side projects, discovering design systems, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

Sponsor:
  • Shopify - Shopify is hiring designers, content strategists, researchers, and UX leads!
  • Abstract - Abstract is a platform for modern design teams to work together. Join now to try Abstract free for one month.
Jules on the Web:
]]>
Wed, 09 Aug 2017 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:03:58 Today we caught up with Jules Forrest, a product designer making her way to Credit Karma by way of Sequoia, Medium, Optimizely, and more. In this episode we dig into Jules' background, building and launching side projects, discovering design systems, and so much more. Today we caught up with Jules Forrest, a product designer making her way to Credit Karma by way of Sequoia, Medium, Optimizely, and more. In this episode we dig into Jules' background, building and launching side projects, discovering design systems, and no full 213
209: Charmander++ (feat. Brian Lovin & Bryn Jackson) c76416c9-18fb-43c5-bbb2-8a4a3ce6eed9 http://designdetails.simplecast.fm/212 This week we caught up with...us. Over the last two and a half years people have asked us questions about our own backgrounds, our journeys into design, starting side projects, building companies, how we manage working with each other so much, and more. So today we spent a while talking it through - we hope you enjoy listening! This week we caught up with...us. Over the last two and a half years people have asked us questions about our own backgrounds, our journeys into design, starting side projects, building companies, how we manage working with each other so much, and more. So today we spent a while talking it through - we hope you enjoy listening!

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

Sponsors:
  • Shopify - Shopify is hiring designers, content strategists, researchers, and UX leads!
  • Abstract - Abstract is a platform for modern design teams to work together. Join now to try Abstract free for one month.
]]>
Wed, 02 Aug 2017 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:38:28 This week we caught up with...us. Over the last two and a half years people have asked us questions about our own backgrounds, our journeys into design, starting side projects, building companies, how we manage working with each other so much, and more. So today we spent a while talking it through - we hope you enjoy listening! This week we caught up with...us. Over the last two and a half years people have asked us questions about our own backgrounds, our journeys into design, starting side projects, building companies, how we manage working with each other so much, and more. S no full 212
208: Say More Things (feat. Josh Brewer) dac84af3-1163-4037-801c-9d37e77d4414 http://designdetails.simplecast.fm/211 Today we caught up with Josh Brewer, the co-founder and CEO at Abstract, previously a principal designer at Twitter. In this episode we dig into the design tools ecosystem, how to launch a startup, social responsibility in product design, and so much more. Today we caught up with Josh Brewer, the co-founder and CEO at Abstract, previously a principal designer at Twitter. In this episode we dig into the design tools ecosystem, how to launch a startup, social responsibility in product design, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

Sponsor:
  • Shopify - Shopify is hiring designers, content strategists, researchers, and UX leads!
Josh on the web:
]]>
Wed, 26 Jul 2017 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:06:31 Today we caught up with Josh Brewer, the co-founder and CEO at Abstract, previously a principal designer at Twitter. In this episode we dig into the design tools ecosystem, how to launch a startup, social responsibility in product design, and so much more. Today we caught up with Josh Brewer, the co-founder and CEO at Abstract, previously a principal designer at Twitter. In this episode we dig into the design tools ecosystem, how to launch a startup, social responsibility in product design, and so much more no full 211
207: Livin' The Target Life (feat. Alex Estrada) f8fac4f5-2a44-4cf2-a34e-5f1a42ef7b48 http://designdetails.simplecast.fm/210 Today we caught up with Alex Estrada, a product designer living in Salt Lake City, currently working at Jane.com. In this episode we dig into Alex's background in design, navigating startup highs and lows, moving to new cities, building teams, and so much more. Today we caught up with Alex Estrada, a product designer living in Salt Lake City, currently working at Jane.com. In this episode we dig into Alex's background in design, navigating startup highs and lows, moving to new cities, building teams, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

Sponsor:
  • Shopify - Shopify is hiring designers, content strategists, researchers, and UX leads!
  • Readydesk - The standing desk for perfect posture. Use the coupon code 'DESIGN' to save $10!
Alex on the web:
]]>
Wed, 19 Jul 2017 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:15:15 Today we caught up with Alex Estrada, a product designer living in Salt Lake City, currently working at Jane.com. In this episode we dig into Alex's background in design, navigating startup highs and lows, moving to new cities, building teams, and so much more. Today we caught up with Alex Estrada, a product designer living in Salt Lake City, currently working at Jane.com. In this episode we dig into Alex's background in design, navigating startup highs and lows, moving to new cities, building teams, and so much no full 210
206: Aspirational Open Mindedness (feat. Mills Baker) 600c5245-6925-4618-888c-17cfcda8c48a http://designdetails.simplecast.fm/209 Today we caught up with Mills Baker, a Design Manager at Quora, and previously a Product Designer at Facebook. In this extra-long episode, we dug into Mills' background, life in New Orleans, social mechanics, epistemology, and much more. Today we caught up with Mills Baker, a Design Manager at Quora, and previously a Product Designer at Facebook. In this extra-long episode, we dug into Mills' background, life in New Orleans, social mechanics, epistemology, and much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the SpecFM community, and share feedback in our Spectrum bug report channel!

Sponsor:
  • Shopify - Shopify is hiring designers, content strategists, researchers, and UX leads!
  • Readydesk - The standing desk for perfect posture. Use the coupon code 'DESIGN' to save $10!
Mills on the web:
]]>
Wed, 12 Jul 2017 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:46:28 Today we caught up with Mills Baker, a Design Manager at Quora, and previously a Product Designer at Facebook. In this extra-long episode, we dug into Mills' background, life in New Orleans, social mechanics, epistemology, and much more. Today we caught up with Mills Baker, a Design Manager at Quora, and previously a Product Designer at Facebook. In this extra-long episode, we dug into Mills' background, life in New Orleans, social mechanics, epistemology, and much more. no full 209
205: New York Calls (feat. Robyn Kanner) cba62e12-6880-4375-9d3f-076885035047 http://designdetails.simplecast.fm/208 Today we caught up with Robyn Kanner, currently designing products at Etsy, co-founded MyTransHealth, and was previously an art director at Amazon (among other amazing roles). In this episode we dug into Robyn's background, her journey into the design field, escaping small towns, building MyTransHealth, and so much more. Today we caught up with Robyn Kanner, currently designing products at Etsy, co-founded MyTransHealth, and was previously an art director at Amazon (among other amazing roles). In this episode we dug into Robyn's background, her journey into the design field, escaping small towns, building MyTransHealth, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the Design Details frequency, and share feedback in hugs-n-bugs!

Sponsor:
  • Shopify - Shopify is hiring designers, content strategists, researchers, and UX leads!
  • Readydesk - The standing desk for perfect posture. Use the coupon code 'DESIGN' to save $10!
Robyn on the web:
]]>
Wed, 05 Jul 2017 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:13:16 Today we caught up with Robyn Kanner, currently designing products at Etsy, co-founded MyTransHealth, and was previously an art director at Amazon (among other amazing roles). In this episode we dug into Robyn's background, her journey into the design field, escaping small towns, building MyTransHealth, and so much more. Today we caught up with Robyn Kanner, currently designing products at Etsy, co-founded MyTransHealth, and was previously an art director at Amazon (among other amazing roles). In this episode we dug into Robyn's background, her journey into the design fie no full 208
204: Happy Online Darkness (feat. Morgane Santos) 66d86f7c-1e5e-457a-88f1-8190f1e6b75b http://designdetails.simplecast.fm/207 Today we caught up with Morgane Santos, a designer, developer and artist currently designing experiences at thoughtbot. In this episode we dig into Morgane's background, building games, learning VR and 3D, transitioning from programming to design, and so much more. Today we caught up with Morgane Santos, a designer, developer and artist currently designing experiences at thoughtbot. In this episode we dig into Morgane's background, building games, learning VR and 3D, transitioning from programming to design, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the Design Details frequency, and share feedback in hugs-n-bugs!

Sponsor:
  • Fuse - Build native apps on iOS and Android. Simpler. Faster. Use the discount code 'designdetails' to save 50% on Fuse Professional.
Morgane on the web:
]]>
Wed, 28 Jun 2017 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:03:35 Today we caught up with Morgane Santos, a designer, developer and artist currently designing experiences at thoughtbot. In this episode we dig into Morgane's background, building games, learning VR and 3D, transitioning from programming to design, and so much more. Today we caught up with Morgane Santos, a designer, developer and artist currently designing experiences at thoughtbot. In this episode we dig into Morgane's background, building games, learning VR and 3D, transitioning from programming to design, and so no full 207
203: Pool Pod Improv (feat. Chantal Jandard) 5d12b2e6-8f74-4ad7-941b-637c8072e27f http://designdetails.simplecast.fm/206 Today we caught up with Chantal Jandard, a designer currently building products at PlanGrid. In this episode we dig into Chantal's background, building a portfolio, learning how to interview, and...improv! Today we caught up with Chantal Jandard, a designer currently building products at PlanGrid. In this episode we dig into Chantal's background, building a portfolio, learning how to interview, and...improv!

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the Design Details frequency, and share feedback in hugs-n-bugs!

Sponsor:
  • Fuse - Build native apps on iOS and Android. Simpler. Faster. Use the discount code 'designdetails' to save 50% on Fuse Professional.
  • Figma - Turn Ideas into Products Faster. Figma is hiring a design advocate and design writer.
Chantal on the web:
]]>
Wed, 21 Jun 2017 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:11:42 Today we caught up with Chantal Jandard, a designer currently building products at PlanGrid. In this episode we dig into Chantal's background, building a portfolio, learning how to interview, and...improv! Today we caught up with Chantal Jandard, a designer currently building products at PlanGrid. In this episode we dig into Chantal's background, building a portfolio, learning how to interview, and...improv! no full 206
202: Botpito (feat. Diogenes Brito) 70e4d688-f779-4d0d-a4ef-c61ea63ffd6b http://designdetails.simplecast.fm/205 Today we caught up with Diogenes Brito, a product designer at Slack who previously worked on LinkedIn and SquareSpace. In this episode we dig into Dio's background in design, navigating university, being a designer-y engineer, and so much more. Today we caught up with Diogenes Brito, a product designer at Slack who previously worked on LinkedIn and SquareSpace. In this episode we dig into Dio's background in design, navigating university, being a designer-y engineer, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the Design Details frequency, and share feedback in hugs-n-bugs!

Sponsor:
  • Fuse - Build native apps on iOS and Android. Simpler. Faster. Use the discount code 'designdetails' to save 50% on Fuse Professional.
  • Figma - Turn Ideas into Products Faster. Figma is hiring a design advocate and design writer.
  • Vectors Conference - Join the community for the upcoming conference in San Francisco on July 15th.
Dio on the web:
]]>
Wed, 14 Jun 2017 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:28:53 Today we caught up with Diogenes Brito, a product designer at Slack who previously worked on LinkedIn and SquareSpace. In this episode we dig into Dio's background in design, navigating university, being a designer-y engineer, and so much more. Today we caught up with Diogenes Brito, a product designer at Slack who previously worked on LinkedIn and SquareSpace. In this episode we dig into Dio's background in design, navigating university, being a designer-y engineer, and so much more. no full 205
201: Thrown Under the Self Driving Bus (feat. Max Schoening) ac33a831-13b9-4056-9918-92d40d58cb86 http://designdetails.simplecast.fm/204 Today we caught up with Max Schoening, a designer, developer and product manager currently working at Google. In this episode we dig into Max's background in the field, building and selling startups, going serverless, the challenges of PMing, and so much more. Today we caught up with Max Schoening, a designer, developer and product manager currently working at Google. In this episode we dig into Max's background in the field, building and selling startups, going serverless, the challenges of PMing, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the Design Details frequency, and share feedback in hugs-n-bugs!

Sponsor:
  • Fuse - Build native apps on iOS and Android. Simpler. Faster. Use the discount code 'designdetails' to save 50% on Fuse Professional.
  • Figma - Turn Ideas into Products Faster. Figma is hiring a design advocate and design writer.
  • Vectors Conference - Join the community for the upcoming conference in San Francisco on July 15th.
Max on the web:
]]>
Wed, 07 Jun 2017 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:35:08 Today we caught up with Max Schoening, a designer, developer and product manager currently working at Google. In this episode we dig into Max's background in the field, building and selling startups, going serverless, the challenges of PMing, and so much more. Today we caught up with Max Schoening, a designer, developer and product manager currently working at Google. In this episode we dig into Max's background in the field, building and selling startups, going serverless, the challenges of PMing, and so much no full 204
200: Karate Chop Feels (feat. Josh Williams) 83adeecc-3367-4ad5-bca0-09fdd315ee4f http://designdetails.simplecast.fm/203 We made it to episode 200! Today we caught up with Josh Williams, a designer currently doing independent work, who is best known for previously co-founding Gowalla and designing at Facebook. In this episode we dig into identity in the startup industry, building and selling a company, modern day inspiration, putting out fires, and so much more. We made it to episode 200! Today we caught up with Josh Williams, a designer currently doing independent work, who is best known for previously co-founding Gowalla and designing at Facebook. In this episode we dig into identity in the startup industry, building and selling a company, modern day inspiration, putting out fires, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the Design Details frequency, and share feedback in ~hugs-n-bugs!

Sponsor:
  • Fuse - Build native apps on iOS and Android. Simpler. Faster. Use the discount code 'designdetails' to save 50% on Fuse Professional.
  • Figma - Turn Ideas into Products Faster. Figma is hiring a design advocate and design writer.
  • Vectors Conference - Get on the waitlist for the conference on June 15th in San Francisco.
Josh on the web:
Show notes:
]]>
Wed, 31 May 2017 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:30:24 We made it to episode 200! Today we caught up with Josh Williams, a designer currently doing independent work, who is best known for previously co-founding Gowalla and designing at Facebook. In this episode we dig into identity in the startup industry, building and selling a company, modern day inspiration, putting out fires, and so much more. We made it to episode 200! Today we caught up with Josh Williams, a designer currently doing independent work, who is best known for previously co-founding Gowalla and designing at Facebook. In this episode we dig into identity in the startup industry, bu no full 203
199: The Ballad of Computer Boy (feat. Judson Collier) 3ccaf6cb-21ea-4839-941d-d961cae40861 http://designdetails.simplecast.fm/202 Today we caught up with Judson Collier, a designer working at the brand design studio at Intercom. In this episode we dig into Judson's background, finding a team, being a freelancer, the merits of kale pizza, and so much more. Today we caught up with Judson Collier, a designer working at the brand design studio at Intercom. In this episode we dig into Judson's background, finding a team, being a freelancer, the merits of kale pizza, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the Design Details frequency, and share feedback in ~hugs-n-bugs!

Sponsor:
  • Fuse - Build native apps on iOS and Android. Simpler. Faster.
Judson on the web:
Show notes:
]]>
Wed, 24 May 2017 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:15:15 Today we caught up with Judson Collier, a designer working at the brand design studio at Intercom. In this episode we dig into Judson's background, finding a team, being a freelancer, the merits of kale pizza, and so much more. Today we caught up with Judson Collier, a designer working at the brand design studio at Intercom. In this episode we dig into Judson's background, finding a team, being a freelancer, the merits of kale pizza, and so much more. no full 202
198: Berry Ink For Bears (feat. Janum Trivedi) 2ae24643-52f1-495f-af97-0d3777d079f1 http://designdetails.simplecast.fm/201 Today we caught up with Janum Trivedi, a designer and developer currently interning at Apple. In this show we dig deep on internships, side projects, the state of the web, dependency trees, Dungeons and Dragons, and so much more. Today we caught up with Janum Trivedi, a designer and developer currently interning at Apple. In this show we dig deep on internships, side projects, the state of the web, dependency trees, Dungeons and Dragons, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the Design Details frequency, and share feedback in ~hugs-n-bugs!

Sponsor:
  • Fuse - Build native apps on iOS and Android. Simpler. Faster.
Janum on the web:
Show Notes:
]]>
Wed, 17 May 2017 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:23:36 Today we caught up with Janum Trivedi, a designer and developer currently interning at Apple. In this show we dig deep on internships, side projects, the state of the web, dependency trees, Dungeons and Dragons, and so much more. Today we caught up with Janum Trivedi, a designer and developer currently interning at Apple. In this show we dig deep on internships, side projects, the state of the web, dependency trees, Dungeons and Dragons, and so much more. no full 201
197: Chillaphobia (feat. Rachel Been) a2a8a0e7-2b04-47d0-b922-0f30c309d638 http://designdetails.simplecast.fm/200 Today we caught up with Rachel Been, a creative director at Google working on the Material Design team. In this episode we dig deep into building design systems, creative and art direction, international empathy, machine learning in design, and so much more. Today we caught up with Rachel Been, a creative director at Google working on the Material Design team. In this episode we dig deep into building design systems, creative and art direction, international empathy, machine learning in design, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the Design Details frequency, and share feedback in ~hugs-n-bugs!

Sponsor:
  • Fuse - Build native apps on iOS and Android. Simpler. Faster.
Rachel on the web:
Show Notes:
]]>
Wed, 10 May 2017 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:11:01 Today we caught up with Rachel Been, a creative director at Google working on the Material Design team. In this episode we dig deep into building design systems, creative and art direction, international empathy, machine learning in design, and so much more. Today we caught up with Rachel Been, a creative director at Google working on the Material Design team. In this episode we dig deep into building design systems, creative and art direction, international empathy, machine learning in design, and so much mo no full 200
196: What is Button? (feat. Rafael Conde & Kevin Clark) f2f0cd3b-409f-46a8-bd6d-ff94fb3c8d13 http://designdetails.simplecast.fm/199 In today's episode we caught up with our fellow Spec podcasters and designers, Rafael Conde and Kevin Clark, to talk about podcasting, side projects, building design systems, design obsession, and so much more. In today's episode we caught up with our fellow Spec podcasters and designers, Rafael Conde and Kevin Clark, to talk about podcasting, side projects, building design systems, design obsession, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the Design Details frequency, and share feedback in ~hugs-n-bugs!

Sponsor:
  • Fuse - Build native apps on iOS and Android. Simpler. Faster.
Rafael on the Web:
Kevin on the Web:
Show Notes:
]]>
Wed, 03 May 2017 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:23:47 In today's episode we caught up with our fellow Spec podcasters and designers, Rafael Conde and Kevin Clark, to talk about podcasting, side projects, building design systems, design obsession, and so much more. In today's episode we caught up with our fellow Spec podcasters and designers, Rafael Conde and Kevin Clark, to talk about podcasting, side projects, building design systems, design obsession, and so much more. no full 199
195: Weird Old Grandma (feat. Helen Tran) 5f1f8d47-a331-496d-819b-a5c8ba5e7c7a http://designdetails.simplecast.fm/198 Today we caught up with Helen Tran, a design lead at Shopify, writer, and explorer. In this episode we dig into Helen's background, finding motivation, design management, bodybuilding, being interesting, and so much more. Today we caught up with Helen Tran, a design lead at Shopify, writer, and explorer. In this episode we dig into Helen's background, finding motivation, design management, bodybuilding, being interesting, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the Design Details frequency, and share feedback in ~hugs-n-bugs!

Sponsor:
  • Fuse - Build native apps on iOS and Android. Simpler. Faster.
Helen on the Web:
Show Notes:
]]>
Wed, 26 Apr 2017 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:17:44 Today we caught up with Helen Tran, a design lead at Shopify, writer, and explorer. In this episode we dig into Helen's background, finding motivation, design management, bodybuilding, being interesting, and so much more. Today we caught up with Helen Tran, a design lead at Shopify, writer, and explorer. In this episode we dig into Helen's background, finding motivation, design management, bodybuilding, being interesting, and so much more. no full 198
194: That's So Hot Topic (feat. Kevin Smith) 0aaed780-0751-4b0e-8d4f-85b50f1c91fb http://designdetails.simplecast.fm/197 Today we caught up with Kevin Smith, co-founder and CTO at Abstract. In this episode we dig into Kevin's origins, the state of design tools and design workflows, focus and productivity, and so much more. Today we caught up with Kevin Smith, co-founder and CTO at Abstract. In this episode we dig into Kevin's origins, the state of design tools and design workflows, focus and productivity, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the Design Details frequency, and share feedback in ~hugs-n-bugs!

Sponsor:

We're looking for sponsors! If you or your team are hiring, launching a new product, or just want to get your message out to designers around the world, reach out to us through our sponsors page

Kevin on the Web:
Show Notes:
]]>
Wed, 19 Apr 2017 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:09:16 Today we caught up with Kevin Smith, co-founder and CTO at Abstract. In this episode we dig into Kevin's origins, the state of design tools and design workflows, focus and productivity, and so much more. Today we caught up with Kevin Smith, co-founder and CTO at Abstract. In this episode we dig into Kevin's origins, the state of design tools and design workflows, focus and productivity, and so much more. no full 197
193: Puppy Bears (feat. Laura Helen Winn) 307c16e4-d989-40b6-b3ba-2396ee7ad836 http://designdetails.simplecast.fm/196 Today we caught up with Laura Helen Winn, an independent designer and photographer in San Francisco. In this show we dig into Laura's background, planning life, self employment, overwork, happiness and listening, and so much more. Today we caught up with Laura Helen Winn, an independent designer and photographer in San Francisco. In this show we dig into Laura's background, planning life, self employment, overwork, happiness and listening, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the Design Details frequency, and share feedback in ~hugs-n-bugs!

Sponsor:
  • Flow - Simple project management for designers. Save 20% when you sign up for a monthly trial, and save 30% when you start the annual trial!
Laura on the Web:
Show Notes:
]]>
Wed, 12 Apr 2017 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:17:42 Today we caught up with Laura Helen Winn, an independent designer and photographer in San Francisco. In this show we dig into Laura's background, planning life, self employment, overwork, happiness and listening, and so much more. Today we caught up with Laura Helen Winn, an independent designer and photographer in San Francisco. In this show we dig into Laura's background, planning life, self employment, overwork, happiness and listening, and so much more. no full 196
192: One Stuff At A Time (feat. Joel Califa) e434fc69-4260-40b6-a48d-4ef890023a18 http://designdetails.simplecast.fm/195 Today we caught up with Joel Califa, a design manager at Digital Ocean. In this episode we discuss the state of design Twitter, design quality and process, managing up, hiring designers, rethinking empathy, and so much more. Today we caught up with Joel Califa, a design manager at Digital Ocean. In this episode we discuss the state of design Twitter, design quality and process, managing up, hiring designers, rethinking empathy, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the Design Details frequency, and share feedback in ~hugs-n-bugs!

Sponsor:
  • Flow - Simple project management for designers. Save 20% when you sign up for a monthly trial, and save 30% when you start the annual trial!
Joel on the Web:
Show Notes:
]]>
Wed, 05 Apr 2017 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:28:49 Today we caught up with Joel Califa, a design manager at Digital Ocean. In this episode we discuss the state of design Twitter, design quality and process, managing up, hiring designers, rethinking empathy, and so much more. Today we caught up with Joel Califa, a design manager at Digital Ocean. In this episode we discuss the state of design Twitter, design quality and process, managing up, hiring designers, rethinking empathy, and so much more. no full 195
191: Triangle of Passions (feat. Will Newton) 2025fdfd-7141-48aa-8fb8-59d1ff828559 http://designdetails.simplecast.fm/194 Today we sat down with Will Newton, a product designer at Gusto who previously worked on Crossfader. In this episode we dig into Will's upcoming April Fools hijinks, his journey to San Francisco, finding balance in self-improvement, the triangle of passions, and so much more. Today we sat down with Will Newton, a product designer at Gusto who previously worked on Crossfader. In this episode we dig into Will's upcoming April Fools hijinks, his journey to San Francisco, finding balance in self-improvement, the triangle of passions, and so much more.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for the community to hang out and share what's going on in design, development, and anything else you might be interested in.

We're still in beta, so expect bugs and lots of improvements over the next few weeks, but in the meantime we'd love to hang out with you and chat!

Sign up at Spectrum.chat, join the Design Details frequency, and share feedback in ~hugs-n-bugs!

Sponsor:
  • Flow - Simple project management for designers. Save 20% when you sign up for a monthly trial, and save 30% when you start the annual trial!
Will on the Web:
Show Notes:
]]>
Wed, 29 Mar 2017 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:11:19 Today we sat down with Will Newton, a product designer at Gusto who previously worked on Crossfader. In this episode we dig into Will's upcoming April Fools hijinks, his journey to San Francisco, finding balance in self-improvement, the triangle of passions, and so much more. Today we sat down with Will Newton, a product designer at Gusto who previously worked on Crossfader. In this episode we dig into Will's upcoming April Fools hijinks, his journey to San Francisco, finding balance in self-improvement, the triangle of passio yes full 194
190: Brain Drain (feat. Christine Røde) 895c095f-0a47-4f45-81b6-8952b65856ed http://designdetails.simplecast.fm/193 Today we caught up with Christine Røde, a brand and interaction designer working in Amsterdam who previously worked at Facebook on Workplace and search. In this episode we dig into Christine's background, her journey to San Francisco, navigating startup and big company life, and her advice to folks outside the Bay Area. Today we caught up with Christine Røde, a brand and interaction designer working in Amsterdam who previously worked at Facebook on Workplace and search. In this episode we dig into Christine's background, her journey to San Francisco, navigating startup and big company life, and her advice to folks outside the Bay Area.

We've also got a big announcement: we're building a new thing for you! It's called Spectrum and it's a place for our community to hang out and share what's going on in design, development, podcasts, news, music, and more.

We're still in beta, so expect a few bugs and lots of improvements over the next few weeks! But in the meantime, we'd love to hang out with you and chat...in real time.

Sign up at Spectrum.chat, join the Design Details frequency, discover communities in ~discover, and share feedback in ~hugs-n-bugs!

Sponsor:

We're looking for sponsors! If you or your team are hiring, launching a new product, or just want to get your message out to designers around the world, reach out to us through our sponsors page

Christine on the Web:
Show Notes:
]]>
Wed, 22 Mar 2017 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:01:06 Today we caught up with Christine Røde, a brand and interaction designer working in Amsterdam who previously worked at Facebook on Workplace and search. In this episode we dig into Christine's background, her journey to San Francisco, navigating startup and big company life, and her advice to folks outside the Bay Area. Today we caught up with Christine Røde, a brand and interaction designer working in Amsterdam who previously worked at Facebook on Workplace and search. In this episode we dig into Christine's background, her journey to San Francisco, navigating startup a no full 193
189: Done Goofed (feat. Max Stoiber) b46a09b9-288c-4333-a2ec-4b65a7ea4a6f http://designdetails.simplecast.fm/192 Today we caught up with Max Stoiber, the creator of Styled Components and React Boilerplate (among many other projects), and a massive contributor overall to the world of open-source Javascript. We dig into Max's background, designing with code, building in the open, and so much more. Today we caught up with Max Stoiber, the creator of Styled Components and React Boilerplate (among many other projects), and a massive contributor overall to the world of open-source Javascript. We dig into Max's background, designing with code, building in the open, and so much more.

Come chat with us in our Slack team! Over 7,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:

We're looking for sponsors! If you or your team are hiring, launching a new product, or just want to get your message out to designers around the world, reach out to us through our sponsors page

Max on the Web:
Show Notes:
]]>
Wed, 15 Mar 2017 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:07:42 Today we caught up with Max Stoiber, the creator of Styled Components and React Boilerplate (among many other projects), and a massive contributor overall to the world of open-source Javascript. We dig into Max's background, designing with code, building in the open, and so much more. Today we caught up with Max Stoiber, the creator of Styled Components and React Boilerplate (among many other projects), and a massive contributor overall to the world of open-source Javascript. We dig into Max's background, designing with code, building no full 192
188: Doodle Television (feat. Kathy Zheng) 2c8f4346-07b8-4449-a47f-a446c8b44f3e http://designdetails.simplecast.fm/191 Today we caught up with Kathy Zheng, a designer at GitHub, previously at Patreon. In this episode we dig into failure and taking chances, hiring early designers, learning how to communicate, and so much more. Today we caught up with Kathy Zheng, a designer at GitHub, previously at Patreon. In this episode we dig into failure and taking chances, hiring early designers, learning how to communicate, and so much more.

Come chat with us in our Slack team! Over 7,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:

We're looking for sponsors! If you or your team are hiring, launching a new product, or just want to get your message out to designers around the world, reach out to us through our sponsors page

Kathy on the Web:
Show notes:
]]>
Wed, 08 Mar 2017 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:03:16 Today we caught up with Kathy Zheng, a designer at GitHub, previously at Patreon. In this episode we dig into failure and taking chances, hiring early designers, learning how to communicate, and so much more. Today we caught up with Kathy Zheng, a designer at GitHub, previously at Patreon. In this episode we dig into failure and taking chances, hiring early designers, learning how to communicate, and so much more. no full 191
187: Performance Enhancing Calculators (feat. Ryhan Hassan) 3962e398-4dda-4293-86db-53943547471c http://designdetails.simplecast.fm/190 Today we caught up with Ryhan Hassan, a designer at Dropbox who previously worked on Paper. We dig into Ryhan's background, his transition from development to design, building side projects, easter eggs, and more. Today we caught up with Ryhan Hassan, a designer at Dropbox who previously worked on Paper. We dig into Ryhan's background, his transition from development to design, building side projects, easter eggs, and more.

Come chat with us in our Slack team! Over 7,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:

We're looking for sponsors! If you or your team are hiring, launching a new product, or just want to get your message out to designers around the world, reach out to us through our sponsors page

Ryhan on the Web:
Show notes:
]]>
Wed, 01 Mar 2017 05:00:00 -0800 shows@spec.fm (Spec) Spec 00:54:20 Today we caught up with Ryhan Hassan, a designer at Dropbox who previously worked on Paper. We dig into Ryhan's background, his transition from development to design, building side projects, easter eggs, and more. Today we caught up with Ryhan Hassan, a designer at Dropbox who previously worked on Paper. We dig into Ryhan's background, his transition from development to design, building side projects, easter eggs, and more. no full 190
186: Bucket Heads (feat. Sarah Pease) 467c4264-a7c3-4ff8-ab2b-1bff722f2b17 http://designdetails.simplecast.fm/189 Today we caught up with Sarah Pease, a designer at Facebook, previously building Figma. In this episode we go deep on buckets and furniture design, designing for civic engagement, taking risks, and so much more. Today we caught up with Sarah Pease, a designer at Facebook, previously building Figma. In this episode we go deep on buckets and furniture design, designing for civic engagement, taking risks, and so much more.

Come chat with us in our Slack team! Over 7,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:

We're looking for sponsors! If you or your team are hiring, launching a new product, or just want to get your message out to designers around the world, reach out to us through our sponsors page

Sarah on the Web:
Show notes:
]]>
Wed, 22 Feb 2017 05:00:00 -0800 shows@spec.fm (Spec) Spec 00:57:19 Today we caught up with Sarah Pease, a designer at Facebook, previously building Figma. In this episode we go deep on buckets and furniture design, designing for civic engagement, taking risks, and so much more. Today we caught up with Sarah Pease, a designer at Facebook, previously building Figma. In this episode we go deep on buckets and furniture design, designing for civic engagement, taking risks, and so much more. yes full 189
185: Orland & Portlando (feat. Matt Spiel) ffeb2c43-dfee-4fd3-b48a-abfeba43626e http://designdetails.simplecast.fm/188 Today we caught up with Matt Spiel, the Director of Design at Treehouse, visiting us by way of Missouri. We learn about his destiny in Arizona, design activism, remote work, company hierarchy, taking bets on people, managing designers, and so much more. Today we caught up with Matt Spiel, the Director of Design at Treehouse, visiting us by way of Missouri. We learn about his destiny in Arizona, design activism, remote work, company hierarchy, taking bets on people, managing designers, and so much more.

Come chat with us in our Slack team! Over 7,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:

We're looking for sponsors! If you or your team are hiring, launching a new product, or just want to get your message out to designers around the world, reach out to us through our sponsors page

Matt on the Web:
Show notes:
]]>
Wed, 15 Feb 2017 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:13:58 Today we caught up with Matt Spiel, the Director of Design at Treehouse, visiting us by way of Missouri. We learn about his destiny in Arizona, design activism, remote work, company hierarchy, taking bets on people, managing designers, and so much more. Today we caught up with Matt Spiel, the Director of Design at Treehouse, visiting us by way of Missouri. We learn about his destiny in Arizona, design activism, remote work, company hierarchy, taking bets on people, managing designers, and so much more. no full 188
184: Three Scarves (feat. Meredith Schomburg) 6f33d176-48df-4cf8-a1e0-f93f15a60b13 http://designdetails.simplecast.fm/187 Today we caught up with Meredith Schomburg, a designer and illustrator at Airbnb. We dig into the impact of illustration, finding the right team at Airbnb, finding role models and fulfillment, and so much more. Today we caught up with Meredith Schomburg, a designer and illustrator at Airbnb. We dig into the impact of illustration, finding the right team at Airbnb, finding role models and fulfillment, and so much more.

Come chat with us in our Slack team! Over 7,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:

We're looking for sponsors! If you or your team are hiring, launching a new product, or just want to get your message out to designers around the world, reach out to us through our sponsors page

Meredith on the Web:
Show notes:
]]>
Wed, 08 Feb 2017 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:00:38 Today we caught up with Meredith Schomburg, a designer and illustrator at Airbnb. We dig into the impact of illustration, finding the right team at Airbnb, finding role models and fulfillment, and so much more. Today we caught up with Meredith Schomburg, a designer and illustrator at Airbnb. We dig into the impact of illustration, finding the right team at Airbnb, finding role models and fulfillment, and so much more. yes full 187
183: Vicious Soda Can (feat. Cat Noone) b67b9d24-fceb-40c1-bae2-6fb99d47bb25 http://designdetails.simplecast.fm/186 Today we caught up with Cat Noone, a designer and founder currently working on a new startup, Iris. In this episode we learn how to do math on our fingers, discuss how to navigate a career and different types of companies, learn what it takes to bootstrap a startup, hear Cat's advice for aspiring entrepreneurs, and so much more. Today we caught up with Cat Noone, a designer and founder currently working on a new startup, Iris. In this episode we learn how to do math on our fingers, discuss how to navigate a career and different types of companies, learn what it takes to bootstrap a startup, hear Cat's advice for aspiring entrepreneurs, and so much more.

Come chat with us in our Slack team! Over 7,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:

We're looking for sponsors! If you or your team are hiring, launching a new product, or just want to get your message out to designers around the world, reach out to us through our sponsors page

Cat on the Web:
Show notes:
]]>
Wed, 01 Feb 2017 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:05:32 Today we caught up with Cat Noone, a designer and founder currently working on a new startup, Iris. In this episode we learn how to do math on our fingers, discuss how to navigate a career and different types of companies, learn what it takes to bootstrap a startup, hear Cat's advice for aspiring entrepreneurs, and so much more. Today we caught up with Cat Noone, a designer and founder currently working on a new startup, Iris. In this episode we learn how to do math on our fingers, discuss how to navigate a career and different types of companies, learn what it takes to bootstrap yes full 186
182: Sugar Puppy (feat. Jenny Johannesson 11e30569-8e6c-453c-84cb-9c864d63c78e http://designdetails.simplecast.fm/185 Today we caught up with Jenny Johannesson, a designer at Ueno, previously at Fantasy and DDB, who currently lives in San Francisco by way of Sweden. We dig into Jenny's background, design confidence, green cards and visas, that sweet agency life, advice for young designers, and so much more. Today we caught up with Jenny Johannesson, a designer at Ueno, previously at Fantasy and DDB, who currently lives in San Francisco by way of Sweden. We dig into Jenny's background, design confidence, green cards and visas, that sweet agency life, advice for young designers, and so much more.

Come chat with us in our Slack team! Over 7,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:

We're looking for sponsors! If you or your team are hiring, launching a new product, or just want to get your message out to designers around the world, reach out to us through our sponsors page

Jenny on the Web:
Show notes:
]]>
Wed, 25 Jan 2017 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:08:11 Today we caught up with Jenny Johannesson, a designer at Ueno, previously at Fantasy and DDB, who currently lives in San Francisco by way of Sweden. We dig into Jenny's background, design confidence, green cards and visas, that sweet agency life, advice for young designers, and so much more. Today we caught up with Jenny Johannesson, a designer at Ueno, previously at Fantasy and DDB, who currently lives in San Francisco by way of Sweden. We dig into Jenny's background, design confidence, green cards and visas, that sweet agency life, advice f no full 185
181: 5,000 Tickets Gets The Gum (feat. Alex Cornell) 5ff8db97-a5fd-47f3-8167-cbc2f3cd889d http://designdetails.simplecast.fm/184 Today we caught up with Alex Cornell, a product designer at Facebook, filmmaker, book writer, musician, photographer, and so much more. We dig deep into his thoughts on finding fulfillment, growing as a communicator, fame, the good ol' days of design communities, and more. Today we caught up with Alex Cornell, a product designer at Facebook, filmmaker, book writer, musician, photographer, and so much more. We dig deep into his thoughts on finding fulfillment, growing as a communicator, fame, the good ol' days of design communities, and more.

Come chat with us in our Slack team! Over 6,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:

We're looking for sponsors! If you or your team are hiring, launching a new product, or just want to get your message out to designers around the world, reach out to us through our sponsors page

Alex on the Web:
Show notes:
]]>
Wed, 18 Jan 2017 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:13:15 Today we caught up with Alex Cornell, a product designer at Facebook, filmmaker, book writer, musician, photographer, and so much more. We dig deep into his thoughts on finding fulfillment, growing as a communicator, fame, the good ol' days of design communities, and more. Today we caught up with Alex Cornell, a product designer at Facebook, filmmaker, book writer, musician, photographer, and so much more. We dig deep into his thoughts on finding fulfillment, growing as a communicator, fame, the good ol' days of design comm no full 184
180: Best of 2016 (Part 3) 61c578f3-551b-43cf-9a74-332878da2158 http://designdetails.simplecast.fm/183 For the next week we're taking some time off with our friends and family – to tide everyone over, we've compiled three episodes with some of our favorite clips of 2016. We hope you enjoy listening back and rediscovering some of our episodes from this year, and we'll be back with new interviews in 2017! For the next week we're taking some time off with our friends and family – to tide everyone over, we've compiled three episodes with some of our favorite clips of 2016. We hope you enjoy listening back and rediscovering some of our episodes from this year, and we'll be back with new interviews in 2017!

Come chat with us in our new Slack team! Over 5,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Design Details on the Web:
Show Notes:
]]>
Wed, 11 Jan 2017 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:15:55 For the next week we're taking some time off with our friends and family – to tide everyone over, we've compiled three episodes with some of our favorite clips of 2016. We hope you enjoy listening back and rediscovering some of our episodes from this year, and we'll be back with new interviews in 2017! For the next week we're taking some time off with our friends and family – to tide everyone over, we've compiled three episodes with some of our favorite clips of 2016. We hope you enjoy listening back and rediscovering some of our episodes from this year yes full 183
179: Best of 2016 (Part 2) 329e9cfd-b9f9-4137-9f51-dda52b5e425b http://designdetails.simplecast.fm/182 For the next two weeks we're taking some time off with our friends and family – to tide everyone over, we've compiled three episodes with some of our favorite clips of 2016. We hope you enjoy listening back and rediscovering some of our episodes from this year, and we'll be back with new interviews in 2017! For the next two weeks we're taking some time off with our friends and family – to tide everyone over, we've compiled three episodes with some of our favorite clips of 2016. We hope you enjoy listening back and rediscovering some of our episodes from this year, and we'll be back with new interviews in 2017!

Come chat with us in our new Slack team! Over 5,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Design Details on the Web:
Show Notes:
]]>
Wed, 04 Jan 2017 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:12:53 For the next two weeks we're taking some time off with our friends and family – to tide everyone over, we've compiled three episodes with some of our favorite clips of 2016. We hope you enjoy listening back and rediscovering some of our episodes from this year, and we'll be back with new interviews in 2017! For the next two weeks we're taking some time off with our friends and family – to tide everyone over, we've compiled three episodes with some of our favorite clips of 2016. We hope you enjoy listening back and rediscovering some of our episodes from this yes full 182
178: Best of 2016 (Part 1) 74ac429e-106e-46fa-b4ae-705821b17f18 http://designdetails.simplecast.fm/181 For the next three weeks we're taking some time off with our friends and family – to tide everyone over, we've compiled three episodes with some of our favorite clips of 2016. We hope you enjoy listening back and rediscovering some of our episodes from this year, and we'll be back with new interviews in 2017! For the next three weeks we're taking some time off with our friends and family – to tide everyone over, we've compiled three episodes with some of our favorite clips of 2016. We hope you enjoy listening back and rediscovering some of our episodes from this year, and we'll be back with new interviews in 2017!

Come chat with us in our new Slack team! Over 5,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Design Details on the Web:
Show Notes:
]]>
Wed, 28 Dec 2016 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:16:13 For the next three weeks we're taking some time off with our friends and family – to tide everyone over, we've compiled three episodes with some of our favorite clips of 2016. We hope you enjoy listening back and rediscovering some of our episodes from this year, and we'll be back with new interviews in 2017! For the next three weeks we're taking some time off with our friends and family – to tide everyone over, we've compiled three episodes with some of our favorite clips of 2016. We hope you enjoy listening back and rediscovering some of our episodes from th yes full 181
177: Chocolate Soul Cup (feat. Jon Schlossberg) 687ee7e0-0980-4d7f-af46-1e1665304a6b http://designdetails.simplecast.fm/180 Today we sat down with Jon Schlossberg, the cofounder and CEO at Even. We had a wonderful chat with Jon, digging into his path to becoming a designer, developing the skills of critical thinking, the cognitive energy cup, designing against inequality, telling the truth, and so much more. Today we sat down with Jon Schlossberg, the cofounder and CEO at Even. We had a wonderful chat with Jon, digging into his path to becoming a designer, developing the skills of critical thinking, the cognitive energy cup, designing against inequality, telling the truth, and so much more.

Come chat with us in our Slack team! Over 6,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:
Jon on the Web:
Show notes:
]]>
Wed, 21 Dec 2016 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:22:07 Today we sat down with Jon Schlossberg, the cofounder and CEO at Even. We had a wonderful chat with Jon, digging into his path to becoming a designer, developing the skills of critical thinking, the cognitive energy cup, designing against inequality, telling the truth, and so much more. Today we sat down with Jon Schlossberg, the cofounder and CEO at Even. We had a wonderful chat with Jon, digging into his path to becoming a designer, developing the skills of critical thinking, the cognitive energy cup, designing against inequality, tell no full 180
176: Location Irrelevance (feat. Juan Arreguin) f6c8a917-dc5b-406d-8fbf-a37304f2de95 http://designdetails.simplecast.fm/179 Today we caught up with longtime-friend and freelance designer Juan Arreguin. We dig into Juan's origins as a designer in the midwest, the body as design, building a community in San Francisco, designing as a nomad, and so much more. Today we caught up with longtime-friend and freelance designer Juan Arreguin. We dig into Juan's origins as a designer in the midwest, the body as design, building a community in San Francisco, designing as a nomad, and so much more.

Come chat with us in our Slack team! Over 6,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:
Juan on the web:
Show notes:
]]>
Wed, 14 Dec 2016 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:08:16 Today we caught up with longtime-friend and freelance designer Juan Arreguin. We dig into Juan's origins as a designer in the midwest, the body as design, building a community in San Francisco, designing as a nomad, and so much more. Today we caught up with longtime-friend and freelance designer Juan Arreguin. We dig into Juan's origins as a designer in the midwest, the body as design, building a community in San Francisco, designing as a nomad, and so much more. no full 179
175: Honeymoon & Humble Ping-Pong (feat. Claire Tauziet) 393e9132-44c9-42c1-82ce-184093325f3b http://designdetails.simplecast.fm/178 Today we caught up with Claire Tauziet, a designer at Google, previously at BigCommerce, by way of France. We dig into Claire's background, sharing past work, building a career in a new country, advice for young designers, and so much more. Today we caught up with Claire Tauziet, a designer at Google, previously at BigCommerce, by way of France. We dig into Claire's background, sharing past work, building a career in a new country, advice for young designers, and so much more.

Come chat with us in our Slack team! Over 6,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:
Claire on the web:
Show notes:
]]>
Wed, 07 Dec 2016 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:01:37 Today we caught up with Claire Tauziet, a designer at Google, previously at BigCommerce, by way of France. We dig into Claire's background, sharing past work, building a career in a new country, advice for young designers, and so much more. Today we caught up with Claire Tauziet, a designer at Google, previously at BigCommerce, by way of France. We dig into Claire's background, sharing past work, building a career in a new country, advice for young designers, and so much more. yes full 178
174: Lava Lamp Nail Salon (feat. Noah Levin) 5e2ed6ea-bb10-4599-8661-13ba55693d5f http://designdetails.simplecast.fm/177 Today we caught up with Noah Levin, a design manager at ClassPass, previously building the Google app for iOS, and before that a designer at NASA. We dig into Noah's origins, wireframing and visual design, navigating design at a big company, stigmas in therapy, imposter syndrome, and so much more. Today we caught up with Noah Levin, a design manager at ClassPass, previously building the Google app for iOS, and before that a designer at NASA. We dig into Noah's origins, wireframing and visual design, navigating design at a big company, stigmas in therapy, imposter syndrome, and so much more.

Come chat with us in our Slack team! Over 6,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:
Noah on the web:
Show notes:
]]>
Wed, 30 Nov 2016 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:10:55 Today we caught up with Noah Levin, a design manager at ClassPass, previously building the Google app for iOS, and before that a designer at NASA. We dig into Noah's origins, wireframing and visual design, navigating design at a big company, stigmas in therapy, imposter syndrome, and so much more. Today we caught up with Noah Levin, a design manager at ClassPass, previously building the Google app for iOS, and before that a designer at NASA. We dig into Noah's origins, wireframing and visual design, navigating design at a big company, stigmas in th yes full 177
173: Grammar Different (feat. Leigh Taylor) ae046239-452f-43d4-a855-963d1595622f http://designdetails.simplecast.fm/176 Today we caught up with Leigh Taylor, a freelancing designer previously building AI design systems at The Grid. In this conversation, we dig into chasing people versus jobs, predictability and consistency, design patterns, living like you're retired, and so much more. Today we caught up with Leigh Taylor, a freelancing designer previously building AI design systems at The Grid. In this conversation, we dig into chasing people versus jobs, predictability and consistency, design patterns, living like you're retired, and so much more.

Come chat with us in our Slack team! Over 6,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:
Leigh on the web:
Show notes:
]]>
Wed, 23 Nov 2016 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:11:56 Today we caught up with Leigh Taylor, a freelancing designer previously building AI design systems at The Grid. In this conversation, we dig into chasing people versus jobs, predictability and consistency, design patterns, living like you're retired, and so much more. Today we caught up with Leigh Taylor, a freelancing designer previously building AI design systems at The Grid. In this conversation, we dig into chasing people versus jobs, predictability and consistency, design patterns, living like you're retired, and no full 176
172: That Sweater Life (feat. Tegan Mierle) 703861a1-11e0-4cf0-bfa4-53def3dcf45a http://designdetails.simplecast.fm/175 Today we caught up with Tegan Mierle, a designer at Sense, living in SF by way of Toronto. We dig into Tegan's origins, how she built her own business, the fears around sharing work, maintaining balance, and so much more. Today we caught up with Tegan Mierle, a designer at Sense, living in SF by way of Toronto. We dig into Tegan's origins, how she built her own business, the fears around sharing work, maintaining balance, and so much more.

Come chat with us in our Slack team! Over 6,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:
Tegan on the web:
Show notes:
]]>
Wed, 16 Nov 2016 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:02:06 Today we caught up with Tegan Mierle, a designer at Sense, living in SF by way of Toronto. We dig into Tegan's origins, how she built her own business, the fears around sharing work, maintaining balance, and so much more. Today we caught up with Tegan Mierle, a designer at Sense, living in SF by way of Toronto. We dig into Tegan's origins, how she built her own business, the fears around sharing work, maintaining balance, and so much more. no full 175
171: Never Not Crunched (feat. Sarah Marie & Marshall Bock) a5b71a83-d915-4a46-9cad-6d95aaff2e17 http://designdetails.simplecast.fm/174 Today was a different kind of episode, featuring return friends of the show Marshall Bock and Sarah Marie. We had a more casual conversation, digging into topics like shutting down side projects, giving up, accountability and motivation, time management, and so much more. Today was a different kind of episode, featuring return friends of the show Marshall Bock and Sarah Marie. We had a more casual conversation, digging into topics like shutting down side projects, giving up, accountability and motivation, time management, and so much more.

Come chat with us in our Slack team! Over 5,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:
Sarah on the web:
Marshall on the web:
Show notes:
]]>
Wed, 09 Nov 2016 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:20:59 Today was a different kind of episode, featuring return friends of the show Marshall Bock and Sarah Marie. We had a more casual conversation, digging into topics like shutting down side projects, giving up, accountability and motivation, time management, and so much more. Today was a different kind of episode, featuring return friends of the show Marshall Bock and Sarah Marie. We had a more casual conversation, digging into topics like shutting down side projects, giving up, accountability and motivation, time management, no full 174
170: #BringBackThePipes (feat. Majd Taby) 62479f1d-c41a-4401-aeda-3683329fda45 http://designdetails.simplecast.fm/173 Today we caught up with Majd Taby, the founder of Darkroom who previously built products at Instagram, Facebook and Apple. We dig into his story as a software engineer and designer, hiring at tech companies, being scrappy, emotion in building products, finding work that matters, and so much more. Today we caught up with Majd Taby, the founder of Darkroom who previously built products at Instagram, Facebook and Apple. We dig into his story as a software engineer and designer, hiring at tech companies, being scrappy, emotion in building products, finding work that matters, and so much more.

Come chat with us in our Slack team! Over 5,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:
Majd on the web:
Show notes:
]]>
Wed, 02 Nov 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:07:38 Today we caught up with Majd Taby, the founder of Darkroom who previously built products at Instagram, Facebook and Apple. We dig into his story as a software engineer and designer, hiring at tech companies, being scrappy, emotion in building products, finding work that matters, and so much more. Today we caught up with Majd Taby, the founder of Darkroom who previously built products at Instagram, Facebook and Apple. We dig into his story as a software engineer and designer, hiring at tech companies, being scrappy, emotion in building products, fi no full 173
169: Invisible Unicorns (feat. Maykel Loomans) 0e58d152-52e0-4337-ac51-4a1be054cdc4 http://designdetails.simplecast.fm/172 Today we caught up once again with Maykel Loomans, a designer on Facebook's Search team and previously at Instagram. We dig into what Maykel has been up to this past year, building a career as a designer, mentorship, photography, and so much more. Today we caught up once again with Maykel Loomans, a designer on Facebook's Search team and previously at Instagram. We dig into what Maykel has been up to this past year, building a career as a designer, mentorship, photography, and so much more.

Come chat with us in our Slack team! Over 5,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:
Maykel on the web:
Show notes:
]]>
Wed, 26 Oct 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:09:40 Today we caught up once again with Maykel Loomans, a designer on Facebook's Search team and previously at Instagram. We dig into what Maykel has been up to this past year, building a career as a designer, mentorship, photography, and so much more. Today we caught up once again with Maykel Loomans, a designer on Facebook's Search team and previously at Instagram. We dig into what Maykel has been up to this past year, building a career as a designer, mentorship, photography, and so much more. no full 172
168: Auto Goats (feat. Koen Bok and Jorn van Dijk) 7ae227aa-9a9e-4129-a947-0ac7326d96c1 http://designdetails.simplecast.fm/171 Today we caught up with Koen Bok and Jorn van Dijk, the co-founders of Framer, previously building products at Facebook and Sofa. This was a fun episode where we went deep into topics like building a startup in Amsterdam, the future of design tools, how to help designers level up, and so much more. Today we caught up with Koen Bok and Jorn van Dijk, the co-founders of Framer, previously building products at Facebook and Sofa. This was a fun episode where we went deep into topics like building a startup in Amsterdam, the future of design tools, how to help designers level up, and so much more.

Come chat with us in our Slack team! Over 5,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:
Koen on the web:
Jorn on the web:
Show Notes:
]]>
Wed, 19 Oct 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:15:11 Today we caught up with Koen Bok and Jorn van Dijk, the co-founders of Framer, previously building products at Facebook and Sofa. This was a fun episode where we went deep into topics like building a startup in Amsterdam, the future of design tools, how to help designers level up, and so much more. Today we caught up with Koen Bok and Jorn van Dijk, the co-founders of Framer, previously building products at Facebook and Sofa. This was a fun episode where we went deep into topics like building a startup in Amsterdam, the future of design tools, how t no full 171
167: Daisy Chained Brains (feat. Payam Rajabi) 9a3f4dfd-45ed-40ac-bdfc-c4e02a9d657d http://designdetails.simplecast.fm/170 Today we caught up with Payam Rajabi, a designer at Shopify working on design systems and product development. We dig into Payam's background, building design systems, designing with content and form, learning how to work remotely, and so much more. Today we caught up with Payam Rajabi, a designer at Shopify working on design systems and product development. We dig into Payam's background, building design systems, designing with content and form, learning how to work remotely, and so much more.

Come chat with us in our Slack team! Over 5,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:
Payam on the web:
Show Notes:
]]>
Wed, 12 Oct 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:01:48 Today we caught up with Payam Rajabi, a designer at Shopify working on design systems and product development. We dig into Payam's background, building design systems, designing with content and form, learning how to work remotely, and so much more. Today we caught up with Payam Rajabi, a designer at Shopify working on design systems and product development. We dig into Payam's background, building design systems, designing with content and form, learning how to work remotely, and so much more. no full 170
166: Ambient Struggles (feat. May-Li Khoe & Andy Matuschak) 55d38592-a692-415b-ad47-41709f379a30 http://designdetails.simplecast.fm/169 Today's show is a rare two-person episode featuring previous-guest May-Li Khoe and newcomer Andy Matuschak. In this episode we do things a bit different, digging into tough topics like fear, learning how to learn, designing with convictions, working on the right problems, and so much more. Today's show is a rare two-person episode featuring previous-guest May-Li Khoe and newcomer Andy Matuschak. In this episode we do things a bit different, digging into tough topics like fear, learning how to learn, designing with convictions, working on the right problems, and so much more.

Come chat with us in our Slack team! Over 5,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:
May-Li on the web:
Andy on the web:
Show Notes:
]]>
Wed, 05 Oct 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:12:37 Today's show is a rare two-person episode featuring previous-guest May-Li Khoe and newcomer Andy Matuschak. In this episode we do things a bit different, digging into tough topics like fear, learning how to learn, designing with convictions, working on the right problems, and so much more. Today's show is a rare two-person episode featuring previous-guest May-Li Khoe and newcomer Andy Matuschak. In this episode we do things a bit different, digging into tough topics like fear, learning how to learn, designing with convictions, working on th yes full 169
165: Whitespace Friends (feat. Lori Kaplan) 50c0952f-8dde-4bd0-9940-2bc14378f4ca http://designdetails.simplecast.fm/168 Today we caught up with Lori Kaplan, a designer with 30 years of experience at companies like Apple, Netscape, Netflix, Motorola, and Groupon (among many others). We chat about Lori's journey into design, what it takes to design organizations, navigating job changes throughout a career, writing the Macintosh human interface guidelines, beating imposter syndrome, and more. Today we caught up with Lori Kaplan, a designer with 30 years of experience at companies like Apple, Netscape, Netflix, Motorola, and Groupon (among many others). We chat about Lori's journey into design, what it takes to design organizations, navigating job changes throughout a career, writing the Macintosh human interface guidelines, beating imposter syndrome, and more.

Come chat with us in our Slack team! Over 5,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:
Lori on the web:
Show Notes:
]]>
Wed, 28 Sep 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:10:11 Today we caught up with Lori Kaplan, a designer with 30 years of experience at companies like Apple, Netscape, Netflix, Motorola, and Groupon (among many others). We chat about Lori's journey into design, what it takes to design organizations, navigating job changes throughout a career, writing the Macintosh human interface guidelines, beating imposter syndrome, and more. Today we caught up with Lori Kaplan, a designer with 30 years of experience at companies like Apple, Netscape, Netflix, Motorola, and Groupon (among many others). We chat about Lori's journey into design, what it takes to design organizations, navigating no full 168
164: Maximum Vignelli (feat. Lucas Smith) 638f3866-7fb1-4818-875e-332c6d471313 http://designdetails.simplecast.fm/167 In this episode, we hung out the one and only Lucas Smith. We covered everything from design systems, to fighting your CFO, and even the hot new front-end framework, Haskell. In this episode, we hung out the one and only Lucas Smith. We covered everything from design systems to fighting your CFO, and the hot new front-end framework, Haskell.

Come chat with us in our Slack team! Over 5,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:
Lucas on the web:
Show Notes:
]]>
Wed, 21 Sep 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:14:20 In this episode, we hung out the one and only Lucas Smith. We covered everything from design systems, to fighting your CFO, and even the hot new front-end framework, Haskell. In this episode, we hung out the one and only Lucas Smith. We covered everything from design systems, to fighting your CFO, and even the hot new front-end framework, Haskell. yes full 167
163: Guardrails (feat. Ben Wilkins) 92f5d04f-e235-46e0-af38-dff482e95e29 http://designdetails.simplecast.fm/166 Today we caught up with Ben Wilkins, a design technologist building systems at Airbnb. We dig into what it takes to build design systems, coding as prototyping, the current world of design tools, and so much more. Today we caught up with Ben Wilkins, a design technologist building systems at Airbnb. We dig into what it takes to build design systems, coding as prototyping, the current world of design tools, and so much more.

Come chat with us in our Slack team! Over 5,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:
Ben on the web:
Show Notes:
]]>
Wed, 14 Sep 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:22:46 Today we caught up with Ben Wilkins, a design technologist building systems at Airbnb. We dig into what it takes to build design systems, coding as prototyping, the current world of design tools, and so much more. Today we caught up with Ben Wilkins, a design technologist building systems at Airbnb. We dig into what it takes to build design systems, coding as prototyping, the current world of design tools, and so much more. yes full 166
162: Gnarwhale (feat. Andy Chung) 1f492ab5-1267-49e1-8b0d-e024077bc791 http://designdetails.simplecast.fm/165 Today we met with Andy Chung, a designer building Pattern, and previously working at Facebook. We dig into Andy's beginnings, designing at Facebook, understanding changes at scale, bringing Reactions to market, intuition-driven design, and more. Today we met with Andy Chung, a designer building Pattern, and previously working at Facebook. We dig into Andy's beginnings, designing at Facebook, understanding changes at scale, bringing Reactions to market, intuition-driven design, and more.

Come chat with us in our Slack team! Over 5,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:
Andy on the web:
Show Notes:
]]>
Wed, 07 Sep 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:05:00 Today we met with Andy Chung, a designer building Pattern, and previously working at Facebook. We dig into Andy's beginnings, designing at Facebook, understanding changes at scale, bringing Reactions to market, intuition-driven design, and more. Today we met with Andy Chung, a designer building Pattern, and previously working at Facebook. We dig into Andy's beginnings, designing at Facebook, understanding changes at scale, bringing Reactions to market, intuition-driven design, and more. yes full 165
161: Coming Soon (feat. Julia Khusainova) 50af9341-a65d-473b-9b8c-61b1476d8221 http://designdetails.simplecast.fm/164 Today we sat down with Julia Khusainova, a designer at Shyp, previously at Twitter. We dig into Julia's background, leaving Russia, transitioning from engineering to design, designing onboarding experiences, facing burnout, balancing side projects, and more. Today we sat down with Julia Khusainova, a designer at Shyp, previously at Twitter. We dig into Julia's background, leaving Russia, transitioning from engineering to design, designing onboarding experiences, facing burnout, balancing side projects, and more.

Come chat with us in our Slack team! Over 5,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:
Julia on the web:
Show Notes:
]]>
Wed, 31 Aug 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:02:07 Today we sat down with Julia Khusainova, a designer at Shyp, previously at Twitter. We dig into Julia's background, leaving Russia, transitioning from engineering to design, designing onboarding experiences, facing burnout, balancing side projects, and more. Today we sat down with Julia Khusainova, a designer at Shyp, previously at Twitter. We dig into Julia's background, leaving Russia, transitioning from engineering to design, designing onboarding experiences, facing burnout, balancing side projects, and mo no full 164
160: Unicorn Farts (feat. Dr. Charles Pearson) 0aae28bc-b559-4fe0-a7b4-053a52bf1957 http://designdetails.simplecast.fm/163 Today we sat down with Dr. Charles Pearson, a cultural anthropologist working at InVision. We dig into Charles' thoughts on anthropology, research in design and startups, exploratory design, personas, legacy, and so much more. Today we sat down with Dr. Charles Pearson, a cultural anthropologist working at InVision. We dig into Charles' thoughts on anthropology, research in design and startups, exploratory design, personas, legacy, and so much more.

Come chat with us in our Slack team! Over 5,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:
Charles on the web:
Show Notes:
]]>
Mon, 29 Aug 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:03:26 Today we sat down with Dr. Charles Pearson, a cultural anthropologist working at InVision. We dig into Charles' thoughts on anthropology, research in design and startups, exploratory design, personas, legacy, and so much more. Today we sat down with Dr. Charles Pearson, a cultural anthropologist working at InVision. We dig into Charles' thoughts on anthropology, research in design and startups, exploratory design, personas, legacy, and so much more. yes full 163
159: Twe-mail (feat. Lisa Sy) 04e748b5-7c72-4a89-bd52-fc7431175140 http://designdetails.simplecast.fm/162 Today we caught up with Lisa Sy, a designer working at Facebook, and previously building products at thoughtbot. We dig into Lisa's background, designing for privacy and control, internships vs. apprenticeships, design and code, multidisciplinary design, and more. Today we caught up with Lisa Sy, a designer working at Facebook, and previously building products at thoughtbot. We dig into Lisa's background, designing for privacy and control, internships vs. apprenticeships, design and code, multidisciplinary design, and more.

Come chat with us in our Slack team! Over 5,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Lisa on the web:
Show Notes:
]]>
Wed, 24 Aug 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:00:44 Today we caught up with Lisa Sy, a designer working at Facebook, and previously building products at thoughtbot. We dig into Lisa's background, designing for privacy and control, internships vs. apprenticeships, design and code, multidisciplinary design, and more. Today we caught up with Lisa Sy, a designer working at Facebook, and previously building products at thoughtbot. We dig into Lisa's background, designing for privacy and control, internships vs. apprenticeships, design and code, multidisciplinary design, yes full 162
158: D.R.E.A.M. (feat. Bob Baxley) 200942d9-d66c-49fa-a9e7-9a7e9d0fcb0b http://designdetails.simplecast.fm/161 Today we caught up with Bob Baxley, a designer in Silicon Valley. Bob formerly led design at Pinterest, and before that built products at Apple and Yahoo!. We dig into topics like med-tech, managing millennials, Pokémon GO and Gen-Z, design in big tech, and so much more. Today we caught up with Bob Baxley, a designer in Silicon Valley. Bob formerly led design at Pinterest, and before that built products at Apple and Yahoo!. We dig into topics like med-tech, managing millennials, Pokémon GO and Gen-Z, design in big tech, and so much more.

Come chat with us in our Slack team! Over 5,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:
Bob on the web:
Show Notes:
]]>
Mon, 22 Aug 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:24:03 Today we caught up with Bob Baxley, a designer in Silicon Valley. Bob formerly led design at Pinterest, and before that built products at Apple and Yahoo!. We dig into topics like med-tech, managing millennials, Pokémon GO and Gen-Z, design in big tech, and so much more. Today we caught up with Bob Baxley, a designer in Silicon Valley. Bob formerly led design at Pinterest, and before that built products at Apple and Yahoo!. We dig into topics like med-tech, managing millennials, Pokémon GO and Gen-Z, design in big tech, a yes full 161
157: Walking Empathy Sponge (feat. Kory Westerhold) 531b81dc-09ea-42be-9fce-2f1ff62f28d7 http://designdetails.simplecast.fm/160 Today we sat down with Kory Westerhold, a designer at Facebook working on Newsfeed, who previously designed at Twitter, Apple, and more. We dig deep on video games, opinions in design, theater and story telling, portfolios, designing for newsfeed, carrying an Android phone, and balancing side projects. Today we sat down with Kory Westerhold, a designer at Facebook working on Newsfeed, who previously designed at Twitter, Apple, and more. We dig deep on video games, opinions in design, theater and story telling, portfolios, designing for newsfeed, carrying an Android phone, and balancing side projects.

Come chat with us in our Slack team! Over 5,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Kory on the web:
Show Notes:
]]>
Wed, 17 Aug 2016 03:00:00 -0700 shows@spec.fm (Spec) Spec 01:18:07 Today we sat down with Kory Westerhold, a designer at Facebook working on Newsfeed, who previously designed at Twitter, Apple, and more. We dig deep on video games, opinions in design, theater and story telling, portfolios, designing for newsfeed, carrying an Android phone, and balancing side projects. Today we sat down with Kory Westerhold, a designer at Facebook working on Newsfeed, who previously designed at Twitter, Apple, and more. We dig deep on video games, opinions in design, theater and story telling, portfolios, designing for newsfeed, carryin yes full 160
156: Segue... (Feat. Alexandra Bond) e4a9b4b5-cd75-4369-a61b-05d394adf623 http://designdetails.simplecast.fm/159 Today we caught up with Alexandra Bond, a design fellow at Sequoia Creative Labs and previously a designer at Pinterest. We pick her brain about her origins, friction in design, transitioning into a product role, navigating the job search, answering the why, and more. Today we caught up with Alexandra Bond, a design fellow at Sequoia Creative Labs and previously a designer at Pinterest. We pick her brain about her origins, friction in design, transitioning into a product role, navigating the job search, answering the why, and more.

Come chat with us in our Slack team! Over 5,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:
Alex on the web:
Show Notes:
]]>
Mon, 15 Aug 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:04:04 Today we caught up with Alexandra Bond, a design fellow at Sequoia Creative Labs and previously a designer at Pinterest. We pick her brain about her origins, friction in design, transitioning into a product role, navigating the job search, answering the why, and more. Today we caught up with Alexandra Bond, a design fellow at Sequoia Creative Labs and previously a designer at Pinterest. We pick her brain about her origins, friction in design, transitioning into a product role, navigating the job search, answering the w yes full 159
155: Duckicopters (feat. Athyuttam Reddy) cac511e4-cb57-4565-a9af-870f93bcd39b http://designdetails.simplecast.fm/158 Today we sat down with Athyuttam Reddy, a designer-engineer intern at Figma. We cover so much in this episode, including engineer design hybrid roles, getting a design job as a new grad, landing meaningful internships, becoming jaded, diversity and inclusivity, and so much more. Today we sat down with Athyuttam Reddy, a designer-engineer intern at Figma. We cover so much in this episode, including engineer design hybrid roles, getting a design job as a new grad, landing meaningful internships, becoming jaded, diversity and inclusivity, and so much more.

Come chat with us in our Slack team! Over 5,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Athyuttam on the web:
Show Notes:
]]>
Wed, 10 Aug 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 00:58:47 Today we sat down with Athyuttam Reddy, a designer-engineer intern at Figma. We cover so much in this episode, including engineer design hybrid roles, getting a design job as a new grad, landing meaningful internships, becoming jaded, diversity and inclusivity, and so much more. Today we sat down with Athyuttam Reddy, a designer-engineer intern at Figma. We cover so much in this episode, including engineer design hybrid roles, getting a design job as a new grad, landing meaningful internships, becoming jaded, diversity and inclus yes full 158
154: Dancing Baby Dior (feat. Irina Blok) 964a14b6-9c5d-4459-8b44-3f7604eca760 http://designdetails.simplecast.fm/157 Today we caught up with Irina Blok, a designer at Zendesk who has previously designed at Google, Yahoo, and Adobe (among so many other companies). We talk about brand and product, moving from Russia to California, designing in the real world, putting in the work, and much more. Today we caught up with Irina Blok, a designer at Zendesk who has previously designed at Google, Yahoo, and Adobe (among so many other companies). We talk about brand and product, moving from Russia to California, designing in the real world, putting in the work, and much more.

Come chat with us in our Slack team! Over 5,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:
Irina on the web:
Show Notes:
]]>
Mon, 08 Aug 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:10:12 Today we caught up with Irina Blok, a designer at Zendesk who has previously designed at Google, Yahoo, and Adobe (among so many other companies). We talk about brand and product, moving from Russia to California, designing in the real world, putting in the work, and much more. Today we caught up with Irina Blok, a designer at Zendesk who has previously designed at Google, Yahoo, and Adobe (among so many other companies). We talk about brand and product, moving from Russia to California, designing in the real world, putting in t yes full 157
153: Khaleesi of the Couch (feat. Jeany Ngo) aa6b99cd-c08a-40eb-8444-3660e48bfa09 http://designdetails.simplecast.fm/156 Today we caught up with Jeany Ngo, a designer by day at Airbnb, artist and creator and cosplayer by night. We dig into her journey into design, internships and hustle, art and cosplay, aphantasia and logic, and so much more. Today we caught up with Jeany Ngo, a designer by day at Airbnb, artist and creator and cosplayer by night. We dig into her journey into design, internships and hustle, art and cosplay, aphantasia and logic, and so much more.

Come chat with us in our Slack team! Over 5,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Jeany on the web:
Show Notes:
]]>
Wed, 03 Aug 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:00:07 Today we caught up with Jeany Ngo, a designer by day at Airbnb, artist and creator and cosplayer by night. We dig into her journey into design, internships and hustle, art and cosplay, aphantasia and logic, and so much more. Today we caught up with Jeany Ngo, a designer by day at Airbnb, artist and creator and cosplayer by night. We dig into her journey into design, internships and hustle, art and cosplay, aphantasia and logic, and so much more. yes full 156
152: Maniacal Easy-Bake (feat. Beth Dean) 22ba301f-a5ed-4be6-902d-4477f0275dc9 http://designdetails.simplecast.fm/155 Today we caught up with Beth Dean, a designer at Facebook, avid hiker, creator of toys and comics, illustrator, and artist. We dig into Beth's journey into design, adventures in SF, designing at Facebook, transitional states in design, and so much more. Today we caught up with Beth Dean, a designer at Facebook, avid hiker, creator of toys and comics, illustrator, and artist. We dig into Beth's journey into design, adventures in SF, designing at Facebook, transitional states in design, and so much more.

Come chat with us in our Slack team! Over 5,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:
Beth on the web:
Show Notes:
]]>
Mon, 01 Aug 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:16:10 Today we caught up with Beth Dean, a designer at Facebook, avid hiker, creator of toys and comics, illustrator, and artist. We dig into Beth's journey into design, adventures in SF, designing at Facebook, transitional states in design, and so much more. Today we caught up with Beth Dean, a designer at Facebook, avid hiker, creator of toys and comics, illustrator, and artist. We dig into Beth's journey into design, adventures in SF, designing at Facebook, transitional states in design, and so much more. yes full 155
151: 100-Armed Octopus (feat. Mackey Saturday) 161e7da5-b689-4dfc-bdd3-995e54e37f93 http://designdetails.simplecast.fm/153 Today we got to catch up for a second time with Mackey Saturday, a brand and logo designer at CGH in New York. We dig deep into logo and brand design, working for free, making mistakes, and so much more. Today we got to catch up for a second time with Mackey Saturday, a brand and logo designer at CGH in New York. We dig deep into logo and brand design, working for free, making mistakes, and so much more.

Come chat with us in our Slack team! Over 5,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Mackey on the web:
Show Notes:
]]>
Wed, 27 Jul 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:00:44 Today we got to catch up for a second time with Mackey Saturday, a brand and logo designer at CGH in New York. We dig deep into logo and brand design, working for free, making mistakes, and so much more. Today we got to catch up for a second time with Mackey Saturday, a brand and logo designer at CGH in New York. We dig deep into logo and brand design, working for free, making mistakes, and so much more. yes full 153
150: Fantastic Digital Goo (feat. May-Li Khoe) de904444-1d95-41be-ba61-c9fabacfe62b http://designdetails.simplecast.fm/154 Today we were able to catch up with May-Li Khoe, a designer at Khan Academy who previously spent seven years on the design team at Apple. In this episode we dig deep into long-term thinking, passion and work, priorities and flow, and so much more. Today we were able to catch up with May-Li Khoe, a designer at Khan Academy who previously spent seven years on the design team at Apple. In this episode we dig deep into long-term thinking, passion and work, priorities and flow, and so much more.

Come chat with us in our Slack team! Over 5,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:
May-Li on the web:
Show Notes:
]]>
Mon, 25 Jul 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:13:17 Today we were able to catch up with May-Li Khoe, a designer at Khan Academy who previously spent seven years on the design team at Apple. In this episode we dig deep into long-term thinking, passion and work, priorities and flow, and so much more. Today we were able to catch up with May-Li Khoe, a designer at Khan Academy who previously spent seven years on the design team at Apple. In this episode we dig deep into long-term thinking, passion and work, priorities and flow, and so much more. yes full 154
149: Melayoncé (feat. Melanie Araujo) d1bb981a-3b74-4b7a-94f3-29807c84d290 http://designdetails.simplecast.fm/152 Today we had the opportunity to talk with Melanie Araujo, an independent designer and the creator of Front and Center. She shares her story with us, and we dig into complex topics like self-awareness, identity, personal growth, inclusion and diversity, and so much more. Today we had the opportunity to talk with Melanie Araujo, an independent designer and the creator of Front and Center. She shares her story with us, and we dig into complex topics like self-awareness, identity, personal growth, inclusion and diversity, and so much more.

Come chat with us in our Slack team! Over 5,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Melanie on the web:
Show Notes:
]]>
Wed, 20 Jul 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:14:42 Today we had the opportunity to talk with Melanie Araujo, an independent designer and the creator of Front and Center. She shares her story with us, and we dig into complex topics like self-awareness, identity, personal growth, inclusion and diversity, and so much more. Today we had the opportunity to talk with Melanie Araujo, an independent designer and the creator of Front and Center. She shares her story with us, and we dig into complex topics like self-awareness, identity, personal growth, inclusion and diversity, an yes full 152
148: Verbal Punctuation (feat. Tim Quirino) dbf18a06-729f-4ff3-afb0-eecd82109b2b http://designdetails.simplecast.fm/151 Today we caught up with Tim Quirino, a product designer at Facebook working on Live. We dig into his background, mentorship, a designer's responsibility, vulnerability, and so much more. Today we caught up with Tim Quirino, a product designer at Facebook working on Live. We dig into his background, mentorship, a designer's responsibility, vulnerability, and so much more.

Come chat with us in our Slack team! Over 5,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:
Tim on the web:
Show Notes:
]]>
Mon, 18 Jul 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:10:46 Today we caught up with Tim Quirino, a product designer at Facebook working on Live. We dig into his background, mentorship, a designer's responsibility, vulnerability, and so much more. Today we caught up with Tim Quirino, a product designer at Facebook working on Live. We dig into his background, mentorship, a designer's responsibility, vulnerability, and so much more. yes full 151
147: Editorial Spackle (feat. Jessica Collier) 332afbd8-a7cc-4967-93e2-eeae738a5bbd http://designdetails.simplecast.fm/150 Today we sat down with Jessica Collier, who was most recently a word person at Stellar. We go deep into designing economies, the importance of words and titles, Silicon Valley, the role of content in design, and so much more. Today we sat down with Jessica Collier, who most recently led content and design at Stellar.org. We go deep into designing economies, the importance of words and titles, Silicon Valley, the role of content in design, and so much more.

Come chat with us in our new Slack team! Over 5,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:
Jessica on the web:
Show Notes:
]]>
Wed, 13 Jul 2016 03:00:00 -0700 shows@spec.fm (Spec) Spec 01:09:14 Today we sat down with Jessica Collier, who was most recently a word person at Stellar. We go deep into designing economies, the importance of words and titles, Silicon Valley, the role of content in design, and so much more. Today we sat down with Jessica Collier, who was most recently a word person at Stellar. We go deep into designing economies, the importance of words and titles, Silicon Valley, the role of content in design, and so much more. yes full 150
146: Smell-o-vision (feat. Amber Cartwright) e3045a5a-54b8-45a0-b4d0-f23c6f2c95d4 http://designdetails.simplecast.fm/149 Today we caught up with Amber Cartwright, a design manager at Airbnb. We dig into her past and journey into design, management and leadership, invisible design, machine learning and AI, and so much more. Today we caught up with Amber Cartwright, a design manager at Airbnb. We dig into her past and journey into design, management and leadership, invisible design, machine learning and AI, and so much more.

Come chat with us in our new Slack team! Over 5,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:
Amber on the web:
Show Notes:
]]>
Mon, 11 Jul 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:10:08 Today we caught up with Amber Cartwright, a design manager at Airbnb. We dig into her past and journey into design, management and leadership, invisible design, machine learning and AI, and so much more. Today we caught up with Amber Cartwright, a design manager at Airbnb. We dig into her past and journey into design, management and leadership, invisible design, machine learning and AI, and so much more. yes full 149
145: Sinister Candybar (feat. Chris Downer) e659d1c0-af71-4a06-9e1c-429ec6185d1d http://designdetails.simplecast.fm/148 We recently sat down with Chris Downer, a designer at Sketch, previously at Realmac Software. We dig into his background, what it takes to design Sketch, how to build great software, and more. We recently sat down with Chris Downer, a designer at Sketch, previously at Realmac Software. We dig into his background, what it takes to design Sketch, how to build great software, and more.

Come chat with us in our new Slack team! Over 4,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Chris on the web:
Show Notes:
]]>
Wed, 06 Jul 2016 03:00:00 -0700 shows@spec.fm (Spec) Spec 01:04:26 We recently sat down with Chris Downer, a designer at Sketch, previously at Realmac Software. We dig into his background, what it takes to design Sketch, how to build great software, and more. We recently sat down with Chris Downer, a designer at Sketch, previously at Realmac Software. We dig into his background, what it takes to design Sketch, how to build great software, and more. yes full 148
144: Coca-Coolaid (feat. Stewart Scott-Curran) 5d4fad23-d8e7-4d04-bea2-b9355f4d064f http://designdetails.simplecast.fm/147 Today we sat down with Stewart Scott-Curran, a designer working to build the brand team at Intercom. We dig into his background and journey as a designer, building a team with opinions, the ethics of design, and more. Today we sat down with Stewart Scott-Curran, a designer working to build the brand team at Intercom. We dig into his background and journey as a designer, building a team with opinions, the ethics of design, and more.

Come chat with us in our new Slack team! Over 4,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Stewart on the web:
Show Notes:
]]>
Mon, 04 Jul 2016 03:00:00 -0700 shows@spec.fm (Spec) Spec 01:05:22 Today we sat down with Stewart Scott-Curran, a designer working to build the brand team at Intercom. We dig into his background and journey as a designer, building a team with opinions, the ethics of design, and more. Today we sat down with Stewart Scott-Curran, a designer working to build the brand team at Intercom. We dig into his background and journey as a designer, building a team with opinions, the ethics of design, and more. yes full 147
143: Design Systems: So Hot Right Now (feat. Karri Saarinen) 387239ed-0f6f-4582-afed-2d8351611af2 http://designdetails.simplecast.fm/146 Today we met with Karri Saarinen, a designer at Airbnb working on their Design Language System. In this episode we dig deep into design tools and systems, collaboration at scale, building trust with design, and much more. Today we met with Karri Saarinen, a designer at Airbnb working on their Design Language System. In this episode we dig deep into design tools and systems, collaboration at scale, building trust with design, and much more.

Come chat with us in our new Slack team! Over 4,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Karri on the web:
Show Notes:
]]>
Wed, 29 Jun 2016 03:00:00 -0700 shows@spec.fm (Spec) Spec 01:11:46 Today we met with Karri Saarinen, a designer at Airbnb working on their Design Language System. In this episode we dig deep into design tools and systems, collaboration at scale, building trust with design, and much more. Today we met with Karri Saarinen, a designer at Airbnb working on their Design Language System. In this episode we dig deep into design tools and systems, collaboration at scale, building trust with design, and much more. no full 146
142: Relax To Get Past (feat. Daniel Hooper) 36f96ee3-eaf6-46c0-821d-0acd45dee9e9 http://designdetails.simplecast.fm/145 Today we caught up with Daniel Hooper, a designer and engineer working on Principle. We dig into his process of building a prototyping tool, building side projects, San Francisco, Apple, and more. Today we caught up with Daniel Hooper, a designer and engineer working on Principle. We dig into his process of building a prototyping tool, building side projects, San Francisco, Apple, and more.

Come chat with us in our new Slack team! Over 4,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:
Daniel on the web:
Show Notes:
]]>
Mon, 27 Jun 2016 06:00:00 -0700 shows@spec.fm (Spec) Spec 00:55:28 Today we caught up with Daniel Hooper, a designer and engineer working on Principle. We dig into his process of building a prototyping tool, building side projects, San Francisco, Apple, and more. Today we caught up with Daniel Hooper, a designer and engineer working on Principle. We dig into his process of building a prototyping tool, building side projects, San Francisco, Apple, and more. yes full 145
141: Stardust Towers (feat. Pieter Omvlee) 22fae092-1a8a-4d8a-bac5-f6c42f213680 http://designdetails.simplecast.fm/144 In this episode we sat down with Pieter Omvlee, the creator of Bohemian Coding and Sketch. We chat about remote work, building and designing software, creating culture, the vision for Sketch, and more. In this episode we sat down with Pieter Omvlee, the creator of Bohemian Coding and Sketch. We chat about remote work, building and designing software, creating culture, the vision for Sketch, and more.

Come chat with us in our new Slack team! Over 4,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:
Pieter on the web:
Show Notes:
]]>
Wed, 22 Jun 2016 03:00:00 -0700 shows@spec.fm (Spec) Spec 01:01:18 In this episode we sat down with Pieter Omvlee, the creator of Bohemian Coding and Sketch. We chat about remote work, building and designing software, creating culture, the vision for Sketch, and more. In this episode we sat down with Pieter Omvlee, the creator of Bohemian Coding and Sketch. We chat about remote work, building and designing software, creating culture, the vision for Sketch, and more. yes full 144
140: Murky Waters (feat. Mike Davidson) a9ad28de-02a5-4a13-b85f-6217202a66b9 http://designdetails.simplecast.fm/143 This episode has been a long time coming: we finally caught up with Mike Davidson, the previous VP of design at Twitter and an all-around wonderful human. We dig deep into topics like evaluating designers, openness and honesty in tech, building teams, diversity, and more. This episode has been a long time coming: we finally caught up with Mike Davidson, the previous VP of design at Twitter and an all-around wonderful human. We dig deep into topics like evaluating designers, openness and honesty in tech, building teams, diversity, and more.

Come chat with us in our new Slack team! Over 4,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:
Mike on the web:
Show Notes:
]]>
Mon, 20 Jun 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:04:09 This episode has been a long time coming: we finally caught up with Mike Davidson, the previous VP of design at Twitter and an all-around wonderful human. We dig deep into topics like evaluating designers, openness and honesty in tech, building teams, diversity, and more. This episode has been a long time coming: we finally caught up with Mike Davidson, the previous VP of design at Twitter and an all-around wonderful human. We dig deep into topics like evaluating designers, openness and honesty in tech, building teams, div yes full 143
139: Story Time! (feat. Josh Austin) 9c665690-79b0-4512-a87d-4bd300c12511 http://designdetails.simplecast.fm/142 Today we sat down with Josh Austin, a designer working on the VR team at YouTube. We dig into his past, talk about blogs and learning, communities and leveling up, virtual reality and what's next for designers, and so much more. Today we sat down with Josh Austin, a designer working on the VR team at YouTube. We dig into his past, talk about blogs and learning, communities and leveling up, virtual reality and what's next for designers, and so much more.

Come chat with us in our new Slack team! Over 4,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:
Josh on the web:
Show Notes:
]]>
Wed, 15 Jun 2016 03:00:00 -0700 shows@spec.fm (Spec) Spec 01:10:54 Today we sat down with Josh Austin, a designer working on the VR team at YouTube. We dig into his past, talk about blogs and learning, communities and leveling up, virtual reality and what's next for designers, and so much more. Today we sat down with Josh Austin, a designer working on the VR team at YouTube. We dig into his past, talk about blogs and learning, communities and leveling up, virtual reality and what's next for designers, and so much more. yes full 142
138: SlickSlacks (feat. Chanpory Rith) 253c4f33-9c01-4dad-b6db-2f65323c1358 http://designdetails.simplecast.fm/141 In this episode we catch up with Chanpory Rith, co-founder of Mixmax and previously a designer at Google, Dubberly Design Office and Meta Design. We talk about his journey through tech, working at agencies, big companies and startups, advice to young designers, and more. In this episode we catch up with Chanpory Rith, co-founder of Mixmax and previously a designer at Google, Dubberly Design Office and Meta Design. We talk about his journey through tech, working at agencies, big companies and startups, advice to young designers, and more.

Come chat with us in our new Slack team! Over 4,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:
Chanpory on the web:
Show Notes:
]]>
Mon, 13 Jun 2016 03:00:00 -0700 shows@spec.fm (Spec) Spec 01:06:42 In this episode we catch up with Chanpory Rith, co-founder of Mixmax and previously a designer at Google, Dubberly Design Office and Meta Design. We talk about his journey through tech, working at agencies, big companies and startups, advice to young designers, and more. In this episode we catch up with Chanpory Rith, co-founder of Mixmax and previously a designer at Google, Dubberly Design Office and Meta Design. We talk about his journey through tech, working at agencies, big companies and startups, advice to young desi yes full 141
137: NBA Friends (feat. Christophe Tauziet) 675abcbc-a9c6-49d4-a8aa-83281cdb6da0 http://designdetails.simplecast.fm/140 Today we caught up with Christophe Tauziet, a designer at Facebook working on social VR. We dig into his background and hobbies, working at Apple, Parse and Facebook, designing at scale, VR, the future of design, and more. Today we caught up with Christophe Tauziet, a designer at Facebook working on social VR. We dig into his background and hobbies, working at Apple, Parse and Facebook, designing at scale, VR, the future of design, and more.

Come chat with us in our new Slack team! Over 4,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:
Christophe on the web:
Show Notes:
]]>
Wed, 08 Jun 2016 03:00:00 -0700 shows@spec.fm (Spec) Spec 00:53:09 Today we caught up with Christophe Tauziet, a designer at Facebook working on social VR. We dig into his background and hobbies, working at Apple, Parse and Facebook, designing at scale, VR, the future of design, and more. Today we caught up with Christophe Tauziet, a designer at Facebook working on social VR. We dig into his background and hobbies, working at Apple, Parse and Facebook, designing at scale, VR, the future of design, and more. yes full 140
136: All Bridge, No Apple (feat. Rasmus Andersson) 91f9cabe-a987-44a0-848d-e9d17ed75a42 http://designdetails.simplecast.fm/139 In today's episode we sat down with Rasmus Andersson, a designer at Figma who previously designed at Dropbox, Facebook and Spotify. We dig into the world of design tools, programming, design process, collaboration, craft, bridges and apples, and so much more. In today's episode we sat down with Rasmus Andersson, a designer at Figma who previously designed at Dropbox, Facebook and Spotify. We dig into the world of design tools, programming, design process, collaboration, craft, bridges and apples, and so much more.

Come chat with us in our new Slack team! Over 4,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Rasmus on the web:
Show Notes:
]]>
Mon, 06 Jun 2016 03:00:00 -0700 shows@spec.fm (Spec) Spec 01:06:19 In today's episode we sat down with Rasmus Andersson, a designer at Figma who previously designed at Dropbox, Facebook and Spotify. We dig into the world of design tools, programming, design process, collaboration, craft, bridges and apples, and so much more. In today's episode we sat down with Rasmus Andersson, a designer at Figma who previously designed at Dropbox, Facebook and Spotify. We dig into the world of design tools, programming, design process, collaboration, craft, bridges and apples, and so much m yes full 139
135: How Hard Can It Be? (feat. Jasper Hauser) 109d1038-d542-42fa-914f-555e4c4e872d http://designdetails.simplecast.fm/138 In today's show we catch up with Jasper Hauser, the co-founder of SOFA and currently a design manager at Facebook. We dig into Jasper's past, the creation and evolution of SOFA, moving to Palo Alto by way of Facebook, craft and icon design, managing teams and processes, and so much more. In today's show we catch up with Jasper Hauser, the co-founder of SOFA and currently a design manager at Facebook. We dig into Jasper's past, the creation and evolution of SOFA, moving to Palo Alto by way of Facebook, craft and icon design, managing teams and processes, and so much more.

Come chat with us in our new Slack team! Over 4,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Jasper on the web:
Show Notes:
]]>
Wed, 01 Jun 2016 03:00:00 -0700 shows@spec.fm (Spec) Spec 01:01:44 In today's show we catch up with Jasper Hauser, the co-founder of SOFA and currently a design manager at Facebook. We dig into Jasper's past, the creation and evolution of SOFA, moving to Palo Alto by way of Facebook, craft and icon design, managing teams and processes, and so much more. In today's show we catch up with Jasper Hauser, the co-founder of SOFA and currently a design manager at Facebook. We dig into Jasper's past, the creation and evolution of SOFA, moving to Palo Alto by way of Facebook, craft and icon design, managing teams yes full 138
134: Bias Filter (feat. Braden Kowitz) a163fc71-a17d-422b-9112-3d59b2eb2ad6 http://designdetails.simplecast.fm/137 Today we caught up with Braden Kowitz, a design partner at Google Ventures. We dig into Braden's work at GV, his background and journey at Google, prototyping, design process, building a design culture, and more. Today we caught up with Braden Kowitz, a design partner at Google Ventures. We dig into Braden's work at GV, his background and journey at Google, prototyping, design process, building a design culture, and more.

Come chat with us in our new Slack team! Over 4,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Braden on the web:
Show Notes:
]]>
Mon, 30 May 2016 03:00:00 -0700 shows@spec.fm (Spec) Spec 00:59:24 Today we caught up with Braden Kowitz, a design partner at Google Ventures. We dig into Braden's work at GV, his background and journey at Google, prototyping, design process, building a design culture, and more. Today we caught up with Braden Kowitz, a design partner at Google Ventures. We dig into Braden's work at GV, his background and journey at Google, prototyping, design process, building a design culture, and more. yes full 137
133: Follow the Gifs (feat. Sarah Jackson) 0b6013ce-54aa-4121-82d8-a584949b5929 http://designdetails.simplecast.fm/136 Today we're excited to share a very special episode of Design Details! In this show we sat down with Sarah Jackson, the full-time producer of our very own Spec Network. Sarah has been producing all of the Spec podcasts for almost a year, managing all operations, sales, new show onboarding and so much more – we dig into her journey to SF, what it's like building a content network, upcoming projects and more. Today we're excited to share a very special episode of Design Details! In this show we sat down with Sarah Jackson, the full-time producer of our very own Spec Network. Sarah has been producing all of the Spec podcasts for almost a year, managing all operations, sales, new show onboarding and so much more – we dig into her journey to SF, what it's like building a content network, upcoming projects and more.

Come chat with us in our new Slack team! Over 4,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Sarah on the web:
Show Notes:
]]>
Wed, 25 May 2016 03:00:00 -0700 shows@spec.fm (Spec) Spec 01:05:14 Today we're excited to share a very special episode of Design Details! In this show we sat down with Sarah Jackson, the full-time producer of our very own Spec Network. Sarah has been producing all of the Spec podcasts for almost a year, managing all operations, sales, new show onboarding and so much more – we dig into her journey to SF, what it's like building a content network, upcoming projects and more. Today we're excited to share a very special episode of Design Details! In this show we sat down with Sarah Jackson, the full-time producer of our very own Spec Network. Sarah has been producing all of the Spec podcasts for almost a year, managing all oper yes full 136
132: Outdoor Disrupt (feat. Justin Graham) 4482a521-d56f-4c26-b63b-6d906c2816ce http://designdetails.simplecast.fm/135 Today we caught up with Justin Graham after returning from his journey to the Pacific Northwest and Japan. We dig into his background, making the leap to SF, building side projects, freelancing, remote work, traveling and more. Today we caught up with Justin Graham after returning from his journey to the Pacific Northwest and Japan. We dig into his background, making the leap to SF, building side projects, freelancing, remote work, traveling and more.

Come chat with us in our new Slack team! Over 4,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Justin on the web:
Show Notes:
]]>
Mon, 23 May 2016 03:00:00 -0700 shows@spec.fm (Spec) Spec 01:01:15 Today we caught up with Justin Graham after returning from his journey to the Pacific Northwest and Japan. We dig into his background, making the leap to SF, building side projects, freelancing, remote work, traveling and more. Today we caught up with Justin Graham after returning from his journey to the Pacific Northwest and Japan. We dig into his background, making the leap to SF, building side projects, freelancing, remote work, traveling and more. yes full 135
131: A Silicon Valley Eternity (feat. Joshua Taylor) 3fb45d66-2b44-46ab-aa7a-949397956ba5 http://designdetails.simplecast.fm/134 Today we caught up once again with Joshua Taylor, previously a design director at Evernote who is currently contracting and working on a better experience for podcast consumption. We talk about his back story and becoming a designer, growing within organizations, freelancing and humility, leveling up as a junior designer and more Today we caught up once again with Joshua Taylor, previously a design director at Evernote who is currently contracting and working on a better experience for podcast consumption. We talk about his back story and becoming a designer, growing within organizations, freelancing and humility, leveling up as a junior designer and more.

Come chat with us in our new Slack team! Over 4,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Joshua on the web:
Show Notes:
]]>
Wed, 18 May 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:04:51 Today we caught up once again with Joshua Taylor, previously a design director at Evernote who is currently contracting and working on a better experience for podcast consumption. We talk about his back story and becoming a designer, growing within organizations, freelancing and humility, leveling up as a junior designer and more Today we caught up once again with Joshua Taylor, previously a design director at Evernote who is currently contracting and working on a better experience for podcast consumption. We talk about his back story and becoming a designer, growing within organi yes full 134
130: Ramen UI (feat. Linda Dong) 6b1ad9eb-3289-4807-9708-4c46ed0e3864 http://designdetails.simplecast.fm/133 Today we caught up with Linda Dong, a designer who worked on the prototyping team at Apple before leaving to travel the world. We dig into her experiences prototyping, diversity in tech, dealing with criticism, building video games and more. Today we caught up with Linda Dong, a designer who worked on the prototyping team at Apple before leaving to travel the world. We dig into her experiences prototyping, diversity in tech, dealing with criticism, building video games and more.

Come chat with us in our new Slack team! Over 4,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Linda on the web:
Show Notes:
]]>
Mon, 16 May 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:07:30 Today we caught up with Linda Dong, a designer who worked on the prototyping team at Apple before leaving to travel the world. We dig into her experiences prototyping, diversity in tech, dealing with criticism, building video games and more. Today we caught up with Linda Dong, a designer who worked on the prototyping team at Apple before leaving to travel the world. We dig into her experiences prototyping, diversity in tech, dealing with criticism, building video games and more. yes full 133
129: Respect the Craft (feat. Claudio Guglieri) d740f942-b545-4ee3-bfe8-543279a5802c http://designdetails.simplecast.fm/132 Today we were able to catch up with Claudio Guglieri, a designer in SF making beautiful websites and products. We dig into his background as a designer from Spain, his process, honing craft, hiring designers, building producs, writing for yourself, developing personal styles and so much more. Today we were able to catch up with Claudio Guglieri, a designer in SF making beautiful websites and products. We dig into his background as a designer from Spain, his process, honing craft, hiring designers, building products, writing for yourself, developing personal styles and so much more.

Come chat with us in our new Slack team! Over 4,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Claudio on the web:
Show Notes:
]]>
Wed, 11 May 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:09:27 Today we were able to catch up with Claudio Guglieri, a designer in SF making beautiful websites and products. We dig into his background as a designer from Spain, his process, honing craft, hiring designers, building producs, writing for yourself, developing personal styles and so much more. Today we were able to catch up with Claudio Guglieri, a designer in SF making beautiful websites and products. We dig into his background as a designer from Spain, his process, honing craft, hiring designers, building producs, writing for yourself, develo yes full 132
128: I Call Shotgun! (feat. Al Ingram and Ben Mingo) 9c7bfab0-f262-46ac-8fb9-97c2bad06917 http://designdetails.simplecast.fm/131 Today we sat down with Al Ingram and Ben Mingo, two pixel pushers at UENO and recent SF transplants. We dig into their backgrounds and journeys to San Francisco, what it's like working at UENO, finding inspiration, interviewing and more. Today we sat down with Al Ingram and Ben Mingo, two pixel pushers at UENO and recent SF transplants. We dig into their backgrounds and journeys to San Francisco, what it's like working at UENO, finding inspiration, interviewing and more.

Come chat with us in our new Slack team! Over 4,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Al on the web:
Ben on the web:
Show Notes:
]]>
Mon, 09 May 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 00:55:09 Today we sat down with Al Ingram and Ben Mingo, two pixel pushers at UENO and recent SF transplants. We dig into their backgrounds and journeys to San Francisco, what it's like working at UENO, finding inspiration, interviewing and more. Today we sat down with Al Ingram and Ben Mingo, two pixel pushers at UENO and recent SF transplants. We dig into their backgrounds and journeys to San Francisco, what it's like working at UENO, finding inspiration, interviewing and more. yes full 131
127: F of X (feat. Luke Beard) 803fb678-db69-46af-90e2-4c70f37f1c86 http://designdetails.simplecast.fm/130 Today we caught up with Luke Beard, a designer currently working on building Exposure, a platform for photo stories. We invent a new mathematical formula for success, discuss building businesses vs. companies, talk origin stories and making moves to Silicon Valley, and much more. Today we caught up with Luke Beard, a designer currently working on building Exposure, a platform for photo stories. We invent a new mathematical formula for success, discuss building businesses vs. companies, talk origin stories and making moves to Silicon Valley, and much more.

Come chat with us in our new Slack team! Over 4,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Luke on the web:
Show Notes:
]]>
Wed, 04 May 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:02:50 Today we caught up with Luke Beard, a designer currently working on building Exposure, a platform for photo stories. We invent a new mathematical formula for success, discuss building businesses vs. companies, talk origin stories and making moves to Silicon Valley, and much more. Today we caught up with Luke Beard, a designer currently working on building Exposure, a platform for photo stories. We invent a new mathematical formula for success, discuss building businesses vs. companies, talk origin stories and making moves to Silic yes full 130
126: Hone Your Own (feat. Heather Phillips) e4ab865f-f047-40b0-8858-239e4bff0803 http://designdetails.simplecast.fm/129 Today we sat down with Heather Phillips, a designer currently managing at Designer Fund. We chat about her experiences working across a huge range of designers and startups, women in design, mentorship, getting a first job, the value of design school and more. Today we sat down with Heather Phillips, a designer currently managing at Designer Fund. We chat about her experiences working across a huge range of designers and startups, women in design, mentorship, getting a first job, the value of design school and more.

Come chat with us in our new Slack team! Over 4,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Heather on the web:
Show Notes:
]]>
Mon, 02 May 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:00:16 Today we sat down with Heather Phillips, a designer currently managing at Designer Fund. We chat about her experiences working across a huge range of designers and startups, women in design, mentorship, getting a first job, the value of design school and more. Today we sat down with Heather Phillips, a designer currently managing at Designer Fund. We chat about her experiences working across a huge range of designers and startups, women in design, mentorship, getting a first job, the value of design school and yes full 129
125: Back to the Drawing Board, Baby (feat. Vanessa Cho) d84f7f64-22a7-4fd7-9d6f-c7827454ad14 http://designdetails.simplecast.fm/127 Today we caught up with Vanessa Cho, a designer and manager leading the software team at GoPro. We dig into her background as a designer, the hard truths about being a great manager and more. Today we caught up with Vanessa Cho, a designer and manager leading the software team at GoPro. We dig into her background as a designer, the hard truths about being a great manager and more.

Come chat with us in our new Slack team! Over 4,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Vanessa on the web:
Show Notes:
]]>
Wed, 27 Apr 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:16:37 Today we caught up with Vanessa Cho, a designer and manager leading the software team at GoPro. We dig into her background as a designer, the hard truths about being a great manager and more. Today we caught up with Vanessa Cho, a designer and manager leading the software team at GoPro. We dig into her background as a designer, the hard truths about being a great manager and more. no full 127
124: Dazzle (feat. Jeremy Goldberg) afce80e5-e9c5-4d06-bc84-d9be89d1be37 http://designdetails.simplecast.fm/128 Today we caught up once more with Jeremy Goldberg, a designer at Facebook working on Messenger and bots. We dig into designing for AI/bots, critique, process, trust, and more. Oh, and we coin a fun new term for designers. Today we caught up once more with Jeremy Goldberg, a designer at Facebook working on Messenger and bots. We dig into designing for AI/bots, critique, process, trust, and more. Oh, and we coin a fun new term for designers.

Come chat with us in our new Slack team! Over 4,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Jeremy on the web:
Show Notes:
]]>
Mon, 25 Apr 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:06:52 Today we caught up once more with Jeremy Goldberg, a designer at Facebook working on Messenger and bots. We dig into designing for AI/bots, critique, process, trust, and more. Oh, and we coin a fun new term for designers. Today we caught up once more with Jeremy Goldberg, a designer at Facebook working on Messenger and bots. We dig into designing for AI/bots, critique, process, trust, and more. Oh, and we coin a fun new term for designers. no full 128
123: Live @ Github (feat. Carolyn Zhang, Heather Phillips, Mo Woods & Diana Mounter) 74063c1c-d168-4112-aab0-0a57c57be6c4 http://designdetails.simplecast.fm/126 This is it! Our first live episode recorded at GitHub in SF - thank you so much to GitHub for hosting and to everyone who was able to make it out! We had a blast in this episode talking with our four panelists about design mentorship, education, critique and more. This is it! Our first live episode recorded at GitHub in SF - thank you so much to GitHub for hosting and to everyone who was able to make it out! We had a blast in this episode talking with our four panelists about design mentorship, education, critique and more.

If you weren't able to make it to the live show, you can catch the video on our Twitch stream. We'll be hosting more live events soon, so stay in touch on Twitter.

Come chat with us in our new Slack team! Over 4,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Mo on the web:
Diana on the web:
Carolyn on the web:
Heather on the web:
Show Notes:
]]>
Wed, 20 Apr 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:13:54 This is it! Our first live episode recorded at GitHub in SF - thank you so much to GitHub for hosting and to everyone who was able to make it out! We had a blast in this episode talking with our four panelists about design mentorship, education, critique and more. This is it! Our first live episode recorded at GitHub in SF - thank you so much to GitHub for hosting and to everyone who was able to make it out! We had a blast in this episode talking with our four panelists about design mentorship, education, critique yes full 126
122: Lookin' to Cookin' (feat. Josh Puckett & Justin Pervorse) 90200cdb-f6ad-4c3f-89e8-44b7c108d996 http://designdetails.simplecast.fm/125 Today we regrouped with the JPs - Justin Pervorse and Josh Puckett! We dig into cooking, definitions, titles, critique, management and so much more. Today we regrouped with the JPs - Justin Pervorse and Josh Puckett! We dig into cooking, definitions, titles, critique, management and so much more.

Come chat with us in our new Slack team! Over 4,200 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Josh on the web:
Justin on the web:
Show Notes:
]]>
Mon, 18 Apr 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:18:15 Today we regrouped with the JPs - Justin Pervorse and Josh Puckett! We dig into cooking, definitions, titles, critique, management and so much more. Today we regrouped with the JPs - Justin Pervorse and Josh Puckett! We dig into cooking, definitions, titles, critique, management and so much more. yes full 125
121: Web Trauma (feat. Bill Labus and Benjamin De Cock) cdbc35f7-d02f-4f1c-91b9-5bdeced3f887 http://designdetails.simplecast.fm/124 Today we caught up with two members of the Stripe design team, Bill Labus and Benjamin De Cock. We dig into their roles as UI designers, collaborating in code, critique, process and tools at Stripe, working remotely, origin stories, and more. Today we caught up with two members of the Stripe design team, Bill Labus and Benjamin De Cock. We dig into their roles as UI designers, collaborating in code, critique, process and tools at Stripe, working remotely, origin stories, and more.

Come chat with us in our new Slack team! Over 4,200 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Bill on the web:

##### Ben on the web:

Show Notes:
]]>
Wed, 13 Apr 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:09:50 Today we caught up with two members of the Stripe design team, Bill Labus and Benjamin De Cock. We dig into their roles as UI designers, collaborating in code, critique, process and tools at Stripe, working remotely, origin stories, and more. Today we caught up with two members of the Stripe design team, Bill Labus and Benjamin De Cock. We dig into their roles as UI designers, collaborating in code, critique, process and tools at Stripe, working remotely, origin stories, and more. yes full 124
120: Shout Out, Mom! (feat. Adam Polselli) dc70b633-ff2f-420d-9bf6-4f4e44f58d24 http://designdetails.simplecast.fm/123 Today we caught up with Adam Polselli, a product designer and design lead at Dropbox. We dig into current projects at Dropbox, Adam's background, rejection and navigating a career path, hiring designers, what keeps Adam up at night and more. Today we caught up with Adam Polselli, a product designer and design lead at Dropbox. We dig into current projects at Dropbox, Adam's background, rejection and navigating a career path, hiring designers, what keeps Adam up at night and more.

Come chat with us in our new Slack team! Over 4,200 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Adam on the web:
Show Notes:
]]>
Mon, 11 Apr 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:01:15 Today we caught up with Adam Polselli, a product designer and design lead at Dropbox. We dig into current projects at Dropbox, Adam's background, rejection and navigating a career path, hiring designers, what keeps Adam up at night and more. Today we caught up with Adam Polselli, a product designer and design lead at Dropbox. We dig into current projects at Dropbox, Adam's background, rejection and navigating a career path, hiring designers, what keeps Adam up at night and more. yes full 123
119: Dead Sea Scrollbar (feat. Yaron Schoen) 8793d957-5328-4cb9-a9d1-886f6fd12abe http://designdetails.simplecast.fm/122 Today we caught up with Yaron Schoen, a designer at Compass living in New York. We dig into Yaron's background and path into design, the changing environment of client work, building style guides and shipping great work. Today we caught up with Yaron Schoen, a designer at Compass living in New York. We dig into Yaron's background and path into design, the changing environment of client work, building style guides and shipping great work.

Come chat with us in our new Slack team! Over 4,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Yaron on the web:
Show Notes:
]]>
Wed, 06 Apr 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:07:13 Today we caught up with Yaron Schoen, a designer at Compass living in New York. We dig into Yaron's background and path into design, the changing environment of client work, building style guides and shipping great work. Today we caught up with Yaron Schoen, a designer at Compass living in New York. We dig into Yaron's background and path into design, the changing environment of client work, building style guides and shipping great work. yes full 122
118: The Helena Price™ (feat. Helena Price) 6478432b-e360-4dcf-89a6-3fff75a52176 http://designdetails.simplecast.fm/121 Today we were able to sit down with Helena Price, a photographer in SF who has been hard at work on the Techies Project (launching today!). In this show we dig into Techies, Helena's background in tech and path to becoming a full-time photographer, dealing with stagnation and more. Today we were able to sit down with Helena Price, a photographer in SF who has been hard at work on the Techies Project (launching today!). In this show we dig into Techies, Helena's background in tech and path to becoming a full-time photographer, dealing with stagnation and more.

Come chat with us in our new Slack team! Over 4,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Helena on the web:
Show Notes:
]]>
Mon, 04 Apr 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:10:53 Today we were able to sit down with Helena Price, a photographer in SF who has been hard at work on the Techies Project (launching today!). In this show we dig into Techies, Helena's background in tech and path to becoming a full-time photographer, dealing with stagnation and more. Today we were able to sit down with Helena Price, a photographer in SF who has been hard at work on the Techies Project (launching today!). In this show we dig into Techies, Helena's background in tech and path to becoming a full-time photographer, dealin yes full 121
117: The Cool Tools (feat. Dylan Field) 27f1eb47-8543-41af-86ea-80d5c2f8e802 http://designdetails.simplecast.fm/120 Today we caught up with Dylan Field, the CEO and co-founder of Figma. In this episode we dig into Dylan's background, design tools an Figma, internships, opinionated design, design education and more. Today we caught up with Dylan Field, the CEO and co-founder of Figma. In this episode we dig into Dylan's background, design tools an Figma, internships, opinionated design, design education and more.

Come chat with us in our new Slack team! Over 3,500 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Dylan on the web:
Show Notes:
]]>
Wed, 30 Mar 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:09:02 Today we caught up with Dylan Field, the CEO and co-founder of Figma. In this episode we dig into Dylan's background, design tools an Figma, internships, opinionated design, design education and more. Today we caught up with Dylan Field, the CEO and co-founder of Figma. In this episode we dig into Dylan's background, design tools an Figma, internships, opinionated design, design education and more. yes full 120
116: At Least There's Catan (feat. Connor McSheffrey) 93da5991-9ace-498a-9bb2-bb84228a7a27 http://designdetails.simplecast.fm/119 Today we sat down with Connor McSheffrey, a photographer and designer in SF most recently at Dropbox and VSCO. We dig into his background in programming and freelancing, making the leap to SF, photography and more! Today we sat down with Connor McSheffrey, a photographer and designer in SF most recently at Dropbox and VSCO. We dig into his background in programming and freelancing, making the leap to SF, photography and more!

Come chat with us in our new Slack team! Over 3,500 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Connor on the Web:
Show Notes:
]]>
Mon, 28 Mar 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:01:56 Today we sat down with Connor McSheffrey, a photographer and designer in SF most recently at Dropbox and VSCO. We dig into his background in programming and freelancing, making the leap to SF, photography and more! Today we sat down with Connor McSheffrey, a photographer and designer in SF most recently at Dropbox and VSCO. We dig into his background in programming and freelancing, making the leap to SF, photography and more! yes full 119
115: Puppies, People, 'Puters (feat. Kelly Sutton) f36dc6a7-1e13-4877-8ca5-ff88a6224778 http://designdetails.simplecast.fm/118 Today we caught up with Kelly Sutton, a software engineer currently leading product at imgix who is well-known in the design community for co-founding Designer News. In this episode we dig into Kelly's background, learn how to deal with a company shutdown and the story of Designer News, discuss tips for managing ICs and more! Today we caught up with Kelly Sutton, a software engineer currently leading product at imgix who is well-known in the design community for co-founding Designer News. In this episode we dig into Kelly's background, learn how to deal with a company shutdown and the story of Designer News, discuss tips for managing ICs and more!

Come chat with us in our new Slack team! Over 3,500 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:
Kelly on the Web:
Show Notes:
]]>
Wed, 23 Mar 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:00:35 Today we caught up with Kelly Sutton, a software engineer currently leading product at imgix who is well-known in the design community for co-founding Designer News. In this episode we dig into Kelly's background, learn how to deal with a company shutdown and the story of Designer News, discuss tips for managing ICs and more! Today we caught up with Kelly Sutton, a software engineer currently leading product at imgix who is well-known in the design community for co-founding Designer News. In this episode we dig into Kelly's background, learn how to deal with a company shutdown yes full 118
114: Coffee Road Show (feat. Linda Eliasen + Jon Gold) c89f28ab-e195-4165-9c00-cc9e4c5f92f6 http://designdetails.simplecast.fm/117 Today we sat down with two previous guests and our good friends, Linda Eliasen and Jon Gold! We catch up on what these two have been working on, we dig into work culture and gendered pronouns, we explore design tools and working too late, and at the end we kept a special bonus segment where Brian defends the thing people hate most about Silicon Valley. Today we sat down with two previous guests and our good friends, Linda Eliasen and Jon Gold! We catch up on what these two have been working on, we dig into work culture and gendered pronouns, we explore design tools and working too late, and at the end we kept a special bonus segment where Brian defends the thing people hate most about Silicon Valley.

Come chat with us in our new Slack team! Over 3,500 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
  • Dropbox
  • Atomic - Mention @designdetailsfm to Atomic on Twitter and they’ll double your free trial to 60 days, or restart an old one if you’ve checked them out before.
Linda on the Web:
Jon on the Web:
Show Notes:
]]>
Mon, 21 Mar 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:17:37 Today we sat down with two previous guests and our good friends, Linda Eliasen and Jon Gold! We catch up on what these two have been working on, we dig into work culture and gendered pronouns, we explore design tools and working too late, and at the end we kept a special bonus segment where Brian defends the thing people hate most about Silicon Valley. Today we sat down with two previous guests and our good friends, Linda Eliasen and Jon Gold! We catch up on what these two have been working on, we dig into work culture and gendered pronouns, we explore design tools and working too late, and at the end w yes full 117
113: Artist Formerly Known As (feat. Jeff Smith) 5bd021d8-be47-4288-a7b3-26a9f0fcd99d http://designdetails.simplecast.fm/116 Today we caught up with our good friend Jeff Smith, a designer at Facebook, a shralper at heart, and an all-around amazing designer. We start off digging into Jeff's background but quickly start to uncover what makes a great manager, how to deal with imposter syndrome, filling in skill gaps, answering the eternal 1x vs 2x debate, and addressing the importance of visual design. Today we caught up with our good friend Jeff Smith, a designer at Facebook, a shralper at heart, and an all-around amazing designer. We start off digging into Jeff's background but quickly start to uncover what makes a great manager, how to deal with imposter syndrome, filling in skill gaps, answering the eternal 1x vs 2x debate, and addressing the importance of visual design.

Come chat with us in our new Slack team! Over 3,500 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:
Jeff on the Web:
Show Notes:
]]>
Wed, 16 Mar 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:00:59 Today we caught up with our good friend Jeff Smith, a designer at Facebook, a shralper at heart, and an all-around amazing designer. We start off digging into Jeff's background but quickly start to uncover what makes a great manager, how to deal with imposter syndrome, filling in skill gaps, answering the eternal 1x vs 2x debate, and addressing the importance of visual design. Today we caught up with our good friend Jeff Smith, a designer at Facebook, a shralper at heart, and an all-around amazing designer. We start off digging into Jeff's background but quickly start to uncover what makes a great manager, how to deal with impo yes full 116
112: Turtleneck Tutorials (feat. Marshall Bock) f04786da-cff7-47ba-a5ae-6504b9e79403 http://designdetails.simplecast.fm/115 Today we finally had the chance to catch Marshall Bock on a solo recording! We dig deeper into his background, dive into sketch tips and tricks, talk about grids and guides and how to build great cross-platform experiences. Today we finally had the chance to catch Marshall Bock on a solo recording! We dig deeper into his background, dive into sketch tips and tricks, talk about grids and guides and how to build great cross-platform experiences.

Come chat with us in our new Slack team! Over 3,500 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:
Marshall on the Web:
Show Notes:
]]>
Mon, 14 Mar 2016 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:17:03 Today we finally had the chance to catch Marshall Bock on a solo recording! We dig deeper into his background, dive into sketch tips and tricks, talk about grids and guides and how to build great cross-platform experiences. Today we finally had the chance to catch Marshall Bock on a solo recording! We dig deeper into his background, dive into sketch tips and tricks, talk about grids and guides and how to build great cross-platform experiences. yes full 115
111: Claim to Flame (feat. Vicki Tan) 51d0afaf-153f-471f-bbb9-402093885410 http://designdetails.simplecast.fm/114 Today we sat down with Vicki Tan, a designer here in SF working at Lyft and wearing all black. In this episode we get into Vicki's journey to design, crafting a better interview process, management and having successful one-on-ones, hustling, getting a first design job and more. Today we sat down with Vicki Tan, a designer here in SF working at Lyft and wearing all black. In this episode we get into Vicki's journey to design, crafting a better interview process, management and having successful one-on-ones, hustling, getting a first design job and more.

Come chat with us in our new Slack team! Over 3,500 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Vicki on the Web:
Show Notes:
]]>
Wed, 09 Mar 2016 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:08:49 Today we sat down with Vicki Tan, a designer here in SF working at Lyft and wearing all black. In this episode we get into Vicki's journey to design, crafting a better interview process, management and having successful one-on-ones, hustling, getting a first design job and more. Today we sat down with Vicki Tan, a designer here in SF working at Lyft and wearing all black. In this episode we get into Vicki's journey to design, crafting a better interview process, management and having successful one-on-ones, hustling, getting a fi yes full 114
110: MAMP Patient Zero (feat. Joey Banks) 8573a862-c123-46a8-9f64-cff7bb058935 http://designdetails.simplecast.fm/113 Today we caught up with Joey Banks, a designer here in SF, previously at Scoot Networks. Joey is a self-described junior designer, and in today's show we dig into his journy in the industry, his next projects, what makes a good mentor, how to build your network and more. Today we caught up with Joey Banks, a designer here in SF, previously at Scoot Networks. Joey is a self-described junior designer, and in today's show we dig into his journy in the industry, his next projects, what makes a good mentor, how to build your network and more.

Come chat with us in our new Slack team! Over 3,500 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Joey on the Web:
Show Notes:
]]>
Mon, 07 Mar 2016 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:06:47 Today we caught up with Joey Banks, a designer here in SF, previously at Scoot Networks. Joey is a self-described junior designer, and in today's show we dig into his journy in the industry, his next projects, what makes a good mentor, how to build your network and more. Today we caught up with Joey Banks, a designer here in SF, previously at Scoot Networks. Joey is a self-described junior designer, and in today's show we dig into his journy in the industry, his next projects, what makes a good mentor, how to build your n yes full 113
109: Vim Me Up, Scottie (feat. Dan Eden) cb53aae2-734a-451c-a280-ae65ae6fdbe2 http://designdetails.simplecast.fm/112 Today we sat down with Daniel Eden, a design engineer at Dropbox. We dig briefly into Dan's background, talk about the relationship between designers and developers, writing CSS at scale, scratching your own itch and more. Today we sat down with Daniel Eden, a design engineer at Dropbox. We dig briefly into Dan's background, talk about the relationship between designers and developers, writing CSS at scale, scratching your own itch and more.

Come chat with us in our new Slack team! Over 3,500 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Dan on the Web:
Show Notes:
]]>
Wed, 02 Mar 2016 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:02:08 Today we sat down with Daniel Eden, a design engineer at Dropbox. We dig briefly into Dan's background, talk about the relationship between designers and developers, writing CSS at scale, scratching your own itch and more. Today we sat down with Daniel Eden, a design engineer at Dropbox. We dig briefly into Dan's background, talk about the relationship between designers and developers, writing CSS at scale, scratching your own itch and more. yes full 112
108: The Flopping Dead (feat. Brad Simpson) e35c5d8e-2832-4746-84c4-c826f822d1af http://designdetails.simplecast.fm/111 Today we caught up with the designer formerly known as Brad Simpson. Brad currently designs at Medium, but he comes from a highly technical hardware background at IDEO and MIT. We dig into Brad's transition from hardware/mechanical design to software design, the challenges of designing at Medium and more. Today we caught up with the designer formerly known as Brad Simpson. Brad currently designs at Medium, but he comes from a highly technical hardware background at IDEO and MIT. We dig into Brad's transition from hardware/mechanical design to software design, the challenges of designing at Medium and more.

Come chat with us in our new Slack team! Over 3,500 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Brad on the Web:
Show Notes:
]]>
Mon, 29 Feb 2016 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:02:41 Today we caught up with the designer formerly known as Brad Simpson. Brad currently designs at Medium, but he comes from a highly technical hardware background at IDEO and MIT. We dig into Brad's transition from hardware/mechanical design to software design, the challenges of designing at Medium and more. Today we caught up with the designer formerly known as Brad Simpson. Brad currently designs at Medium, but he comes from a highly technical hardware background at IDEO and MIT. We dig into Brad's transition from hardware/mechanical design to software desi yes full 111
107: Just Enough Wax: LIVE @ Epicurrence afb49065-b0f9-4da8-8cb1-eea3d4cf8a19 http://designdetails.simplecast.fm/110 Today we have a very special, experimental episode of Design Details. On our last night of Epicurrence #3 we invited folks to come answer one of three questions; the result is a 28-guest mega-episode! Today we have a very special, experimental episode of Design Details. On our last night of Epicurrence #3 we invited folks to come answer one of three questions; the result is a 28-guest mega-episode!

Come chat with us in our new Slack team! Over 3,500 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Show Notes:
]]>
Wed, 24 Feb 2016 05:00:00 -0800 shows@spec.fm (Spec) Spec 00:55:01 Today we have a very special, experimental episode of Design Details. On our last night of Epicurrence #3 we invited folks to come answer one of three questions; the result is a 28-guest mega-episode! Today we have a very special, experimental episode of Design Details. On our last night of Epicurrence #3 we invited folks to come answer one of three questions; the result is a 28-guest mega-episode! yes full 110
106: Glorified Hustlers (feat. Mackey Saturday & Meg Robichaud) 1c2579ed-e5f5-4e02-b739-6058e1a414ae http://designdetails.simplecast.fm/109 For our third Epicurrence episode we sat down with Mackey Saturday and Meg Robichaud. We catch up on their past year, branding and illustration work, how to navigate company politics, the way to get critique as a freelancer, and a handfull of listener questions at the end! For our third Epicurrence episode we sat down with Mackey Saturday and Meg Robichaud. We catch up on their past year, branding and illustration work, how to navigate company politics, the way to get critique as a freelancer, and a handfull of listener questions at the end!

Come chat with us in our new Slack team! Over 3,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Mackey on the web:
Meg on the web:
Show Notes:
]]>
Mon, 22 Feb 2016 10:00:00 -0800 shows@spec.fm (Spec) Spec 00:59:29 For our third Epicurrence episode we sat down with Mackey Saturday and Meg Robichaud. We catch up on their past year, branding and illustration work, how to navigate company politics, the way to get critique as a freelancer, and a handfull of listener questions at the end! For our third Epicurrence episode we sat down with Mackey Saturday and Meg Robichaud. We catch up on their past year, branding and illustration work, how to navigate company politics, the way to get critique as a freelancer, and a handfull of listener que yes full 109
105: Arbiter of Taste (feat. Ben Cline & Anson Schall) d4bb104d-e90c-42ed-9e9c-229c18bfaa6b http://designdetails.simplecast.fm/108 In another Epicurrence recording of Design Details, we caught up with Ben Cline and Anson Schall of Rally Interactive. We dig into Rally's humble beginnings, the merit of design awards, how designers and developers work together, and the worst kind of client. In another Epicurrence recording of Design Details, we caught up with Ben Cline and Anson Schall of Rally Interactive. We dig into Rally's humble beginnings, the merit of design awards, how designers and developers work together, and the worst kind of client.

Come chat with us in our new Slack team! Over 3,500 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Ben on the web:
Anson on the web:
Show Notes:
]]>
Wed, 17 Feb 2016 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:11:23 In another Epicurrence recording of Design Details, we caught up with Ben Cline and Anson Schall of Rally Interactive. We dig into Rally's humble beginnings, the merit of design awards, how designers and developers work together, and the worst kind of client. In another Epicurrence recording of Design Details, we caught up with Ben Cline and Anson Schall of Rally Interactive. We dig into Rally's humble beginnings, the merit of design awards, how designers and developers work together, and the worst kind of cli yes full 108
104: All Good in the Hood (feat. Jen & Amy Hood) 19fcafdf-88c3-49f5-89f7-ee9c0dba3bb3 http://designdetails.simplecast.fm/107 In our first Epicurrence recording we caught up with the talented Amy and Jen Hood, founders of Hoodzpah Design. In this show we chat with the twins about their backgrounds as designers, work life balance, side projects, pricing and how to start a design business. In our first Epicurrence recording we caught up with the talented Amy and Jen Hood, founders of Hoodzpah Design. In this show we chat with the twins about their backgrounds as designers, work life balance, side projects, pricing and how to start a design business.

Come chat with us in our new Slack team! Over 3,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Amy on the web:
Jen on the web:
Show Notes:
]]>
Mon, 15 Feb 2016 09:00:00 -0800 shows@spec.fm (Spec) Spec 01:03:40 In our first Epicurrence recording we caught up with the talented Amy and Jen Hood, founders of Hoodzpah Design. In this show we chat with the twins about their backgrounds as designers, work life balance, side projects, pricing and how to start a design business. In our first Epicurrence recording we caught up with the talented Amy and Jen Hood, founders of Hoodzpah Design. In this show we chat with the twins about their backgrounds as designers, work life balance, side projects, pricing and how to start a design yes full 107
103: Sacrifice for Pixels (feat. Drew Wilson & Dann Petty) 8faa7c61-3939-42cd-8f27-862420ad710f http://designdetails.simplecast.fm/106 In another special roundtable episode of Design Details, we caught up with Drew Wilson and Dann Petty, the creators of the Valio Con and Epicurrence design conferences. We dig into the ethos of their creations, the hardest parts of pulling together a community, and what it takes to create a physical experience for hundreds of people. In another special roundtable episode of Design Details, we caught up with Drew Wilson and Dann Petty, the creators of the Valio Con and Epicurrence design conferences. We dig into the ethos of their creations, the hardest parts of pulling together a community, and what it takes to create a physical experience for hundreds of people.

Come chat with us in our new Slack team! Over 3,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:
Dann on the Web:
Drew on the Web:
Show Notes:
]]>
Wed, 10 Feb 2016 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:18:50 In another special roundtable episode of Design Details, we caught up with Drew Wilson and Dann Petty, the creators of the Valio Con and Epicurrence design conferences. We dig into the ethos of their creations, the hardest parts of pulling together a community, and what it takes to create a physical experience for hundreds of people. In another special roundtable episode of Design Details, we caught up with Drew Wilson and Dann Petty, the creators of the Valio Con and Epicurrence design conferences. We dig into the ethos of their creations, the hardest parts of pulling together a comm yes full 106
102: Sick Ajax Skills (feat. Adam Michela) bff7974a-7252-42f0-ab12-f371b67fd527 http://designdetails.simplecast.fm/105 This episode with Adam Michela was soopa fun; Adam is a designer at AirBnb, previously at Last, Facebook and Gowalla among others. We caught up to talk about Adam's background as a designer, building style guides at scale, the impact of engineering on user experience, and more. This episode with Adam Michela was soopa fun; Adam is a designer at AirBnb, previously at Last, Facebook and Gowalla among others. We caught up to talk about Adam's background as a designer, building style guides at scale, the impact of engineering on user experience, and more.

Come chat with us in our new Slack team! Over 3,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Adam on the web:
Show Notes:
]]>
Mon, 08 Feb 2016 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:08:00 This episode with Adam Michela was soopa fun; Adam is a designer at AirBnb, previously at Last, Facebook and Gowalla among others. We caught up to talk about Adam's background as a designer, building style guides at scale, the impact of engineering on user experience, and more. This episode with Adam Michela was soopa fun; Adam is a designer at AirBnb, previously at Last, Facebook and Gowalla among others. We caught up to talk about Adam's background as a designer, building style guides at scale, the impact of engineering on use yes full 105
101: Everyone's Thirsty (feat. Katie Zhu & Tara Mann) e00293c6-4e95-42f7-bee5-bbbe7338b5e1 http://designdetails.simplecast.fm/104 In another roundtable episode of Design Details, we caught up with Katie Zhu and Tara Mann to chat about social media, personal brands, new media, storytelling and our favorite undiscovered apps! In another roundtable episode of Design Details, we caught up with Katie Zhu and Tara Mann to chat about social media, personal brands, new media, storytelling and our favorite undiscovered apps!

Come chat with us in our new Slack team! Over 3,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:
Katie on the Web:
Tara on the Web:
Show Notes:
]]>
Wed, 03 Feb 2016 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:15:04 In another roundtable episode of Design Details, we caught up with Katie Zhu and Tara Mann to chat about social media, personal brands, new media, storytelling and our favorite undiscovered apps! In another roundtable episode of Design Details, we caught up with Katie Zhu and Tara Mann to chat about social media, personal brands, new media, storytelling and our favorite undiscovered apps! yes full 104
100: Goldilocks Fidelity (feat. Daniel Burka) ea43eba3-3a9e-4593-a69b-1a78465d9e76 http://designdetails.simplecast.fm/103 Episode 100! We made it - thank you so much to everyone has listened to an episode, shared the show with a friend or reached out to us on Twitter this past year; we wouldn't be here without you. For this special episode we caught up with Daniel Burka to talk about his background, process, critique, what keeps him up at night and more. Enjoy! Episode 100! We made it - thank you so much to everyone has listened to an episode, shared the show with a friend or reached out to us on Twitter this past year; we wouldn't be here without you. For this special episode we caught up with Daniel Burka to talk about his background, process, critique, what keeps him up at night and more. Enjoy!

Come chat with us in our new Slack team! Over 3,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

Daniel on the Web:
Show Notes:
]]>
Mon, 01 Feb 2016 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:05:32 Episode 100! We made it - thank you so much to everyone has listened to an episode, shared the show with a friend or reached out to us on Twitter this past year; we wouldn't be here without you. For this special episode we caught up with Daniel Burka to talk about his background, process, critique, what keeps him up at night and more. Enjoy! Episode 100! We made it - thank you so much to everyone has listened to an episode, shared the show with a friend or reached out to us on Twitter this past year; we wouldn't be here without you. For this special episode we caught up with Daniel Burka to t yes full 103
99: Internet Points (feat. Ian Silber) 92f97f1d-1df5-4e91-a3f4-95b717e54f71 http://designdetails.simplecast.fm/102 Today we sat down with Ian Silber, a designer (and design manager!) at Instagram. We dig into his background, talk about taking bets on young designers, his key learnings in management, briefly diverge into cooking, and return back to his process for hiring at Instagram. Today we sat down with Ian Silber, a designer (and design manager!) at Instagram. We dig into his background, talk about taking bets on young designers, his key learnings in management, briefly diverge into cooking, and return back to his process for hiring at Instagram.

Come chat with us in our new Slack team! Over 3,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:
Ian on the Web:
Show Notes:
]]>
Thu, 28 Jan 2016 09:00:00 -0800 shows@spec.fm (Spec) Spec 01:08:05 Today we sat down with Ian Silber, a designer (and design manager!) at Instagram. We dig into his background, talk about taking bets on young designers, his key learnings in management, briefly diverge into cooking, and return back to his process for hiring at Instagram. Today we sat down with Ian Silber, a designer (and design manager!) at Instagram. We dig into his background, talk about taking bets on young designers, his key learnings in management, briefly diverge into cooking, and return back to his process for hiri yes full 102
98: Inhale the Flattery (feat. Marc Hemeon & Joshua Taylor) c144dad4-c17b-4c92-99bf-15e3951d32e9 http://designdetails.simplecast.fm/101 For episode 98 we sat down with Marc Hemeon and Joshua Taylor to talk about their new company, Design Inc. We also dig into their biggest advice for young designers, what they would learn if they could start again, soul vs. ego and what it takes to surround yourself with the best people. For episode 98 we sat down with Marc Hemeon and Joshua Taylor to talk about their new company, Design Inc. We also dig into their biggest advice for young designers, what they would learn if they could start again, soul vs. ego and what it takes to surround yourself with the best people.

Come chat with us in our new Slack team! Over 3,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

Marc on the Web:
Josh on the Web:
Show Notes:
]]>
Mon, 25 Jan 2016 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:04:23 For episode 98 we sat down with Marc Hemeon and Joshua Taylor to talk about their new company, Design Inc. We also dig into their biggest advice for young designers, what they would learn if they could start again, soul vs. ego and what it takes to surround yourself with the best people. For episode 98 we sat down with Marc Hemeon and Joshua Taylor to talk about their new company, Design Inc. We also dig into their biggest advice for young designers, what they would learn if they could start again, soul vs. ego and what it takes to surrou yes full 101
97: Eleven Month Itch (feat. Marshall Bock & Joshua Sortino) 4defe49b-1908-4ee9-b8b0-b6df582fd539 http://designdetails.simplecast.fm/100 In today's episode of Design Details we brought the Vicarious crew, Marshall Bock and Josh Sortino, over to have a round table discussion about design leadership. This is a different format from our usual shows, so ping us on Twitter @designdetailsfm with your thoughts and feedback! In today's episode of Design Details we brought the Vicarious crew, Marshall Bock and Josh Sortino, over to have a round table discussion about design leadership. This is a different format from our usual shows, so ping us on Twitter @designdetailsfm with your thoughts and feedback!

Come chat with us in our new Slack team! Over 3,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

Sponsors:
Josh on the Web:
Marshall on the Web:
Show Notes:
]]>
Wed, 20 Jan 2016 10:00:00 -0800 shows@spec.fm (Spec) Spec 01:04:35 In today's episode of Design Details we brought the Vicarious crew, Marshall Bock and Josh Sortino, over to have a round table discussion about design leadership. This is a different format from our usual shows, so ping us on Twitter @designdetailsfm with your thoughts and feedback! In today's episode of Design Details we brought the Vicarious crew, Marshall Bock and Josh Sortino, over to have a round table discussion about design leadership. This is a different format from our usual shows, so ping us on Twitter @designdetailsfm with yes full 100
96: Granola Mogul (feat. Kerem Suer) ea52c246-8c09-4444-a407-bdac1c068fea http://designdetails.simplecast.fm/99 Today we caught up with Kerem Suer, a product designer at Operator. We've been itching to chat with Kerem for the past year, and it was so fun to finally get to catch up! In this episode we talk about Kerem's background as a designer and sailor, career progression, side projects, and the dumbest domain names we've ever bought. Today we caught up with Kerem Suer, a product designer at Operator. We've been itching to chat with Kerem for the past year, and it was so fun to finally get to catch up! In this episode we talk about Kerem's background as a designer and sailor, career progression, side projects, and the dumbest domain names we've ever bought.

Come chat with us in our new Slack team! Over 3,000 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Kerem on the Web:
Show Notes:
]]>
Mon, 18 Jan 2016 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:00:52 Today we caught up with Kerem Suer, a product designer at Operator. We've been itching to chat with Kerem for the past year, and it was so fun to finally get to catch up! In this episode we talk about Kerem's background as a designer and sailor, career progression, side projects, and the dumbest domain names we've ever bought. Today we caught up with Kerem Suer, a product designer at Operator. We've been itching to chat with Kerem for the past year, and it was so fun to finally get to catch up! In this episode we talk about Kerem's background as a designer and sailor, career pr yes full 99
95: Sandwich Artist (feat. Brian Benitez) 269681d3-852e-45ba-8eab-999b07ea5bae http://designdetails.simplecast.fm/98 For our first new recording in 2016 we caught up with Brian Benitez, a designer who built Collective Ray over the past 5 years and has just recently joined the team at Weebly. We chat about his origins as a designer, making the switch to Weebly, moving to SF and, of course, sandwich art. For our first new recording in 2016 we caught up with Brian Benitez, a designer who built Collective Ray over the past 5 years and has just recently joined the team at Weebly. We chat about his origins as a designer, making the switch to Weebly, moving to SF and, of course, sandwich art.

Come chat with us in our new Slack team! Over 2,900 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Brian on the Web:
Show Notes:
]]>
Wed, 13 Jan 2016 05:00:00 -0800 shows@spec.fm (Spec) Spec 00:55:02 For our first new recording in 2016 we caught up with Brian Benitez, a designer who built Collective Ray over the past 5 years and has just recently joined the team at Weebly. We chat about his origins as a designer, making the switch to Weebly, moving to SF and, of course, sandwich art. For our first new recording in 2016 we caught up with Brian Benitez, a designer who built Collective Ray over the past 5 years and has just recently joined the team at Weebly. We chat about his origins as a designer, making the switch to Weebly, moving to yes full 98
94: Best of 2015 - Part 4 0d5882cc-0c5b-4c2d-a0a3-9cf9eff89c88 http://designdetails.simplecast.fm/96 For the next two weeks we're taking some time off with our friends and family - to tide everyone over, we've compiled four episodes with some of our favorite clips of 2015. We hope you enjoy listening back and re-discovering some of our earliest content, and we'll be back with new interviews in 2016! For the next two weeks we're taking some time off with our friends and family - to tide everyone over, we've compiled four episodes with some of our favorite clips of 2015. We hope you enjoy listening back and re-discovering some of our earliest content, and we'll be back with new interviews in 2016!

Come chat with us in our new Slack team! Over 2,700 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Design Details on the Web:
Show Notes:
]]>
Mon, 11 Jan 2016 05:00:00 -0800 shows@spec.fm (Spec) Spec 00:57:51 For the next two weeks we're taking some time off with our friends and family - to tide everyone over, we've compiled four episodes with some of our favorite clips of 2015. We hope you enjoy listening back and re-discovering some of our earliest content, and we'll be back with new interviews in 2016! For the next two weeks we're taking some time off with our friends and family - to tide everyone over, we've compiled four episodes with some of our favorite clips of 2015. We hope you enjoy listening back and re-discovering some of our earliest content, no full 96
93: Best of 2015 - Part 3 22e10480-6dce-45c8-9952-dfc3ed1ed06e http://designdetails.simplecast.fm/97 For the next two weeks we're taking some time off with our friends and family - to tide everyone over, we've compiled four episodes with some of our favorite clips of 2015. We hope you enjoy listening back and re-discovering some of our earliest content, and we'll be back with new interviews in 2016! For the next two weeks we're taking some time off with our friends and family - to tide everyone over, we've compiled four episodes with some of our favorite clips of 2015. We hope you enjoy listening back and re-discovering some of our earliest content, and we'll be back with new interviews in 2016!

Come chat with us in our new Slack team! Over 2,700 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Design Details on the Web:
Show Notes:
]]>
Wed, 06 Jan 2016 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:07:27 For the next two weeks we're taking some time off with our friends and family - to tide everyone over, we've compiled four episodes with some of our favorite clips of 2015. We hope you enjoy listening back and re-discovering some of our earliest content, and we'll be back with new interviews in 2016! For the next two weeks we're taking some time off with our friends and family - to tide everyone over, we've compiled four episodes with some of our favorite clips of 2015. We hope you enjoy listening back and re-discovering some of our earliest content, yes full 97
92: Best of 2015 - Part 2 ca4bd292-7466-4129-8f36-4655b1ff97ee http://designdetails.simplecast.fm/95 For the next two weeks we're taking some time off with our friends and family - to tide everyone over, we've compiled four episodes with some of our favorite clips of 2015. We hope you enjoy listening back and re-discovering some of our earliest content, and we'll be back with new interviews in 2016! For the next two weeks we're taking some time off with our friends and family - to tide everyone over, we've compiled four episodes with some of our favorite clips of 2015. We hope you enjoy listening back and re-discovering some of our earliest content, and we'll be back with new interviews in 2016!

Come chat with us in our new Slack team! Over 2,700 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Design Details on the Web:
Show Notes:
]]>
Mon, 04 Jan 2016 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:01:16 For the next two weeks we're taking some time off with our friends and family - to tide everyone over, we've compiled four episodes with some of our favorite clips of 2015. We hope you enjoy listening back and re-discovering some of our earliest content, and we'll be back with new interviews in 2016! For the next two weeks we're taking some time off with our friends and family - to tide everyone over, we've compiled four episodes with some of our favorite clips of 2015. We hope you enjoy listening back and re-discovering some of our earliest content, no full 95
91: Best of 2015 - Part 1 7aaf9da2-e02a-4b5a-bdfa-87cd588d3a63 http://designdetails.simplecast.fm/94 For the next two weeks we're taking some time off with our friends and family - to tide everyone over, we've compiled four episodes with some of our favorite clips of 2015. We hope you enjoy listening back and re-discovering some of our earliest content, and we'll be back with new interviews in 2016! For the next two weeks we're taking some time off with our friends and family - to tide everyone over, we've compiled four episodes with some of our favorite clips of 2015. We hope you enjoy listening back and re-discovering some of our earliest content, and we'll be back with new interviews in 2016!

Come chat with us in our new Slack team! Over 2,700 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Design Details on the Web:
Show Notes:
]]>
Wed, 30 Dec 2015 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:11:21 For the next two weeks we're taking some time off with our friends and family - to tide everyone over, we've compiled four episodes with some of our favorite clips of 2015. We hope you enjoy listening back and re-discovering some of our earliest content, and we'll be back with new interviews in 2016! For the next two weeks we're taking some time off with our friends and family - to tide everyone over, we've compiled four episodes with some of our favorite clips of 2015. We hope you enjoy listening back and re-discovering some of our earliest content, yes full 94
90: Master Yodan (feat. Dan Mall) 605fb03a-77d5-4f12-b840-93683f204d75 http://designdetails.simplecast.fm/93 In our last recorded guest episode of 2015, we were able to catch up with Dan Mall! We couldn't have asked for a more perfect episode to end our year - in this show Dan drops knowledge about freelancing, job titles, and helping people do the best work of their lives. In our last recorded guest episode of 2015, we were able to catch up with Dan Mall! We couldn't have asked for a more perfect episode to end our year - in this show Dan drops knowledge about freelancing, job titles, and helping people do the best work of their lives.

Come chat with us in our new Slack team! Over 2,600 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Dan on the Web:
Show Notes:
]]>
Mon, 28 Dec 2015 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:07:01 In our last recorded guest episode of 2015, we were able to catch up with Dan Mall! We couldn't have asked for a more perfect episode to end our year - in this show Dan drops knowledge about freelancing, job titles, and helping people do the best work of their lives. In our last recorded guest episode of 2015, we were able to catch up with Dan Mall! We couldn't have asked for a more perfect episode to end our year - in this show Dan drops knowledge about freelancing, job titles, and helping people do the best work of no full 93
89: Sh**s & Gigs (feat. Justin Pervorse) 9856a735-c72b-4dfd-97c0-d51e66bc5ec6 http://designdetails.simplecast.fm/91 In this episode we caught up with Justin Pervorse, a designer and illustrator at Dropbox, and previously at MailChimp. We dig into Justin's backstory, making vinyl toys at MailChimp, creating a custom t-shirt deli shop at Dropbox and the worst parts about living in San Francisco. In this episode we caught up with Justin Pervorse, a designer and illustrator at Dropbox, and previously at MailChimp. We dig into Justin's backstory, making vinyl toys at MailChimp, creating a custom t-shirt deli shop at Dropbox and the worst parts about living in San Francisco.

Come chat with us in our new Slack team! Over 2,500 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Justin on the Web:
Show Notes:
]]>
Wed, 23 Dec 2015 05:00:00 -0800 shows@spec.fm (Spec) Spec 00:50:22 In this episode we caught up with Justin Pervorse, a designer and illustrator at Dropbox, and previously at MailChimp. We dig into Justin's backstory, making vinyl toys at MailChimp, creating a custom t-shirt deli shop at Dropbox and the worst parts about living in San Francisco. In this episode we caught up with Justin Pervorse, a designer and illustrator at Dropbox, and previously at MailChimp. We dig into Justin's backstory, making vinyl toys at MailChimp, creating a custom t-shirt deli shop at Dropbox and the worst parts about yes full 91
88: Deuces, Coding (feat. Katie Zhu) 86ef4d28-ca58-4bc5-b786-34c43ce6612b http://designdetails.simplecast.fm/92 This week we caught up with Katie Zhu, an engineer and product manager at Medium. We pick Katie's brain about product management, holacracy and organizational structure, exploring new products, email newsletters, imposter syndrome and more. This week we caught up with Katie Zhu, an engineer and product manager at Medium. We pick Katie's brain about product management, holacracy and organizational structure, exploring new products, email newsletters, imposter syndrome and more.

Come chat with us in our new Slack team! Over 2,500 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Katie on the Web:
Show Notes:
]]>
Mon, 21 Dec 2015 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:03:34 This week we caught up with Katie Zhu, an engineer and product manager at Medium. We pick Katie's brain about product management, holacracy and organizational structure, exploring new products, email newsletters, imposter syndrome and more. This week we caught up with Katie Zhu, an engineer and product manager at Medium. We pick Katie's brain about product management, holacracy and organizational structure, exploring new products, email newsletters, imposter syndrome and more. yes full 92
87: Chillustrations (feat. Meg Robichaud) 63cded3c-674f-4082-ae9a-49eb2e529a66 http://designdetails.simplecast.fm/90 In this episode we finally caught up with Meg Robichaud, a designer and illustrator traveling and freelancing around the world. We talk about her background as a creator, the nomad lifestyle, her illustration processes and some of her latest thoughts and writings. In this episode we finally caught up with Meg Robichaud, a designer and illustrator traveling and freelancing around the world. We talk about her background as a creator, the nomad lifestyle, her illustration processes and some of her latest thoughts and writings.

Come chat with us in our new Slack team! Over 2,500 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Meg on the Web:
Show Notes:
]]>
Wed, 16 Dec 2015 05:00:00 -0800 shows@spec.fm (Spec) Spec 00:54:30 In this episode we finally caught up with Meg Robichaud, a designer and illustrator traveling and freelancing around the world. We talk about her background as a creator, the nomad lifestyle, her illustration processes and some of her latest thoughts and writings. In this episode we finally caught up with Meg Robichaud, a designer and illustrator traveling and freelancing around the world. We talk about her background as a creator, the nomad lifestyle, her illustration processes and some of her latest thoughts and no full 90
86: Adult Recess (feat. Susan Lin) a499f901-e2cb-46d6-ad4d-0491df34916d http://designdetails.simplecast.fm/89 This week we caught up with Susan Lin, an artist, designer and coder building things over at Treehouse. In this episode we dig into Susan's background as a creative, her process as a designer and developer, how remote work and flat organizations can maximize productivity, and the value of building a personal brand. This week we caught up with Susan Lin, an artist, designer and coder building things over at Treehouse. In this episode we dig into Susan's background as a creative, her process as a designer and developer, how remote work and flat organizations can maximize productivity, and the value of building a personal brand.

Come chat with us in our new Slack team! Over 2,500 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
  • Dropbox
  • Iconfinder - use the promo code 'DESIGNDETAILS' to save 50% off your first month of Iconfinder Pro
Susan on the Web:
Show Notes:
]]>
Mon, 14 Dec 2015 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:05:43 This week we caught up with Susan Lin, an artist, designer and coder building things over at Treehouse. In this episode we dig into Susan's background as a creative, her process as a designer and developer, how remote work and flat organizations can maximize productivity, and the value of building a personal brand. This week we caught up with Susan Lin, an artist, designer and coder building things over at Treehouse. In this episode we dig into Susan's background as a creative, her process as a designer and developer, how remote work and flat organizations can maxim yes full 89
85: Lettering Liaison (feat. Tobias Frere-Jones) 2ef24c8c-c2cb-4b27-b7b9-92573e25a8bf http://designdetails.simplecast.fm/88 This is the last of our New York recordings with none-other than legendary type designer, Tobias Frere-Jones! Tobias recently released Mallory, his new company's first family, so the timing couldn't have been better. In this episode we learn about Tobias' design process, how he first became interested in type, and just what kind of details go into creating an entire family. This is the last of our New York recordings with none-other than legendary type designer, Tobias Frere-Jones! Tobias recently released Mallory, his new company's first family, so the timing couldn't have been better. In this episode we learn about Tobias' design process, how he first became interested in type, and just what kind of details go into creating an entire family.

Come chat with us in our new Slack team! Over 2,500 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Tobias on the Web:
Show Notes:
]]>
Wed, 09 Dec 2015 05:00:00 -0800 shows@spec.fm (Spec) Spec 00:50:40 This is the last of our New York recordings with none-other than legendary type designer, Tobias Frere-Jones! Tobias recently released Mallory, his new company's first family, so the timing couldn't have been better. In this episode we learn about Tobias' design process, how he first became interested in type, and just what kind of details go into creating an entire family. This is the last of our New York recordings with none-other than legendary type designer, Tobias Frere-Jones! Tobias recently released Mallory, his new company's first family, so the timing couldn't have been better. In this episode we learn about Tobias' no full 88
84: Crochet Monotype (feat. Aaron Moodie) 2bb689e9-062b-43d5-8ad7-34d6379c92a2 http://designdetails.simplecast.fm/87 Last month while in New York City we got to catch up with Aaron Moodie, a product designer at Etsy. We pick his brain about hustling, portfolio advice, moving around the world for new jobs and the future of apps. Last month while in New York City we got to catch up with Aaron Moodie, a product designer at Etsy. We pick his brain about hustling, portfolio advice, moving around the world for new jobs and the future of apps.

Come chat with us in our new Slack team! Over 2,300 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
  • Dropbox
  • Iconfinder - use the promo code 'DESIGNDETAILS' to save 50% off your first month of Iconfinder Pro
Aaron on the Web:
Show Notes:
]]>
Mon, 07 Dec 2015 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:02:27 Last month while in New York City we got to catch up with Aaron Moodie, a product designer at Etsy. We pick his brain about hustling, portfolio advice, moving around the world for new jobs and the future of apps. Last month while in New York City we got to catch up with Aaron Moodie, a product designer at Etsy. We pick his brain about hustling, portfolio advice, moving around the world for new jobs and the future of apps. yes full 87
83: It Depends (Live @Etsy, feat. Randy Hunt) 116722dc-afeb-4a1b-941e-935f40eb15ae http://designdetails.simplecast.fm/86 A few weeks ago we flew to New York City to interview some of our favorite designers. On our first day in the city we had the chance to sit down with Randy Hunt, the VP of Design at Etsy, in front of the entire Etsy design team for a very special live episode! In this show we dig into some of the challenges Randy's facing as the design org continues to expand, his journey to becoming a designer, what keeps him awake at night, and much more. A few weeks ago we flew to New York City to interview some of our favorite designers. On our first day in the city we had the chance to sit down with Randy Hunt, the VP of Design at Etsy, in front of the entire Etsy design team for a very special live episode! In this show we dig into some of the challenges Randy's facing as the design org continues to expand, his journey to becoming a designer, what keeps him awake at night, and much more.

Come chat with us in our new Slack team! Over 2,400 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Randy on the Web:
Show Notes:

3:00 - Introductions

]]>
Wed, 02 Dec 2015 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:01:48 A few weeks ago we flew to New York City to interview some of our favorite designers. On our first day in the city we had the chance to sit down with Randy Hunt, the VP of Design at Etsy, in front of the entire Etsy design team for a very special live episode! In this show we dig into some of the challenges Randy's facing as the design org continues to expand, his journey to becoming a designer, what keeps him awake at night, and much more. A few weeks ago we flew to New York City to interview some of our favorite designers. On our first day in the city we had the chance to sit down with Randy Hunt, the VP of Design at Etsy, in front of the entire Etsy design team for a very special live epi no full 86
82: Salt Boogers (feat. Charlie Waite) 9f38e666-981b-4533-ac64-036d1b813796 http://designdetails.simplecast.fm/85 Today we sat down with Charlie Waite, a designer at GoPro who previously spent time designing at Focus Lab. We explore how design works at GoPro, the key differences between agency and product work, navigating work-life balance and working as a freelancer on the side. Today we sat down with Charlie Waite, a designer at GoPro who previously spent time designing at Focus Lab. We explore how design works at GoPro, the key differences between agency and product work, navigating work-life balance and working as a freelancer on the side.

Come chat with us in our new Slack team! Over 2,400 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
  • Dropbox
  • Iconfinder - use the promo code 'DESIGNDETAILS' to save 50% off your first month of Iconfinder Pro
Charlie on the Web:
Show Notes:

4:00 - Introductions

]]>
Mon, 30 Nov 2015 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:04:14 Today we sat down with Charlie Waite, a designer at GoPro who previously spent time designing at Focus Lab. We explore how design works at GoPro, the key differences between agency and product work, navigating work-life balance and working as a freelancer on the side. Today we sat down with Charlie Waite, a designer at GoPro who previously spent time designing at Focus Lab. We explore how design works at GoPro, the key differences between agency and product work, navigating work-life balance and working as a freelancer yes full 85
81: It's Complicated... (Live at Etsy, feat. Joel Califa, Jessica Harllee & Justin Edmund) e9f23c51-4ba6-4570-bcf6-e425031f1feb http://designdetails.simplecast.fm/84 Last weekend we visited New York City to meet some of our favorite designers for Design Details! While we were there, we hosted our first-ever live meetup at the Etsy offices. More than 70 people came to catch up with Justin Edmund, Jessica Harllee and Joel Califa; we picked their brains about their journey, mistakes they've made, mentorship vs. coaching, learning new skills, and more - we even answered questions from the audience! Huge thanks to Aaron, Diana and Floris at Etsy for making this event possible; we can't wait to host our next meetup in San Francisco next year! Last weekend we visited New York City to meet some of our favorite designers for Design Details! While we were there, we hosted our first-ever live meetup at the Etsy offices. More than 70 people came to catch up with Justin Edmund, Jessica Harllee and Joel Califa; we picked their brains about their journey, mistakes they've made, mentorship vs. coaching, learning new skills, and more - we even answered questions from the audience! Huge thanks to Aaron, Diana and Floris at Etsy for making this event possible; we can't wait to host our next meetup in San Francisco next year!

Come chat with us in our new Slack team! Over 2,300 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Joel on the Web:
Jessica on the Web:
Justin on the Web:
Show Notes:

4:00 - Introductions

]]>
Wed, 25 Nov 2015 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:18:08 Last weekend we visited New York City to meet some of our favorite designers for Design Details! While we were there, we hosted our first-ever live meetup at the Etsy offices. More than 70 people came to catch up with Justin Edmund, Jessica Harllee and Joel Califa; we picked their brains about their journey, mistakes they've made, mentorship vs. coaching, learning new skills, and more - we even answered questions from the audience! Huge thanks to Aaron, Diana and Floris at Etsy for making this event possible; we can't wait to host our next meetup in San Francisco next year! Last weekend we visited New York City to meet some of our favorite designers for Design Details! While we were there, we hosted our first-ever live meetup at the Etsy offices. More than 70 people came to catch up with Justin Edmund, Jessica Harllee and Jo yes full 84
80: Helvetica, Helvetica, Helvetica (feat. Jason Santa Maria) 00434eef-4dd7-46d9-9145-dcddf6c9b18e http://designdetails.simplecast.fm/83 Last weekend we visited New York City and caught up with one of our favorite designers, Jason Santa Maria. We pick his brain about process, mentorship and typography, and he walked us through his journey as a designer. Last weekend we visited New York City and caught up with one of our favorite designers, Jason Santa Maria. We pick his brain about process, mentorship and typography, and he walked us through his journey as a designer.

Come chat with us in our new Slack team! Over 2,200 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
  • Dropbox
  • Iconfinder - use the promo code 'DESIGNDETAILS' to save 50% off your first month of Iconfinder Pro
Jason on the Web:
Show Notes:

4:00 - Introductions

20:00 - Typekit, Editorially, etc.

40:00 - Type

45:00 - Process, mentorship

]]>
Mon, 23 Nov 2015 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:06:37 Last weekend we visited New York City and caught up with one of our favorite designers, Jason Santa Maria. We pick his brain about process, mentorship and typography, and he walked us through his journey as a designer. Last weekend we visited New York City and caught up with one of our favorite designers, Jason Santa Maria. We pick his brain about process, mentorship and typography, and he walked us through his journey as a designer. yes full 83
79: Fart Director (feat. Gene Ross) 04879b6e-ae4a-4969-8d6c-184a32c108ef http://designdetails.simplecast.fm/82 Today we caught up with Gene Ross, a designer at Luxe currently NOT living in San Francisco. We picked Gene's brain about imposter syndrome, work life balance, his Runescape journey and coming to the west coast. Today we caught up with Gene Ross, a designer at Luxe currently NOT living in San Francisco. We picked Gene's brain about imposter syndrome, work life balance, his Runescape journey and coming to the west coast.

Come chat with us in our new Slack team! Over 2,200 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Gene on the Web:
Show Notes:

3:00 - Introductions

]]>
Wed, 18 Nov 2015 05:00:00 -0800 shows@spec.fm (Spec) Spec 00:52:30 Today we caught up with Gene Ross, a designer at Luxe currently NOT living in San Francisco. We picked Gene's brain about imposter syndrome, work life balance, his Runescape journey and coming to the west coast. Today we caught up with Gene Ross, a designer at Luxe currently NOT living in San Francisco. We picked Gene's brain about imposter syndrome, work life balance, his Runescape journey and coming to the west coast. yes full 82
78: Bob Ross Petty (feat. Dann Petty) d11eac7e-d8bb-4017-af3c-c9922b6c062d http://designdetails.simplecast.fm/81 We've been waiting to chat with Dann Petty for months now, but finally after returning from Epicurrence No. 2 we made it happen! In this episode we chat about Dann's background as a designer, what's going on with Epicurrence, his advice for freelancers, and tips for young designers just getting started. If you enjoy this episode, go to Epicurrence.com and sign up to come hang out this February in Park City, Utah! We've been waiting to chat with Dann Petty for months now, but finally after returning from Epicurrence No. 2 we made it happen! In this episode we chat about Dann's background as a designer, what's going on with Epicurrence, his advice for freelancers, and tips for young designers just getting started. If you enjoy this episode, go to Epicurrence.com and sign up to come hang out this February in Park City, Utah!

Come chat with us in our new Slack team! Over 2,200 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
  • Dropbox
  • Iconfinder - use the promo code 'DESIGNDETAILS' to save 50% off your first month of Iconfinder Pro
Dann on the Web:
Show Notes:

4:00 - Introductions

_12:00__ - Epicurrence and Diversity

22:00 - Background, advice

]]>
Mon, 16 Nov 2015 05:00:00 -0800 shows@spec.fm (Spec) Spec 00:59:30 We've been waiting to chat with Dann Petty for months now, but finally after returning from Epicurrence No. 2 we made it happen! In this episode we chat about Dann's background as a designer, what's going on with Epicurrence, his advice for freelancers, and tips for young designers just getting started. If you enjoy this episode, go to Epicurrence.com and sign up to come hang out this February in Park City, Utah! We've been waiting to chat with Dann Petty for months now, but finally after returning from Epicurrence No. 2 we made it happen! In this episode we chat about Dann's background as a designer, what's going on with Epicurrence, his advice for freelancers, a yes full 81
77: Pegacorns (feat. Drew Wilson) 4a0d18b4-db02-47ca-9b1b-1973bb3bc1ef http://designdetails.simplecast.fm/80 Today we sat down with Drew Wilson, a prolific designer, developer and product creator who recently moved to the Bay Area to build Plasso. We chat about Drew's background, how he builds so many products, taking risks and his observations on design in the valley. Today we sat down with Drew Wilson, a prolific designer, developer and product creator who recently moved to the Bay Area to build Plasso. We chat about Drew's background, how he builds so many products, taking risks and his observations on design in the valley.

Come chat with us in our new Slack team! Over 1,900 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Drew on the Web:
Show Notes:

3:00 - Introductions

15:00 - Taking risks, road trips

]]>
Wed, 11 Nov 2015 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:05:18 Today we sat down with Drew Wilson, a prolific designer, developer and product creator who recently moved to the Bay Area to build Plasso. We chat about Drew's background, how he builds so many products, taking risks and his observations on design in the valley. Today we sat down with Drew Wilson, a prolific designer, developer and product creator who recently moved to the Bay Area to build Plasso. We chat about Drew's background, how he builds so many products, taking risks and his observations on design in the no full 80
76: Full Feltron (feat. Justin Edmund) 81b0a15f-c5de-4690-bf99-1680f928bca9 http://designdetails.simplecast.fm/79 Today we sat down with Justin Edmund, a designer well known for his work at Pinterest over the last four years. We chat about his background in design, going to design school, what the Pinterest process is like, and how Justin is looking into the future of design. Today we sat down with Justin Edmund, a designer well known for his work at Pinterest over the last four years. We chat about his background in design, going to design school, what the Pinterest process is like, and how Justin is looking into the future of design.

Come chat with us in our new Slack team! Over 1,900 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
  • Dropbox
  • Iconfinder - use the promo code 'DESIGNDETAILS' to save 50% off your first month of Iconfinder Pro
Justin on the Web:
Show Notes:

3:00 - Introductions

]]>
Mon, 09 Nov 2015 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:10:02 Today we sat down with Justin Edmund, a designer well known for his work at Pinterest over the last four years. We chat about his background in design, going to design school, what the Pinterest process is like, and how Justin is looking into the future of design. Today we sat down with Justin Edmund, a designer well known for his work at Pinterest over the last four years. We chat about his background in design, going to design school, what the Pinterest process is like, and how Justin is looking into the future o yes full 79
75: Gitway Drug (feat. Brent Jackson) a61fa9f7-bcf0-4a6d-b16d-3d4f535915df http://designdetails.simplecast.fm/78 Today we sat down with Brent Jackson aka jxnblk to talk about all things design and development! Brent is a prolific creator and we love his tools here at Spec - we chat with him about side projects, being a designer and a developer, building design systems and how he got his nickname. Today we sat down with Brent Jackson aka jxnblk to talk about all things design and development! Brent is a prolific creator and we love his tools here at Spec - we chat with him about side projects, being a designer and a developer, building design systems and how he got his nickname.

Come chat with us in our new Slack team! Over 1,900 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Brent on the Web:
Show Notes:

4:00 - Introductions

9:00 - Jackson's work

]]>
Wed, 04 Nov 2015 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:05:48 Today we sat down with Brent Jackson aka jxnblk to talk about all things design and development! Brent is a prolific creator and we love his tools here at Spec - we chat with him about side projects, being a designer and a developer, building design systems and how he got his nickname. Today we sat down with Brent Jackson aka jxnblk to talk about all things design and development! Brent is a prolific creator and we love his tools here at Spec - we chat with him about side projects, being a designer and a developer, building design syste no full 78
74: Itchy Feet (feat. Diana Mounter) 84c2871b-3ac0-45e1-9989-1ced7bd3746d http://designdetails.simplecast.fm/77 In today's episode of Design Details we caught up with Diana Mounter, aka Broccolini. Diana is a designer at Etsy, and in this show we chat about her journey to Etsy, why git is a valuable tool for designers and the hardest part about onboarding new hires. In today's episode of Design Details we caught up with Diana Mounter, aka Broccolini. Diana is a designer at Etsy, and in this show we chat about her journey to Etsy, why git is a valuable tool for designers and the hardest part about onboarding new hires.

Come chat with us in our new Slack team! Over 1,900 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
  • Dropbox
  • Iconfinder - use the promo code 'DESIGNDETAILS' to save 50% off your first month of Iconfinder Pro
Diana on the Web:
Show Notes:

3:00 - Introductions

12:00 - Background

28:00 - Coding, git, startups

]]>
Mon, 02 Nov 2015 05:00:00 -0800 shows@spec.fm (Spec) Spec 01:08:56 In today's episode of Design Details we caught up with Diana Mounter, aka Broccolini. Diana is a designer at Etsy, and in this show we chat about her journey to Etsy, why git is a valuable tool for designers and the hardest part about onboarding new hires. In today's episode of Design Details we caught up with Diana Mounter, aka Broccolini. Diana is a designer at Etsy, and in this show we chat about her journey to Etsy, why git is a valuable tool for designers and the hardest part about onboarding new hires no full 77
73: Feedback Friends (feat. Katie Dill) 6a8ddbf6-3a80-485f-8073-decb42fd13f9 http://designdetails.simplecast.fm/76 This week we had the chance to sit down with Katie Dill, the head of experience design at Airbnb. We talked about her background as a designer, what she looks for in new hires, how designers can work more effectively with businesses, and the critique process used at Airbnb. This week we had the chance to sit down with Katie Dill, the head of experience design at Airbnb. We talked about her background as a designer, what she looks for in new hires, how designers can work more effectively with businesses, and the critique process used at Airbnb.

Come chat with us in our new Slack team! Over 1,800 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Katie on the Web:
Show Notes:

2:00 - Introductions

24:00 - Background

]]>
Wed, 28 Oct 2015 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:05:48 This week we had the chance to sit down with Katie Dill, the head of experience design at Airbnb. We talked about her background as a designer, what she looks for in new hires, how designers can work more effectively with businesses, and the critique process used at Airbnb. This week we had the chance to sit down with Katie Dill, the head of experience design at Airbnb. We talked about her background as a designer, what she looks for in new hires, how designers can work more effectively with businesses, and the critique proc no full 76
72: No...Nope...Not At All (feat. Morgan Knutson) 3d9aae81-4e42-47c5-89fd-5f6f843cefbb http://designdetails.simplecast.fm/75 Today we caught up with Morgan Knutson, a co-founder and designer at Shift, notable for his previous work at Dropbox and Google. In this episode we talk about what it takes to get hired as a designer, Morgan's background, working at Google, and how to get things done as a designer. Today we caught up with Morgan Knutson, a co-founder and designer at Shift, notable for his previous work at Dropbox and Google. In this episode we talk about what it takes to get hired as a designer, Morgan's background, working at Google, and how to get things done as a designer.

Come chat with us in our new Slack team! Over 1,500 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
  • Dropbox
  • Iconfinder - use the promo code 'DESIGNDETAILS' to save 50% off your first month of Iconfinder Pro
Morgan on the Web:
Show Notes:

2:00 - Introductions

11:00 - Getting hired

16:00 - Background

]]>
Mon, 26 Oct 2015 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:00:53 Today we caught up with Morgan Knutson, a co-founder and designer at Shift, notable for his previous work at Dropbox and Google. In this episode we talk about what it takes to get hired as a designer, Morgan's background, working at Google, and how to get things done as a designer. Today we caught up with Morgan Knutson, a co-founder and designer at Shift, notable for his previous work at Dropbox and Google. In this episode we talk about what it takes to get hired as a designer, Morgan's background, working at Google, and how to get no full 75
71: Tomb Braider (feat. Maykel Loomans) 4e8c1661-c2a2-4e88-931b-8cf39db991a6 http://designdetails.simplecast.fm/74 In today's episode we sat down with Maykel Loomans, a designer and developer currently working on search at Facebook and is notable for his previous work at Instagram. In this episode we chat about Maykel's background as a designer, working at scale, mentorship and more. In today's episode we sat down with Maykel Loomans, a designer and developer currently working on search at Facebook and is notable for his previous work at Instagram. In this episode we chat about Maykel's background as a designer, working at scale, mentorship and more.

Come chat with us in our new Slack team! Over 1,500 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Maykel on the Web:
Show Notes:

3:00 - Introductions

27:00 - Facebook

56:00 - Mentorship

]]>
Wed, 21 Oct 2015 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:15:31 In today's episode we sat down with Maykel Loomans, a designer and developer currently working on search at Facebook and is notable for his previous work at Instagram. In this episode we chat about Maykel's background as a designer, working at scale, mentorship and more. In today's episode we sat down with Maykel Loomans, a designer and developer currently working on search at Facebook and is notable for his previous work at Instagram. In this episode we chat about Maykel's background as a designer, working at scale, ment yes full 74
70: Nothing's Sacred, Not Even Goats (feat. Ash Huang) 2f8ed269-9944-47ee-9765-72d1428dafef http://designdetails.simplecast.fm/73 For episode 70 we sat down with Ash Huang, an independent designer, illustrator and writer here in San Francisco. In the past Ash worked on brand design at Twitter, brand and product design at Pinterest, and has most recently published her own book, The Firesteel. For episode 70 we sat down with Ash Huang, an independent designer, illustrator and writer here in San Francisco. In the past Ash worked on brand design at Twitter, brand and product design at Pinterest, and has most recently published her own book, The Firesteel.

Come chat with us in our new Slack team! Over 900 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
  • Dropbox
  • Iconfinder - use the promo code 'DESIGNDETAILS' to save 50% off your first month of Iconfinder Pro
Ash on the Web:
Show Notes:

4:00 - Introductions

20:00 - Writing

]]>
Mon, 19 Oct 2015 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:03:26 For episode 70 we sat down with Ash Huang, an independent designer, illustrator and writer here in San Francisco. In the past Ash worked on brand design at Twitter, brand and product design at Pinterest, and has most recently published her own book, The Firesteel. For episode 70 we sat down with Ash Huang, an independent designer, illustrator and writer here in San Francisco. In the past Ash worked on brand design at Twitter, brand and product design at Pinterest, and has most recently published her own book, The no full 73
69: Epicurrence Live (feat. Dustin Senos + Haraldur Thorleifsson) 451ec36a-46ae-4e6d-bd55-bf96a08cc836 http://designdetails.simplecast.fm/72 Welcome to our first live episode of Design Details! We recorded this show last week at Epicurrence North Shore with Haraldur Thorleifsson and Dustin Senos - we dig into inspiration, mentorship, identifying potential and more. Let us know what you think of this live format on Twitter! Welcome to our first live episode of Design Details! We recorded this show last week at Epicurrence North Shore with Haraldur Thorleifsson and Dustin Senos - we dig into inspiration, mentorship, identifying potential and more. Let us know what you think of this live format on Twitter!

Come chat with us in our new Slack team! Over 1,400 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Haraldur on the Web:
Dustin on the Web:
Show Notes:

4:00 - Inspiration

12:00 - Mentorship

24:00 - Sharing work

34:00 - Designers

45:00 - Q&A

]]>
Wed, 14 Oct 2015 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:00:57 Welcome to our first live episode of Design Details! We recorded this show last week at Epicurrence North Shore with Haraldur Thorleifsson and Dustin Senos - we dig into inspiration, mentorship, identifying potential and more. Let us know what you think of this live format on Twitter! Welcome to our first live episode of Design Details! We recorded this show last week at Epicurrence North Shore with Haraldur Thorleifsson and Dustin Senos - we dig into inspiration, mentorship, identifying potential and more. Let us know what you think o no full 72
68: Should Designers Cat? (feat. Trevor McNaughton + Katie Rinkevich) 364fb315-f480-4b30-83d4-b771a9856de2 http://designdetails.simplecast.fm/69 Today we had a very fun, very casual conversation with Katie Rinkevich and Trevor McNaughton, both product designers living here in San Francisco. We chat about A/B testing, accidentally becoming designers and the concept car method of designing products. Today we had a very fun, very casual conversation with Katie Rinkevich and Trevor McNaughton, both product designers living here in San Francisco. We chat about A/B testing, accidentally becoming designers and the concept car method of designing products.

Come chat with us in our new Slack team! Over 1,400 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
  • Dropbox
  • Iconfinder - use the promo code 'DESIGNDETAILS' to save 50% off your first month of Iconfinder Pro
Katie on the Web:
Trevor on the Web:
Show Notes:

3:00 - Introductions, story time

]]>
Mon, 12 Oct 2015 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:01:29 Today we had a very fun, very casual conversation with Katie Rinkevich and Trevor McNaughton, both product designers living here in San Francisco. We chat about A/B testing, accidentally becoming designers and the concept car method of designing products. Today we had a very fun, very casual conversation with Katie Rinkevich and Trevor McNaughton, both product designers living here in San Francisco. We chat about A/B testing, accidentally becoming designers and the concept car method of designing products. yes full 69
67: Open the Kimono (feat. Soleio Cuervo) 236c1c15-c495-4885-a501-f04872aa24b1 http://designdetails.simplecast.fm/71 Today we caught up with Soleio Cuervo, a designer, advisor and investor. He's well known for laying the groundwork of Facebook's early design team and, of course, his work on the original incarnation of the 'like' button. He currently advises many companies and startups in tech, and we had a blast digging into his stories and lessons learned! Today we caught up with Soleio Cuervo, a designer, advisor and investor. He's well known for laying the groundwork of Facebook's early design team and, of course, his work on the original incarnation of the 'like' button. He currently advises many companies and startups in tech, and we had a blast digging into his stories and lessons learned!

Come chat with us in our new Slack team! Over 900 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Soleio on the Web:
Show Notes:

3:00 - Introductions

13:00 - Facebook

48:00 - New designers

]]>
Wed, 07 Oct 2015 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:07:27 Today we caught up with Soleio Cuervo, a designer, advisor and investor. He's well known for laying the groundwork of Facebook's early design team and, of course, his work on the original incarnation of the 'like' button. He currently advises many companies and startups in tech, and we had a blast digging into his stories and lessons learned! Today we caught up with Soleio Cuervo, a designer, advisor and investor. He's well known for laying the groundwork of Facebook's early design team and, of course, his work on the original incarnation of the 'like' button. He currently advises many compani yes full 71
66: Kittenish (feat. Ryan Hoover) 89166569-de96-4afc-8c44-0f26e91b91bb http://designdetails.simplecast.fm/70 For episode 66 we caught up with Ryan Hoover, the founder of Product Hunt. We get insights into PH's latest podcasting branch, building in public, what it's like designing and building Product Hunt, and some of the biggest mistakes Ryan sees people making. For episode 66 we caught up with Ryan Hoover, the founder of Product Hunt. We get insights into PH's latest podcasting branch, building in public, what it's like designing and building Product Hunt, and some of the biggest mistakes Ryan sees people making.

Come chat with us in our new Slack team! Over 900 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
  • Dropbox
  • Iconfinder - use the promo code 'DESIGNDETAILS' to save 50% off your first month of Iconfinder Pro
Ryan on the Web:
Show Notes:

3:00 - Introductions

9:00 - Podcasting, building in public

42:00 - Designing Product Hunt

]]>
Mon, 05 Oct 2015 05:00:00 -0700 shows@spec.fm (Spec) Spec 01:06:18 For episode 66 we caught up with Ryan Hoover, the founder of Product Hunt. We get insights into PH's latest podcasting branch, building in public, what it's like designing and building Product Hunt, and some of the biggest mistakes Ryan sees people making. For episode 66 we caught up with Ryan Hoover, the founder of Product Hunt. We get insights into PH's latest podcasting branch, building in public, what it's like designing and building Product Hunt, and some of the biggest mistakes Ryan sees people making no full 70
65: Meatwad Flip-Flops (feat. Linda Eliasen) 79ea3fcf-08f8-419a-9825-6b26dfae1c94 http://designdetails.simplecast.fm/68 Today we sat down with Linda Eliasen to chat about the latest happenings in her career, what it was like illustrating for Cartoon Network and her favorite project at Dropbox. We also take the time to dig through Linda's journey as a designer leading up until now as she sets off on her next adventure. Today we sat down with Linda Eliasen to chat about the latest happenings in her career, what it was like illustrating for Cartoon Network and her favorite project at Dropbox. We also take the time to dig through Linda's journey as a designer leading up until now as she sets off on her next adventure.

Come chat with us in our new Slack team! Over 900 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
  • Harvest - use the promo code 'designdetails' to save 50% off your first month of Harvest
Linda on the Web:
Show Notes:

3:00 - Introductions

10:00 - Stories

]]>
Wed, 30 Sep 2015 07:00:00 -0700 shows@spec.fm (Spec) Spec 01:03:03 Today we sat down with Linda Eliasen to chat about the latest happenings in her career, what it was like illustrating for Cartoon Network and her favorite project at Dropbox. We also take the time to dig through Linda's journey as a designer leading up until now as she sets off on her next adventure. Today we sat down with Linda Eliasen to chat about the latest happenings in her career, what it was like illustrating for Cartoon Network and her favorite project at Dropbox. We also take the time to dig through Linda's journey as a designer leading up un no full 68
64: Get Tricky (feat. Alli Dryer) a4c41fac-79a7-4c9d-acfd-32c6488354f4 http://designdetails.simplecast.fm/67 Today we caught up with Alli Dryer, a designer and architect working on the Twitter timeline. In this show we chat about Alli's background in design and architecture, what it's like to design at Twitter and what she's working on next. Today we caught up with Alli Dryer, a designer and architect working on the Twitter timeline. In this show we chat about Alli's background in design and architecture, what it's like to design at Twitter and what she's working on next.

Come chat with us in our new Slack team! Over 900 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
  • Dropbox
  • Iconfinder - use the promo code 'DESIGNDETAILS' to save 50% off your first month of Iconfinder Pro
Alli on the Web:
Show Notes:

4:00 - Introductions

11:00 - Architecture and starting up

20:00 - Twitter

36:00 - Interests

]]>
Mon, 28 Sep 2015 04:00:00 -0700 shows@spec.fm (Spec) Spec 01:05:59 Today we caught up with Alli Dryer, a designer and architect working on the Twitter timeline. In this show we chat about Alli's background in design and architecture, what it's like to design at Twitter and what she's working on next. Today we caught up with Alli Dryer, a designer and architect working on the Twitter timeline. In this show we chat about Alli's background in design and architecture, what it's like to design at Twitter and what she's working on next. yes full 67
63: More Nougat (feat. Jon Lax) 08c2e530-39b9-4f1c-8f9d-dfff4b556d09 http://designdetails.simplecast.fm/66 For episode 63 we sat down with Jon Lax, one of the design directors at Facebook overseeing the Utility Org. Jon is well-known for his writings during his time at Teehan+Lax, the design agency he co-founded with Geoff Teehan. In this show we talk about his work at Facebook, design culture, designing at scale, and of course, Jon's backstory as a designer. For episode 63 we sat down with Jon Lax, one of the design directors at Facebook overseeing the Utility Org. Jon is well-known for his writings during his time at Teehan+Lax, the design agency he co-founded with Geoff Teehan. In this show we talk about his work at Facebook, design culture, designing at scale, and of course, Jon's backstory as a designer.

Come chat with us in our new Slack team! Over 900 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Jon on the Web:
Show Notes:

2:00 - Introductions

4:00 - Culture

19:00 - Backstory

44:00 - Designing at scale, more

]]>
Wed, 23 Sep 2015 04:00:00 -0700 shows@spec.fm (Spec) Spec 01:27:21 For episode 63 we sat down with Jon Lax, one of the design directors at Facebook overseeing the Utility Org. Jon is well-known for his writings during his time at Teehan+Lax, the design agency he co-founded with Geoff Teehan. In this show we talk about his work at Facebook, design culture, designing at scale, and of course, Jon's backstory as a designer. For episode 63 we sat down with Jon Lax, one of the design directors at Facebook overseeing the Utility Org. Jon is well-known for his writings during his time at Teehan+Lax, the design agency he co-founded with Geoff Teehan. In this show we talk about hi yes full 66
62: Pencil Mileage (feat. Alice Lee) 507aaff6-0a0d-4257-be71-73b0bc55ec85 http://designdetails.simplecast.fm/65 In today's episode we caught up with Alice Lee, a designer, illustrator and developer living in San Francisco. Alice is well-known for her work at Dropbox, illustrating for the New York Times, and her latest freelance work across a range of amazing companies. In this show we chat about her journey as a designer and illustrator, the story behind Dropbox and Carousel and the latest projects Alice is working on. In today's episode we caught up with Alice Lee, a designer, illustrator and developer living in San Francisco. Alice is well-known for her work at Dropbox, illustrating for the New York Times, and her latest freelance work across a range of amazing companies. In this show we chat about her journey as a designer and illustrator, the story behind Dropbox and Carousel and the latest projects Alice is working on.

Come chat with us in our new Slack team! Over 900 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
  • Dropbox
  • Iconfinder - use the promo code 'DESIGNDETAILS' to save 50% off your first month of Iconfinder Pro
Alice on the Web:
Show Notes:

3:00 - Introductions

27:00 - Carousel and Dropbox

37:00 - Other projects

50:00 - Voice

]]>
Mon, 21 Sep 2015 04:00:00 -0700 shows@spec.fm (Spec) Spec 01:00:37 In today's episode we caught up with Alice Lee, a designer, illustrator and developer living in San Francisco. Alice is well-known for her work at Dropbox, illustrating for the New York Times, and her latest freelance work across a range of amazing companies. In this show we chat about her journey as a designer and illustrator, the story behind Dropbox and Carousel and the latest projects Alice is working on. In today's episode we caught up with Alice Lee, a designer, illustrator and developer living in San Francisco. Alice is well-known for her work at Dropbox, illustrating for the New York Times, and her latest freelance work across a range of amazing compan no full 65
61: State of Louisville (feat. Josh Puckett) 1aedbeb5-e1fe-4bd6-bffd-ad53f3438c93 http://designdetails.simplecast.fm/64 In today's show we caught up with Josh Puckett, a designer and developer living in Palo Alto. We talk about Josh's journey at Dropbox and what it was like to build Carousel, how he manages to make so many apps, the current state of design tools, and the world of freelance designing. Stick around after the show to hear our 30 minutes of bonus conversation about the latest Apple event! In today's show we caught up with Josh Puckett, a designer and developer living in Palo Alto. We talk about Josh's journey at Dropbox and what it was like to build Carousel, how he manages to make so many apps, the current state of design tools, and the world of freelance designing. Stick around after the show to hear our 30 minutes of bonus conversation about the latest Apple event!

Come chat with us in our new Slack team! Over 900 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Josh on the Web:
Show Notes:

4:00 - Introductions

9:00 - The Carousel story

15:00 - Building side projects

32:00 - Design tools

45:00 - Wealthfront

50:00 - Freelancing

1:06:00 - Bonus! We chat about the Apple event

]]>
Wed, 16 Sep 2015 04:00:00 -0700 shows@spec.fm (Spec) Spec 01:26:34 In today's show we caught up with Josh Puckett, a designer and developer living in Palo Alto. We talk about Josh's journey at Dropbox and what it was like to build Carousel, how he manages to make so many apps, the current state of design tools, and the world of freelance designing. Stick around after the show to hear our 30 minutes of bonus conversation about the latest Apple event! In today's show we caught up with Josh Puckett, a designer and developer living in Palo Alto. We talk about Josh's journey at Dropbox and what it was like to build Carousel, how he manages to make so many apps, the current state of design tools, and the w no full 64
60: One Big Wrist Button (feat. Ayaka Nonaka and Sam Soffes) c98d9ed4-cc8e-4485-9b4c-6490f33a467f http://designdetails.simplecast.fm/63 In this episode we sat down with Ayaka Nonaka and Sam Soffes to deconstruct the new Apple announcements from last week. We dig through each product and talk about the design and development implications we can expect in the future! In this episode we sat down with Ayaka Nonaka and Sam Soffes to deconstruct the new Apple announcements from last week. We dig through each product and talk about the design and development implications we can expect in the future!

Come chat with us in our new Slack team! Over 900 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
  • Dropbox
  • Iconfinder - use the promo code 'ROBOT' to save 50% off your first month of Iconfinder Pro
Ayaka on the Web:
Sam on the Web:
Show Notes:

4:00 - Introductions + Apple Chat

]]>
Mon, 14 Sep 2015 07:00:00 -0700 shows@spec.fm (Spec) Spec 01:10:24 In this episode we sat down with Ayaka Nonaka and Sam Soffes to deconstruct the new Apple announcements from last week. We dig through each product and talk about the design and development implications we can expect in the future! In this episode we sat down with Ayaka Nonaka and Sam Soffes to deconstruct the new Apple announcements from last week. We dig through each product and talk about the design and development implications we can expect in the future! no full 63
59: Bay Curious (feat. Tara Mann) 8acf52c0-6e81-4cb9-b33f-c15b584a0645 http://designdetails.simplecast.fm/62 For episode 59 we caught up with Tara Mann, a product designer and sneaker collector currently making things at Twitter. In this show we dig into Tara's background and discuss what it means to grow as a new designer. We also chat about the recent Google rebrand, entrepreneurial thought leaders and design school. For episode 59 we caught up with Tara Mann, a product designer and sneaker collector currently making things at Twitter. In this show we dig into Tara's background and discuss what it means to grow as a new designer. We also chat about the recent Google rebrand, entrepreneurial thought leaders and design school.

Come chat with us in our new Slack team! Over 800 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
  • Hired
  • Harvest - use the promo code 'designdetails' to save 50% off your first month of Harvest
Tara on the Web:
Show Notes:

4:00 - Introductions

10:00 - Design school

14:00 - New Google logo

16:00 - Background

34:00 - Design chat

]]>
Wed, 09 Sep 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 00:58:39 For episode 59 we caught up with Tara Mann, a product designer and sneaker collector currently making things at Twitter. In this show we dig into Tara's background and discuss what it means to grow as a new designer. We also chat about the recent Google rebrand, entrepreneurial thought leaders and design school. For episode 59 we caught up with Tara Mann, a product designer and sneaker collector currently making things at Twitter. In this show we dig into Tara's background and discuss what it means to grow as a new designer. We also chat about the recent Google r no full 62
58: Fat Cat Cat Chat (feat. Kyle Meyer and Charlie Deets) 1a9b8a4f-3f81-400b-ae36-212df7180615 http://designdetails.simplecast.fm/61 In this episode we caught up with Kyle Meyer and Charlie Deets, two product designers that have a huge range of experience in the design and development world. We chat about design at Facebook, remote working, unsolicited redesigns and the power of sound. In this episode we caught up with Kyle Meyer and Charlie Deets, two product designers that have a huge range of experience in the design and development world. We chat about design at Facebook, remote working, unsolicited redesigns and the power of sound.

Come chat with us in our new Slack team! Over 750 designers and developers have already joined our team, chatting about the latest tools and news in the design world. Each week we also host a community critique with a special guest host. To join our team visit our Slack invite page and we'll send you an invitation!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
  • Dropbox
  • Iconfinder - use the promo code 'ROBOT' to save 50% off your first month of Iconfinder Pro
Kyle on the Web:
Charlie on the Web:
Show Notes:

4:00 - Introductions

10:00 - Unsolicited redesigns

14:00 - Backstories

27:00 - Facebook Groups, games, sound design

44:00 - More backstories

_57:00__ - Workflows

]]>
Mon, 07 Sep 2015 01:00:00 -0700 shows@spec.fm (Spec) Spec 01:10:38 In this episode we caught up with Kyle Meyer and Charlie Deets, two product designers that have a huge range of experience in the design and development world. We chat about design at Facebook, remote working, unsolicited redesigns and the power of sound. In this episode we caught up with Kyle Meyer and Charlie Deets, two product designers that have a huge range of experience in the design and development world. We chat about design at Facebook, remote working, unsolicited redesigns and the power of sound. yes full 61
57: DubDubDub (feat. Robin and Roxane Clediere) e0a7c607-bcd6-421b-befe-2ec73da835db http://designdetails.simplecast.fm/60 In this episode, we hung out with Robin and Roxane Clediere. They're a pair of French designers who not only are married, but work together on design projects. We discussed working together as a couple, joining Facebook, and moving from a small town in France to San Francisco. In this episode, we hung out with Robin and Roxane Clediere. They're a pair of French designers who not only are married, but work together on design projects. We discussed working together as a couple, joining Facebook, and moving from a small town in France to San Francisco.

If you missed it, we recently announced Spec, a new podcast network for designers and developers and our first new show, Immutable! We hope you'll check it out and follow @specfm and @immutablefm on Twitter for new shows and updates!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Roxane on the Web:
Robin on the Web
Show Notes:

4:30 - Introductions

7:00 - Joining Facebook

10:00 - Working together as a couple, getting visas, and side projects

21:30 - Getting started in design & working with large design teams

37:00 - Launching a product at Facebook

45:00 - Design Tools

55:00 - Startups vs Agencies

]]>
Wed, 02 Sep 2015 06:00:00 -0700 shows@spec.fm (Spec) Spec 01:08:53 In this episode, we hung out with Robin and Roxane Clediere. They're a pair of French designers who not only are married, but work together on design projects. We discussed working together as a couple, joining Facebook, and moving from a small town in France to San Francisco. In this episode, we hung out with Robin and Roxane Clediere. They're a pair of French designers who not only are married, but work together on design projects. We discussed working together as a couple, joining Facebook, and moving from a small town in Fr yes full 60
56: Lego Bits (feat. Adam Morse) b601bb9a-c665-450f-bf80-52decaa8b720 http://designdetails.simplecast.fm/59 In this episode we sat down with Adam Morse, aka mrmrs, a front-end developer and designer. Adam shares his knowledge of building systems and making the internet better. In this episode we sat down with Adam Morse, aka mrmrs, a front-end developer and designer. Adam shares his knowledge of building systems and making the internet better.

If you missed it, we recently announced Spec, a new podcast network for designers and developers! We hope you'll check it out and follow @specfm on Twitter for new shows and updates!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
  • Harvest
  • Iconfinder - use the promo code 'ROBOT' to save 50% off your first month of Iconfinder Pro
Adam on the Web:
Show Notes:

4:00 - Introductions

12:00 - CSS

22:00 - Writing

43:00 - Other

]]>
Mon, 31 Aug 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 00:58:09 In this episode we sat down with Adam Morse, aka mrmrs, a front-end developer and designer. Adam shares his knowledge of building systems and making the internet better. In this episode we sat down with Adam Morse, aka mrmrs, a front-end developer and designer. Adam shares his knowledge of building systems and making the internet better. yes full 59
55: Wizards (feat. Wilson Miner and Ryan Sims) 353f8ed6-80ed-4b49-871b-aa40c64029a8 http://designdetails.simplecast.fm/57 They're back! In this episode we sat down with Wilson Miner and Ryan Sims to chat about their latest adventures in design, Apple Music, design collaboration and job transitions. They're back! In this episode we sat down with Wilson Miner and Ryan Sims to chat about their latest adventures in design, Apple Music, design collaboration and job transitions.

If you missed it, we recently announced Spec, a new podcast network for designers and developers! We hope you'll check it out and follow @specfm on Twitter for new shows and updates!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Wilson on the Web:
Ryan on the Web:
Show Notes:

3:00 - Introductions

7:00 - Transitioning jobs, Apple Music, collaborating

]]>
Wed, 26 Aug 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 01:08:58 They're back! In this episode we sat down with Wilson Miner and Ryan Sims to chat about their latest adventures in design, Apple Music, design collaboration and job transitions. They're back! In this episode we sat down with Wilson Miner and Ryan Sims to chat about their latest adventures in design, Apple Music, design collaboration and job transitions. yes full 57
54: Cute Puppy Syndrome (feat. Jacob Thornton) 49a2b18f-4b33-4159-8275-59ea518ab7de http://designdetails.simplecast.fm/56 Today we sat down with Jacob Thornton, co-founder of Bootstrap and previously an engineer at Twitter and Medium. Jacob tells us all about his magical experience with Snoop Dogg, the history of CSS and the free software movement. Today we sat down with Jacob Thornton, co-founder of Bootstrap and previously an engineer at Twitter and Medium. Jacob tells us all about his magical experience with Snoop Dogg, the history of CSS and the free software movement.

If you missed it, we recently announced Spec, a new podcast network for designers and developers! We hope you'll check it out and follow @specfm on Twitter for new shows and updates!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
  • Dropbox
  • Iconfinder - use the promo code 'ROBOT' to save 50% off your first month of Iconfinder Pro
Jacob on the Web:
Show Notes:

4:00 - Introductions and Snoop Dogg

11:00 - Free software

23:00 - Bootstrap

33:00 - CSS

]]>
Mon, 24 Aug 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 01:10:25 Today we sat down with Jacob Thornton, co-founder of Bootstrap and previously an engineer at Twitter and Medium. Jacob tells us all about his magical experience with Snoop Dogg, the history of CSS and the free software movement. Today we sat down with Jacob Thornton, co-founder of Bootstrap and previously an engineer at Twitter and Medium. Jacob tells us all about his magical experience with Snoop Dogg, the history of CSS and the free software movement. yes full 56
53: Solving the Shout Problem (feat. Sahil Lavingia) 9274496f-f284-4af5-8f32-88889c0b7efb http://designdetails.simplecast.fm/55 Today we caught up with Sahil Lavingia, the founder and CEO at Gumroad. We chat about building an audience online, the challenges of being a designer, engineer and founder, and what the hiring process looks like at Gumroad. Today we caught up with Sahil Lavingia, the founder and CEO at Gumroad. We chat about building an audience online, the challenges of being a designer, engineer and founder, and what the hiring process looks like at Gumroad.

If you missed it, we recently announced Spec, a new podcast network for designers and developers! We hope you'll check it out and follow @specfm on Twitter for new shows and updates!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Sahil on the Web:
Show Notes:

4:00 - Introductions

6:00 - Building audiences

46:00 - Design challenges

]]>
Wed, 19 Aug 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 01:09:47 Today we caught up with Sahil Lavingia, the founder and CEO at Gumroad. We chat about building an audience online, the challenges of being a designer, engineer and founder, and what the hiring process looks like at Gumroad. Today we caught up with Sahil Lavingia, the founder and CEO at Gumroad. We chat about building an audience online, the challenges of being a designer, engineer and founder, and what the hiring process looks like at Gumroad. no full 55
52: Save the Prototype (feat. Malthe Sigurdsson) 893f80b3-a09d-44ba-b58e-4593009cbde8 http://designdetails.simplecast.fm/54 Today we sat down with Malthe Sigurdsson, the current Head of Design at Stripe. Before joining Stripe, Malthe was the VP of Product at Rdio, and before that he was the Creative Director at Skype. In this episode we dig into Malthe's journey through these amazing companies, diving deep into hiring and scaling design teams and how to think like a product designer. Today we sat down with Malthe Sigurdsson, the current Head of Design at Stripe. Before joining Stripe, Malthe was the VP of Product at Rdio, and before that he was the Creative Director at Skype. In this episode we dig into Malthe's journey through these amazing companies, diving deep into hiring and scaling design teams and how to think like a product designer.

If you missed it, we recently announced Spec, a new podcast network for designers and developers! We hope you'll check it out and follow @specfm on Twitter for new shows and updates!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
  • Hired
  • Iconfinder - use the promo code 'ROBOT' to save 50% off your first month of Iconfinder Pro
Malthe on the Web:
Show Notes:

5:00 - Introductions

7:00 - Design at Stripe

12:00 - Malthe's history

35:00 - Growing a design team

]]>
Mon, 17 Aug 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 00:59:07 Today we sat down with Malthe Sigurdsson, the current Head of Design at Stripe. Before joining Stripe, Malthe was the VP of Product at Rdio, and before that he was the Creative Director at Skype. In this episode we dig into Malthe's journey through these amazing companies, diving deep into hiring and scaling design teams and how to think like a product designer. Today we sat down with Malthe Sigurdsson, the current Head of Design at Stripe. Before joining Stripe, Malthe was the VP of Product at Rdio, and before that he was the Creative Director at Skype. In this episode we dig into Malthe's journey through these no full 54
51: Dopesick (feat. Marshall Bock and Sam Soffes) b1f4d843-009e-409a-a1d1-7d368c388251 http://designdetails.simplecast.fm/53 It's teaser time! This episode we caught up with Sam Soffes and Marshall Bock, two upcoming hosts on the Spec Network! In this show we chat about the future of Spec and dive deep into some Sketch pro tips. It's teaser time! This episode we caught up with Sam Soffes and Marshall Bock, two upcoming hosts on the Spec Network! In this show we chat about the future of Spec and dive deep into some Sketch pro tips.

If you missed it, we recently announced Spec, a new podcast network for designers and developers! We hope you'll check it out and follow @specfm on Twitter for new shows and updates!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Sam on the Web:
Marshall on the Web:
Show Notes:

4:00 - Who are you?

6:00 - New Spec shows!

17:00 - Message us on Twitter (@specfm) with your email address to join our Slack Team!

21:00 - Marshall shares his story.

33:00 - Sam's working on things.

38:00 - Sketch talk.

]]>
Wed, 12 Aug 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 01:11:40 It's teaser time! This episode we caught up with Sam Soffes and Marshall Bock, two upcoming hosts on the Spec Network! In this show we chat about the future of Spec and dive deep into some Sketch pro tips. It's teaser time! This episode we caught up with Sam Soffes and Marshall Bock, two upcoming hosts on the Spec Network! In this show we chat about the future of Spec and dive deep into some Sketch pro tips. no full 53
50: #FF00FF (feat. Steph Monette and Liam Campbell) f245bc89-7051-4bc1-a6ae-af07bd2231ce http://designdetails.simplecast.fm/52 For our 50th episode we sat down with Steph Monette and Liam Campbell, developers at Mule Design, to chat about CSS, startups versus agencies and the state of tech in San Francisco. For our 50th episode we sat down with Steph Monette and Liam Campbell, developers at Mule Design, to chat about CSS, startups versus agencies and the state of tech in San Francisco.

If you missed it, we recently announced Spec, a new podcast network for designers and developers! We hope you'll check it out and follow @specfm on Twitter for new shows and updates!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
  • Dropbox
  • Iconfinder - use the promo code 'ROBOT' to save 50% off your first month of Iconfinder Pro
Steph on the Web:
Liam on the Web:
Show Notes:

3:00 - NPR

5:00 - Introductions

6:00 - What are you working on?

12:00 - Hyphens vs. Underscores

26:00 - Startup culture

51:00 - What are you excited about?

]]>
Mon, 10 Aug 2015 10:00:00 -0700 shows@spec.fm (Spec) Spec 01:02:22 For our 50th episode we sat down with Steph Monette and Liam Campbell, developers at Mule Design, to chat about CSS, startups versus agencies and the state of tech in San Francisco. For our 50th episode we sat down with Steph Monette and Liam Campbell, developers at Mule Design, to chat about CSS, startups versus agencies and the state of tech in San Francisco. yes full 52
49: Space Dinosaurs (feat. Anand Sharma) 43a0394b-930d-425c-b02d-46dfc804d564 http://designdetails.simplecast.fm/51 Today we sat down with Anand Sharma, founder of Gyroscope and an insanely-talented designer/developer. We caught up about his work on Gyroscope, the future of health tracking and how the quantified self is changing the world. Today we sat down with Anand Sharma, founder of Gyroscope and an insanely-talented designer/developer. We caught up about his work on Gyroscope, the future of health tracking and how the quantified self is changing the world.

If you missed it, we recently announced Spec, a new podcast network for designers and developers! We hope you'll check it out and follow @specfm on Twitter for new shows and updates!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Anand on the Web:
Show Notes:

4:00 - What are you working on?

]]>
Wed, 05 Aug 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 00:57:43 Today we sat down with Anand Sharma, founder of Gyroscope and an insanely-talented designer/developer. We caught up about his work on Gyroscope, the future of health tracking and how the quantified self is changing the world. Today we sat down with Anand Sharma, founder of Gyroscope and an insanely-talented designer/developer. We caught up about his work on Gyroscope, the future of health tracking and how the quantified self is changing the world. no full 51
48: Switzerland of Tumblr (feat. Floris Dekker) d21b0ade-d9b8-487f-8802-9ce3d0bc80ab http://designdetails.simplecast.fm/50 Happy Monday! Today we caught up with Floris Dekker, senior design manager at Etsy and founder of Little Big Details! In this show we chat about Little Big Details, management as a design problem, gardening and what Floris is excited about in the world of design. Happy Monday! Today we caught up with Floris Dekker, senior design manager at Etsy and founder of Little Big Details! In this show we chat about Little Big Details, management as a design problem, gardening and what Floris is excited about in the world of design.

If you missed it, we recently announced Spec, a new podcast network for designers and developers! We hope you'll check it out and follow @specfm on Twitter for new shows and updates!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
  • Dropbox
  • Iconfinder - use the promo code 'ROBOT' to save 50% off your first month of Iconfinder Pro
Floris on the Web:
Show Notes:

4:00 - What are you working on right now?

10:00 - Designing around the world.

14:00 - We learn about Little Big Details

29:00 - Management as a design problem.

45:00 - What else are you excited for in the design world?

49:00 - What's a strong opinion you have right now?

]]>
Mon, 03 Aug 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 01:05:18 Happy Monday! Today we caught up with Floris Dekker, senior design manager at Etsy and founder of Little Big Details! In this show we chat about Little Big Details, management as a design problem, gardening and what Floris is excited about in the world of design. Happy Monday! Today we caught up with Floris Dekker, senior design manager at Etsy and founder of Little Big Details! In this show we chat about Little Big Details, management as a design problem, gardening and what Floris is excited about in the world of no full 50
47: Symmetrical Sandwich (feat. Mark Otto) a37cf55f-0354-4a22-8d72-4989ca79c3e6 http://designdetails.simplecast.fm/49 Today we caught up with Mark Otto, the creator of Bootstrap and designer at GitHub. We go deep into the CSS/front-end world on this one, we hope you enjoy listening! Today we caught up with Mark Otto, the creator of Bootstrap and designer at GitHub. We go deep into the CSS/front-end world on this one, we hope you enjoy listening!

If you missed it, we recently announced Spec, a new podcast network for designers and developers! We hope you'll check it out and follow @specfm on Twitter for new shows and updates!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Mark on the Web:
Show Notes:

3:00 - What are you working on?

14:00 - We learn more about Boostrap

24:00 - More about the current state of the front-end

40:00 - Burritos

47:00 - Getting into our backgrounds

]]>
Wed, 29 Jul 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 01:07:30 Today we caught up with Mark Otto, the creator of Bootstrap and designer at GitHub. We go deep into the CSS/front-end world on this one, we hope you enjoy listening! Today we caught up with Mark Otto, the creator of Bootstrap and designer at GitHub. We go deep into the CSS/front-end world on this one, we hope you enjoy listening! no full 49
46: It Started With Neopets (feat. Joshua Sortino) 3260fa89-7aa8-4f23-b6d9-5041c7163be5 http://designdetails.simplecast.fm/48 Today we caught up with Josh Sortino, designer at Teespring, startup advisor and photographer. We chat about design and communication, the design world in San Francisco, photography and how designers can get a seat at the table. Today we caught up with Josh Sortino, designer at Teespring, startup advisor and photographer. We chat about design and communication, the design world in San Francisco, photography and how designers can get a seat at the table.

If you missed it, we recently announced Spec, a new podcast network for designers and developers! We hope you'll check it out and follow @specfm on Twitter for new shows and updates!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
  • Dropbox
  • Iconfinder - use the promo code 'ROBOT' to save 50% off your first month of Iconfinder Pro
Josh on the Web:
Show Notes:

4:00 - What are you working on right now?

9:00 - How did you start advising startups?

20:00 - How did you get into photography?

30:00 - What do you do outside of work?

40:00 - Design + Communication

]]>
Mon, 27 Jul 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 01:11:30 Today we caught up with Josh Sortino, designer at Teespring, startup advisor and photographer. We chat about design and communication, the design world in San Francisco, photography and how designers can get a seat at the table. Today we caught up with Josh Sortino, designer at Teespring, startup advisor and photographer. We chat about design and communication, the design world in San Francisco, photography and how designers can get a seat at the table. yes full 48
45: Year of the Snail (feat. Elle Luna) 93fc8a25-98de-4b6e-920c-bc871481a69c http://designdetails.simplecast.fm/47 It's time for a break from the normal conversations we have here on Design Details; today we stepped back to try and see the bigger picture with Elle Luna. Elle is a writer, designer, artist, entrepreneur and life adventurer, and in this episode she helps us navigate some of the bigger questions in our lives and in our careers. It's time for a break from the normal conversations we have here on Design Details; today we stepped back to try and see the bigger picture with Elle Luna. Elle is a writer, designer, artist, entrepreneur and life adventurer, and in this episode she helps us navigate some of the bigger questions in our lives and in our careers.

If you missed it, we recently announced Spec, a new podcast network for designers and developers! We hope you'll check it out and follow @specfm on Twitter for new shows and updates!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Elle on the Web:
Show Notes:

5:00 - What are you working on?

14:00 - We chat about design, art and utility.

41:00 - More about side projects and careers

]]>
Wed, 22 Jul 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 01:09:37 It's time for a break from the normal conversations we have here on Design Details; today we stepped back to try and see the bigger picture with Elle Luna. Elle is a writer, designer, artist, entrepreneur and life adventurer, and in this episode she helps us navigate some of the bigger questions in our lives and in our careers. It's time for a break from the normal conversations we have here on Design Details; today we stepped back to try and see the bigger picture with Elle Luna. Elle is a writer, designer, artist, entrepreneur and life adventurer, and in this episode she helps no full 47
44: Everything is a Beta (feat. Haraldur Thorleifsson) 8da1ad76-de0d-4df4-9806-5e934a3743d1 http://designdetails.simplecast.fm/46 For episode 44 we caught up with Haraldur Thorleifsson, a designer and agency founder leading the amazing team at UENO. In this show we chat about Haraldur's background and journey to starting UENO, the state of web design, Apple Watch, burnout and more. For episode 44 we caught up with Haraldur Thorleifsson, a designer and agency founder leading the amazing team at UENO. In this show we chat about Haraldur's background and journey to starting UENO, the state of web design, Apple Watch, burnout and more.

We recently announced Spec, a new podcast network for designers and developers! We hope you'll check it out and follow @specfm on Twitter for new shows and updates!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
  • Dropbox
  • Iconfinder - use the promo code 'ROBOT' to save 50% off your first month of Iconfinder Pro
Halli on the Web:
Show Notes:

5:00 - What are you working on?

13:00 - How did you get big clients as a freelancer?

22:00 - Is the web becoming a series of boxes?

35:00 - What's your toolkit these days?

40:00 We chat UENO, Apple Watch, burnout and more

]]>
Mon, 20 Jul 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 01:03:25 For episode 44 we caught up with Haraldur Thorleifsson, a designer and agency founder leading the amazing team at UENO. In this show we chat about Haraldur's background and journey to starting UENO, the state of web design, Apple Watch, burnout and more. For episode 44 we caught up with Haraldur Thorleifsson, a designer and agency founder leading the amazing team at UENO. In this show we chat about Haraldur's background and journey to starting UENO, the state of web design, Apple Watch, burnout and more. yes full 46
43: Freedom Juice (feat. Jon Gold) 99efa572-d502-42cc-8c73-d982e039836d http://designdetails.simplecast.fm/45 Today we caught up with Jon Gold, an immensely talented and thoughtful designer making things at The Grid. In this show we chat about functional CSS, skeuomorphism and aesthetics, going to design school and the latest products from Apple. Today we caught up with Jon Gold, an immensely talented and thoughtful designer making things at The Grid. In this show we chat about functional CSS, skeuomorphism and aesthetics, going to design school and the latest products from Apple.

Last week we also announced Spec, a new podcast network for designers and developers! We hope you'll check it out and follow @specfm on Twitter for new shows and updates!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Jon on the Web:
Show Notes:

4:00 - Miller High Life and Harleys

8:00 - What are you working on right now?

18:00 - Jon shares his approach to functional CSS

39:00 - Are you working on mobile projects?

41:00 - Skeuomorphism

46:00 - Design school

55:00 - Are you working on any side projects?

57:00 - We chat Apple Music, Material Design, Apple Watch

]]>
Wed, 15 Jul 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 01:16:01 Today we caught up with Jon Gold, an immensely talented and thoughtful designer making things at The Grid. In this show we chat about functional CSS, skeuomorphism and aesthetics, going to design school and the latest products from Apple. Today we caught up with Jon Gold, an immensely talented and thoughtful designer making things at The Grid. In this show we chat about functional CSS, skeuomorphism and aesthetics, going to design school and the latest products from Apple. yes full 45
42: Lonely T-Rex (feat. Sebastien Gabriel and Jean-Marc Denis) 16493d91-653f-4003-b811-2b73c1ae2f49 http://designdetails.simplecast.fm/44 This week we finally caught up with our friends at Google, Jean-Marc Denis and Sebastien Gabriel. In this episode we chat Material Design, designing invisible interfaces, current design tools and moving from France to the US. This week we finally caught up with our friends at Google, Jean-Marc Denis and Sebastien Gabriel. In this episode we chat Material Design, designing invisible interfaces, current design tools and moving from France to the US.

Last week we also announced Spec, a new podcast network for designers and developers! We hope you'll check it out and follow @specfm on Twitter for new shows and updates!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
  • Dropbox
  • Iconfinder - use the promo code 'ROBOT' to save 50% off your first month of Iconfinder Pro
Sebastien on the Web:
Jean-Marc on the Web:
Show Notes:

5:00 - What are you working on?

14:00 - We chat about designing interfaces.

35:00 - What design tools do you use?

46:00 - On designing error pages.

52:00 - We dig into Jean-Marc and Sebastien's backgrounds.

]]>
Mon, 13 Jul 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 01:14:27 This week we finally caught up with our friends at Google, Jean-Marc Denis and Sebastien Gabriel. In this episode we chat Material Design, designing invisible interfaces, current design tools and moving from France to the US. This week we finally caught up with our friends at Google, Jean-Marc Denis and Sebastien Gabriel. In this episode we chat Material Design, designing invisible interfaces, current design tools and moving from France to the US. no full 44
41: Heart For You (feat. Marshall Bock and Michael Schultz) 04e97f70-644d-4072-82e0-2a966a00ea05 http://designdetails.simplecast.fm/43 It's been a week since Apple Music launched giving us the perfect reason to have a round-table discussion about the new app with Marshall Bock and Michael Schultz. We bounce around this episode sharing our thoughts on Apple Music and streaming services in general - we hope you have fun listening! It's been a week since Apple Music launched giving us the perfect reason to have a round-table discussion about the new app with Marshall Bock and Michael Schultz. We bounce around this episode sharing our thoughts on Apple Music and streaming services in general - we hope you have fun listening!

You all got us nominated for Podcast of the Year at The Net Awards! If you can spare the time, we would very much appreciate if you would vote for us, or share the show with a friend!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Marshall on the Web:
Michael on the Web:
Show Notes:

5:00 - So Apple Music came out...

]]>
Wed, 08 Jul 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 01:27:44 It's been a week since Apple Music launched giving us the perfect reason to have a round-table discussion about the new app with Marshall Bock and Michael Schultz. We bounce around this episode sharing our thoughts on Apple Music and streaming services in general - we hope you have fun listening! It's been a week since Apple Music launched giving us the perfect reason to have a round-table discussion about the new app with Marshall Bock and Michael Schultz. We bounce around this episode sharing our thoughts on Apple Music and streaming services in yes full 43
40: Ace of Bass (feat. Gabe Valdivia and Kyle Ryan) 1b166f13-ed4a-47ad-bf8d-7f4c864b30ee http://designdetails.simplecast.fm/42 Today we sat down with Gabe Valdivia and Kyle Ryan to talk about design at Facebook, the progress of their side project, Peek, and the value of obviousness in design. Today we sat down with Gabe Valdivia and Kyle Ryan to talk about design at Facebook, the progress of their side project, Peek, and the value of obviousness in design.

You all got us nominated for Podcast of the Year at The Net Awards! If you can spare the time, we would very much appreciate if you would vote for us, or share the show with a friend!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
  • Iconfinder - use the promo code 'ROBOT' to save 50% off your first month of Iconfinder Pro
  • Dropbox
Gabe on the Web:
Kyle on the Web:
Show Notes:

4:00 - What are you working on?

20:00 - We dig more into Peek

48:00 - How do you recruit an engineer to help you build a project?

]]>
Mon, 06 Jul 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 01:09:36 Today we sat down with Gabe Valdivia and Kyle Ryan to talk about design at Facebook, the progress of their side project, Peek, and the value of obviousness in design. Today we sat down with Gabe Valdivia and Kyle Ryan to talk about design at Facebook, the progress of their side project, Peek, and the value of obviousness in design. yes full 42
39: YoTube (feat. Mike Essl) e2e7baa1-e600-4311-a137-aa80aa5e1f88 http://designdetails.simplecast.fm/41 On this episode we caught up with Mike Essl: designer, artist, Mr. T memorabilia collector. We talk about Mike's personal story as a designer, Cooper Union, and yes, we chat comics. On this episode we caught up with Mike Essl: designer, artist, Mr. T memorabilia collector. We talk about Mike's personal story as a designer, Cooper Union, and yes, we chat comics.

You all got us nominated for Podcast of the Year at The Net Awards! If you can spare the time, we would very much appreciate if you would vote for us, or share the show with a friend!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Mike Essl on the Web:
Show Notes:

2:30 - What are you working on right now?

5:00 - F'ing Sandman

8:00 - Essl shares his other projects

14:00 - How do you balance your time with all these projects?

22:00 - Why did you ignore everone's advice to not go to art school?

41:00 - Mike's dream work

1:06:00 - What are you taking back from San Francisco?

1:10:00 - What's the difference between design and art?

]]>
Wed, 01 Jul 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 01:19:15 On this episode we caught up with Mike Essl: designer, artist, Mr. T memorabilia collector. We talk about Mike's personal story as a designer, Cooper Union, and yes, we chat comics. On this episode we caught up with Mike Essl: designer, artist, Mr. T memorabilia collector. We talk about Mike's personal story as a designer, Cooper Union, and yes, we chat comics. no full 41
38: Electronic Parties (feat. Geoff Teehan) d1e351dc-18b9-4733-ae92-e7f1ae265936 http://designdetails.simplecast.fm/40 For episode 38, we were joined by Geoff Teehan, a super-talented Canadian designer who is at least partially responsible for several of our favorite products. He has not only worked on some amazing projects for companies like Medium, Google, and now Facebook - he has also built some really great resources for designers. For episode 38, we were joined by Geoff Teehan, a super-talented Canadian designer who is at least partially responsible for several of our favorite products. He has not only worked on some amazing projects for companies like Medium, Google, and now Facebook - he has also built some really great resources for designers.

You all got us nominated for Podcast of the Year at The Net Awards! If you can spare the time, we would very much appreciate if you would vote for us, or share the show with a friend!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Geoff Teehan on the Web:
Show Notes:

3:50 - What are you working on?

6:20 - How do you see the trend of designers moving from small agencies to product companies?

10:00 - Getting work and creating products as an agency

40:00 - How did you get into design?

50:00 - Talking about the Apple Watch... again.

58:00 - Why Facebook?

]]>
Mon, 29 Jun 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 01:08:47 For episode 38, we were joined by Geoff Teehan, a super-talented Canadian designer who is at least partially responsible for several of our favorite products. He has not only worked on some amazing projects for companies like Medium, Google, and now Facebook - he has also built some really great resources for designers. For episode 38, we were joined by Geoff Teehan, a super-talented Canadian designer who is at least partially responsible for several of our favorite products. He has not only worked on some amazing projects for companies like Medium, Google, and now Faceb yes full 40
37: Crisper Articulation (feat. Julie Zhuo) 948e96fd-3385-4e70-a8d1-7ad07402d810 http://designdetails.simplecast.fm/39 For episode 37, we were lucky enough to get to spend some time with Julie Zhuo! We're both huge fans of her writing on Medium and the way she thinks about design and especially that she shares that with the entire community. For episode 37, we were lucky enough to get to spend some time with Julie Zhuo! We're both huge fans of her writing on Medium and the way she thinks about design and especially that she shares that with the entire community.

Speaking of sharing with the community, you all got us nominated for Podcast of the Year at The Net Awards! If you can spare the time, we would very much appreciate if you would vote for us, or share the show with a friend!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Julie Zhuo on the Web:
Show Notes:

3:50 - What are you working on?

9:15 - What have been the hardest parts of scaling a design team?

14:50 - The Year of the Looking Glass

22:00 - What keeps you excited about working at Facebook?

24:30 - How is design perceived inside Facebook?

36:30 - How are products designed at Facebook?

51:00 - What do you want to do next?

]]>
Wed, 24 Jun 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 00:56:12 For episode 37, we were lucky enough to get to spend some time with Julie Zhuo! We're both huge fans of her writing on Medium and the way she thinks about design and especially that she shares that with the entire community. For episode 37, we were lucky enough to get to spend some time with Julie Zhuo! We're both huge fans of her writing on Medium and the way she thinks about design and especially that she shares that with the entire community. yes full 39
36: 10x (feat. Meng To) 470a541f-233d-497f-817a-2d65abe53e76 http://designdetails.simplecast.fm/38 For episode 36, we got to spend some time with Meng To discussing what makes a great product, how to get started with design and development, and what it takes to build a thing. Meng's an incredibly talented creator and we're grateful he was able to take a break from helping people get started in our industry to hang out with us for an hour or so! For episode 36, we got to spend some time with Meng To discussing what makes a great product, how to get started with design and development, and what it takes to build a thing. Meng's an incredibly talented creator and we're grateful he was able to take a break from helping people get started in our industry to hang out with us for an hour or so!

In case you haven't noticed, we were nominated for Podcast of the Year at The Net Awards! There's about 2 weeks left and we would love it if you'd take a minute to vote for us!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Meng To on the Web:
Show Notes:

4:00 - What Meng's working on

9:30 - What are you excited about in design?

15:00 - Should designers write production code?

24:30 - Creating free content vs paid content

32:00 - WWDC expectations

35:00 - Global differences in design/dev culture

40:30 - Learning development and gaming as a gateway to the tech industry

50:30 - The elements of a really compelling product

55:00 - Don't give up. Just do something crazy.

]]>
Mon, 22 Jun 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 01:09:02 For episode 36, we got to spend some time with Meng To discussing what makes a great product, how to get started with design and development, and what it takes to build a thing. Meng's an incredibly talented creator and we're grateful he was able to take a break from helping people get started in our industry to hang out with us for an hour or so! For episode 36, we got to spend some time with Meng To discussing what makes a great product, how to get started with design and development, and what it takes to build a thing. Meng's an incredibly talented creator and we're grateful he was able to take yes full 38
35: Senate Design Overcommittee (feat. Noah Stokes) 85cc50d0-c96e-4311-a8db-dae013f1fdf1 http://designdetails.simplecast.fm/37 For episode 35, we finally convinced the Motherfuton himself, Mr. Noah Stokes, to come hang with us for a bit and talk about lazy web design, ornamentation vs utility, design education and so much more. It was super fun to pick his brain for an hour or so and he brought up some frequently overlooked shortcomings of how we build the web today. For episode 35, we finally convinced the Motherfuton himself, Mr. Noah Stokes, to come hang with us for a bit and talk about lazy web design, ornamentation vs utility, design education and so much more. It was super fun to pick his brain for an hour or so and he brought up some frequently overlooked shortcomings of how we build the web today.

In case you haven't noticed, we were nominated for Podcast of the Year at The Net Awards! If you can spare the time, we would very much appreciate a vote!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsors:
Noah Stokes on the Web:
Show Notes:

4:30 - What Noah's working on

6:30 - Moving from client services to an in-house design team

16:45 - Life before BOLD and how Apple has changed

28:15 - How responsive design made the web boring

46:00 - UI for pure utility vs UI ornamentation

50:00 - Web education and regulation

]]>
Wed, 17 Jun 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 01:03:51 For episode 35, we finally convinced the Motherfuton himself, Mr. Noah Stokes, to come hang with us for a bit and talk about lazy web design, ornamentation vs utility, design education and so much more. It was super fun to pick his brain for an hour or so and he brought up some frequently overlooked shortcomings of how we build the web today. For episode 35, we finally convinced the Motherfuton himself, Mr. Noah Stokes, to come hang with us for a bit and talk about lazy web design, ornamentation vs utility, design education and so much more. It was super fun to pick his brain for an hour or so yes full 37
34: Second Shift (feat. Allison House) f511844a-e777-4bce-b52e-f1cfd5e15888 http://designdetails.simplecast.fm/36 This week we hopped on a call with the one-and-only Allison House! Allison currently lives in Austin, exploring her way through 3D art and design - in this episode we chat about her background in design, her transition into 3D and what she's excited for in the future. This week we hopped on a call with the one-and-only Allison House! Allison currently lives in Austin, exploring her way through 3D art and design - in this episode we chat about her background in design, her transition into 3D and what she's excited for in the future. We're also in the running for Podcast of the Year!

If you're enjoying the show, we'd love your support - Vote for Design Details.

If you have feedback or suggestions please don't hesitate to reach us on Twitter at @designdetailsfm or email us directly!

Sponsor:
Allison on the Web:
Show Notes:

3:00 - What in the world are you working on?

9:00 - Have you felt new clarity after leaving SF?

11:00 - What got you started in design?

19:00 - Why Dropbox?

20:00 - How do you identify the next place to grow as a designer?

22:00 - Allison shares her process for the Tweedy video.

28:00 - How do you incorporate expression into design?

30:00 - What are other products you're excited about right now?

35:00 - What's your take on the state of Dribbble and design credibility?

39:00 - Allison explains her learning process.

44:00 - What's the big picture goal for you as an artist and designer?

47:00 - What are the common struggles for designers moving from freelance to full time?

]]>
Mon, 15 Jun 2015 08:36:00 -0700 shows@spec.fm (Spec) Spec 00:52:32 This week we hopped on a call with the one-and-only Allison House! Allison currently lives in Austin, exploring her way through 3D art and design - in this episode we chat about her background in design, her transition into 3D and what she's excited for in the future. This week we hopped on a call with the one-and-only Allison House! Allison currently lives in Austin, exploring her way through 3D art and design - in this episode we chat about her background in design, her transition into 3D and what she's excited for i yes full 36
33: The Rusty Theorem (feat. Marc Edwards & Russell Ivanovic) c3b9523f-0a3c-4c00-ae5a-ef7435c82b09 http://designdetails.simplecast.fm/35 The epic conclusion of our first ever two-parter! Marc and Russell were kind enough to come back for round two to discuss Apple's WWDC Keynote, Marc's weird workflows, optical alignment, PDF assets and more! The epic conclusion of our first ever two-parter! Marc and Russell were kind enough to come back for round two to discuss Apple's WWDC Keynote, Marc's weird workflows, optical alignment, PDF assets and more!

We're also in the running for Podcast of the Year! If you're enjoying the show, we'd love your support - vote for Design Details!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:
Marc Edwards on the Web
Russell Ivanovic on the Web
Show Notes:

4:00 - "What'd you think of the Apple Keynote?"

20:30 - Marc's shameful admission

25:00 - iOS announcements

30:00 - Open Source Swift and the only hardware announcement at WWDC

34:00 - iOS Usability

38:30 - Apple Music

49:30 - Optical Alignment

57:00 - PDF Assets on iOS

]]>
Wed, 10 Jun 2015 08:15:00 -0700 shows@spec.fm (Spec) Spec 01:09:36 The epic conclusion of our first ever two-parter! Marc and Russell were kind enough to come back for round two to discuss Apple's WWDC Keynote, Marc's weird workflows, optical alignment, PDF assets and more! The epic conclusion of our first ever two-parter! Marc and Russell were kind enough to come back for round two to discuss Apple's WWDC Keynote, Marc's weird workflows, optical alignment, PDF assets and more! yes full 35
32: Dethrone Marco (feat. Russell Ivanovic and Marc Edwards) 39051298-ddb0-4766-bc1c-c78331527ecd http://designdetails.simplecast.fm/34 It's WWDC week, and this time we're catching up with Russell Ivanovic and Marc Edwards, both founders of independent app development companies in Australia. We spent this hour chatting about Google I/O, iOS, Material Design and more. It's WWDC week, and this time we're catching up with Russell Ivanovic and Marc Edwards, both founders of independent app development companies in Australia. We spent this hour chatting about Google I/O, iOS, Material Design and more. We're also in the running for Podcast of the Year!

If you're enjoying the show, we'd love your support - Vote for Design Details

If you have feedback or suggestions please don't hesitate to reach us on Twitter at @designdetailsfm or email us directly!

Sponsor:
Russell on the Web:
Marc on the Web:
Show Notes:

2:00 - What're you working on?

5:00 - How did you two meet?

8:00 - How do you see your companies growing in the next few years?

12:00 - We chat Android design.

16:00 - What are your reactions to the announcements from Google I/O?

20:00 - We get Marc's thoughts on Yosemite + iOS.

28:00 - And Russell shares his thoughts on Material Design.

33:00 - How does Material Design cascade down to Android Wear?

36:00 - We share our opinions on the latest hardware changes, like force touch and haptic feedback.

48:00 - Russell busts the Android fragmentation misconception.

]]>
Mon, 08 Jun 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 01:01:20 It's WWDC week, and this time we're catching up with Russell Ivanovic and Marc Edwards, both founders of independent app development companies in Australia. We spent this hour chatting about Google I/O, iOS, Material Design and more. It's WWDC week, and this time we're catching up with Russell Ivanovic and Marc Edwards, both founders of independent app development companies in Australia. We spent this hour chatting about Google I/O, iOS, Material Design and more. no full 34
31: Jaded People (feat. Caleb Davenport & Sam Soffes) 827ec2e3-4749-4ccd-9a3c-a1131cffad0e http://designdetails.simplecast.fm/33 This week we caught up with Caleb Davenport and Sam Soffes to chat about the latest Google I/O announcements, our upcoming WWDC wish list, OSX and iOS design and more. This week we caught up with Caleb Davenport and Sam Soffes to chat about the latest Google I/O announcements, our upcoming WWDC wish list, OSX and iOS design and more. We're also in the running for Podcast of the Year!

If you're enjoying the show, we'd love your support - Vote for Design Details

If you have feedback or suggestions please don't hesitate to reach us on Twitter at @designdetailsfm or email us directly!

Sponsor:
Caleb on the Web:
Sam on the Web:
Show Notes:

3:00 - We catch up on the latest news from Google I/O.

9:00 - You don't have to worry about pixels anymore.

12:00 - We try not to complain the whole episode.

21:00 - We try again - this time digging into upcoming WWDC announcements.

41:00 - We chat about Apple TV design and what we might build.

52:00 - But what are we excited about?

1:00:00 - Our WWDC wishlist.

]]>
Wed, 03 Jun 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 01:11:45 This week we caught up with Caleb Davenport and Sam Soffes to chat about the latest Google I/O announcements, our upcoming WWDC wish list, OSX and iOS design and more. This week we caught up with Caleb Davenport and Sam Soffes to chat about the latest Google I/O announcements, our upcoming WWDC wish list, OSX and iOS design and more. no full 33
30: Rewarding Holding Experience (feat. Didi Medina) 9752e822-7357-402e-9c14-c251bb46e62b http://designdetails.simplecast.fm/32 This episode, we geeked out with Didi Medina over photography and music - and we still found time to dig into his origin story a bit. This episode, we geeked out with Didi Medina over photography and music - and we still found time to dig into his origin story a bit.

We were nominated for Podcast of the Year at The Net Awards and would very much appreciate a vote!

If you have feedback or suggestions please don’t hesitate to reach out to us on Twitter at @designdetailsfm!

Sponsor:
  • Iconfinder Use promo code "Robot" to save 50% on your first month!
Didi on the Web:
Show Notes:

2:30 - What Didi's working on... and where he started.

21:10 - Cultural Differences between NYC & SF and making the move to California

37:30 - Starting your own company and future goals

42:30 - Working on physical products, getting away from work, and improving yourself

]]>
Mon, 01 Jun 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 01:04:32 This episode, we geeked out with Didi Medina over photography and music - and we still found time to dig into his origin story a bit. This episode, we geeked out with Didi Medina over photography and music - and we still found time to dig into his origin story a bit. yes full 32
29: Bananagrams (feat. Ryan Putnam & Nick Slater) 032b6f24-0128-4e2d-aecd-b570cdf1e4b4 http://designdetails.simplecast.fm/31 In this episode of Design Details we had the pleasure of catching up with Ryan Putnam and returning-guest Nick Slater! We chat about illustration, designing a company culture, mixing mediums and finding our spirit animals. In this episode of Design Details we had the pleasure of catching up with Ryan Putnam and returning-guest Nick Slater! We chat about illustration, designing a company culture, mixing mediums and finding our spirit animals.

If you have feedback or suggestions please don't hesitate to reach us on Twitter at @designdetailsfm or email us directly!

Ryan on the Web:
Nick on the Web:
Show Notes:

1:00 - What are you working on right now?

5:00 - We discover our spirit animals.

7:00 - Ryan shares more about his background in illustration.

10:00 - Nick and Ryan share more about their design setups.

13:00 - How does one begin learning illustration? What is product illustration?

21:00 - We talk about design within Dropbox and Palantir and how it impacts culture.

31:00 - A brief divergence into DBZ and comics.

33:00 - Where do you come up with all of your ideas for illustration and design?

44:00 - We learn more about freelancing and how it compares to big company work.

54:00 - Do you have plans for sharing more of your process as blog posts?

57:00 - What's the next step in your career?

]]>
Wed, 27 May 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 01:01:40 In this episode of Design Details we had the pleasure of catching up with Ryan Putnam and returning-guest Nick Slater! We chat about illustration, designing a company culture, mixing mediums and finding our spirit animals. In this episode of Design Details we had the pleasure of catching up with Ryan Putnam and returning-guest Nick Slater! We chat about illustration, designing a company culture, mixing mediums and finding our spirit animals. no full 31
28: #TeamOneCircle (feat. Michael Schultz) 6448e6a9-deff-4c13-bc49-3bf8d2be8f76 http://designdetails.simplecast.fm/30 This week we caught up with Michael Schultz, a designer living in San Francisco tackling one of the hardest design problems out there: health and medicine. We chat all about the problems he faces designing in the medical world, how to launch and market side projects and we end with a healthy debate about designer job titles. This week we caught up with Michael Schultz, a designer living in San Francisco tackling one of the hardest design problems out there: health and medicine. We chat all about the problems he faces designing in the medical world, how to launch and market side projects and we end with a healthy debate about designer job titles.

If you have feedback or suggestions please don't hesitate to reach us on Twitter at @designdetailsfm or email us directly!

Sponsor:
  • IconFinder - Promo code 'ROBOT' for 50% off your first month of Iconfinder Pro!
Michael on the Web:
Show Notes:

3:00 - Michael fills us in on what he's working on.

11:00 - We dig into Michael's background and introduction to the medical world.

24:00 - Michael and Bryn worked on a side project together, Privatize.

35:00 - Michael has strong opinions about Product Hunt.

41:00 - How did you market your personal apps pre-Product Hunt?

48:00 - Michael shares how he designed Iodine to be a place that makes data understandable and easy to use.

1:03:00 - How do you define different design roles? Bryn and Brian debate.

1:12:00 - We discuss designers who code and developers who design.

]]>
Mon, 25 May 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 01:21:47 This week we caught up with Michael Schultz, a designer living in San Francisco tackling one of the hardest design problems out there: health and medicine. We chat all about the problems he faces designing in the medical world, how to launch and market side projects and we end with a healthy debate about designer job titles. This week we caught up with Michael Schultz, a designer living in San Francisco tackling one of the hardest design problems out there: health and medicine. We chat all about the problems he faces designing in the medical world, how to launch and market si no full 30
27: Socialist Design (feat. Kim Bost & Cap Watkins) a3d14131-1d10-46b9-920d-fe89b7cf92ce http://designdetails.simplecast.fm/29 Last week Kim and Cap were in SF for the week and dropped by to record another fun episode of Design Details! We chat about what it's like to be married to a designer, how to hire designers and how to overcome the biggest challenges design managers face. Last week Kim and Cap were in SF for the week and dropped by to record another fun episode of Design Details! We chat about what it's like to be married to a designer, how to hire designers and how to overcome the biggest challenges design managers face.

If you have feedback or suggestions please don't hesitate to reach us on Twitter at @designdetailsfm or email us directly!

Kim on the Web:
Cap on the Web:
Show Notes:

1:00 - We touch base with Cap and Kim.

6:00 - Cap fills us in on the latest news at BuzzFeed.

9:00 - What's it like being married to another designer?

18:00 - How do you keep a growing product design team in sync?

38:00 - What are the biggest challenges for new design managers?

44:00 - How do hire designers?

55:00 - How do you divide up design roles?

1:02:00 - Cap and Kim share what they're excited about in design.

]]>
Wed, 20 May 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 01:15:05 Last week Kim and Cap were in SF for the week and dropped by to record another fun episode of Design Details! We chat about what it's like to be married to a designer, how to hire designers and how to overcome the biggest challenges design managers face. Last week Kim and Cap were in SF for the week and dropped by to record another fun episode of Design Details! We chat about what it's like to be married to a designer, how to hire designers and how to overcome the biggest challenges design managers face. no full 29
26: Beep Beep I Like Ferns Beep (feat. Sebastiaan De With) 68b787c7-f4f8-4ddb-bfea-5b6142c4d26b http://designdetails.simplecast.fm/28 This week we sat down with Sebastiaan de With to chat about everything design (and motorcycles)! We caught up on his evolving career in design, what it's like building a new agency, how to work with international clients and the power of giving design resources away for free. This week we sat down with Sebastiaan de With to chat about everything design (and motorcycles)! We caught up on his evolving career in design, what it's like building a new agency, how to work with international clients and the power of giving design resources away for free.

If you have feedback or suggestions please don't hesitate to reach us on Twitter at @designdetailsfm or email us directly!

Sebastiaan on the Web:
Show Notes:

3:00 - We catch up with Sebastiaan on what he's up to.

14:00 - We dig a bit further into SDW's past work as a designer.

21:00 - We learn a little bit more about the Apple design process.

23:00 - SDW shares more about his personal branding and background as a young designer.

32:00 - How did you end up moving to California?

41:00 - Circling back around to some of SDW's current projects.

47:00 - Not a lot of designers can separate from their work this much.

  • (Follow us on Periscope - designdetailsfm!)

53:00 - What kind of designer do you consider yourself?

]]>
Mon, 18 May 2015 21:00:00 -0700 shows@spec.fm (Spec) Spec 01:10:15 This week we sat down with Sebastiaan de With to chat about everything design (and motorcycles)! We caught up on his evolving career in design, what it's like building a new agency, how to work with international clients and the power of giving design resources away for free. This week we sat down with Sebastiaan de With to chat about everything design (and motorcycles)! We caught up on his evolving career in design, what it's like building a new agency, how to work with international clients and the power of giving design res yes full 28
25: Arbitrary Head Chef (feat. Danny Trinh & Chris Kalani) 0aac3086-ffb5-40fa-9c3c-deb9e8dc56ab http://designdetails.simplecast.fm/27 This episode, we had two designers building their own companies by building some awesome products that we're super excited about - Chris Kalani of Wake and Danny Trinh from Free. We took a bunch of questions from people watching on Periscope and these guys have some great energy which lead to a fantastic conversation and some "real talk"! This episode, we had two designers building their own companies by building some awesome products that we're super excited about - Chris Kalani of Wake and Danny Trinh from Free. We took a bunch of questions from people watching on Periscope and these guys have some great energy which lead to a fantastic conversation and some "real talk"!

If you have feedback or suggestions please don’t hesitate to reach us on Twitter at @designdetailsfm!

Sponsors:
Chris Kalani on the Web
Danny Trinh on the Web
Show Notes:

3:30 - Danny and Chris tell us about their current projects

12:00 - The best ways to learn design and the fear of sharing things

27:00 - Super Smash Bros. rosters and Pokemon as a game for designers

30:00 - Leveling up your UI and your career

45:00 - Dumb titles and how to divide up design roles on a team

50:00 - Listener Questions

]]>
Wed, 13 May 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 01:03:12 This episode, we had two designers building their own companies by building some awesome products that we're super excited about - Chris Kalani of Wake and Danny Trinh from Free. We took a bunch of questions from people watching on Periscope and these guys have some great energy which lead to a fantastic conversation and some "real talk"! This episode, we had two designers building their own companies by building some awesome products that we're super excited about - Chris Kalani of Wake and Danny Trinh from Free. We took a bunch of questions from people watching on Periscope and these guy yes full 27
24: Open Source Religion (feat. Kevin Rose) 2ff60467-6e8f-4ce5-a97e-8eca0780bb76 http://designdetails.simplecast.fm/26 This week we sat down with Kevin Rose - he's a product creator and VC who has had a prolific presence in the tech community for several years. We chat about the things he's loving right now, watch culture, health and cooking, hiring and so much more! This week we sat down with Kevin Rose - he's a designer, product creator and venture capitalist who has had a prolific presence in the tech community for several years. We chat about the things he's loving right now, watch culture, health and cooking, hiring and so much more!

If you have feedback or suggestions please don't hesitate to reach us on Twitter at @designdetailsfm or email us directly!

Sponsors:
Kevin on the Web:
Show Notes:

5:00 - We catch up on Kevin's latest projects.

11:00 - Kevin shares more about his journey at Google+.

18:00 - We learn more about what working at Google Ventures was like.

23:00 - Where do you fall on the line of product or design?

26:00 - What are the startups you're really excited about right now?

30:00 - We talk watches.

34:00 - What do you bring back from outside of the US into the product and design world?

43:00 - Do you feel like you've gotten out of the rat race of the tech world?

46:00 - Flashback to Kevin's past roles in the media world.

48:00 - How do you spot that in the hiring process?

54:00 - Why do all the podcasts and shows?

57:00 - Would you encourage everyone to come to SF/Silicon Valley?

59:00 - We diverge, briefly, to chat about tattoos, Tokyo and cooking.

1:02:00 - A fake-out ending, we hear what Kevin is into these days.

1:12:00 - We talk health, nutrition and religion.

]]>
Mon, 11 May 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 01:21:20 This week we sat down with Kevin Rose - he's a product creator and VC who has had a prolific presence in the tech community for several years. We chat about the things he's loving right now, watch culture, health and cooking, hiring and so much more! This week we sat down with Kevin Rose - he's a product creator and VC who has had a prolific presence in the tech community for several years. We chat about the things he's loving right now, watch culture, health and cooking, hiring and so much more! no full 26
23: Brains are Stupid (feat. Christophe Tauziet, Jeremy Goldberg, and George Kedenburg) 35a0c0f5-6118-4cd1-bb10-99db7a6c583e http://designdetails.simplecast.fm/25 This was the most impromptu episode we've ever done. We were just out to dinner with these guys and we were having so much fun debating design things that we decided to record our first-ever 3-guest episode. We made a lot of references to George and Jeremy's last episode - so definitely go check that out. This was a really fun episode for us - hopefully it is for you too! This was the most impromptu episode we've ever done. We were just out to dinner with these guys and we were having so much fun debating design things that we decided to record our first-ever 3-guest episode. We made a lot of references to George and Jeremy's last episode - so definitely go check that out. This was a really fun episode for us - hopefully it is for you too!

If you have feedback or suggestions please don’t hesitate to reach us on Twitter at @designdetailsfm!

Sponsors:
George Kedenburg on the Web:
Jeremy Goldberg on the Web:
Christophe Tauziet on the Web:
Show Notes:

4:00 - Apple's product strategy

16:00 - Modern services and stupid brains

30:00 - May predictions and how designers work (We recorded the show in mid-April)

52:00 - Designing original things and what makes a good brand

01:02:00 - Movie Talk

]]>
Wed, 06 May 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 01:24:20 This was the most impromptu episode we've ever done. We were just out to dinner with these guys and we were having so much fun debating design things that we decided to record our first-ever 3-guest episode. We made a lot of references to George and Jeremy's last episode - so definitely go check that out. This was a really fun episode for us - hopefully it is for you too! This was the most impromptu episode we've ever done. We were just out to dinner with these guys and we were having so much fun debating design things that we decided to record our first-ever 3-guest episode. We made a lot of references to George and Jerem yes full 25
22: Poor Man's Pokemon (feat. Cennydd Bowles) 5be5182c-b6c7-497a-b090-8d8338687f82 http://designdetails.simplecast.fm/24 This week we caught up with Cennydd Bowles over Skype for a truly fascinating discussion about cross-OS design, the future of wearables, what it means to be a junior vs. senior designer, and why sound design will be the next big trend. This week we caught up with Cennydd Bowles over Skype for a truly fascinating discussion about cross-OS design, the future of wearables, what it means to be a junior vs. senior designer, and why sound design will be the next big trend.

If you have feedback or suggestions please don't hesitate to reach us on Twitter at @designdetailsfm or email us directly!

Sponsors:
Cennydd on the Web:
Show Notes:

5:00 - What are you working on these days? How did you get started at Twitter?

16:00 - We talk mobile design, Windows and the OS landscape.

27:00 - Cennydd has more experience with wearables than most.

36:00 - What are your hunches about the future of design for wearables?

39:00 - Cennydd shares his thoughts on the toxic MVP.

48:00 - Thoughts on the process of creation and iteration, junior vs. senior designers.

]]>
Mon, 04 May 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 01:07:26 This week we caught up with Cennydd Bowles over Skype for a truly fascinating discussion about cross-OS design, the future of wearables, what it means to be a junior vs. senior designer, and why sound design will be the next big trend. This week we caught up with Cennydd Bowles over Skype for a truly fascinating discussion about cross-OS design, the future of wearables, what it means to be a junior vs. senior designer, and why sound design will be the next big trend. no full 24
21: Startup Lubricant (feat. Bin Chen) 907a97b3-75e3-4853-88e6-46acc46c6aeb http://designdetails.simplecast.fm/23 This episode, we talked tea with Boba Guys and Tea People co-founder Bin Chen! He's had one of the most unique design careers we've ever heard of and he tells a really great story - which made this episode especially fun for us. Hopefully, you'll dig it too! This episode, we talked tea with Boba Guys and Tea People co-founder Bin Chen! He's had one of the most unique design careers we've ever heard of and he tells a really great story - which made this episode especially fun for us. Hopefully, you'll dig it too!

If you have feedback or suggestions please don’t hesitate to reach us on Twitter at @designdetailsfm!

Sponsors
Bin on the Web
Show Notes:

3:30 - Beer!

5:00 - What are you working on?

15:30 - Tea People and Boba Guys' Culture

26:30 - Differences between digital design and brick and mortar

37:00 - How Bin got into design...

53:00 - Generalism vs Specialty

59:00 - Managing vs Individual Contribution

1:07:00 - Scaling in digital vs physical space

]]>
Wed, 29 Apr 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 01:13:32 This episode, we talked tea with Boba Guys and Tea People co-founder Bin Chen! He's had one of the most unique design careers we've ever heard of and he tells a really great story - which made this episode especially fun for us. Hopefully, you'll dig it too! This episode, we talked tea with Boba Guys and Tea People co-founder Bin Chen! He's had one of the most unique design careers we've ever heard of and he tells a really great story - which made this episode especially fun for us. Hopefully, you'll dig it t yes full 23
20: Soft Computer Hands (feat. Dustin Senos) f64cb4cb-dc85-48b6-8028-94c2ef1e9b3f http://designdetails.simplecast.fm/22 This week we caught up with Dustin Senos, the lead designer at Medium for the past 3 years who has spent his professional career traversing the worlds of design and engineering. We dig into Dustin's background and how design has shaped Medium into the product it is today. This week we caught up with Dustin Senos, the lead designer at Medium for the past 3 years who has spent his professional career traversing the worlds of design and engineering. We dig into Dustin's background and how design has shaped Medium into the product it is today.

If you have feedback or suggestions please don't hesitate to reach us on Twitter at @designdetailsfm or email us directly!

Sponsor:
  • IconFinder - Promo code 'ROBOT' for 50% off your first month of Iconfinder Pro!
Dustin on the Web:
Show Notes:

2:00 - Dustin tells us about his transitions between engineering and design.

7:00 - Should designers code?

11:00 - How did you end up at Medium?

17:00 - How was Medium approached as a design challenge?

21:00 - How would you describe the aesthetic of Medium today? How did the agency work shape that aesthetic?

30:00 - We chat about the culture at Medium and their experience with holacracy

43:00 - We diverge into a chat about diversity in design.

45:00 - How did you approach hiring at Medium?

]]>
Mon, 27 Apr 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 01:01:03 This week we caught up with Dustin Senos, the lead designer at Medium for the past 3 years who has spent his professional career traversing the worlds of design and engineering. We dig into Dustin's background and how design has shaped Medium into the product it is today. This week we caught up with Dustin Senos, the lead designer at Medium for the past 3 years who has spent his professional career traversing the worlds of design and engineering. We dig into Dustin's background and how design has shaped Medium into the pro no full 22
19: Super-Dinky Hodinkee (feat. Caleb Davenport and Jake Marsh) 23d2a2b6-2d8f-4f78-8384-c4dc13e74ed8 http://designdetails.simplecast.fm/21 This episode, we dug into our concerns after all the Apple Watch reviews came out with a couple of our favorite iOS developers: Caleb Davenport and Jake Marsh. This episode was completely ridiculous and fun (even moreso if you caught the Periscope livestream featuring the inimitable Marc Hemeon). We discuss the models that each of us pre-ordered as well as Amazon Dash and our most-hoped-for features of the Apple Watch when it finally comes out! This episode, we dug into our concerns after all the Apple Watch reviews came out with a couple of our favorite iOS developers: Caleb Davenport and Jake Marsh. This episode was completely ridiculous and fun (even moreso if you caught the Periscope livestream featuring the inimitable Marc Hemeon). We discuss the models that each of us pre-ordered as well as Amazon Dash and our most-hoped-for features of the Apple Watch when it finally comes out!

If you have feedback or suggestions please don’t hesitate to reach us on Twitter at @designdetailsfm!

Sponsor:
  • IconFinder – Promo code ‘ROBOT’ for 50% off your first month of Iconfinder Pro!
Caleb on the Web:
Jake on the Web:

4:00 - We discuss the Apple Watch pre-orders

9:00 - California vs Not California

13:00 - Technical Difficulties of the Apple Watch

21:00 - Amazon Dash

23:30 - ...aaaaaand back to the Watch

]]>
Wed, 22 Apr 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 00:51:31 This episode, we dug into our concerns after all the Apple Watch reviews came out with a couple of our favorite iOS developers: Caleb Davenport and Jake Marsh. This episode was completely ridiculous and fun (even moreso if you caught the Periscope livestream featuring the inimitable Marc Hemeon). We discuss the models that each of us pre-ordered as well as Amazon Dash and our most-hoped-for features of the Apple Watch when it finally comes out! This episode, we dug into our concerns after all the Apple Watch reviews came out with a couple of our favorite iOS developers: Caleb Davenport and Jake Marsh. This episode was completely ridiculous and fun (even moreso if you caught the Periscope livestr yes full 21
18: Kleenex Testers (feat. Stone Librande) a0e67c33-6ab1-42fb-a9ed-bc4a7006d846 http://designdetails.simplecast.fm/20 This week we broke up our regular string of web designer guests to chat with Stone Librande, lead designer at Riot Games. Stone was also the lead designer of Diablo 3, SimCity and Spore; he's an incredibly talented creator who shared so much insight with us on this episode of Design Details! This week we broke up our regular string of web designer guests to chat with Stone Librande, lead designer at Riot Games. Stone was also the lead designer of Diablo 3, SimCity and Spore; he's an incredibly talented creator who shared so much insight with us on this episode of Design Details!

If you have feedback or suggestions please don't hesitate to reach us on Twitter at @designdetailsfm or email us directly!

Sponsors:
Stone on the Web:
Show Notes:

6:00 - We catch up with Stone on his current work as a game designer.

9:00 - Stone shares his journey to becoming a game designer.

20:00 - Stone shares some of the more specific challenges he's faces as a game designer.

24:00 - You also build lots of physical games?

28:00 - What has been your favorite game to design?

54:00 - Stone talks about the games he's enjoying at the moment.

57:00 - How do feel about the broader trend of DLC and in-app purchases?

1:07:00 - Stone shares his thoughts on virtual reality and augmented realitigy games.

]]>
Mon, 20 Apr 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 01:18:18 This week we broke up our regular string of web designer guests to chat with Stone Librande, lead designer at Riot Games. Stone was also the lead designer of Diablo 3, SimCity and Spore; he's an incredibly talented creator who shared so much insight with us on this episode of Design Details! This week we broke up our regular string of web designer guests to chat with Stone Librande, lead designer at Riot Games. Stone was also the lead designer of Diablo 3, SimCity and Spore; he's an incredibly talented creator who shared so much insight with no full 20
17: Ptotes Pterodactyl (feat. Divya Manian & Bradee Evans) 9cd737fd-ec51-4e26-9f75-91d11149b0c2 http://designdetails.simplecast.fm/19 This week we hung out with Divya Manian and Bradee Evans from the Photoshop team at Adobe. This was a really, really fun episode to record and Divya and Bradee were amazing guests. We got to talk about everything from important issues around diversity to just making dumb jokes about pterodactyls and unicorns. We hope you enjoy it half as much as we enjoyed recording it. This week we hung out with Divya Manian and Bradee Evans from the Photoshop team at Adobe. This was a really, really fun episode to record and Divya and Bradee were amazing guests. We got to talk about everything from important issues around diversity to just making dumb jokes about pterodactyls and unicorns. We hope you enjoy it half as much as we enjoyed recording it.

If you have feedback or suggestions please don't hesitate to reach us on Twitter at @designdetailsfm or email us directly!

Divya on the Web:
Bradee on the Web:
Show Notes:

2:00 - Bradee's Second Career & Explicit Ratings for Podcasts

4:00 - What's up with female representation in tech?

7:30 - Making mistakes in big products

16:00 - "Uncle Photoshop"

20:00 - What's it like working on Photoshop?

27:00 - Working on Web Standards

38:00 - Sketch's effect on how Photoshop is built

55:00 - Why diversity is important for creativity

58:00 - Art vs Design

59:30 - Maintaining confidence when putting out an important tool to a large audience

1:03:30 - Quirks: Sketch vs Photoshop

1:11:30 - Running out of keyboard shortcuts and the move from hardware to software

1:15:00 - Magic UI

]]>
Wed, 15 Apr 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 01:24:28 This week we hung out with Divya Manian and Bradee Evans from the Photoshop team at Adobe. This was a really, really fun episode to record and Divya and Bradee were amazing guests. We got to talk about everything from important issues around diversity to just making dumb jokes about pterodactyls and unicorns. We hope you enjoy it half as much as we enjoyed recording it. This week we hung out with Divya Manian and Bradee Evans from the Photoshop team at Adobe. This was a really, really fun episode to record and Divya and Bradee were amazing guests. We got to talk about everything from important issues around diversity to yes full 19
16: Extravagant Shallowness (feat. Khoi Vinh) 4a8f7b0a-0ac1-43d9-a85b-3a42b080617c http://designdetails.simplecast.fm/18 This week we caught up with Khoi Vinh, an insightful and talented designer making Wildcard in New York City. In this Skype chat we talked about designing for the tablet, honesty on the web and how Khoi manages to maintain so many projects! This week we caught up with Khoi Vinh, an insightful and talented designer making Wildcard in New York City. In this Skype chat we talked about designing for the tablet, honesty on the web and how Khoi manages to maintain so many projects!

If you have feedback or suggestions please don't hesitate to reach us on Twitter at @designdetailsfm or email us directly!

Sponsors:
  • IconFinder - Promo code 'ROBOT' for 50% off your first month of Iconfinder Pro!
  • InVision
Khoi on the Web:
Show Notes:

5:00 - We catch up with Khoi and chat about his current project, Wildcard.

9:00 - Khoi tells us more about the specifics of designing at Wildcard, including why cards are the future of the web.

15:00 - How have you become such a prolific design writer?

20:00 - We learn a bit more about the process behind How They Got There.

26:00 - Khoi's also busy on other side projects and explorations - we learn more.

32:00 - What are the possibilities for tablets that are still untapped?

37:00 - We chat about what it means to be honest on the web.

47:00 - Khoi tells us about how he shares content and thinks about having a large following on Twitter.

]]>
Mon, 13 Apr 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 01:07:29 This week we caught up with Khoi Vinh, an insightful and talented designer making Wildcard in New York City. In this Skype chat we talked about designing for the tablet, honesty on the web and how Khoi manages to maintain so many projects! This week we caught up with Khoi Vinh, an insightful and talented designer making Wildcard in New York City. In this Skype chat we talked about designing for the tablet, honesty on the web and how Khoi manages to maintain so many projects! no full 18
15: Her Left Me (feat. Jeremy Goldberg and George Kedenburg) 81eb56d2-6565-4424-b6df-94b0ed924df8 http://designdetails.simplecast.fm/17 This is our first time to have a second episode scheduled for the week! We're excited to try out this new format, kicking things off with two guests: Jeremy Goldberg and George Kedenburg. We chat about design at Facebook, their journeys as designers and how they're growing within such a large company. This is our first time to have a second episode scheduled for the week! We're excited to try out this new format, kicking things off with two guests: Jeremy Goldberg and George Kedenburg. We chat about design at Facebook, their journeys as designers and how they're growing within such a large organization!

If you have feedback or suggestions please don't hesitate to reach us on Twitter at @designdetailsfm or email us directly!

Jeremy on the Web:
George on the Web:
Show Notes:

1:00 - A beautiful story of a Periscope party.

5:00 - We catch up on the announcements at F8 and what's coming with 3rd party apps.

8:00 - What is the design process like for a product with 600 million users?

  • "Get real time shipping updates on your phone. Send to Messenger."

15:00 - So React Native is a thing!

18:00 - George shares what it's like to work at Parse, a startup-like culture within Facebook.

22:00 - Facebook just moved into a new office!

27:00 - Jared and George share some of their personal stories with us.

36:00 - George chat with Terry Crews on Twitter...

45:00 - Do you worry about feature bloat in Messenger?

51:00 - Jeremy shares his experiences with designing interactions and animations at Google.

55:00 - How are you pushing yourself to be a better designer every day?

]]>
Wed, 08 Apr 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 01:02:39 This is our first time to have a second episode scheduled for the week! We're excited to try out this new format, kicking things off with two guests: Jeremy Goldberg and George Kedenburg. We chat about design at Facebook, their journeys as designers and how they're growing within such a large company. This is our first time to have a second episode scheduled for the week! We're excited to try out this new format, kicking things off with two guests: Jeremy Goldberg and George Kedenburg. We chat about design at Facebook, their journeys as designers and h no full 17
14: Unless You're Dumb (feat. Jared Erondu) 80cecbc8-fb18-4e25-9679-8235e80af499 http://designdetails.simplecast.fm/16 This week we hung out with Jared Erondu for an hour or so. He has put out an extremely impressive body of work in a very short time - from his work at Lift, to Omada, to co-founding The Industry with Drew Wilson, to his current role as Creative Director at Teespring. We covered a lot of ground - from the future of user interfaces to donuts to whether or not "UX designer" should be a job title anymore. This week we hung out with Jared Erondu, a designer well-known for his work at Lift, Omada Health, The Industry and his current role as Creative Director at Teespring. We covered a lot of ground – from the future of user interfaces to donuts to whether or not “UX designer” should be a job title anymore!

This was a great conversation and, for the first time ever, we have another one coming on Thursday where we discuss the announcements from the F8 conference with Facebook designers Jeremy Goldberg and George Kedenburg!

If you have feedback or suggestions please don't hesitate to reach us on Twitter at @designdetailsfm or email us directly!

Sponsors:
  • IconFinder - Promo code 'ROBOT' for 50% off your first month of Iconfinder Pro!
  • Invision
Jared on the Web
Show Notes:

4:00 - We catch up with Jared and the latest projects he's working on!

10:00 - Jared tells us about his journey of becoming a designer.

20:00 - How did The Industry become so popular?

31:00 - What do you think of Apple's first-party apps?

32:00 - We talk about designers getting a seat at the table.

42:00 - What was it like moving from the East Coast to San Francisco?

50:00 - We dig a bit deeper into some of Jared's previous roles in design

1:00:00 - Donuts!

1:05:00 - Jared talks about a secret agenda...

1:11:00 - What does it mean to be a creative director?

]]>
Mon, 06 Apr 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 01:21:22 This week we hung out with Jared Erondu for an hour or so. He has put out an extremely impressive body of work in a very short time - from his work at Lift, to Omada, to co-founding The Industry with Drew Wilson, to his current role as Creative Director at Teespring. We covered a lot of ground - from the future of user interfaces to donuts to whether or not "UX designer" should be a job title anymore. This week we hung out with Jared Erondu for an hour or so. He has put out an extremely impressive body of work in a very short time - from his work at Lift, to Omada, to co-founding The Industry with Drew Wilson, to his current role as Creative Director a yes full 16
13: Eating Horse (feat. Maurice Woods) cc547b29-ec0e-4ecc-96fe-31e50ed903ba http://designdetails.simplecast.fm/15 We had an amazing conversation this week with Maurice "Mo" Woods, a senior visual designer at Yahoo and founder of the Inneract Project. We chat about what he's doing in design education, diversity in design and how his background as a pro basketball player has served him in his career as a designer. We had an amazing conversation this week with Maurice "Mo" Woods, a senior visual designer at Yahoo and founder of the Inneract Project. We chat about what he's doing in design education, diversity in design and how his background as a pro basketball player has served him in his career as a designer.

If you have feedback or suggestions please don't hesitate to reach us on Twitter at @designdetailsfm or email us directly!

Sponsors:
Mo on the Web:
Show Notes:

14:00 - We learn more about Mo's interest in design education for kids.

20:00 - Mo gets into the details of what's going on at Inneract and why it's so important.

37:00 - Want to help with the Inneract Project? They need your help.

57:00 - The real reason design is so important for kids in underserved communities.

1:03:00 - We chat about diversity in design, tech and the hiring process.

1:12:00 - Where are all the designers of color?

]]>
Mon, 30 Mar 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 01:21:09 We had an amazing conversation this week with Maurice "Mo" Woods, a senior visual designer at Yahoo and founder of the Inneract Project. We chat about what he's doing in design education, diversity in design and how his background as a pro basketball player has served him in his career as a designer. We had an amazing conversation this week with Maurice "Mo" Woods, a senior visual designer at Yahoo and founder of the Inneract Project. We chat about what he's doing in design education, diversity in design and how his background as a pro basketball play no full 15
12: Topsoil Decisions (feat. Ryan Sims) 3d505491-ae0b-46cd-848b-aeb7c43de2cf http://designdetails.simplecast.fm/14 This past week we sat down with Ryan Sims, the former head of design at Rdio. We caught up with him about his latest career change as he heads to Adobe, what it was like growing the design team at Rdio and what it means to have a design mentor. This was an insightful episode, and we hope you all enjoy! This past week we sat down with Ryan Sims, the former head of design at Rdio. We caught up with him about his latest career change as he heads to Adobe, what it was like growing the design team at Rdio and what it means to have a design mentor.

This was an insightful episode, and we hope you all enjoy! If you have feedback or suggestions please don't hesitate to reach us on Twitter at @designdetailsfm or email us directly!

Sponsors:
Ryan on the Web:
Show Notes:

3:00 - We catch up with Ryan on his latest adventures in funemployment.

9:00 - a mispronunciation kicks off a backstory of Ryan's journey at Rdio.

15:00 - A brief diversion into Ryan's latest music.

18:00 - We chat branding, Vdio and working at a music startup.

21:00 - Ryan explains his path to get into Rdio and how he managed a growing design team.

42:00 - The two traits that Ryan looks for in a designer.

53:00 - Ryan explains his views on design mentors and why he wished he'd had one.

1:06:00 - How do you navigate a career transition?

]]>
Mon, 23 Mar 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 01:16:38 This past week we sat down with Ryan Sims, the former head of design at Rdio. We caught up with him about his latest career change as he heads to Adobe, what it was like growing the design team at Rdio and what it means to have a design mentor. This was an insightful episode, and we hope you all enjoy! This past week we sat down with Ryan Sims, the former head of design at Rdio. We caught up with him about his latest career change as he heads to Adobe, what it was like growing the design team at Rdio and what it means to have a design mentor. This was a no full 14
11: Artisanal Fitness (feat. Erika Hall) f492ba8e-016d-4c5b-bb65-a2eb43503d78 http://designdetails.simplecast.fm/13 This week we caught up with Erika Hall, co-founder of Mule Design and author of Just Enough Research. We dive deep into a handful of topics, from user research to gender in tech, from the Apple Watch to the evolution of San Francisco culture - we had a lot of fun recording this one! This week we caught up with Erika Hall, co-founder of Mule Design and author of Just Enough Research. We dive deep into a handful of topics, from user research to gender in tech, from the Apple Watch to the evolution of San Francisco culture - we had a lot of fun recording this one!

If you have feedback or suggestions please don't hesitate to reach us on Twitter at @designdetailsfm or email us directly!

Sponsors:
Erika on the Web:
Show Notes:

3:00 - We catch up with Erika to learn about design research.

8:00 - What are some of the myths of design and research?

16:00 - Has Mule ever considered launching original products?

1:17:00 - Plugs!

]]>
Mon, 16 Mar 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 01:19:39 This week we caught up with Erika Hall, co-founder of Mule Design and author of Just Enough Research. We dive deep into a handful of topics, from user research to gender in tech, from the Apple Watch to the evolution of San Francisco culture - we had a lot of fun recording this one! This week we caught up with Erika Hall, co-founder of Mule Design and author of Just Enough Research. We dive deep into a handful of topics, from user research to gender in tech, from the Apple Watch to the evolution of San Francisco culture - we had a lo no full 13
Bonus Episode: Apple Watch Watch 2015 78700348-a897-4e51-9e78-1320c52cae86 http://designdetails.simplecast.fm/12 Today we're excited to release a special bonus episode of the Design Details Podcast! After today's Apple Watch event we grabbed Sam Soffes to chat about the implications for us as designers and what the watch means for app design going into the future. Today we're excited to release a special bonus episode of the Design Details Podcast! After today's Apple Watch event we grabbed Sam Soffes to chat about the implications for us as designers and what the watch means for app design going into the future.

This is our first "bonus episode" and we'd love to hear your thoughts! We're excited to explore more weekly episodes in the future but we want to make sure we get the content and format just right. If you have feedback or suggestions on this style, give us a shout on Twitter at @designdetailsfm!

Sponsor:
  • Iconfinder (use promo code 'ROBOT' for 50% off your first month!)
]]>
Mon, 09 Mar 2015 20:55:00 -0700 shows@spec.fm (Spec) Spec 00:48:19 Today we're excited to release a special bonus episode of the Design Details Podcast! After today's Apple Watch event we grabbed Sam Soffes to chat about the implications for us as designers and what the watch means for app design going into the future. Today we're excited to release a special bonus episode of the Design Details Podcast! After today's Apple Watch event we grabbed Sam Soffes to chat about the implications for us as designers and what the watch means for app design going into the future. no full 12
10: Tiny Nuggets of Delight (feat. Tim Van Damme) 854773e9-7462-4713-ad3e-820590dcf724 http://designdetails.simplecast.fm/11 This week we caught up with Tim Van Damme, an amazing designer who has been a part of some of our favorite products including Instagram and Dropbox. For this hour we chat about Tim's past experience in design, working on Mailbox, Dribbble and the future of design/technology. We had a lot of fun with this show and we hope you all enjoy the conversation! This week we caught up with Tim Van Damme, an amazing designer who has been a part of some of our favorite products including Instagram and Dropbox. For this hour we chat about Tim's past experience in design, working on Mailbox, Dribbble and the future of design/technology. We had a lot of fun with this show and we hope you all enjoy the conversation!

If you have feedback or suggestions please don't hesitate to reach us on Twitter at @designdetailsfm or email us directly!

Sponsors:
  • Iconfinder (use promo code 'ROBOT' for 50% off your first month!)
  • Hover (use promo code 'bragdriven' to save on your first order!)
Tim on the Web:
Show Notes:

2:00 - We dig a bit into Tim's past interview experiences and first steps into the design world.

14:00 - Tim talks about taking breaks and disconnecting.

20:00 - What it's like working on Mailbox for Mac; Tim tells us about his personal style.

27:00 - We get into the ethos of UI design, talking about the details and emotional design.

37:00 - Let's talk Dribbble.

48:00 - We chat about the current state of user interfaces and what the next big leap will be.

55:00 - What will be the next breakthrough in input mechanisms?

1:03:00 - We chat about email as a communication method and what's next for Mailbox.

1:05:00

]]>
Mon, 09 Mar 2015 08:00:00 -0700 shows@spec.fm (Spec) Spec 01:09:25 This week we caught up with Tim Van Damme, an amazing designer who has been a part of some of our favorite products including Instagram and Dropbox. For this hour we chat about Tim's past experience in design, working on Mailbox, Dribbble and the future of design/technology. We had a lot of fun with this show and we hope you all enjoy the conversation! This week we caught up with Tim Van Damme, an amazing designer who has been a part of some of our favorite products including Instagram and Dropbox. For this hour we chat about Tim's past experience in design, working on Mailbox, Dribbble and the future o no full 11
9: When Did the Marketing Department Get Here? (feat. Paul Stamatiou and Avi Cieplinski) 34f9180c-99ab-4dab-b1dc-4889ee8f0a8c http://designdetails.simplecast.fm/10 For Episode 9, we had our first chat with two guests! This time we caught up with Paul Stamatiou and Avi Cieplinski, from the Photo and Video Team at Twitter. We covered a lot this week - chatting about prototyping, wearables, design process and what it's like to work at Twitter and Apple! For Episode 9, we had our first chat with two guests! This time we caught up with Paul Stamatiou and Avi Cieplinski from the Photo and Video Team at Twitter. We covered a lot this week - chatting about prototyping, wearables, design process and what it's like to work at Twitter and Apple!

If you have feedback or suggestions please don't hesitate to reach us on Twitter at @designdetailsfm or email us directly!

Sponsors:
  • Iconfinder (use promo code 'ROBOT' for 50% off your first month!)
  • Hover (use promo code 'bragdriven' to save 10% on your first order!)
Paul on the Web:
Avi on the Web:
Show Notes:

2:00 - We sat down with Paul and Avi to chat about what they've been working on.

6:00 - The importance of sharing the design process in public.

16:00 - We dive a bit deeper into prototyping at big tech companies.

21:00 - We dig a bit into Paul's background as a designer.

53:00 - The conversation makes a quick transition into past startups and fun Twitter spin-off products.

1:00:00 - Do you have a design philosophy?

1:07:00 - We dig into some of the hiring processes in place at Twitter.

]]>
Mon, 02 Mar 2015 08:00:00 -0800 shows@spec.fm (Spec) Spec 01:14:21 For Episode 9, we had our first chat with two guests! This time we caught up with Paul Stamatiou and Avi Cieplinski, from the Photo and Video Team at Twitter. We covered a lot this week - chatting about prototyping, wearables, design process and what it's like to work at Twitter and Apple! For Episode 9, we had our first chat with two guests! This time we caught up with Paul Stamatiou and Avi Cieplinski, from the Photo and Video Team at Twitter. We covered a lot this week - chatting about prototyping, wearables, design process and what it's no full 10
8: Deathly Allergic to Avocado (feat. Chloe Park) db4aaa9b-363f-459d-b247-9eb0b5b0e4ee http://designdetails.simplecast.fm/9 Episode 8 everyone! This week we sat down with the lovely Chloe Park, an experience designer making things happen at OpenTable. We chat about everything from the design process at OpenTable to Chloe's biggest problems with relationships in tech. This was a fun episode for us to record and we hope you enjoy it! Episode 8 everyone! This week we sat down with the lovely Chloe Park, an experience designer making things happen at OpenTable. We chat about everything from the design process at OpenTable to Chloe's biggest problems with relationships in tech. This was a fun episode for us to record and we hope you enjoy it!

If you have feedback or suggestions please don't hesitate to reach us on Twitter at @designdetailsfm or email us directly!

Sponsors:
  • Iconfinder (use promo code 'ROBOT' for 50% off your first month!)
  • Hover (use promo code 'bragdriven' to save on your first order!)
Chloe Park on the Web:
Show Notes:

2:00 - We catch up with Chloe on everything she's working on at OpenTable.

7:00 - What's the design process at OpenTable?

23:00 - Chloe shares a "project" she's working on...

]]>
Mon, 23 Feb 2015 08:00:00 -0800 shows@spec.fm (Spec) Spec 01:16:14 Episode 8 everyone! This week we sat down with the lovely Chloe Park, an experience designer making things happen at OpenTable. We chat about everything from the design process at OpenTable to Chloe's biggest problems with relationships in tech. This was a fun episode for us to record and we hope you enjoy it! Episode 8 everyone! This week we sat down with the lovely Chloe Park, an experience designer making things happen at OpenTable. We chat about everything from the design process at OpenTable to Chloe's biggest problems with relationships in tech. This was yes full 9
7: VP of Unnecessary Redesign (feat. Cap Watkins) tag:soundcloud,2010:tracks/191390704 http://designdetails.simplecast.fm/8 This week we caught up with Cap Watkins, the recently-appointed VP of design at BuzzFeed. We picked Cap's brain about hiring designers, A/B testing, beard-growing, East Coast design and more. Oh, and robo-horses! This week we caught up with Cap Watkins, the recently-appointed VP of design at BuzzFeed. We picked Cap's brain about hiring designers, A/B testing, beard-growing, East Coast design and more. Oh, and robo-horses!

If you have feedback or suggestions please don't hesitate to reach us on Twitter at @designdetailsfm or email us directly!

Sponsors:
Cap Watkins on the Web:
Show Notes:

02:00 - Cap tells us what he's been up to lately.

03:00 - We explore life as a designer on the East Coast.

11:30 - Cap Watkins: VP of Unnecessary Redesign.

15:00 - We explore a bit about the hiring decisions being made at BuzzFeed.

18:00 - What prototyping tools are you using?

28:30 - What does it mean to be a VP of design?

32:00 - We learn some management advice for designers.

37:00 - We get down with some chef biographies.

52:00 - We get back to the biggest challenges of hiring designers and some of the most common mistakes people make when applying for a design job.

59:00 - Cap shares his process as a designer.

1:09:00 - Winding things down, here's where you can find Cap.

]]>
Mon, 16 Feb 2015 01:58:00 -0800 shows@spec.fm (Brian Lovin & Bryn Jackson) Brian Lovin & Bryn Jackson 01:16:58 This week we caught up with Cap Watkins, the recently-appointed VP of design at BuzzFeed. We picked Cap's brain about hiring designers, A/B testing, beard-growing, East Coast design and more. Oh, and robo-horses! This week we caught up with Cap Watkins, the recently-appointed VP of design at BuzzFeed. We picked Cap's brain about hiring designers, A/B testing, beard-growing, East Coast design and more. Oh, and robo-horses! no full 8
6: Down the Stuffed Rabbit Hole (feat. Marissa Louie) tag:soundcloud,2010:tracks/190209178 http://designdetails.simplecast.fm/7 This week we hung out with Marissa Louie - a rather prolific designer, activist, and creator who has worked on many of our favorite products at places like Apple, Yahoo, Ness Computing, and Wanelo, among others. We discussed everything from teddy bears to social justice - and the profound impact of emotional design. This week we hung out with Marissa Louie - a rather prolific designer, activist, and creator who has worked on many of our favorite products at places like Apple, Yahoo, Ness Computing, and Wanelo, among others. We discussed everything from teddy bears to social justice - and the profound impact of emotional design.

If you have feedback or suggestions please don't hesitate to reach us on Twitter at @designdetailsfm or email us directly!

Sponsors:
Marissa Louie on the Web:
Show Notes:

01:05 - Marissa's "Origin Story"

15:45 - How did you transition into building stuffed animals?

30:00 - What's a product with a really great experience?

32:00 - Bringing emotion to data-driven products

35:00 - Designers Guild

44:00 - How can designers best help people?

52:00 - BearBear + charity

]]>
Sun, 08 Feb 2015 22:51:00 -0800 shows@spec.fm (Brian Lovin & Bryn Jackson) Brian Lovin & Bryn Jackson 00:56:12 This week we hung out with Marissa Louie - a rather prolific designer, activist, and creator who has worked on many of our favorite products at places like Apple, Yahoo, Ness Computing, and Wanelo, among others. We discussed everything from teddy bears to social justice - and the profound impact of emotional design. This week we hung out with Marissa Louie - a rather prolific designer, activist, and creator who has worked on many of our favorite products at places like Apple, Yahoo, Ness Computing, and Wanelo, among others. We discussed everything from teddy bears to no full 7
5: Squeeze in Some Meat with Your Candy (feat. Gabriel Valdivia) tag:soundcloud,2010:tracks/189129799 http://designdetails.simplecast.fm/6 This week we had a chat with Gabriel Valdivia, a Product Designer at Facebook. He's a close friend and a remarkable designer best known for his work at Automatic. We had a great time chatting about a lot of Gabe's favorite things - from prototyping to Serial to meat/candy hybrids. This week we had a chat with Gabriel Valdivia, a Product Designer at Facebook. He's a close friend and a remarkable designer best known for his work at Automatic. We had a great time chatting about a lot of Gabe's favorite things - from prototyping to Serial to meat/candy hybrids.

If you have feedback or suggestions please don't hesitate to reach us on Twitter at @designdetailsfm or email us directly!

Sponsors:
Gabe Valdivia on the Web:
Show Notes:

01:45 - Gabe tells us about his upcoming Facebook adventure in London

05:45 - Does the design culture at Facebook encourage bold new ideas?

07:05 - Gabe shares about his transition from startup life to big corporation

17:30 - We learn a bit more about Facebook's latest experimental apps

25:00 - What are the prototyping tools being used at Facebook?

37:00 - How do you design an emotional experience?

45:00 - Jay did it

60:00 - Gabe shares about a meaningful mentor in his life

]]>
Mon, 02 Feb 2015 09:21:00 -0800 shows@spec.fm (Brian Lovin & Bryn Jackson) Brian Lovin & Bryn Jackson 01:03:56 This week we had a chat with Gabriel Valdivia, a Product Designer at Facebook. He's a close friend and a remarkable designer best known for his work at Automatic. We had a great time chatting about a lot of Gabe's favorite things - from prototyping to Serial to meat/candy hybrids. This week we had a chat with Gabriel Valdivia, a Product Designer at Facebook. He's a close friend and a remarkable designer best known for his work at Automatic. We had a great time chatting about a lot of Gabe's favorite things - from prototyping to Ser no full 6
4: Meatspace User Onboarding (feat. Kristy Tillman) tag:soundcloud,2010:tracks/187912386 http://designdetails.simplecast.fm/5 This week we caught up with Kristy Tillman, a former designer at IDEO who now leads the design charge at Society of Grownups. We had a great time chatting across a huge range of topics, from diversity in tech to meatspace user onboarding! This week we caught up with Kristy Tillman, a former designer at IDEO who now leads the design charge at Society of Grownups. We had a great time chatting across a huge range of topics, from diversity in tech to meatspace user onboarding!

If you have feedback or suggestions please don't hesitate to reach us on Twitter at @designdetailsfm or email us directly!

Sponsors:
Kristy Tillman on the Web:
Show Notes:

00:00 - We catch up with Kristy about what she's working on

07:00 - We explore some of Kristy's work in helping marginalized communities, including why there's less diversity in tech

15:30 - Kristy adds context to explaining why there are fewer prominent female designers

19:00 - We circled back around to talk about Kristy's current work at Society of Grownups

36:30 - Kristy explains some of the challenges in hiring for designers and developers on the East Coast

]]>
Sun, 25 Jan 2015 22:17:00 -0800 shows@spec.fm (Brian Lovin & Bryn Jackson) Brian Lovin & Bryn Jackson 00:56:54 This week we caught up with Kristy Tillman, a former designer at IDEO who now leads the design charge at Society of Grownups. We had a great time chatting across a huge range of topics, from diversity in tech to meatspace user onboarding! This week we caught up with Kristy Tillman, a former designer at IDEO who now leads the design charge at Society of Grownups. We had a great time chatting across a huge range of topics, from diversity in tech to meatspace user onboarding! no full 5
3: I'm Tired of Looking at Apps (feat. Wilson Miner) tag:soundcloud,2010:tracks/186729913 http://designdetails.simplecast.fm/4 Another Monday means another episode of Design Details! This week we caught up with Wilson Miner, an insanely thoughtful and talented designer well-known for his work at Apple, Rdio and Facebook. In this episode we talked with Wilson about game design, his favorite products and more - we hope you enjoy the show! Another Monday means another episode of Design Details! This week we caught up with Wilson Miner, an insanely thoughtful and talented designer well-known for his work at Apple, Rdio and Facebook.

In this episode we talked with Wilson about game design, his favorite products and more - we hope you enjoy the show! If you have feedback or suggestions please don't hesitate to reach us on Twitter at @designdetailsfm or email us directly (designdetailsfm@gmail.com)

Sponsors:
Wilson Miner on the Web:
Show Notes:

2:00

3:00

- Games - Hearthstone - TableFlip14:10 - Framer - Quartz Composer - Content Generator Sketch Plugin - Parse - George Kedenburg's piece on prototyping with Parse and Framer - Paintcode (mistakenly called "Codepaint") - Origami - Unreal Engine - Blueprints Visual Scripting - Pixate

27:00

34:00

37:00

42:00

49:00

53:00

55:00

1:01:00 - Don't let the frustration own you

1:01:50 - There are no dream jobs

]]>
Sun, 18 Jan 2015 17:57:00 -0800 shows@spec.fm (Brian Lovin & Bryn Jackson) Brian Lovin & Bryn Jackson 01:02:41 Another Monday means another episode of Design Details! This week we caught up with Wilson Miner, an insanely thoughtful and talented designer well-known for his work at Apple, Rdio and Facebook. In this episode we talked with Wilson about game design, his favorite products and more - we hope you enjoy the show! Another Monday means another episode of Design Details! This week we caught up with Wilson Miner, an insanely thoughtful and talented designer well-known for his work at Apple, Rdio and Facebook. In this episode we talked with Wilson about game design, hi no full 4
2: So Vanilla (feat. Nick Slater) tag:soundcloud,2010:tracks/185672387 http://designdetails.simplecast.fm/3 Here we go, episode two of the Design Details Podcast! This week we caught up with Nick Slater, an insanely talented designer and illustrator doing wonderful work at Palantir. Here we go, episode two of the Design Details Podcast! This week we caught up with Nick Slater, an insanely talented designer and illustrator doing wonderful work at Palantir. We had a lot of fun recording this show and we really think you'll enjoy it!

Full Disclosure: this episode is a bit longer and does have some strong language.

As always, if you have feedback or suggestions please don't hesitate to reach us on Twitter at @designdetailsfm or email us directly!

Sponsors:
Nick Slater on the Web:
Show Notes:

0:05:45 - We dig back into Nick's origins - corgi conversations ensue.

0:07:00 - We start digging into Nick's journey to joining Palantir.

0:28:00 - What's it like working with a quickly-growing team of designers?

0:37:00 - Why is there such a huge focus on investing in illustrators at tech companies?

1:00:00 - Exploring the many Lord of the Rings inside jokes at Palantir.

1:10:30 - Adventure Time

1:12:00 - Dribbble and Nick's lack of online presence.

1:20:50 - Nick's motivation for working hard to succeed.

1:26:00 - Nick's current projects

]]>
Mon, 12 Jan 2015 06:06:00 -0800 shows@spec.fm (Brian Lovin & Bryn Jackson) Brian Lovin & Bryn Jackson 01:50:10 Here we go, episode two of the Design Details Podcast! This week we caught up with Nick Slater, an insanely talented designer and illustrator doing wonderful work at Palantir. Here we go, episode two of the Design Details Podcast! This week we caught up with Nick Slater, an insanely talented designer and illustrator doing wonderful work at Palantir. no full 3
1: How Nerdy of an Answer Do You Want? (feat. Sam Soffes) tag:soundcloud,2010:tracks/184597739 http://designdetails.simplecast.fm/2 The first episode of Design Details has arrived! For our opening show, we sat down with designer and developer Sam Soffes to talk about his latest project (Whiskey), building in public, brag-driven development and his interest in working as a designer. The first episode of Design Details has arrived! For our opening show, we sat down with designer and developer Sam Soffes to talk about his latest project (Whiskey), building in public, brag-driven development and his interest in working as a designer. This is our first episode and we're learning a lot! We'd love your feedback or suggestions - give a shout on Twitter, @designdetailsfm or send us a private email!

Sam Soffes on the Web:
Show Notes:

1:35 - We chat with Sam about his latest labor of love, Whiskey.

6:30 - We talk about some of Sam's older projects.

7:50 - Discussion about the difficulty selling apps, including Cheddar and Roon

11:15 - How do you balance freelancing with clients and building your own side projects?

12:10 - We dive a bit deeper into the challenges of building Whiskey - what's your product philosophy?

18:45 - Sam shares a brilliant product development hack.

22:33 - What does it take to design a text/markdown editor?

26:05 - Sam has built several photo apps; we dive into the process.

37:40 - We chat about Sam's motorcycle trip through South Africa

43:52 - Dan Cassaro for Deus

44:01 - Sam tells us about designing an onboarding experience in Litely

  • Litely
  • Litely was named one of Apple's Best Apps of 2014

50:50 - Sam talks about his move from development to design. Can taste be learned?

57:27 - We briefly chat about prototyping and the tools Sam uses.

]]>
Mon, 05 Jan 2015 07:58:00 -0800 shows@spec.fm (Brian Lovin & Bryn Jackson) Brian Lovin & Bryn Jackson 00:59:28 The first episode of Design Details has arrived! For our opening show, we sat down with designer and developer Sam Soffes to talk about his latest project (Whiskey), building in public, brag-driven development and his interest in working as a designer. The first episode of Design Details has arrived! For our opening show, we sat down with designer and developer Sam Soffes to talk about his latest project (Whiskey), building in public, brag-driven development and his interest in working as a designer. no full 2
0: Design Details Teaser tag:soundcloud,2010:tracks/179413159 http://designdetails.simplecast.fm/1 This is a little teaser recording for us to test our equipment, set up our feeds and get the website up and running. You can subscribe to the podcast by heading to http://designdetails.fm and following on iTunes, RSS or email! The first Design Details episode is coming January 5th, 2015 - stay posted! This is a little teaser recording for us to test our equipment, set up our feeds and get the website up and running. You can subscribe to the podcast by heading to http://designdetails.fm and following on iTunes, RSS or email! The first Design Details episode is coming January 5th, 2015 - stay posted!

]]>
Sun, 30 Nov 2014 21:49:00 -0800 shows@spec.fm (Brian Lovin & Bryn Jackson) Brian Lovin & Bryn Jackson 00:00:46 This is a little teaser recording for us to test our equipment, set up our feeds and get the website up and running. You can subscribe to the podcast by heading to http://designdetails.fm and following on iTunes, RSS or email! The first Design Details episode is coming January 5th, 2015 - stay posted! This is a little teaser recording for us to test our equipment, set up our feeds and get the website up and running. You can subscribe to the podcast by heading to http://designdetails.fm and following on iTunes, RSS or email! The first Design Details epi no full 1
================================================ FILE: api/test/data/podcast-feed/giant-bombcast ================================================ Giant Bombcast Giant Bomb discusses the latest video game news and new releases, taste-test questionable beverages, and get wildly off-topic in this weekly podcast. https://www.giantbomb.com 2008-2018 CBS Interactive en-us Giant Bomb discusses the latest video game news and new releases, taste-test questionable beverages, and get wildly off-topic in this weekly podcast. Giant Bomb Giant Bomb discusses the latest video game news and new releases, taste-test questionable beverages, and get wildly off-topic in this weekly podcast. Giant Bomb bombcast@giantbomb.com no Giant Bombcast https://static.giantbomb.com/uploads/original/11/110673/2927815-3756859778-28940.png https://www.giantbomb.com 144 144 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS 2008-2018 CBS Interactive Games & Hobbies/Other Games Technology/Gadgets Giant Bombcast 534: Forklift Academy https://www.giantbomb.com/podcasts/giant-bombcast-534-forklift-academy/1600-2347/ Back on up to the loading dock for the latest scuttlebutt about Blazblue: Cross Tag Battle, Street Fighter's 30th-ish anniversary, the return of PixelJunk, PUBG lawsuits, the future of PlayStation, and pre-E3 thoughts big and small. Tue, 29 May 2018 16:14:00 PST 1600-2347 Back on up to the loading dock for the latest scuttlebutt about Blazblue: Cross Tag Battle, Street Fighter's 30th-ish anniversary, the return of PixelJunk, PUBG lawsuits, the future of PlayStation, and pre-E3 thoughts big and small. Back on up to the loading dock for the latest scuttlebutt about Blazblue: Cross Tag Battle, Street Fighter's 30th-ish anniversary, the return of PixelJunk, PUBG lawsuits, the future of PlayStation, and pre-E3 thoughts big and small. Giant Bomb no 10233 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 533: We've Got the Truck Stick! https://www.giantbomb.com/podcasts/giant-bombcast-533-weve-got-the-truck-stick/1600-2341/ "Scoops" Klepek is in the studio to help walk us through the Black Ops IIII reveal, hands-on with Dreams, the li'l Neo Geo, hard zombie times, and the tyranny of electric sidewalk scooters. Tue, 22 May 2018 15:45:00 PST 1600-2341 "Scoops" Klepek is in the studio to help walk us through the Black Ops IIII reveal, hands-on with Dreams, the li'l Neo Geo, hard zombie times, and the tyranny of electric sidewalk scooters. "Scoops" Klepek is in the studio to help walk us through the Black Ops IIII reveal, hands-on with Dreams, the li'l Neo Geo, hard zombie times, and the tyranny of electric sidewalk scooters. Giant Bomb no 9909 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 532: Hard Onboard https://www.giantbomb.com/podcasts/giant-bombcast-532-hard-onboard/1600-2336/ The good ship E3 has sprung a few leaks, and Will Smith is here to help us bail as fast as we can. Also: State of Decay 2, Frostpunk, the new Dota Battle Pi... uh, Pass, the Rage 2 announcement, Star Fox Karts, and your emails! Tue, 15 May 2018 16:53:00 PST 1600-2336 The good ship E3 has sprung a few leaks, and Will Smith is here to help us bail as fast as we can. Also: State of Decay 2, Frostpunk, the new Dota Battle Pi... uh, Pass, the Rage 2 announcement, Star Fox Karts, and your emails! The good ship E3 has sprung a few leaks, and Will Smith is here to help us bail as fast as we can. Also: State of Decay 2, Frostpunk, the new Dota Battle Pi... uh, Pass, the Rage 2 announcement, Star Fox Karts, and your emails! Giant Bomb no 9589 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 531: Domestic Beers and Zoolander https://www.giantbomb.com/podcasts/giant-bombcast-531-domestic-beers-and-zoolander/1600-2329/ Try to hold your pee long enough to listen to us talk about E3 hopes and dreams, VR lightsabers, Nintendo Switch Online, Super Ubi Bros., tragic pinball developments, and the magic of the renaissance faire. Tue, 08 May 2018 15:32:00 PST 1600-2329 Try to hold your pee long enough to listen to us talk about E3 hopes and dreams, VR lightsabers, Nintendo Switch Online, Super Ubi Bros., tragic pinball developments, and the magic of the renaissance faire. Try to hold your pee long enough to listen to us talk about E3 hopes and dreams, VR lightsabers, Nintendo Switch Online, Super Ubi Bros., tragic pinball developments, and the magic of the renaissance faire. Giant Bomb no 9908 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 530: Olympic Uno https://www.giantbomb.com/podcasts/giant-bombcast-530-olympic-uno/1600-2320/ Late-game thoughts on God of War, the legality of loot boxes, all kinds of Nintendo goings on, Lunchable heating strategies, memories of lousy music teachers, and a dawning awareness of E3 await in this week's Bombcast! Tue, 01 May 2018 16:48:00 PST 1600-2320 Late-game thoughts on God of War, the legality of loot boxes, all kinds of Nintendo goings on, Lunchable heating strategies, memories of lousy music teachers, and a dawning awareness of E3 await in this week's Bombcast! Late-game thoughts on God of War, the legality of loot boxes, all kinds of Nintendo goings on, Lunchable heating strategies, memories of lousy music teachers, and a dawning awareness of E3 await in this week's Bombcast! Giant Bomb no 9948 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 529: POLICE USE NUNCHAKU https://www.giantbomb.com/podcasts/giant-bombcast-529-police-use-nunchaku/1600-2312/ This week we dig into cardboard video games, God of War, Swords of Ditto, Call of Duty's multiplayer-only future, Valve's Campo Santo, Neo Geo nostalgia, the great domain-name scam, college martial arts, and a big giant list of E3 maybes. Tue, 24 Apr 2018 15:45:00 PST 1600-2312 This week we dig into cardboard video games, God of War, Swords of Ditto, Call of Duty's multiplayer-only future, Valve's Campo Santo, Neo Geo nostalgia, the great domain-name scam, college martial arts, and a big giant list of E3 maybes. This week we dig into cardboard video games, God of War, Swords of Ditto, Call of Duty's multiplayer-only future, Valve's Campo Santo, Neo Geo nostalgia, the great domain-name scam, college martial arts, and a big giant list of E3 maybes. Giant Bomb no 10052 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 528: Boy! https://www.giantbomb.com/podcasts/giant-bombcast-528-boy/1600-2305/ This week we talk about the early hours of Kratos and his son's new adventure, some hardcore boat action, some hardcore "action," the proper way to enjoy a PB&amp;J sandwich, and way more. Tue, 17 Apr 2018 15:41:00 PST 1600-2305 This week we talk about the early hours of Kratos and his son's new adventure, some hardcore boat action, some hardcore "action," the proper way to enjoy a PB&amp;J sandwich, and way more. This week we talk about the early hours of Kratos and his son's new adventure, some hardcore boat action, some hardcore "action," the proper way to enjoy a PB&amp;J sandwich, and way more. Giant Bomb no 9035 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 527: LINE NOISE!! https://www.giantbomb.com/podcasts/giant-bombcast-527-line-noise/1600-2298/ In the wake of PAX and Wrestlemania, we check in on Extinction, Far Cry 5, Ni no Kuni II, Boss Key's battle royale, the return of Sam Fisher, GBA excellence, serious piñata management, and the whereabouts of Richard Grieco. Tue, 10 Apr 2018 14:52:00 PST 1600-2298 In the wake of PAX and Wrestlemania, we check in on Extinction, Far Cry 5, Ni no Kuni II, Boss Key's battle royale, the return of Sam Fisher, GBA excellence, serious piñata management, and the whereabouts of Richard Grieco. In the wake of PAX and Wrestlemania, we check in on Extinction, Far Cry 5, Ni no Kuni II, Boss Key's battle royale, the return of Sam Fisher, GBA excellence, serious piñata management, and the whereabouts of Richard Grieco. Giant Bomb no 9943 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 526: Ultra Mario https://www.giantbomb.com/podcasts/giant-bombcast-526-ultra-mario/1600-2287/ This week we're all about old and new arcade games, consoles that did and didn't exist, and rampant E3 speculation, with a dash of new releases like Minit, Ni no Kuni 2, and Far Cry 5 for good measure! Tue, 03 Apr 2018 16:04:00 PST 1600-2287 This week we're all about old and new arcade games, consoles that did and didn't exist, and rampant E3 speculation, with a dash of new releases like Minit, Ni no Kuni 2, and Far Cry 5 for good measure! This week we're all about old and new arcade games, consoles that did and didn't exist, and rampant E3 speculation, with a dash of new releases like Minit, Ni no Kuni 2, and Far Cry 5 for good measure! Giant Bomb no 9157 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 525: The Chocolate Mystery https://www.giantbomb.com/podcasts/giant-bombcast-525-the-chocolate-mystery/1600-2281/ The Giant Bomb Gang gathers to talk about Far Cry 5, gentleman's club buffets, Ni no Kuni II, Jason's powered skateboard, new Fortnite records, the latest video game news, your emails, and more! Tue, 27 Mar 2018 15:54:00 PST 1600-2281 The Giant Bomb Gang gathers to talk about Far Cry 5, gentleman's club buffets, Ni no Kuni II, Jason's powered skateboard, new Fortnite records, the latest video game news, your emails, and more! The Giant Bomb Gang gathers to talk about Far Cry 5, gentleman's club buffets, Ni no Kuni II, Jason's powered skateboard, new Fortnite records, the latest video game news, your emails, and more! Giant Bomb no 9914 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 524: Rez 2 https://www.giantbomb.com/podcasts/giant-bombcast-524-rez-2/1600-2270/ Mark MacDonald and John Ricciardi swoop in to chat about the state of Japanese games (besides Rez 2, which does not exist), Sea of Thieves, the Fortnite craze, Ubisoft's newfound freedom, and world-traveling World Warriors. Tue, 20 Mar 2018 15:56:00 PST 1600-2270 Mark MacDonald and John Ricciardi swoop in to chat about the state of Japanese games (besides Rez 2, which does not exist), Sea of Thieves, the Fortnite craze, Ubisoft's newfound freedom, and world-traveling World Warriors. Mark MacDonald and John Ricciardi swoop in to chat about the state of Japanese games (besides Rez 2, which does not exist), Sea of Thieves, the Fortnite craze, Ubisoft's newfound freedom, and world-traveling World Warriors. Giant Bomb no 8585 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 523: Realistic Wad of Flesh https://www.giantbomb.com/podcasts/giant-bombcast-523-realistic-wad-of-flesh/1600-2262/ We've braved the light drizzle outside to go in on hot topics like Fortnite mobile, Black Ops IIII, Dota subscriptions, the Nintendo Direct, Burnout Paradise Remastered, Into the Breach's continued dominance, and the mysterious egg beer. Tue, 13 Mar 2018 16:05:00 PST 1600-2262 We've braved the light drizzle outside to go in on hot topics like Fortnite mobile, Black Ops IIII, Dota subscriptions, the Nintendo Direct, Burnout Paradise Remastered, Into the Breach's continued dominance, and the mysterious egg beer. We've braved the light drizzle outside to go in on hot topics like Fortnite mobile, Black Ops IIII, Dota subscriptions, the Nintendo Direct, Burnout Paradise Remastered, Into the Breach's continued dominance, and the mysterious egg beer. Giant Bomb no 10393 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 522: Shuckin' Drive https://www.giantbomb.com/podcasts/giant-bombcast-522-shuckin-drive/1600-2255/ This week Into the Breach is the only thing most of us can think about, but we manage to mix Battlefield: WWII, Hunt: Showdown, Vermintide 2, free Yakuza, Capcom vs. Capcom, good platformer physics, and bad Chrono Trigger into the show for good measure. Tue, 06 Mar 2018 15:25:00 PST 1600-2255 This week Into the Breach is the only thing most of us can think about, but we manage to mix Battlefield: WWII, Hunt: Showdown, Vermintide 2, free Yakuza, Capcom vs. Capcom, good platformer physics, and bad Chrono Trigger into the show for good measure. This week Into the Breach is the only thing most of us can think about, but we manage to mix Battlefield: WWII, Hunt: Showdown, Vermintide 2, free Yakuza, Capcom vs. Capcom, good platformer physics, and bad Chrono Trigger into the show for good measure. Giant Bomb no 9381 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 521: On the Devil's Level https://www.giantbomb.com/podcasts/giant-bombcast-521-on-the-devils-level/1600-2244/ This week we're obligated to dive deep on the entirety of Metal Gear Survive, plus Into the Breach, Hunt: Showdown, Activision moving and shaking, Switch homebrew, illicit GameStop goings-on, and the class conflict of PapaPriority. Tue, 27 Feb 2018 14:35:00 PST 1600-2244 This week we're obligated to dive deep on the entirety of Metal Gear Survive, plus Into the Breach, Hunt: Showdown, Activision moving and shaking, Switch homebrew, illicit GameStop goings-on, and the class conflict of PapaPriority. This week we're obligated to dive deep on the entirety of Metal Gear Survive, plus Into the Breach, Hunt: Showdown, Activision moving and shaking, Switch homebrew, illicit GameStop goings-on, and the class conflict of PapaPriority. Giant Bomb no 9394 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 520: Nice Meme, Jeff https://www.giantbomb.com/podcasts/giant-bombcast-520-nice-meme-jeff/1600-2237/ This week on the podcast train, we give up our seat for Metal Gear Survive, hold the door for Burnout Paradise Remastered, glance suspiciously at Atari's cryptocurrency, and strike up a friendly conversation with your emails. Tue, 20 Feb 2018 15:56:00 PST 1600-2237 This week on the podcast train, we give up our seat for Metal Gear Survive, hold the door for Burnout Paradise Remastered, glance suspiciously at Atari's cryptocurrency, and strike up a friendly conversation with your emails. This week on the podcast train, we give up our seat for Metal Gear Survive, hold the door for Burnout Paradise Remastered, glance suspiciously at Atari's cryptocurrency, and strike up a friendly conversation with your emails. Giant Bomb no 8747 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 519: Jim Davis Get Paid Dot Biz https://www.giantbomb.com/podcasts/giant-bombcast-519-jim-davis-get-paid-dot-biz/1600-2231/ We're on a globetrotting search for lasagna and bootleg Burger King, along the way encountering Monster Hunter: World, the Analogue Super NT, Metroid Prime 4 rumors, Bone Thugs-n-Zelda, and the latest on Billy Mitchell's MAME adventure. Tue, 13 Feb 2018 15:15:00 PST 1600-2231 We're on a globetrotting search for lasagna and bootleg Burger King, along the way encountering Monster Hunter: World, the Analogue Super NT, Metroid Prime 4 rumors, Bone Thugs-n-Zelda, and the latest on Billy Mitchell's MAME adventure. We're on a globetrotting search for lasagna and bootleg Burger King, along the way encountering Monster Hunter: World, the Analogue Super NT, Metroid Prime 4 rumors, Bone Thugs-n-Zelda, and the latest on Billy Mitchell's MAME adventure. Giant Bomb no 9420 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 518: I'm Known for My Viscous Dips https://www.giantbomb.com/podcasts/giant-bombcast-518-im-known-for-my-viscous-dips/1600-2225/ Ben returns to the office to find we all got way into Dragon Ball and Monster Hunter in his absence. Only lengthy discussions of hockey jersey numbers, arcade high score controversies, Sword of Sodan, and the Mario movie can return us to normalcy. Tue, 06 Feb 2018 16:15:00 PST 1600-2225 Ben returns to the office to find we all got way into Dragon Ball and Monster Hunter in his absence. Only lengthy discussions of hockey jersey numbers, arcade high score controversies, Sword of Sodan, and the Mario movie can return us to normalcy. Ben returns to the office to find we all got way into Dragon Ball and Monster Hunter in his absence. Only lengthy discussions of hockey jersey numbers, arcade high score controversies, Sword of Sodan, and the Mario movie can return us to normalcy. Giant Bomb no 0 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 517: Master Roshi's Adult Bookstore https://www.giantbomb.com/podcasts/giant-bombcast-517-master-roshis-adult-bookstore/1600-2214/ We can finally talk about Dragon Ball FighterZ and Monster Hunter: World, and we do just that! Also: Celeste, the Sea of Thieves beta, the Anthem delay, old gaming jargon, snakes on a boat, and dubious investment opportunities. Tue, 30 Jan 2018 16:27:00 PST 1600-2214 We can finally talk about Dragon Ball FighterZ and Monster Hunter: World, and we do just that! Also: Celeste, the Sea of Thieves beta, the Anthem delay, old gaming jargon, snakes on a boat, and dubious investment opportunities. We can finally talk about Dragon Ball FighterZ and Monster Hunter: World, and we do just that! Also: Celeste, the Sea of Thieves beta, the Anthem delay, old gaming jargon, snakes on a boat, and dubious investment opportunities. Giant Bomb no 9195 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 516: God-Damn ROMs https://www.giantbomb.com/podcasts/giant-bombcast-516-god-damn-roms/1600-2209/ The news is popping off this week with Nintendo Labo, Xbox's widened Game Pass, game industry moving and shaking, John Cena's movie career, and... PlayStation shoes, plus games like Monster Hunter and Dragon Ball we can barely talk about! Tue, 23 Jan 2018 15:14:00 PST 1600-2209 The news is popping off this week with Nintendo Labo, Xbox's widened Game Pass, game industry moving and shaking, John Cena's movie career, and... PlayStation shoes, plus games like Monster Hunter and Dragon Ball we can barely talk about! The news is popping off this week with Nintendo Labo, Xbox's widened Game Pass, game industry moving and shaking, John Cena's movie career, and... PlayStation shoes, plus games like Monster Hunter and Dragon Ball we can barely talk about! Giant Bomb no 9776 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 515: The Bionic Beaver https://www.giantbomb.com/podcasts/giant-bombcast-515-the-bionic-beaver/1600-2204/ This week we're hot in pursuit of moose and squirrel, but along the way we run into Street Fighter V: AE, Horizon DLC, Nintendo's tiny Direct, horrible Silicon Valley beverages, Canadian computers, and thoughts on the state of the arcade scene. Tue, 16 Jan 2018 14:55:00 PST 1600-2204 This week we're hot in pursuit of moose and squirrel, but along the way we run into Street Fighter V: AE, Horizon DLC, Nintendo's tiny Direct, horrible Silicon Valley beverages, Canadian computers, and thoughts on the state of the arcade scene. This week we're hot in pursuit of moose and squirrel, but along the way we run into Street Fighter V: AE, Horizon DLC, Nintendo's tiny Direct, horrible Silicon Valley beverages, Canadian computers, and thoughts on the state of the arcade scene. Giant Bomb no 9782 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 514: Carpe Light Gun https://www.giantbomb.com/podcasts/giant-bombcast-514-carpe-light-gun/1600-2199/ Rorie pops in to talk about Jeff's Reno trip, the latest in VR and TV, some exciting website updates, a Ben check-in, X-Men on the Genesis, and recapturing the magic of arcade light gun games. Tue, 09 Jan 2018 14:59:00 PST 1600-2199 Rorie pops in to talk about Jeff's Reno trip, the latest in VR and TV, some exciting website updates, a Ben check-in, X-Men on the Genesis, and recapturing the magic of arcade light gun games. Rorie pops in to talk about Jeff's Reno trip, the latest in VR and TV, some exciting website updates, a Ben check-in, X-Men on the Genesis, and recapturing the magic of arcade light gun games. Giant Bomb no 9148 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 513: 2018 Stick https://www.giantbomb.com/podcasts/giant-bombcast-513-2018-stick/1600-2195/ We're ringing in the new year with chat about a bunch of old years that include Apple II gaming, Usenet archives, Trumpet Winsock, and vector monitors. Oh, there are some new games too. Happy 2018! Tue, 02 Jan 2018 16:51:00 PST 1600-2195 We're ringing in the new year with chat about a bunch of old years that include Apple II gaming, Usenet archives, Trumpet Winsock, and vector monitors. Oh, there are some new games too. Happy 2018! We're ringing in the new year with chat about a bunch of old years that include Apple II gaming, Usenet archives, Trumpet Winsock, and vector monitors. Oh, there are some new games too. Happy 2018! Giant Bomb no 10131 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Game of the Year 2017: Day Five Deliberations https://www.giantbomb.com/podcasts/game-of-the-year-2017-day-five-deliberations/1600-2178/ This is it! On the fifth and final day we deliver Best Super Mario Odyssey Capture, Best Cast of Characters, Worst Game (That We Played), and Best Game. Fri, 29 Dec 2017 08:00:00 PST 1600-2178 This is it! On the fifth and final day we deliver Best Super Mario Odyssey Capture, Best Cast of Characters, Worst Game (That We Played), and Best Game. This is it! On the fifth and final day we deliver Best Super Mario Odyssey Capture, Best Cast of Characters, Worst Game (That We Played), and Best Game. Giant Bomb no 23935 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Game of the Year 2017: Day Four Deliberations https://www.giantbomb.com/podcasts/game-of-the-year-2017-day-four-deliberations/1600-2175/ It's day four of the awards, and that means it's time for Best Debut, Best Styyyyyyyyyyyyyyyyyle, Best New Character, and Best Story. Thu, 28 Dec 2017 08:00:00 PST 1600-2175 It's day four of the awards, and that means it's time for Best Debut, Best Styyyyyyyyyyyyyyyyyle, Best New Character, and Best Story. It's day four of the awards, and that means it's time for Best Debut, Best Styyyyyyyyyyyyyyyyyle, Best New Character, and Best Story. Giant Bomb no 15808 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Game of the Year 2017: Day Three Deliberations https://www.giantbomb.com/podcasts/game-of-the-year-2017-day-three-deliberations/1600-2174/ On the third day of Game of the Year, my true love gave to me Best World, PLEASE STOP, Best Wolfenstein II Moment or Sequence, and Best Sequence. Wed, 27 Dec 2017 08:00:00 PST 1600-2174 On the third day of Game of the Year, my true love gave to me Best World, PLEASE STOP, Best Wolfenstein II Moment or Sequence, and Best Sequence. On the third day of Game of the Year, my true love gave to me Best World, PLEASE STOP, Best Wolfenstein II Moment or Sequence, and Best Sequence. Giant Bomb no 20118 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Game of the Year 2017: Day Two Deliberations https://www.giantbomb.com/podcasts/game-of-the-year-2017-day-two-deliberations/1600-2172/ Day two brings cheer, nog, Best Multiplayer, Hottest Mess, Best Surprise, and Best Music. Tue, 26 Dec 2017 08:00:00 PST 1600-2172 Day two brings cheer, nog, Best Multiplayer, Hottest Mess, Best Surprise, and Best Music. Day two brings cheer, nog, Best Multiplayer, Hottest Mess, Best Surprise, and Best Music. Giant Bomb no 18871 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Game of the Year 2017: Day One Deliberations https://www.giantbomb.com/podcasts/game-of-the-year-2017-day-one-deliberations/1600-2171/ Ye olde video game arguments commence with 2017's Old Game of the Year, Best Shopkeeper, Most Disappointing Game, and Best Looking Game. Mon, 25 Dec 2017 08:00:00 PST 1600-2171 Ye olde video game arguments commence with 2017's Old Game of the Year, Best Shopkeeper, Most Disappointing Game, and Best Looking Game. Ye olde video game arguments commence with 2017's Old Game of the Year, Best Shopkeeper, Most Disappointing Game, and Best Looking Game. Giant Bomb no 14992 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Seasons Greetings From Giant Bomb https://www.giantbomb.com/podcasts/seasons-greetings-from-giant-bomb/1600-2187/ A message of thanks, and some quick housekeeping on our upcoming Game of the Year schedule. Fri, 22 Dec 2017 08:00:00 PST 1600-2187 A message of thanks, and some quick housekeeping on our upcoming Game of the Year schedule. A message of thanks, and some quick housekeeping on our upcoming Game of the Year schedule. Giant Bomb no 612 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 512: Nectar From Hector https://www.giantbomb.com/podcasts/giant-bombcast-512-nectar-from-hector/1600-2184/ Procedural building maintenance can't stop us (for long) from talking about the greatest of the Jaguar, competitive Catherine, how to Get Over It, eggs any style, crypto-gamer-cash, and your final emails of 2017. Tue, 19 Dec 2017 15:48:00 PST 1600-2184 Procedural building maintenance can't stop us (for long) from talking about the greatest of the Jaguar, competitive Catherine, how to Get Over It, eggs any style, crypto-gamer-cash, and your final emails of 2017. Procedural building maintenance can't stop us (for long) from talking about the greatest of the Jaguar, competitive Catherine, how to Get Over It, eggs any style, crypto-gamer-cash, and your final emails of 2017. Giant Bomb no 9226 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 511: Baby in a Jar https://www.giantbomb.com/podcasts/giant-bombcast-511-baby-in-a-jar/1600-2169/ It may be December, but there's plenty of news in the wake of the Game Awards and PSX. Also: PUBG on Xbox, the Monster Hunter World beta, Fighting EX Layer, Slurpee opportunities, and more! Tue, 12 Dec 2017 13:24:00 PST 1600-2169 It may be December, but there's plenty of news in the wake of the Game Awards and PSX. Also: PUBG on Xbox, the Monster Hunter World beta, Fighting EX Layer, Slurpee opportunities, and more! It may be December, but there's plenty of news in the wake of the Game Awards and PSX. Also: PUBG on Xbox, the Monster Hunter World beta, Fighting EX Layer, Slurpee opportunities, and more! Giant Bomb no 7344 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 510: Ken's Alpha Hair https://www.giantbomb.com/podcasts/giant-bombcast-510-kens-alpha-hair/1600-2165/ We take a break from GOTY deliberations to talk about... other video games, the Mario cereal, improv teams, Mega Men, old arcade boards, and undercover narcs! Tue, 05 Dec 2017 15:26:00 PST 1600-2165 We take a break from GOTY deliberations to talk about... other video games, the Mario cereal, improv teams, Mega Men, old arcade boards, and undercover narcs! We take a break from GOTY deliberations to talk about... other video games, the Mario cereal, improv teams, Mega Men, old arcade boards, and undercover narcs! Giant Bomb no 9691 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 509: Tom Nook's Grim Rictus https://www.giantbomb.com/podcasts/giant-bombcast-509-tom-nooks-grim-rictus/1600-2159/ Our impossibly full studio brings you a chaotic discussion of the games of the day, live trivia play, the dire state of loot boxes, the meats of the Mushroom Kingdom, and the ongoing mystery of the fingernail bandit. Tue, 28 Nov 2017 15:58:00 PST 1600-2159 Our impossibly full studio brings you a chaotic discussion of the games of the day, live trivia play, the dire state of loot boxes, the meats of the Mushroom Kingdom, and the ongoing mystery of the fingernail bandit. Our impossibly full studio brings you a chaotic discussion of the games of the day, live trivia play, the dire state of loot boxes, the meats of the Mushroom Kingdom, and the ongoing mystery of the fingernail bandit. Giant Bomb no 10762 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 508: Xfinity Heavy Industries https://www.giantbomb.com/podcasts/giant-bombcast-508-xfinity-heavy-industries/1600-2153/ Loot boxes keep rearing their randomized heads all through this podcast, but we also manage to chat at length about our GOTY cram lists, Battle Chef Brigade, the perilous fate of the Trap Trebek, baby shampoo taste tests, and definitely not what the best Tue, 21 Nov 2017 15:44:00 PST 1600-2153 Loot boxes keep rearing their randomized heads all through this podcast, but we also manage to chat at length about our GOTY cram lists, Battle Chef Brigade, the perilous fate of the Trap Trebek, baby shampoo taste tests, and definitely not what the best Loot boxes keep rearing their randomized heads all through this podcast, but we also manage to chat at length about our GOTY cram lists, Battle Chef Brigade, the perilous fate of the Trap Trebek, baby shampoo taste tests, and definitely not what the best Giant Bomb no 9915 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 507: Mon Martha https://www.giantbomb.com/podcasts/giant-bombcast-507-mon-martha/1600-2133/ This week we're cramming in games new and old, from Battlefront II and Mario Odyssey to Nier and Horizon, with a dash of EA acquisitions, Mario movies, Xbox One X sales, prank call analysis, discarded Sega hardware, and a brand new producer! Tue, 14 Nov 2017 14:18:00 PST 1600-2133 This week we're cramming in games new and old, from Battlefront II and Mario Odyssey to Nier and Horizon, with a dash of EA acquisitions, Mario movies, Xbox One X sales, prank call analysis, discarded Sega hardware, and a brand new producer! This week we're cramming in games new and old, from Battlefront II and Mario Odyssey to Nier and Horizon, with a dash of EA acquisitions, Mario movies, Xbox One X sales, prank call analysis, discarded Sega hardware, and a brand new producer! Giant Bomb no 8599 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 506: CornFights.com https://www.giantbomb.com/podcasts/giant-bombcast-506-cornfightscom/1600-2128/ This week it takes us two hours to talk through all the big new releases flying to and fro, and that's before we even get to Blizzcon news, industry downsizing, trophies 4 cash, the perfect Street Fighter, and historic Monopoly scams. Tue, 07 Nov 2017 15:43:00 PST 1600-2128 This week it takes us two hours to talk through all the big new releases flying to and fro, and that's before we even get to Blizzcon news, industry downsizing, trophies 4 cash, the perfect Street Fighter, and historic Monopoly scams. This week it takes us two hours to talk through all the big new releases flying to and fro, and that's before we even get to Blizzcon news, industry downsizing, trophies 4 cash, the perfect Street Fighter, and historic Monopoly scams. Giant Bomb no 10219 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 505: Put the Suit Jacket On, It's Time! https://www.giantbomb.com/podcasts/giant-bombcast-505-put-the-suit-jacket-on-its-time/1600-2122/ Greg Chiller... sorry, Miller joins us for a terrifying Halloween show full of Wolfenstein II, Mario Odyssey, Sony's Paris Games Week showing, the fate of the Visceral Games, and some really bad costumes. Tue, 31 Oct 2017 16:54:00 PST 1600-2122 Greg Chiller... sorry, Miller joins us for a terrifying Halloween show full of Wolfenstein II, Mario Odyssey, Sony's Paris Games Week showing, the fate of the Visceral Games, and some really bad costumes. Greg Chiller... sorry, Miller joins us for a terrifying Halloween show full of Wolfenstein II, Mario Odyssey, Sony's Paris Games Week showing, the fate of the Visceral Games, and some really bad costumes. Giant Bomb no 10812 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 504: Tell Kent's Wife Where the Stuff Is https://www.giantbomb.com/podcasts/giant-bombcast-504-tell-kents-wife-where-the-stuff/1600-2117/ Virtual Reality's own Will Smith joins us to gab about Fire Emblem Warriors, PUBG hacks, secret Switch firmware, new Hitman stuff, old Xbox games, more storage units, and the recent allegations roiling the industry. Tue, 24 Oct 2017 16:11:00 PST 1600-2117 Virtual Reality's own Will Smith joins us to gab about Fire Emblem Warriors, PUBG hacks, secret Switch firmware, new Hitman stuff, old Xbox games, more storage units, and the recent allegations roiling the industry. Virtual Reality's own Will Smith joins us to gab about Fire Emblem Warriors, PUBG hacks, secret Switch firmware, new Hitman stuff, old Xbox games, more storage units, and the recent allegations roiling the industry. Giant Bomb no 11646 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 503: Virtual Kevtris https://www.giantbomb.com/podcasts/giant-bombcast-503-virtual-kevtris/1600-2113/ This week's scrappy show covers Gran Turismo Sport, The Evil Within 2, Super NES wizardry, the shocking closure of Visceral Games, the latest VR goings on, runaway segment music, and your emails! Tue, 17 Oct 2017 16:45:00 PST 1600-2113 This week's scrappy show covers Gran Turismo Sport, The Evil Within 2, Super NES wizardry, the shocking closure of Visceral Games, the latest VR goings on, runaway segment music, and your emails! This week's scrappy show covers Gran Turismo Sport, The Evil Within 2, Super NES wizardry, the shocking closure of Visceral Games, the latest VR goings on, runaway segment music, and your emails! Giant Bomb no 9963 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 502: Bad Wood https://www.giantbomb.com/podcasts/giant-bombcast-502-bad-wood/1600-2108/ We've come through the smoke and flame to talk about Shadow of War (and its loot boxes), the truth about Mugman, Street Fighter V's Arcade Edition, many much Gundam Versus, shower spiders, Erik Estrada, and disturbing genetic facts. Tue, 10 Oct 2017 15:41:00 PST 1600-2108 We've come through the smoke and flame to talk about Shadow of War (and its loot boxes), the truth about Mugman, Street Fighter V's Arcade Edition, many much Gundam Versus, shower spiders, Erik Estrada, and disturbing genetic facts. We've come through the smoke and flame to talk about Shadow of War (and its loot boxes), the truth about Mugman, Street Fighter V's Arcade Edition, many much Gundam Versus, shower spiders, Erik Estrada, and disturbing genetic facts. Giant Bomb no 10197 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 501: Wavy Tube Physics https://www.giantbomb.com/podcasts/giant-bombcast-501-wavy-tube-physics/1600-2101/ The spookiest month begins with indie favs like Steamworld Dig 2 and Cuphead, a Destiny 2 raid post-mortem, Forza progression woes, Red Dead 2 trailer impressions, bootleg Star Fox 2 carts, and your b-mails! Tue, 03 Oct 2017 15:19:00 PST 1600-2101 The spookiest month begins with indie favs like Steamworld Dig 2 and Cuphead, a Destiny 2 raid post-mortem, Forza progression woes, Red Dead 2 trailer impressions, bootleg Star Fox 2 carts, and your b-mails! The spookiest month begins with indie favs like Steamworld Dig 2 and Cuphead, a Destiny 2 raid post-mortem, Forza progression woes, Red Dead 2 trailer impressions, bootleg Star Fox 2 carts, and your b-mails! Giant Bomb no 10500 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 500: Half Jax https://www.giantbomb.com/podcasts/giant-bombcast-500-half-jax/1600-2096/ After pondering the advanced age of this podcast, we get back to business with Ruiner, Hob, Destiny 2 raid prep, Battle Royale beef, hopes and dreams for Borderlands 3, and thoughts on our tolerance for cold nuggs. Tue, 26 Sep 2017 16:20:00 PST 1600-2096 After pondering the advanced age of this podcast, we get back to business with Ruiner, Hob, Destiny 2 raid prep, Battle Royale beef, hopes and dreams for Borderlands 3, and thoughts on our tolerance for cold nuggs. After pondering the advanced age of this podcast, we get back to business with Ruiner, Hob, Destiny 2 raid prep, Battle Royale beef, hopes and dreams for Borderlands 3, and thoughts on our tolerance for cold nuggs. Giant Bomb no 10061 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 499: The Huge Dudes https://www.giantbomb.com/podcasts/giant-bombcast-499-the-huge-dudes/1600-2090/ Ben and Jason gives us a deep dive on Marvel vs. Capcom: Infinite, we try to shake our endgame Destiny 2 addiction, the words "Grand Theft Auto VI" are spoken, and Tokyo Game Show looms! Tue, 19 Sep 2017 16:17:00 PST 1600-2090 Ben and Jason gives us a deep dive on Marvel vs. Capcom: Infinite, we try to shake our endgame Destiny 2 addiction, the words "Grand Theft Auto VI" are spoken, and Tokyo Game Show looms! Ben and Jason gives us a deep dive on Marvel vs. Capcom: Infinite, we try to shake our endgame Destiny 2 addiction, the words "Grand Theft Auto VI" are spoken, and Tokyo Game Show looms! Giant Bomb no 9890 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 498: Cat Spanker's Alley https://www.giantbomb.com/podcasts/giant-bombcast-498-cat-spankers-alley/1600-2082/ This week it's hard to talk about anything besides Destiny 2, but we also touch on Fortnite's Battlegrounds, the second coming of the NES Classic, bad YouTube behavior, worthless video game systems, Mario's embrace of the bourgeoisie, and Kinects in casin Tue, 12 Sep 2017 15:49:00 PST 1600-2082 This week it's hard to talk about anything besides Destiny 2, but we also touch on Fortnite's Battlegrounds, the second coming of the NES Classic, bad YouTube behavior, worthless video game systems, Mario's embrace of the bourgeoisie, and Kinects in casin This week it's hard to talk about anything besides Destiny 2, but we also touch on Fortnite's Battlegrounds, the second coming of the NES Classic, bad YouTube behavior, worthless video game systems, Mario's embrace of the bourgeoisie, and Kinects in casin Giant Bomb no 10342 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 497: Tasteful but Stupid https://www.giantbomb.com/podcasts/giant-bombcast-497-tasteful-but-stupid/1600-2078/ PAX pox and heat waves can't stop us from convening for some real early Destiny 2 impressions, more on Mario + Rabbids, a quick PAX indie roundup, musings about mobile Puzzle Fighter, and the grave injustice of SNES cart reproductions. Tue, 05 Sep 2017 15:15:00 PST 1600-2078 PAX pox and heat waves can't stop us from convening for some real early Destiny 2 impressions, more on Mario + Rabbids, a quick PAX indie roundup, musings about mobile Puzzle Fighter, and the grave injustice of SNES cart reproductions. PAX pox and heat waves can't stop us from convening for some real early Destiny 2 impressions, more on Mario + Rabbids, a quick PAX indie roundup, musings about mobile Puzzle Fighter, and the grave injustice of SNES cart reproductions. Giant Bomb no 8908 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 496: SiN Is My Half-Life https://www.giantbomb.com/podcasts/giant-bombcast-496-sin-is-my-half-life/1600-2072/ This week we talk about kinky rabbids, the Half-Life that wasn't, martial arts Dark Souls, the Switch voice chat boondoggle, the crime of butter on sandwiches, and your emails! Tue, 29 Aug 2017 15:02:00 PST 1600-2072 This week we talk about kinky rabbids, the Half-Life that wasn't, martial arts Dark Souls, the Switch voice chat boondoggle, the crime of butter on sandwiches, and your emails! This week we talk about kinky rabbids, the Half-Life that wasn't, martial arts Dark Souls, the Switch voice chat boondoggle, the crime of butter on sandwiches, and your emails! Giant Bomb no 10196 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 495: Sludge Trudgin' https://www.giantbomb.com/podcasts/giant-bombcast-495-sludge-trudgin/1600-2065/ We've played a ton of games and now we're talking about 'em! Among them are Uncharted: The Lost Legacy, Sonic Mania, Agents of Mayhem, Marvel vs. Capcom: Infinite, Monster Hunter: World, Dauntless, and MatterFall. Also: Gamescom! Also: scorpions! Tue, 22 Aug 2017 15:25:00 PST 1600-2065 We've played a ton of games and now we're talking about 'em! Among them are Uncharted: The Lost Legacy, Sonic Mania, Agents of Mayhem, Marvel vs. Capcom: Infinite, Monster Hunter: World, Dauntless, and MatterFall. Also: Gamescom! Also: scorpions! We've played a ton of games and now we're talking about 'em! Among them are Uncharted: The Lost Legacy, Sonic Mania, Agents of Mayhem, Marvel vs. Capcom: Infinite, Monster Hunter: World, Dauntless, and MatterFall. Also: Gamescom! Also: scorpions! Giant Bomb no 10825 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 494: Fievel Fight https://www.giantbomb.com/podcasts/giant-bombcast-494-fievel-fight/1600-2059/ This week we round up as many new releases as we can, like Sonic Mania, Starcraft Remastered, and Matterfall, run down the end of the International, ponder card games, weigh in on scorpions and Riff Raff, and try on our best accents. Tue, 15 Aug 2017 15:25:00 PST 1600-2059 This week we round up as many new releases as we can, like Sonic Mania, Starcraft Remastered, and Matterfall, run down the end of the International, ponder card games, weigh in on scorpions and Riff Raff, and try on our best accents. This week we round up as many new releases as we can, like Sonic Mania, Starcraft Remastered, and Matterfall, run down the end of the International, ponder card games, weigh in on scorpions and Riff Raff, and try on our best accents. Giant Bomb no 10139 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 493: Boosh! It's a Mess https://www.giantbomb.com/podcasts/giant-bombcast-493-boosh-its-a-mess/1600-2053/ We ruminate on Hellblade's intimate handling of psychosis, gush about Mossmouth's new game reveal, take sides in the Splatfest civil war, lust after crates full of miniskirts, and check in with Scottish Ben, all on this week's Bombcast! Tue, 08 Aug 2017 15:29:00 PST 1600-2053 We ruminate on Hellblade's intimate handling of psychosis, gush about Mossmouth's new game reveal, take sides in the Splatfest civil war, lust after crates full of miniskirts, and check in with Scottish Ben, all on this week's Bombcast! We ruminate on Hellblade's intimate handling of psychosis, gush about Mossmouth's new game reveal, take sides in the Splatfest civil war, lust after crates full of miniskirts, and check in with Scottish Ben, all on this week's Bombcast! Giant Bomb no 8565 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 492: Plug Into TV https://www.giantbomb.com/podcasts/giant-bombcast-492-plug-into-tv/1600-2047/ GameSpot's Peter Brown pops in to chat about retro topics big and small, from the mini-Genesis boondoggle to prototype Ataris and five-figure Super Mario carts, along with the hottest games of the day like Tacoma, Pyre, Sundered, and maple syrup corndogs. Tue, 01 Aug 2017 15:18:00 PST 1600-2047 GameSpot's Peter Brown pops in to chat about retro topics big and small, from the mini-Genesis boondoggle to prototype Ataris and five-figure Super Mario carts, along with the hottest games of the day like Tacoma, Pyre, Sundered, and maple syrup corndogs. GameSpot's Peter Brown pops in to chat about retro topics big and small, from the mini-Genesis boondoggle to prototype Ataris and five-figure Super Mario carts, along with the hottest games of the day like Tacoma, Pyre, Sundered, and maple syrup corndogs. Giant Bomb no 7729 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 491: Just a Bowl of Dough https://www.giantbomb.com/podcasts/giant-bombcast-491-just-a-bowl-of-dough/1600-2042/ Fresh off the state fair, noted Australian Ben regales us with tales of '90s bands and corndogs before we sink our teeth into Pyre, Splatoon 2, Kingsway, Fortnite, the Pokemon Go kerfuffle, the pitfalls of nostalgia, and a quick lesson on some slang from Tue, 25 Jul 2017 15:02:00 PST 1600-2042 Fresh off the state fair, noted Australian Ben regales us with tales of '90s bands and corndogs before we sink our teeth into Pyre, Splatoon 2, Kingsway, Fortnite, the Pokemon Go kerfuffle, the pitfalls of nostalgia, and a quick lesson on some slang from Fresh off the state fair, noted Australian Ben regales us with tales of '90s bands and corndogs before we sink our teeth into Pyre, Splatoon 2, Kingsway, Fortnite, the Pokemon Go kerfuffle, the pitfalls of nostalgia, and a quick lesson on some slang from Giant Bomb no 10816 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 490: Sometimes Pepperoni, Sometimes Hot Dog https://www.giantbomb.com/podcasts/giant-bombcast-490-sometimes-pepperoni-sometimes-h/1600-2037/ A strange odor wafts through the halls of Giant Bomb, so we huddle in the podcast studio to chat about Splatoon 2, the Ataribox, all the action at EVO, the end (?) of the Miiverse, and the unexpected return of Casey Hudson. Tue, 18 Jul 2017 14:45:00 PST 1600-2037 A strange odor wafts through the halls of Giant Bomb, so we huddle in the podcast studio to chat about Splatoon 2, the Ataribox, all the action at EVO, the end (?) of the Miiverse, and the unexpected return of Casey Hudson. A strange odor wafts through the halls of Giant Bomb, so we huddle in the podcast studio to chat about Splatoon 2, the Ataribox, all the action at EVO, the end (?) of the Miiverse, and the unexpected return of Casey Hudson. Giant Bomb no 8912 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 489: Cash 4 Wrestling https://www.giantbomb.com/podcasts/giant-bombcast-489-cash-4-wrestling/1600-2020/ The dog days of summer are upon us, and with them quick impressions of the new Fire Pro, more gushing over Battlegrounds, some light Splatoon 2 chat, the whereabouts of Bobby Kotick, reflections on old tweets, and a totally authoritative discussion about Tue, 11 Jul 2017 15:05:00 PST 1600-2020 The dog days of summer are upon us, and with them quick impressions of the new Fire Pro, more gushing over Battlegrounds, some light Splatoon 2 chat, the whereabouts of Bobby Kotick, reflections on old tweets, and a totally authoritative discussion about The dog days of summer are upon us, and with them quick impressions of the new Fire Pro, more gushing over Battlegrounds, some light Splatoon 2 chat, the whereabouts of Bobby Kotick, reflections on old tweets, and a totally authoritative discussion about Giant Bomb no 7584 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 488: bigbomb@giantguy.ben https://www.giantbomb.com/podcasts/giant-bombcast-488-bigbombgiantguyben/1600-2015/ Hey, instead of blowing up your video game hands with fireworks, have a safe and sane 4th here. With us. And your emails? Tue, 04 Jul 2017 08:00:00 PST 1600-2015 Hey, instead of blowing up your video game hands with fireworks, have a safe and sane 4th here. With us. And your emails? Hey, instead of blowing up your video game hands with fireworks, have a safe and sane 4th here. With us. And your emails? Giant Bomb no 8995 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 487: Call of the Night Rooster https://www.giantbomb.com/podcasts/giant-bombcast-487-call-of-the-night-rooster/1600-2011/ This week our SNESs are tiny and our Battle Passes leveled. Jeff checks in with Saturn modding. Brad checks in with PS VR. Ben finished Nier a thousand times. It's a podcast! Tue, 27 Jun 2017 15:15:00 PST 1600-2011 This week our SNESs are tiny and our Battle Passes leveled. Jeff checks in with Saturn modding. Brad checks in with PS VR. Ben finished Nier a thousand times. It's a podcast! This week our SNESs are tiny and our Battle Passes leveled. Jeff checks in with Saturn modding. Brad checks in with PS VR. Ben finished Nier a thousand times. It's a podcast! Giant Bomb no 8750 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 486: The Episode After E3 https://www.giantbomb.com/podcasts/giant-bombcast-486-the-episode-after-e3/1600-2005/ Friend of the site Gary Whitta joins us to recap all our favorite stuff from last week's expo, along with a celebration of IO Interactive's new freedom, a gut check on Anthem, musings on the Ataribox, and our hopes for the glorious return of... avatars. Tue, 20 Jun 2017 14:35:00 PST 1600-2005 Friend of the site Gary Whitta joins us to recap all our favorite stuff from last week's expo, along with a celebration of IO Interactive's new freedom, a gut check on Anthem, musings on the Ataribox, and our hopes for the glorious return of... avatars. Friend of the site Gary Whitta joins us to recap all our favorite stuff from last week's expo, along with a celebration of IO Interactive's new freedom, a gut check on Anthem, musings on the Ataribox, and our hopes for the glorious return of... avatars. Giant Bomb no 8721 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bomb at Nite - Live From E3 2017: Nite 3: The Podcast https://www.giantbomb.com/podcasts/giant-bomb-at-nite-live-from-e3-2017-nite-3-the-po/1600-2002/ E3 wraps up with a momentous range of guests from every nook and cranny of the games industry. Fri, 16 Jun 2017 16:16:00 PST 1600-2002 E3 wraps up with a momentous range of guests from every nook and cranny of the games industry. E3 wraps up with a momentous range of guests from every nook and cranny of the games industry. Giant Bomb no 18034 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bomb at Nite - Live From E3 2017: Nite 2: The Podcast https://www.giantbomb.com/podcasts/giant-bomb-at-nite-live-from-e3-2017-nite-2-the-po/1600-1995/ Night two of E3 rolls on with professional wrestlers, world travelers, a cadre of knuckleheads, and players known and unknown. Thu, 15 Jun 2017 09:55:00 PST 1600-1995 Night two of E3 rolls on with professional wrestlers, world travelers, a cadre of knuckleheads, and players known and unknown. Night two of E3 rolls on with professional wrestlers, world travelers, a cadre of knuckleheads, and players known and unknown. Giant Bomb no 16171 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bomb at Nite - Live From E3 2017: Nite 1: The Podcast https://www.giantbomb.com/podcasts/giant-bomb-at-nite-live-from-e3-2017-nite-1-the-po/1600-1994/ The first night of Electronic Three begins with a cavalcade of guests from every corner of the industry. Beers will be chugged! Vapes will be vaped! Wed, 14 Jun 2017 21:00:00 PST 1600-1994 The first night of Electronic Three begins with a cavalcade of guests from every corner of the industry. Beers will be chugged! Vapes will be vaped! The first night of Electronic Three begins with a cavalcade of guests from every corner of the industry. Beers will be chugged! Vapes will be vaped! Giant Bomb no 0 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 485: The E3 2017 Sealed Envelope https://www.giantbomb.com/podcasts/giant-bombcast-485-the-e3-2017-sealed-envelope/1600-1984/ As this year's show floor opens, let's run through everything Jeff saw at judges' week and our probably wrong predictions about what we're gonna see at the show! Tue, 13 Jun 2017 12:00:00 PST 1600-1984 As this year's show floor opens, let's run through everything Jeff saw at judges' week and our probably wrong predictions about what we're gonna see at the show! As this year's show floor opens, let's run through everything Jeff saw at judges' week and our probably wrong predictions about what we're gonna see at the show! Giant Bomb no 7468 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 484: Dirty Dusted Grandpa https://www.giantbomb.com/podcasts/giant-bombcast-484-dirty-dusted-grandpa/1600-1983/ Our last regular show before E3 sees us diving deep into Tekken 7, dissecting the Switch's weird online offering, pondering all the movers and shakers at the show, taking knife-vs-bat offworld, and tapping the wokest clicker ever made. Tue, 06 Jun 2017 16:34:00 PST 1600-1983 Our last regular show before E3 sees us diving deep into Tekken 7, dissecting the Switch's weird online offering, pondering all the movers and shakers at the show, taking knife-vs-bat offworld, and tapping the wokest clicker ever made. Our last regular show before E3 sees us diving deep into Tekken 7, dissecting the Switch's weird online offering, pondering all the movers and shakers at the show, taking knife-vs-bat offworld, and tapping the wokest clicker ever made. Giant Bomb no 10370 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 483: Sega Flair Vs. Virtua Hogan https://www.giantbomb.com/podcasts/giant-bombcast-483-sega-flair-vs-virtua-hogan/1600-1978/ This week we stretch our Arms, crash into the Danger Zone, try and fail to play Friday the 13th, ponder the Far Cry 5 reveal, do some E3 speculatin', blast through a lightning round, and entertain the idea of a new Seaman?! Tue, 30 May 2017 15:45:00 PST 1600-1978 This week we stretch our Arms, crash into the Danger Zone, try and fail to play Friday the 13th, ponder the Far Cry 5 reveal, do some E3 speculatin', blast through a lightning round, and entertain the idea of a new Seaman?! This week we stretch our Arms, crash into the Danger Zone, try and fail to play Friday the 13th, ponder the Far Cry 5 reveal, do some E3 speculatin', blast through a lightning round, and entertain the idea of a new Seaman?! Giant Bomb no 9951 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 482: Mega Duck Hunt https://www.giantbomb.com/podcasts/giant-bombcast-482-mega-duck-hunt/1600-1973/ Jeff's back from LA with a bunch of thoughts on Destiny 2, then we turn to Far Cry 5, more turmoil at IO, Injustice 2, some very disturbing Rabbids, weird old consoles, and a few difficult questions. Tue, 23 May 2017 15:30:00 PST 1600-1973 Jeff's back from LA with a bunch of thoughts on Destiny 2, then we turn to Far Cry 5, more turmoil at IO, Injustice 2, some very disturbing Rabbids, weird old consoles, and a few difficult questions. Jeff's back from LA with a bunch of thoughts on Destiny 2, then we turn to Far Cry 5, more turmoil at IO, Injustice 2, some very disturbing Rabbids, weird old consoles, and a few difficult questions. Giant Bomb no 8782 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 481: Rupert Grint's Ice Cream Truck https://www.giantbomb.com/podcasts/giant-bombcast-481-rupert-grints-ice-cream-truck/1600-1968/ It's easy to forget E3 looms on the horizon with Farpoint, Battlegrounds, The Surge, Ubisoft's 2017 lineup, Alan Wake's delisting, Vanquish's PC release, IO Interactive's shocking betrayal, and live pinball to talk about! Tue, 16 May 2017 16:05:00 PST 1600-1968 It's easy to forget E3 looms on the horizon with Farpoint, Battlegrounds, The Surge, Ubisoft's 2017 lineup, Alan Wake's delisting, Vanquish's PC release, IO Interactive's shocking betrayal, and live pinball to talk about! It's easy to forget E3 looms on the horizon with Farpoint, Battlegrounds, The Surge, Ubisoft's 2017 lineup, Alan Wake's delisting, Vanquish's PC release, IO Interactive's shocking betrayal, and live pinball to talk about! Giant Bomb no 9991 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 480: Bad Ball Feel https://www.giantbomb.com/podcasts/giant-bombcast-480-bad-ball-feel/1600-1963/ This week we check in with basketball games new and old, spend some time with Prey, dig into Persona 5 romance, do a little Spaceplanning, catch up on the hottest E3 leaks, and ask the new guy some pressing questions. Tue, 09 May 2017 16:06:00 PST 1600-1963 This week we check in with basketball games new and old, spend some time with Prey, dig into Persona 5 romance, do a little Spaceplanning, catch up on the hottest E3 leaks, and ask the new guy some pressing questions. This week we check in with basketball games new and old, spend some time with Prey, dig into Persona 5 romance, do a little Spaceplanning, catch up on the hottest E3 leaks, and ask the new guy some pressing questions. Giant Bomb no 10546 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 479: McCree Overlord https://www.giantbomb.com/podcasts/giant-bombcast-479-mccree-overlord/1600-1959/ We welcome our towering new member Ben Pack to a whopper of a podcast overflowing with Persona, Dota, Guilty Gear, Battlegrounds, Darksiders, corporate brand research, X-Pac, and only the most legal money-laundering schemes. Tue, 02 May 2017 16:30:00 PST 1600-1959 We welcome our towering new member Ben Pack to a whopper of a podcast overflowing with Persona, Dota, Guilty Gear, Battlegrounds, Darksiders, corporate brand research, X-Pac, and only the most legal money-laundering schemes. We welcome our towering new member Ben Pack to a whopper of a podcast overflowing with Persona, Dota, Guilty Gear, Battlegrounds, Darksiders, corporate brand research, X-Pac, and only the most legal money-laundering schemes. Giant Bomb no 10914 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 478: Twelve Deaths a Year, Mostly by Heat Stroke https://www.giantbomb.com/podcasts/giant-bombcast-478-twelve-deaths-a-year-mostly-by-/1600-1953/ This week: COD goes back to WWII, Jeff goes to Vegas, Brad goes to Polecat country, Jason goes all Omega Force, and Rorie goes to the magical land of mismatched socks. Tue, 25 Apr 2017 16:05:00 PST 1600-1953 This week: COD goes back to WWII, Jeff goes to Vegas, Brad goes to Polecat country, Jason goes all Omega Force, and Rorie goes to the magical land of mismatched socks. This week: COD goes back to WWII, Jeff goes to Vegas, Brad goes to Polecat country, Jason goes all Omega Force, and Rorie goes to the magical land of mismatched socks. Giant Bomb no 10648 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 477: The Husband Who Owned Himself https://www.giantbomb.com/podcasts/giant-bombcast-477-the-husband-who-owned-himself/1600-1948/ A couple of Thumbs swing by to dish on a bunch of game dev stuff, a deep dive into Zelda systems, the Full Throttle remaster, hot Admiral Ackbar gifs, and the legal rights of trees. Tue, 18 Apr 2017 14:45:00 PST 1600-1948 A couple of Thumbs swing by to dish on a bunch of game dev stuff, a deep dive into Zelda systems, the Full Throttle remaster, hot Admiral Ackbar gifs, and the legal rights of trees. A couple of Thumbs swing by to dish on a bunch of game dev stuff, a deep dive into Zelda systems, the Full Throttle remaster, hot Admiral Ackbar gifs, and the legal rights of trees. Giant Bomb no 8100 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 476: Pinkies out for Duke https://www.giantbomb.com/podcasts/giant-bombcast-476-pinkies-out-for-duke/1600-1929/ Hot topics this week include Battle(grounds) Royale, those Scorpio numbers, Nier's cyber-metafiction, questionable showering habits, Star Trek time travel, and remote car kill switches. Tue, 11 Apr 2017 15:30:00 PST 1600-1929 Hot topics this week include Battle(grounds) Royale, those Scorpio numbers, Nier's cyber-metafiction, questionable showering habits, Star Trek time travel, and remote car kill switches. Hot topics this week include Battle(grounds) Royale, those Scorpio numbers, Nier's cyber-metafiction, questionable showering habits, Star Trek time travel, and remote car kill switches. Giant Bomb no 9557 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 475: Hey, What's Parappening? https://www.giantbomb.com/podcasts/giant-bombcast-475-hey-whats-parappening/1600-1924/ This week GameSpot duo Peter Brown and Justin Haywald talk us through Persona 5's weird launch, Portland game hunts, news about Scorpio news, the end of Mad Catz, an unsettling discussion about Parappa, and scrappy breakfast cereals. Tue, 04 Apr 2017 15:02:00 PST 1600-1924 This week GameSpot duo Peter Brown and Justin Haywald talk us through Persona 5's weird launch, Portland game hunts, news about Scorpio news, the end of Mad Catz, an unsettling discussion about Parappa, and scrappy breakfast cereals. This week GameSpot duo Peter Brown and Justin Haywald talk us through Persona 5's weird launch, Portland game hunts, news about Scorpio news, the end of Mad Catz, an unsettling discussion about Parappa, and scrappy breakfast cereals. Giant Bomb no 8991 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 474: "Fun!" https://www.giantbomb.com/podcasts/giant-bombcast-474-fun/1600-1919/ The critics agree: this week's podcast features a "stellar cast" including Supergiant's Greg Kasavin, some fast and furious game-industry chat, and plenty of action news with Destiny, Call of Duty and StarCraft! Tue, 28 Mar 2017 16:10:00 PST 1600-1919 The critics agree: this week's podcast features a "stellar cast" including Supergiant's Greg Kasavin, some fast and furious game-industry chat, and plenty of action news with Destiny, Call of Duty and StarCraft! The critics agree: this week's podcast features a "stellar cast" including Supergiant's Greg Kasavin, some fast and furious game-industry chat, and plenty of action news with Destiny, Call of Duty and StarCraft! Giant Bomb no 11970 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 473: I’ve Always Cared About Science https://www.giantbomb.com/podcasts/giant-bombcast-473-ive-always-cared-about-science/1600-1911/ We spend way too much time pondering the mystery that is Mass Effect: Andromeda before moving on to more pleasant subjects like Disney NES games, Quake Champions, a better Toukiden, neighborly noise complaints, and Danny O'Dwyer's DNA. Tue, 21 Mar 2017 16:19:00 PST 1600-1911 We spend way too much time pondering the mystery that is Mass Effect: Andromeda before moving on to more pleasant subjects like Disney NES games, Quake Champions, a better Toukiden, neighborly noise complaints, and Danny O'Dwyer's DNA. We spend way too much time pondering the mystery that is Mass Effect: Andromeda before moving on to more pleasant subjects like Disney NES games, Quake Champions, a better Toukiden, neighborly noise complaints, and Danny O'Dwyer's DNA. Giant Bomb no 10710 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 472: Weird-Looking Space People https://www.giantbomb.com/podcasts/giant-bombcast-472-weird-looking-space-people/1600-1905/ GameSpot's Peter Brown and a mysterious world traveler join us for a Nintendo Switch road report, some PAX highlights, more deep dives into Breath of the Wild, and the John Carmack lawsuit of the week. Tue, 14 Mar 2017 13:50:00 PST 1600-1905 GameSpot's Peter Brown and a mysterious world traveler join us for a Nintendo Switch road report, some PAX highlights, more deep dives into Breath of the Wild, and the John Carmack lawsuit of the week. GameSpot's Peter Brown and a mysterious world traveler join us for a Nintendo Switch road report, some PAX highlights, more deep dives into Breath of the Wild, and the John Carmack lawsuit of the week. Giant Bomb no 7114 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 471: And Baby Makes Three https://www.giantbomb.com/podcasts/giant-bombcast-471-and-baby-makes-three/1600-1900/ After a weekend spent with the Switch and/or Breath of the Wild, we've got a lot of thoughts and they're mostly positive! Not so much Ghost Recon: Wildlands, but hey. It's a podcast! Tue, 07 Mar 2017 15:58:00 PST 1600-1900 After a weekend spent with the Switch and/or Breath of the Wild, we've got a lot of thoughts and they're mostly positive! Not so much Ghost Recon: Wildlands, but hey. It's a podcast! After a weekend spent with the Switch and/or Breath of the Wild, we've got a lot of thoughts and they're mostly positive! Not so much Ghost Recon: Wildlands, but hey. It's a podcast! Giant Bomb no 10996 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 470: Switch Stance https://www.giantbomb.com/podcasts/giant-bombcast-470-switch-stance/1600-1894/ We're joined by Steve Lin from gamehistory.org as well as Mark &amp; John from the 8-4 Play podcast to talk about Mark's rules for RE7, the Nintendo Switch, preserving SNES carts, Peter Moore's EAxit, and more! Tue, 28 Feb 2017 15:19:00 PST 1600-1894 We're joined by Steve Lin from gamehistory.org as well as Mark &amp; John from the 8-4 Play podcast to talk about Mark's rules for RE7, the Nintendo Switch, preserving SNES carts, Peter Moore's EAxit, and more! We're joined by Steve Lin from gamehistory.org as well as Mark &amp; John from the 8-4 Play podcast to talk about Mark's rules for RE7, the Nintendo Switch, preserving SNES carts, Peter Moore's EAxit, and more! Giant Bomb no 9676 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 469: Meme Money, Meme Problems https://www.giantbomb.com/podcasts/giant-bombcast-469-meme-money-meme-problems/1600-1888/ This week we can't stop gushing about Horizon: Zero Dawn, but we manage to take a break for some early Switch impressions, a list of exciting hedgehog facts, Erik Wolpaw's Final Fight One review, and a surprise announcement from the Internet's favorite re Tue, 21 Feb 2017 15:41:00 PST 1600-1888 This week we can't stop gushing about Horizon: Zero Dawn, but we manage to take a break for some early Switch impressions, a list of exciting hedgehog facts, Erik Wolpaw's Final Fight One review, and a surprise announcement from the Internet's favorite re This week we can't stop gushing about Horizon: Zero Dawn, but we manage to take a break for some early Switch impressions, a list of exciting hedgehog facts, Erik Wolpaw's Final Fight One review, and a surprise announcement from the Internet's favorite re Giant Bomb no 8338 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 468: It's Always Sunny Above the Clouds https://www.giantbomb.com/podcasts/giant-bombcast-468-its-always-sunny-above-the-clou/1600-1880/ This week, we pull ourselves out of childhood arcade nostalgia long enough to talk about E3 going public, the end of Steam Greenlight, Zelda DLC, Drew's piloting adventures, old game magazines, and what shoes everyone's wearing. Tue, 14 Feb 2017 15:19:00 PST 1600-1880 This week, we pull ourselves out of childhood arcade nostalgia long enough to talk about E3 going public, the end of Steam Greenlight, Zelda DLC, Drew's piloting adventures, old game magazines, and what shoes everyone's wearing. This week, we pull ourselves out of childhood arcade nostalgia long enough to talk about E3 going public, the end of Steam Greenlight, Zelda DLC, Drew's piloting adventures, old game magazines, and what shoes everyone's wearing. Giant Bomb no 9885 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 467: X-Plane 11 Is... https://www.giantbomb.com/podcasts/giant-bombcast-467-x-plane-11-is/1600-1876/ This week we reflect on the madness of the Super Bowl, the many features of PS4 firmware 4.5, the unexpected excellence of Nioh, the Ghost Recon: Wildlands beta, and one very wrong opinion about Bojangles. Tue, 07 Feb 2017 16:18:00 PST 1600-1876 This week we reflect on the madness of the Super Bowl, the many features of PS4 firmware 4.5, the unexpected excellence of Nioh, the Ghost Recon: Wildlands beta, and one very wrong opinion about Bojangles. This week we reflect on the madness of the Super Bowl, the many features of PS4 firmware 4.5, the unexpected excellence of Nioh, the Ghost Recon: Wildlands beta, and one very wrong opinion about Bojangles. Giant Bomb no 8467 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 466: SCART Cables for Everyone https://www.giantbomb.com/podcasts/giant-bombcast-466-scart-cables-for-everyone/1600-1869/ Jason's getting destroyed in Injustice 2, Drew's on a new version of X-Plane, Jeff's got things to say about Double Dragon IV, and Peter Brown's cleaning up his video signals in this week's installment of the Giant Bombcast! Tue, 31 Jan 2017 15:56:00 PST 1600-1869 Jason's getting destroyed in Injustice 2, Drew's on a new version of X-Plane, Jeff's got things to say about Double Dragon IV, and Peter Brown's cleaning up his video signals in this week's installment of the Giant Bombcast! Jason's getting destroyed in Injustice 2, Drew's on a new version of X-Plane, Jeff's got things to say about Double Dragon IV, and Peter Brown's cleaning up his video signals in this week's installment of the Giant Bombcast! Giant Bomb no 9802 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 465: Skeleton Crew https://www.giantbomb.com/podcasts/giant-bombcast-465-skeleton-crew/1600-1864/ Seasonal illnesses aren't enough to stop us from putting people in front of microphones and talking about video games. One of them is even Resident Evil 7! Tue, 24 Jan 2017 13:45:00 PST 1600-1864 Seasonal illnesses aren't enough to stop us from putting people in front of microphones and talking about video games. One of them is even Resident Evil 7! Seasonal illnesses aren't enough to stop us from putting people in front of microphones and talking about video games. One of them is even Resident Evil 7! Giant Bomb no 8091 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 464: Season of the Switch https://www.giantbomb.com/podcasts/giant-bombcast-464-season-of-the-switch/1600-1857/ Nintendo has finally unveiled all the details on their forthcoming portable/console hybrid, Jeff's back from playing it, and Noclip's Danny O'dwyer joins us to talk about it! Tue, 17 Jan 2017 16:30:00 PST 1600-1857 Nintendo has finally unveiled all the details on their forthcoming portable/console hybrid, Jeff's back from playing it, and Noclip's Danny O'dwyer joins us to talk about it! Nintendo has finally unveiled all the details on their forthcoming portable/console hybrid, Jeff's back from playing it, and Noclip's Danny O'dwyer joins us to talk about it! Giant Bomb no 10477 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 463: A Tokyo New Year https://www.giantbomb.com/podcasts/giant-bombcast-463-a-tokyo-new-year/1600-1852/ Drew's back from Japan with tales to tell, plus we reflect on the cancellation of Scalebound, some early thoughts on Gravity Rush 2, the hacking of the NES Classic, Paul Walker's Agent 47, and Mario secrets hidden by the mists of time. Tue, 10 Jan 2017 16:05:00 PST 1600-1852 Drew's back from Japan with tales to tell, plus we reflect on the cancellation of Scalebound, some early thoughts on Gravity Rush 2, the hacking of the NES Classic, Paul Walker's Agent 47, and Mario secrets hidden by the mists of time. Drew's back from Japan with tales to tell, plus we reflect on the cancellation of Scalebound, some early thoughts on Gravity Rush 2, the hacking of the NES Classic, Paul Walker's Agent 47, and Mario secrets hidden by the mists of time. Giant Bomb no 9767 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 462: Got the Shaky Jakes https://www.giantbomb.com/podcasts/giant-bombcast-462-got-the-shaky-jakes/1600-1848/ We're back in the studio for the first Bombcast of 2017 with thoughts on all the Dead Risings, World of Warcraft past and present, the mystery of Double Dragon IV, the great 3DS shortage, and the stealth-ish launch of Frog Fractions 2. Tue, 03 Jan 2017 15:35:00 PST 1600-1848 We're back in the studio for the first Bombcast of 2017 with thoughts on all the Dead Risings, World of Warcraft past and present, the mystery of Double Dragon IV, the great 3DS shortage, and the stealth-ish launch of Frog Fractions 2. We're back in the studio for the first Bombcast of 2017 with thoughts on all the Dead Risings, World of Warcraft past and present, the mystery of Double Dragon IV, the great 3DS shortage, and the stealth-ish launch of Frog Fractions 2. Giant Bomb no 9752 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Game of the Year 2016: Day Five Deliberations https://www.giantbomb.com/podcasts/game-of-the-year-2016-day-five-deliberations/1600-1829/ This is it! Our fifth and final day brings with it Overwatch Character of the Year, Best Story, Worst Game, and, of course, Best Game of 2016. Fri, 30 Dec 2016 09:00:00 PST 1600-1829 This is it! Our fifth and final day brings with it Overwatch Character of the Year, Best Story, Worst Game, and, of course, Best Game of 2016. This is it! Our fifth and final day brings with it Overwatch Character of the Year, Best Story, Worst Game, and, of course, Best Game of 2016. Giant Bomb no 13764 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Game of the Year 2016: Day Four Deliberations https://www.giantbomb.com/podcasts/game-of-the-year-2016-day-four-deliberations/1600-1827/ We're getting down to it on day four, with winners declared for Best Music, Best Multiplayer, Xbox One Backwards-Compatible Game of the Year, and Best Moment or Sequence. Thu, 29 Dec 2016 09:00:00 PST 1600-1827 We're getting down to it on day four, with winners declared for Best Music, Best Multiplayer, Xbox One Backwards-Compatible Game of the Year, and Best Moment or Sequence. We're getting down to it on day four, with winners declared for Best Music, Best Multiplayer, Xbox One Backwards-Compatible Game of the Year, and Best Moment or Sequence. Giant Bomb no 9196 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Game of the Year 2016: Day Three Deliberations https://www.giantbomb.com/podcasts/game-of-the-year-2016-day-three-deliberations/1600-1825/ We're back on the mics and ready to argue about 2016's Best Remaster, Best Fake Computer, Best Surprise, and the always cheery PLEASE STOP. Wed, 28 Dec 2016 09:00:00 PST 1600-1825 We're back on the mics and ready to argue about 2016's Best Remaster, Best Fake Computer, Best Surprise, and the always cheery PLEASE STOP. We're back on the mics and ready to argue about 2016's Best Remaster, Best Fake Computer, Best Surprise, and the always cheery PLEASE STOP. Giant Bomb no 10514 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Game of the Year 2016: Day Two Deliberations https://www.giantbomb.com/podcasts/game-of-the-year-2016-day-two-deliberations/1600-1823/ On the second day of Game of the Year, my true love gave to me... Best New Character, Best VR Experience, Most Disappointing Game, and Best-Looking game. Tue, 27 Dec 2016 09:00:00 PST 1600-1823 On the second day of Game of the Year, my true love gave to me... Best New Character, Best VR Experience, Most Disappointing Game, and Best-Looking game. On the second day of Game of the Year, my true love gave to me... Best New Character, Best VR Experience, Most Disappointing Game, and Best-Looking game. Giant Bomb no 12627 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Game of the Year 2016: Day One Deliberations https://www.giantbomb.com/podcasts/game-of-the-year-2016-day-one-deliberations/1600-1821/ It's that time of year again! Our annual Game of the Year deliberation podcasts kick off with 2016's Old Game of the Year, Best Debut, Hottest Mess, and Best Styyyyyyyle. Mon, 26 Dec 2016 09:00:00 PST 1600-1821 It's that time of year again! Our annual Game of the Year deliberation podcasts kick off with 2016's Old Game of the Year, Best Debut, Hottest Mess, and Best Styyyyyyyle. It's that time of year again! Our annual Game of the Year deliberation podcasts kick off with 2016's Old Game of the Year, Best Debut, Hottest Mess, and Best Styyyyyyyle. Giant Bomb no 11814 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 461: Movie Theater Ghosts https://www.giantbomb.com/podcasts/giant-bombcast-461-movie-theater-ghosts/1600-1819/ Our last regular podcast of the year sees us catching up on Q4 games, reminiscing about movie theater memories, musing about the latest Switch leaks, walking down Agent 47's memory lane, and digging through a big old pile of emails. Tue, 20 Dec 2016 16:00:00 PST 1600-1819 Our last regular podcast of the year sees us catching up on Q4 games, reminiscing about movie theater memories, musing about the latest Switch leaks, walking down Agent 47's memory lane, and digging through a big old pile of emails. Our last regular podcast of the year sees us catching up on Q4 games, reminiscing about movie theater memories, musing about the latest Switch leaks, walking down Agent 47's memory lane, and digging through a big old pile of emails. Giant Bomb no 10158 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 460: Molten Cheese Core https://www.giantbomb.com/podcasts/giant-bombcast-460-molten-cheese-core/1600-1817/ Dan Ryckert's last (regular) Bombcast includes chat about cramming for GOTY, breaking your lease, the impending release of Super Mario Run, the new Dota sequel, cheese-filled meat, and a deep dive about life in the great state of Minnesota. Tue, 13 Dec 2016 15:15:00 PST 1600-1817 Dan Ryckert's last (regular) Bombcast includes chat about cramming for GOTY, breaking your lease, the impending release of Super Mario Run, the new Dota sequel, cheese-filled meat, and a deep dive about life in the great state of Minnesota. Dan Ryckert's last (regular) Bombcast includes chat about cramming for GOTY, breaking your lease, the impending release of Super Mario Run, the new Dota sequel, cheese-filled meat, and a deep dive about life in the great state of Minnesota. Giant Bomb no 8845 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 459: Something Happened https://www.giantbomb.com/podcasts/giant-bombcast-459-something-happened/1600-1806/ This week it's a December to remember, with news flowing from the Game Awards and PSX, The Last Guardian and Dead Rising 4 hitting the streets, and crappy Windows 10 error messages enraging people across the land. Tue, 06 Dec 2016 16:00:00 PST 1600-1806 This week it's a December to remember, with news flowing from the Game Awards and PSX, The Last Guardian and Dead Rising 4 hitting the streets, and crappy Windows 10 error messages enraging people across the land. This week it's a December to remember, with news flowing from the Game Awards and PSX, The Last Guardian and Dead Rising 4 hitting the streets, and crappy Windows 10 error messages enraging people across the land. Giant Bomb no 12196 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 458: East Meets West https://www.giantbomb.com/podcasts/giant-bombcast-458-east-meets-west/1600-1802/ The gang's all here for game of the year, so what better time to cram everyone into the same podcast studio and chat about the games of today, the arcade cabinets of yesterday, and the Pringles-eating strategies of always. Tue, 29 Nov 2016 15:45:00 PST 1600-1802 The gang's all here for game of the year, so what better time to cram everyone into the same podcast studio and chat about the games of today, the arcade cabinets of yesterday, and the Pringles-eating strategies of always. The gang's all here for game of the year, so what better time to cram everyone into the same podcast studio and chat about the games of today, the arcade cabinets of yesterday, and the Pringles-eating strategies of always. Giant Bomb no 11185 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 457: Everyone's a Robot https://www.giantbomb.com/podcasts/giant-bombcast-457-everyones-a-robot/1600-1792/ We're back in the studio with Will Smith for an in-depth Hitman lesson, more on Watch Dogs 2, less on Sleeping Dogs 2, and discussions on theme park ethics, Hello Games, the Mass Effect series, and a scientific analysis of drinking lava. Tue, 22 Nov 2016 17:05:00 PST 1600-1792 We're back in the studio with Will Smith for an in-depth Hitman lesson, more on Watch Dogs 2, less on Sleeping Dogs 2, and discussions on theme park ethics, Hello Games, the Mass Effect series, and a scientific analysis of drinking lava. We're back in the studio with Will Smith for an in-depth Hitman lesson, more on Watch Dogs 2, less on Sleeping Dogs 2, and discussions on theme park ethics, Hello Games, the Mass Effect series, and a scientific analysis of drinking lava. Giant Bomb no 10630 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 456: The Littlest Mac https://www.giantbomb.com/podcasts/giant-bombcast-456-the-littlest-mac/1600-1786/ As Q4 marches on, we're splitting our time between Watch Dogs 2 and Dishonored 2 this week, and filling in what remains with Nintendo Switch pricing rumors, the mysterious whereabouts of Frog Fractions 2, and reflections on Street Fighter III, vector moni Tue, 15 Nov 2016 16:05:00 PST 1600-1786 As Q4 marches on, we're splitting our time between Watch Dogs 2 and Dishonored 2 this week, and filling in what remains with Nintendo Switch pricing rumors, the mysterious whereabouts of Frog Fractions 2, and reflections on Street Fighter III, vector moni As Q4 marches on, we're splitting our time between Watch Dogs 2 and Dishonored 2 this week, and filling in what remains with Nintendo Switch pricing rumors, the mysterious whereabouts of Frog Fractions 2, and reflections on Street Fighter III, vector moni Giant Bomb no 9049 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 455: Would You Like Fries With That? https://www.giantbomb.com/podcasts/giant-bombcast-455-would-you-like-fries-with-that/1600-1779/ Pull up to the drive-through for a heaping helping of shooters, with seasoned insights on COD: Infinite Warfare and Titanfall 2, early thoughts on the PS4 Pro, late appreciation for Hitman, hands-on with the NES Classic, and the latest in our award-winnin Tue, 08 Nov 2016 16:10:00 PST 1600-1779 Pull up to the drive-through for a heaping helping of shooters, with seasoned insights on COD: Infinite Warfare and Titanfall 2, early thoughts on the PS4 Pro, late appreciation for Hitman, hands-on with the NES Classic, and the latest in our award-winnin Pull up to the drive-through for a heaping helping of shooters, with seasoned insights on COD: Infinite Warfare and Titanfall 2, early thoughts on the PS4 Pro, late appreciation for Hitman, hands-on with the NES Classic, and the latest in our award-winnin Giant Bomb no 10092 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 454: Where the Mold Grows https://www.giantbomb.com/podcasts/giant-bombcast-454-where-the-mold-grows/1600-1773/ This week: Shooters! Everyone's playin' 'em, especially Titanfall 2, Battlefield 1, and Gears 4. New Nintendo Switch info, Bethesda's reviews policy, Hello Games hacks, the end of the Wii U, disc rot, road trips, and hygiene habits all round out the best Tue, 01 Nov 2016 15:03:00 PST 1600-1773 This week: Shooters! Everyone's playin' 'em, especially Titanfall 2, Battlefield 1, and Gears 4. New Nintendo Switch info, Bethesda's reviews policy, Hello Games hacks, the end of the Wii U, disc rot, road trips, and hygiene habits all round out the best This week: Shooters! Everyone's playin' 'em, especially Titanfall 2, Battlefield 1, and Gears 4. New Nintendo Switch info, Bethesda's reviews policy, Hello Games hacks, the end of the Wii U, disc rot, road trips, and hygiene habits all round out the best Giant Bomb no 10570 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 453: Big Beautiful Baked Potato https://www.giantbomb.com/podcasts/giant-bombcast-453-big-beautiful-baked-potato/1600-1763/ The NX is now the Switch, and it's also nearly all anyone can talk about, but we also manage to hit Titanfall 2, the Red Dead 2 trailer, video game (car) engines, the trials of PC-building, Zelda dubs, the ugly truth about Mario's age, and the last word o Tue, 25 Oct 2016 16:30:00 PST 1600-1763 The NX is now the Switch, and it's also nearly all anyone can talk about, but we also manage to hit Titanfall 2, the Red Dead 2 trailer, video game (car) engines, the trials of PC-building, Zelda dubs, the ugly truth about Mario's age, and the last word o The NX is now the Switch, and it's also nearly all anyone can talk about, but we also manage to hit Titanfall 2, the Red Dead 2 trailer, video game (car) engines, the trials of PC-building, Zelda dubs, the ugly truth about Mario's age, and the last word o Giant Bomb no 10347 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 452: A Board-Certified Medical Podcast https://www.giantbomb.com/podcasts/giant-bombcast-452-a-board-certified-medical-podca/1600-1756/ Let our team of accredited physicians ease your pain with the finest treatments money can buy, including Red Dead Redemption 2, more Gears of Four, a little PSVR followup, tidbits from Steam Dev Days, back massages, eyeball massages, and more of Dan's wed Tue, 18 Oct 2016 16:05:00 PST 1600-1756 Let our team of accredited physicians ease your pain with the finest treatments money can buy, including Red Dead Redemption 2, more Gears of Four, a little PSVR followup, tidbits from Steam Dev Days, back massages, eyeball massages, and more of Dan's wed Let our team of accredited physicians ease your pain with the finest treatments money can buy, including Red Dead Redemption 2, more Gears of Four, a little PSVR followup, tidbits from Steam Dev Days, back massages, eyeball massages, and more of Dan's wed Giant Bomb no 10306 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 451: 5.3 Million Scovilles https://www.giantbomb.com/podcasts/giant-bombcast-451-53-million-scovilles/1600-1743/ Verlin Smith returns from his travels in the wild, wild west of virtual reality to talk Oculus Connect and PlayStation VR, the new Mafia, Dragon Quest Builders, way too much about pepper spray, Dan's crappy superpowers, and the Great Pacific Garbage Patch Tue, 11 Oct 2016 16:05:00 PST 1600-1743 Verlin Smith returns from his travels in the wild, wild west of virtual reality to talk Oculus Connect and PlayStation VR, the new Mafia, Dragon Quest Builders, way too much about pepper spray, Dan's crappy superpowers, and the Great Pacific Garbage Patch Verlin Smith returns from his travels in the wild, wild west of virtual reality to talk Oculus Connect and PlayStation VR, the new Mafia, Dragon Quest Builders, way too much about pepper spray, Dan's crappy superpowers, and the Great Pacific Garbage Patch Giant Bomb no 10128 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 450: Fun at the Movies https://www.giantbomb.com/podcasts/giant-bombcast-450-fun-at-the-movies/1600-1740/ Betwixt the best and worst of cinema, we find a way to cram in talk about new-old Call of Duty, the return of Marcus Fenix, the highs and lows of Paper Mario: Color Splash, grumpy Miyamoto, serious hacking, and a field test in the neverending war of bat v Tue, 04 Oct 2016 15:45:00 PST 1600-1740 Betwixt the best and worst of cinema, we find a way to cram in talk about new-old Call of Duty, the return of Marcus Fenix, the highs and lows of Paper Mario: Color Splash, grumpy Miyamoto, serious hacking, and a field test in the neverending war of bat v Betwixt the best and worst of cinema, we find a way to cram in talk about new-old Call of Duty, the return of Marcus Fenix, the highs and lows of Paper Mario: Color Splash, grumpy Miyamoto, serious hacking, and a field test in the neverending war of bat v Giant Bomb no 10622 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 449: Roomful of Narcs https://www.giantbomb.com/podcasts/giant-bombcast-449-roomful-of-narcs/1600-1732/ Yet another week of mysterious illness can't stop us from talking about Forza Horizon 3 on PC, this year's Destiny expansion, excitable chihuahuas, tropical animals, Palmer Luckey's malignant memes, mo' fighting game problems, and the true value of the Su Tue, 27 Sep 2016 15:45:00 PST 1600-1732 Yet another week of mysterious illness can't stop us from talking about Forza Horizon 3 on PC, this year's Destiny expansion, excitable chihuahuas, tropical animals, Palmer Luckey's malignant memes, mo' fighting game problems, and the true value of the Su Yet another week of mysterious illness can't stop us from talking about Forza Horizon 3 on PC, this year's Destiny expansion, excitable chihuahuas, tropical animals, Palmer Luckey's malignant memes, mo' fighting game problems, and the true value of the Su Giant Bomb no 9611 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 448: A Chance Encounter With Methed-Up Billy Idol https://www.giantbomb.com/podcasts/giant-bombcast-448-a-chance-encounter-with-methed-/1600-1727/ We gather a tight crew and discuss the magic of Rec Room, the power of Rez Infinite, the beauty of Forza Horizon 3, the impending release of Gears of War 4, the curiosity that is Metal Gear Survive, and whether or not outlaws will drive cars once driving Tue, 20 Sep 2016 15:38:00 PST 1600-1727 We gather a tight crew and discuss the magic of Rec Room, the power of Rez Infinite, the beauty of Forza Horizon 3, the impending release of Gears of War 4, the curiosity that is Metal Gear Survive, and whether or not outlaws will drive cars once driving We gather a tight crew and discuss the magic of Rec Room, the power of Rez Infinite, the beauty of Forza Horizon 3, the impending release of Gears of War 4, the curiosity that is Metal Gear Survive, and whether or not outlaws will drive cars once driving Giant Bomb no 10993 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 447: Onccce a Mannnnn https://www.giantbomb.com/podcasts/giant-bombcast-447-onccce-a-mannnnn/1600-1720/ This week we grapple with strange new realities like PS4 Pro, Super Mario Run, and a world where Warcraft Adventures is playable by human beings. Free-to-play communism, Frank West memories, extreme ReCore jank, bike lust. It's all here! Tue, 13 Sep 2016 16:15:00 PST 1600-1720 This week we grapple with strange new realities like PS4 Pro, Super Mario Run, and a world where Warcraft Adventures is playable by human beings. Free-to-play communism, Frank West memories, extreme ReCore jank, bike lust. It's all here! This week we grapple with strange new realities like PS4 Pro, Super Mario Run, and a world where Warcraft Adventures is playable by human beings. Free-to-play communism, Frank West memories, extreme ReCore jank, bike lust. It's all here! Giant Bomb no 11055 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 446: Ranking of Zeldas https://www.giantbomb.com/podcasts/giant-bombcast-446-ranking-of-zeldas/1600-1715/ Dan's back from New York and we're all back from PAX, so let us commence discussion about highlights from the show, mobile Lumines, the 3DS Direct, the end (?) of Firefall, early-access DLC, the Bay Area wasteland, and... more about Adam Jensen's metal be Tue, 06 Sep 2016 15:30:00 PST 1600-1715 Dan's back from New York and we're all back from PAX, so let us commence discussion about highlights from the show, mobile Lumines, the 3DS Direct, the end (?) of Firefall, early-access DLC, the Bay Area wasteland, and... more about Adam Jensen's metal be Dan's back from New York and we're all back from PAX, so let us commence discussion about highlights from the show, mobile Lumines, the 3DS Direct, the end (?) of Firefall, early-access DLC, the Bay Area wasteland, and... more about Adam Jensen's metal be Giant Bomb no 9581 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 445: Irish Tax Loophole https://www.giantbomb.com/podcasts/giant-bombcast-445-irish-tax-loophole/1600-1709/ This is the true story of five dudes picked to sit in a room and start getting real about cheap foreign insulin, the brothers Myst, the No Man's Sky refund kerfuffle, Rocket League pangs, the Q4 video game outlook, large anime men, and Adam Jensen's metal Tue, 30 Aug 2016 16:15:00 PST 1600-1709 This is the true story of five dudes picked to sit in a room and start getting real about cheap foreign insulin, the brothers Myst, the No Man's Sky refund kerfuffle, Rocket League pangs, the Q4 video game outlook, large anime men, and Adam Jensen's metal This is the true story of five dudes picked to sit in a room and start getting real about cheap foreign insulin, the brothers Myst, the No Man's Sky refund kerfuffle, Rocket League pangs, the Q4 video game outlook, large anime men, and Adam Jensen's metal Giant Bomb no 11594 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 444: Cricket Mouthfeel https://www.giantbomb.com/podcasts/giant-bombcast-444-cricket-mouthfeel/1600-1701/ Alexa Ray Corriea shows up to sell us on anime. Brad retaliates with Dota. An accord is struck over Bound, the new Deus Ex, that slim PS4, Tekken 7's precious moments, "Metal Gear" Survive, and exotic energy bars. Tue, 23 Aug 2016 16:30:00 PST 1600-1701 Alexa Ray Corriea shows up to sell us on anime. Brad retaliates with Dota. An accord is struck over Bound, the new Deus Ex, that slim PS4, Tekken 7's precious moments, "Metal Gear" Survive, and exotic energy bars. Alexa Ray Corriea shows up to sell us on anime. Brad retaliates with Dota. An accord is struck over Bound, the new Deus Ex, that slim PS4, Tekken 7's precious moments, "Metal Gear" Survive, and exotic energy bars. Giant Bomb no 10923 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 443: Hideo Kojima Jr. https://www.giantbomb.com/podcasts/giant-bombcast-443-hideo-kojima-jr/1600-1695/ We're down two regular members, but Rorie has the conversational strength of 10 men, and he brings it to bear on No Man's Sky, Grow Up, "Metroid Prime" on 3DS, the new THQ, the International 6, Final Fantasy delays, console clickers, and video game body h Tue, 16 Aug 2016 16:30:00 PST 1600-1695 We're down two regular members, but Rorie has the conversational strength of 10 men, and he brings it to bear on No Man's Sky, Grow Up, "Metroid Prime" on 3DS, the new THQ, the International 6, Final Fantasy delays, console clickers, and video game body h We're down two regular members, but Rorie has the conversational strength of 10 men, and he brings it to bear on No Man's Sky, Grow Up, "Metroid Prime" on 3DS, the new THQ, the International 6, Final Fantasy delays, console clickers, and video game body h Giant Bomb no 10887 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 442: Hair Products and Turkey Bacon https://www.giantbomb.com/podcasts/giant-bombcast-442-hair-products-and-turkey-bacon/1600-1690/ The holy trinity of Iron Galaxy returns to bless us with discussion of No Man's Sky and the process of releasing a game in 2016, Abzu, the Hitman future, purging your game collection, West Coast road trips, the whereabouts of Yoot Saito, and, of course, w Tue, 09 Aug 2016 15:45:00 PST 1600-1690 The holy trinity of Iron Galaxy returns to bless us with discussion of No Man's Sky and the process of releasing a game in 2016, Abzu, the Hitman future, purging your game collection, West Coast road trips, the whereabouts of Yoot Saito, and, of course, w The holy trinity of Iron Galaxy returns to bless us with discussion of No Man's Sky and the process of releasing a game in 2016, Abzu, the Hitman future, purging your game collection, West Coast road trips, the whereabouts of Yoot Saito, and, of course, w Giant Bomb no 8995 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 441: Mr. Eyeballs' Booger Sugar https://www.giantbomb.com/podcasts/giant-bombcast-441-mr-eyeballs-booger-sugar/1600-1684/ GameSpot's own Peter Brown pops in to chat about Abzu, Rimworld, life on the flea market circuit, Final Fantasy Tactics preservation, No Man's Sky's no-show, Rocket League in Overwatch, Vita homebrew, the future of Advance Wars, and Game of the Game of th Tue, 02 Aug 2016 16:25:00 PST 1600-1684 GameSpot's own Peter Brown pops in to chat about Abzu, Rimworld, life on the flea market circuit, Final Fantasy Tactics preservation, No Man's Sky's no-show, Rocket League in Overwatch, Vita homebrew, the future of Advance Wars, and Game of the Game of th GameSpot's own Peter Brown pops in to chat about Abzu, Rimworld, life on the flea market circuit, Final Fantasy Tactics preservation, No Man's Sky's no-show, Rocket League in Overwatch, Vita homebrew, the future of Advance Wars, and Game of the Game of th Giant Bomb no 8728 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 440: The Live One https://www.giantbomb.com/podcasts/giant-bombcast-440-the-live-one/1600-1679/ We've made history by broadcasting the first live podcast live on the Internet ever in history. Ever. This discussion of Headlander, Quadrilateral Cowboy, Sonic the Hedgehog, the Nintendo NX, Segagaga, Stranger Things, 16-bit sound hardware, laserdiscs, C Tue, 26 Jul 2016 15:10:00 PST 1600-1679 We've made history by broadcasting the first live podcast live on the Internet ever in history. Ever. This discussion of Headlander, Quadrilateral Cowboy, Sonic the Hedgehog, the Nintendo NX, Segagaga, Stranger Things, 16-bit sound hardware, laserdiscs, C We've made history by broadcasting the first live podcast live on the Internet ever in history. Ever. This discussion of Headlander, Quadrilateral Cowboy, Sonic the Hedgehog, the Nintendo NX, Segagaga, Stranger Things, 16-bit sound hardware, laserdiscs, C Giant Bomb no 8957 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07/19/2016 https://www.giantbomb.com/podcasts/giant-bombcast-07192016/1600-1673/ That li'l NES. Famous elusive targets. Famous.af. Sega CD memories. EVO chat. The future of SNK. The truth about Dan's bladder. Ten minutes of HOT INSIDE SPOILERS. This Bombcast has it all! Tue, 19 Jul 2016 16:30:00 PST 1600-1673 That li'l NES. Famous elusive targets. Famous.af. Sega CD memories. EVO chat. The future of SNK. The truth about Dan's bladder. Ten minutes of HOT INSIDE SPOILERS. This Bombcast has it all! That li'l NES. Famous elusive targets. Famous.af. Sega CD memories. EVO chat. The future of SNK. The truth about Dan's bladder. Ten minutes of HOT INSIDE SPOILERS. This Bombcast has it all! Giant Bomb no 9521 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07/12/2016 https://www.giantbomb.com/podcasts/giant-bombcast-07122016/1600-1666/ On our journey to Meat Mountain, we cross through the Lang Zone and do battle with Videoball, Raw Data, Pokemon Go, Inside, a free-to-play Evolve, the Saturn's DRM, Adam Boyes, and perhaps the most inadvisable bracket ever conceived. Tue, 12 Jul 2016 16:45:00 PST 1600-1666 On our journey to Meat Mountain, we cross through the Lang Zone and do battle with Videoball, Raw Data, Pokemon Go, Inside, a free-to-play Evolve, the Saturn's DRM, Adam Boyes, and perhaps the most inadvisable bracket ever conceived. On our journey to Meat Mountain, we cross through the Lang Zone and do battle with Videoball, Raw Data, Pokemon Go, Inside, a free-to-play Evolve, the Saturn's DRM, Adam Boyes, and perhaps the most inadvisable bracket ever conceived. Giant Bomb no 10751 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07/05/2016 https://www.giantbomb.com/podcasts/giant-bombcast-07052016/1600-1646/ Fresh off of defeating an alien menace, Will Smith joins us to chat about buying gunpowder in bulk, the great pizza exposition, and video games like Inside, Pokemon Go, Uncharted 4, and the greatest hits of the Jaguar. Tue, 05 Jul 2016 17:00:00 PST 1600-1646 Fresh off of defeating an alien menace, Will Smith joins us to chat about buying gunpowder in bulk, the great pizza exposition, and video games like Inside, Pokemon Go, Uncharted 4, and the greatest hits of the Jaguar. Fresh off of defeating an alien menace, Will Smith joins us to chat about buying gunpowder in bulk, the great pizza exposition, and video games like Inside, Pokemon Go, Uncharted 4, and the greatest hits of the Jaguar. Giant Bomb no 12117 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 6/28/2016 https://www.giantbomb.com/podcasts/giant-bombcast-6282016/1600-1641/ With no headphones and a batch of mysterious emails, we're practically flying blind this week through discussions of Inside, Asemblance, Umbrella Corps, that awful Cheeto/macaroni thing, more crappy buffet pizza, and the tragic loss of Ustream. Tue, 28 Jun 2016 17:35:00 PST 1600-1641 With no headphones and a batch of mysterious emails, we're practically flying blind this week through discussions of Inside, Asemblance, Umbrella Corps, that awful Cheeto/macaroni thing, more crappy buffet pizza, and the tragic loss of Ustream. With no headphones and a batch of mysterious emails, we're practically flying blind this week through discussions of Inside, Asemblance, Umbrella Corps, that awful Cheeto/macaroni thing, more crappy buffet pizza, and the tragic loss of Ustream. Giant Bomb no 8298 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 06/21/2016 https://www.giantbomb.com/podcasts/giant-bombcast-06212016/1600-1634/ Now that we're as far from the next E3 as we're ever going to get, it's time to reflect on everything we saw at this year's show, as well as a few of the downloads we ran into along the way. Tue, 21 Jun 2016 17:15:00 PST 1600-1634 Now that we're as far from the next E3 as we're ever going to get, it's time to reflect on everything we saw at this year's show, as well as a few of the downloads we ran into along the way. Now that we're as far from the next E3 as we're ever going to get, it's time to reflect on everything we saw at this year's show, as well as a few of the downloads we ran into along the way. Giant Bomb no 10370 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bomb LIVE! at E3 2016: Day 03: The Podcast https://www.giantbomb.com/podcasts/giant-bomb-live-at-e3-2016-day-03-the-podcast/1600-1633/ We wrap things up with good people like Ed Boon, Gio Corsi, Josh Holmes, Adriel Wallick, and Thom Glunt. Then we really wrap things up with "good" people like David Lang, John Vignocchi, and EA Canada's Adam Boyes. Then we really REALLY wrap things up and Tue, 21 Jun 2016 16:16:00 PST 1600-1633 We wrap things up with good people like Ed Boon, Gio Corsi, Josh Holmes, Adriel Wallick, and Thom Glunt. Then we really wrap things up with "good" people like David Lang, John Vignocchi, and EA Canada's Adam Boyes. Then we really REALLY wrap things up and We wrap things up with good people like Ed Boon, Gio Corsi, Josh Holmes, Adriel Wallick, and Thom Glunt. Then we really wrap things up with "good" people like David Lang, John Vignocchi, and EA Canada's Adam Boyes. Then we really REALLY wrap things up and Giant Bomb no 14058 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bomb LIVE! at E3 2016: Day 02: The Podcast https://www.giantbomb.com/podcasts/giant-bomb-live-at-e3-2016-day-02-the-podcast/1600-1629/ A second night of live shows ensues as we chat about what we saw at E3 before welcoming Phil Spencer, Tim Schafer, Cliff Bleszinski and more! Thu, 16 Jun 2016 15:52:00 PST 1600-1629 A second night of live shows ensues as we chat about what we saw at E3 before welcoming Phil Spencer, Tim Schafer, Cliff Bleszinski and more! A second night of live shows ensues as we chat about what we saw at E3 before welcoming Phil Spencer, Tim Schafer, Cliff Bleszinski and more! Giant Bomb no 16091 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bomb LIVE! at E3 2016: Day 01: The Podcast https://www.giantbomb.com/podcasts/giant-bomb-live-at-e3-2016-day-01-the-podcast/1600-1626/ We get together to briefly discuss our first day of E3 games before the cavalcade of guests takes over for the night. Wed, 15 Jun 2016 22:00:00 PST 1600-1626 We get together to briefly discuss our first day of E3 games before the cavalcade of guests takes over for the night. We get together to briefly discuss our first day of E3 games before the cavalcade of guests takes over for the night. Giant Bomb no 15543 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS The Giant Bombcast E3 2016 Sealed Envelope Spectacular https://www.giantbomb.com/podcasts/the-giant-bombcast-e3-2016-sealed-envelope-spectac/1600-1619/ Last week, we sat down and talked about what we (thought we) knew about E3. Now that show's in full swing, let's rip open this envelope and see how we did! Tue, 14 Jun 2016 12:00:00 PST 1600-1619 Last week, we sat down and talked about what we (thought we) knew about E3. Now that show's in full swing, let's rip open this envelope and see how we did! Last week, we sat down and talked about what we (thought we) knew about E3. Now that show's in full swing, let's rip open this envelope and see how we did! Giant Bomb no 7768 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 06/07/2016 https://www.giantbomb.com/podcasts/giant-bombcast-06072016/1600-1616/ The good ship E3 has sprung more than a few leaks, and we're bailing water as fast as we can with the help of New York's Alex Navarro. Agents of Mayhem! Dead Rising 4! More Injustice! More Wolfenstein! More... Destiny? The games of tomorrow, today! Tue, 07 Jun 2016 17:00:00 PST 1600-1616 The good ship E3 has sprung more than a few leaks, and we're bailing water as fast as we can with the help of New York's Alex Navarro. Agents of Mayhem! Dead Rising 4! More Injustice! More Wolfenstein! More... Destiny? The games of tomorrow, today! The good ship E3 has sprung more than a few leaks, and we're bailing water as fast as we can with the help of New York's Alex Navarro. Agents of Mayhem! Dead Rising 4! More Injustice! More Wolfenstein! More... Destiny? The games of tomorrow, today! Giant Bomb no 10166 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 05/31/2016 https://www.giantbomb.com/podcasts/giant-bombcast-05312016/1600-1611/ With less than two weeks till E3, we're playing as much Overwatch as we can while mulling over Xbox leaks, the No Man's Sky delay, id games new and old, fruit trees, grow operations, a long meditation on meditation, and an unexpected blast from Dan's past Tue, 31 May 2016 15:30:00 PST 1600-1611 With less than two weeks till E3, we're playing as much Overwatch as we can while mulling over Xbox leaks, the No Man's Sky delay, id games new and old, fruit trees, grow operations, a long meditation on meditation, and an unexpected blast from Dan's past With less than two weeks till E3, we're playing as much Overwatch as we can while mulling over Xbox leaks, the No Man's Sky delay, id games new and old, fruit trees, grow operations, a long meditation on meditation, and an unexpected blast from Dan's past Giant Bomb no 8933 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 05/24/2016 https://www.giantbomb.com/podcasts/giant-bombcast-05242016/1600-1604/ Doom still rules the roost around here, but Overwatch is making some inroads, as are the latest E3 shakeups and leaks, the hottest pachinko tips, Drew's island adventures, Dan &amp; Jason's fighting school, and a few unsavory bathroom emails. Tue, 24 May 2016 15:45:00 PST 1600-1604 Doom still rules the roost around here, but Overwatch is making some inroads, as are the latest E3 shakeups and leaks, the hottest pachinko tips, Drew's island adventures, Dan &amp; Jason's fighting school, and a few unsavory bathroom emails. Doom still rules the roost around here, but Overwatch is making some inroads, as are the latest E3 shakeups and leaks, the hottest pachinko tips, Drew's island adventures, Dan &amp; Jason's fighting school, and a few unsavory bathroom emails. Giant Bomb no 9538 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 05/17/2016 https://www.giantbomb.com/podcasts/giant-bombcast-05172016/1600-1599/ Danny "the Irish guy" O'Dwyer joins us to discuss the glory that is the new Doom, obscure piratical references, the end of Disney Infinity, some E3 expectations, office dental care, Kansas City dirtbags, and the ultimate fate of poo particles. Don't ask. Mon, 16 May 2016 18:15:00 PST 1600-1599 Danny "the Irish guy" O'Dwyer joins us to discuss the glory that is the new Doom, obscure piratical references, the end of Disney Infinity, some E3 expectations, office dental care, Kansas City dirtbags, and the ultimate fate of poo particles. Don't ask. Danny "the Irish guy" O'Dwyer joins us to discuss the glory that is the new Doom, obscure piratical references, the end of Disney Infinity, some E3 expectations, office dental care, Kansas City dirtbags, and the ultimate fate of poo particles. Don't ask. Giant Bomb no 8002 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 05/10/2016 https://www.giantbomb.com/podcasts/giant-bombcast-05102016/1600-1592/ We've gathered 'round the microphones to see Nathan Drake off into the sunset (again), chat about the Overwatch beta, ponder Gearbox's next move, puzzle at shooter versus shooter, parse a Dota pop quiz, and contemplate a few hamburgers long past. Tue, 10 May 2016 16:00:00 PST 1600-1592 We've gathered 'round the microphones to see Nathan Drake off into the sunset (again), chat about the Overwatch beta, ponder Gearbox's next move, puzzle at shooter versus shooter, parse a Dota pop quiz, and contemplate a few hamburgers long past. We've gathered 'round the microphones to see Nathan Drake off into the sunset (again), chat about the Overwatch beta, ponder Gearbox's next move, puzzle at shooter versus shooter, parse a Dota pop quiz, and contemplate a few hamburgers long past. Giant Bomb no 9593 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 05/03/2016 https://www.giantbomb.com/podcasts/giant-bombcast-05032016/1600-1587/ The mics are hot and we're ready to talk! This week it's NX delayishness, Call of Duty future-fatigue, Battleborn bafflement, the great fruit debate, and even more of those #vapefacts you crave. Tue, 03 May 2016 16:00:00 PST 1600-1587 The mics are hot and we're ready to talk! This week it's NX delayishness, Call of Duty future-fatigue, Battleborn bafflement, the great fruit debate, and even more of those #vapefacts you crave. The mics are hot and we're ready to talk! This week it's NX delayishness, Call of Duty future-fatigue, Battleborn bafflement, the great fruit debate, and even more of those #vapefacts you crave. Giant Bomb no 0 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 04/26/2016 https://www.giantbomb.com/podcasts/giant-bombcast-04262016/1600-1579/ The gang's all back from PAX and unnervingly battered and bruised, but even wrestling injuries can't stand in the way of talk about the best of the show, Housemarque's latest, the end of the Xbox 360, the uncertain whereabouts of Frog Fractions 2, and, um Tue, 26 Apr 2016 13:15:00 PST 1600-1579 The gang's all back from PAX and unnervingly battered and bruised, but even wrestling injuries can't stand in the way of talk about the best of the show, Housemarque's latest, the end of the Xbox 360, the uncertain whereabouts of Frog Fractions 2, and, um The gang's all back from PAX and unnervingly battered and bruised, but even wrestling injuries can't stand in the way of talk about the best of the show, Housemarque's latest, the end of the Xbox 360, the uncertain whereabouts of Frog Fractions 2, and, um Giant Bomb no 8629 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 04/19/2016 https://www.giantbomb.com/podcasts/giant-bombcast-04192016/1600-1574/ This week we've got breaking news about the new PlayStation 4, hands-on with Supergiant's third game, sordid strife at Rockstar, mobile esports, baseball memories, fanny pack tips, and more. This podcast is so hot we need the Benz! Tue, 19 Apr 2016 12:00:00 PST 1600-1574 This week we've got breaking news about the new PlayStation 4, hands-on with Supergiant's third game, sordid strife at Rockstar, mobile esports, baseball memories, fanny pack tips, and more. This podcast is so hot we need the Benz! This week we've got breaking news about the new PlayStation 4, hands-on with Supergiant's third game, sordid strife at Rockstar, mobile esports, baseball memories, fanny pack tips, and more. This podcast is so hot we need the Benz! Giant Bomb no 10848 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 04/12/2016 https://www.giantbomb.com/podcasts/giant-bombcast-04122016/1600-1566/ Bonfire Watch 2016 is on! In between trips to the Steam forums, we touch on early Star Fox Zero impressions, unearthed Neo Geo prototypes, the Ratchet reboot, entering the Gungeon, Nintendo's "friendly" market research, a variety of vape flavors, and the Tue, 12 Apr 2016 17:00:00 PST 1600-1566 Bonfire Watch 2016 is on! In between trips to the Steam forums, we touch on early Star Fox Zero impressions, unearthed Neo Geo prototypes, the Ratchet reboot, entering the Gungeon, Nintendo's "friendly" market research, a variety of vape flavors, and the Bonfire Watch 2016 is on! In between trips to the Steam forums, we touch on early Star Fox Zero impressions, unearthed Neo Geo prototypes, the Ratchet reboot, entering the Gungeon, Nintendo's "friendly" market research, a variety of vape flavors, and the Giant Bomb no 10622 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 04/05/2016 https://www.giantbomb.com/podcasts/giant-bombcast-04052016/1600-1559/ Another week, another VR launch. Also! Quantum Break, Killer Instinct season 3, Dark Souls III, the new Street Fighter V patch, that Doom beta, Nintendo dismissals, Final Fantasy announcements, Oculus uncertainty, and your emails! Tue, 05 Apr 2016 13:00:00 PST 1600-1559 Another week, another VR launch. Also! Quantum Break, Killer Instinct season 3, Dark Souls III, the new Street Fighter V patch, that Doom beta, Nintendo dismissals, Final Fantasy announcements, Oculus uncertainty, and your emails! Another week, another VR launch. Also! Quantum Break, Killer Instinct season 3, Dark Souls III, the new Street Fighter V patch, that Doom beta, Nintendo dismissals, Final Fantasy announcements, Oculus uncertainty, and your emails! Giant Bomb no 10607 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03/29/2016 https://www.giantbomb.com/podcasts/giant-bombcast-03292016/1600-1549/ In between the launches of two VR headsets, we manage to... only talk about VR a little before delving into remastered adventure games, Street Fighter patches, early Dark Souls releases, some reminiscing about the good old days, and a whole bunch of Ninte Tue, 29 Mar 2016 17:00:00 PST 1600-1549 In between the launches of two VR headsets, we manage to... only talk about VR a little before delving into remastered adventure games, Street Fighter patches, early Dark Souls releases, some reminiscing about the good old days, and a whole bunch of Ninte In between the launches of two VR headsets, we manage to... only talk about VR a little before delving into remastered adventure games, Street Fighter patches, early Dark Souls releases, some reminiscing about the good old days, and a whole bunch of Ninte Giant Bomb no 9751 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03/22/2016 https://www.giantbomb.com/podcasts/giant-bombcast-03222016/1600-1542/ With our glorious and/or horrible VR future nearly upon us, it's time to take stock of all the headsets and games we tried at GDC, along with a bunch of regular old flat games, the strange future of the console business, the best in chips, a stack of your Tue, 22 Mar 2016 13:00:00 PST 1600-1542 With our glorious and/or horrible VR future nearly upon us, it's time to take stock of all the headsets and games we tried at GDC, along with a bunch of regular old flat games, the strange future of the console business, the best in chips, a stack of your With our glorious and/or horrible VR future nearly upon us, it's time to take stock of all the headsets and games we tried at GDC, along with a bunch of regular old flat games, the strange future of the console business, the best in chips, a stack of your Giant Bomb no 11211 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03/15/2016 https://www.giantbomb.com/podcasts/giant-bombcast-03152016/1600-1536/ Our podcasting compatriots from 8-4 join us for another GDC check-in that includes a Division deep dive, gushing over Stardew Valley, a lot of game industry movin' and shakin', mobile clashes of various kinds, and more than a few trips down memory lane. Tue, 15 Mar 2016 13:20:00 PST 1600-1536 Our podcasting compatriots from 8-4 join us for another GDC check-in that includes a Division deep dive, gushing over Stardew Valley, a lot of game industry movin' and shakin', mobile clashes of various kinds, and more than a few trips down memory lane. Our podcasting compatriots from 8-4 join us for another GDC check-in that includes a Division deep dive, gushing over Stardew Valley, a lot of game industry movin' and shakin', mobile clashes of various kinds, and more than a few trips down memory lane. Giant Bomb no 11710 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03/08/2016 https://www.giantbomb.com/podcasts/giant-bombcast-03082016/1600-1529/ This week's show is packed to the gills with No Man's Sky, The Division, Microsoft studio closures, the weird future of the Xbox, the strange saga of the Coleco Chameleon, some Street Fighter emails, the cleanliness of San Francisco sidewalks, and more! Tue, 08 Mar 2016 11:30:00 PST 1600-1529 This week's show is packed to the gills with No Man's Sky, The Division, Microsoft studio closures, the weird future of the Xbox, the strange saga of the Coleco Chameleon, some Street Fighter emails, the cleanliness of San Francisco sidewalks, and more! This week's show is packed to the gills with No Man's Sky, The Division, Microsoft studio closures, the weird future of the Xbox, the strange saga of the Coleco Chameleon, some Street Fighter emails, the cleanliness of San Francisco sidewalks, and more! Giant Bomb no 12510 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03/01/2016 https://www.giantbomb.com/podcasts/giant-bombcast-03012016/1600-1522/ Another week, another super-pricey head-mounted doohickey. Also: thoughts on the Xbox Spring Showcase, Dota strife, the end of the PlayStation TV, Mass Effect rides, Mike Haggar's campaign platform, and nighttime bathroom habits. Tue, 01 Mar 2016 11:30:00 PST 1600-1522 Another week, another super-pricey head-mounted doohickey. Also: thoughts on the Xbox Spring Showcase, Dota strife, the end of the PlayStation TV, Mass Effect rides, Mike Haggar's campaign platform, and nighttime bathroom habits. Another week, another super-pricey head-mounted doohickey. Also: thoughts on the Xbox Spring Showcase, Dota strife, the end of the PlayStation TV, Mass Effect rides, Mike Haggar's campaign platform, and nighttime bathroom habits. Giant Bomb no 11024 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 02/23/2016 https://www.giantbomb.com/podcasts/giant-bombcast-02232016/1600-1513/ Jeff returns from prehistory to talk about Far Cry Primal. Brad can't stop daggering devils. Dan still likes Twilight Princess. Drew is a photochemical process. Aw man did you see that wolf?! #skate4 Tue, 23 Feb 2016 13:45:00 PST 1600-1513 Jeff returns from prehistory to talk about Far Cry Primal. Brad can't stop daggering devils. Dan still likes Twilight Princess. Drew is a photochemical process. Aw man did you see that wolf?! #skate4 Jeff returns from prehistory to talk about Far Cry Primal. Brad can't stop daggering devils. Dan still likes Twilight Princess. Drew is a photochemical process. Aw man did you see that wolf?! #skate4 Giant Bomb no 9171 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 02/16/2016 https://www.giantbomb.com/podcasts/giant-bombcast-02162016/1600-1507/ The launch of Street Fighter V has brought out some strong feelings on this podcast, but we didn't forget to hit XCOM 2, Firewatch, Quantum Break exclusivity, Fallout DLC, marital hijinks, unlikely fighting game match-ups, and the latest updates from the Tue, 16 Feb 2016 17:30:00 PST 1600-1507 The launch of Street Fighter V has brought out some strong feelings on this podcast, but we didn't forget to hit XCOM 2, Firewatch, Quantum Break exclusivity, Fallout DLC, marital hijinks, unlikely fighting game match-ups, and the latest updates from the The launch of Street Fighter V has brought out some strong feelings on this podcast, but we didn't forget to hit XCOM 2, Firewatch, Quantum Break exclusivity, Fallout DLC, marital hijinks, unlikely fighting game match-ups, and the latest updates from the Giant Bomb no 11233 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 02/09/2016 https://www.giantbomb.com/podcasts/giant-bombcast-02092016/1600-1501/ We "mourn" the passing of Super Bowl City before looking ahead to cheerier topics like the trials of XCOM 2, the wide-open expanses of Firewatch, the ongoing mystery of Godus, and the distressing meaning of the dark shower. Tue, 09 Feb 2016 13:30:00 PST 1600-1501 We "mourn" the passing of Super Bowl City before looking ahead to cheerier topics like the trials of XCOM 2, the wide-open expanses of Firewatch, the ongoing mystery of Godus, and the distressing meaning of the dark shower. We "mourn" the passing of Super Bowl City before looking ahead to cheerier topics like the trials of XCOM 2, the wide-open expanses of Firewatch, the ongoing mystery of Godus, and the distressing meaning of the dark shower. Giant Bomb no 9184 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 02/02/2016 https://www.giantbomb.com/podcasts/giant-bombcast-02022016/1600-1494/ This week from the new studio: Jason mourns the last Street Fighter V beta; Dan has begun to bear Witness; Brad really likes the mood lighting; Jeff has thoughts on Mario. All this plus your emails! Tue, 02 Feb 2016 14:30:00 PST 1600-1494 This week from the new studio: Jason mourns the last Street Fighter V beta; Dan has begun to bear Witness; Brad really likes the mood lighting; Jeff has thoughts on Mario. All this plus your emails! This week from the new studio: Jason mourns the last Street Fighter V beta; Dan has begun to bear Witness; Brad really likes the mood lighting; Jeff has thoughts on Mario. All this plus your emails! Giant Bomb no 10414 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 01/26/2016 https://www.giantbomb.com/podcasts/giant-bombcast-01262016/1600-1486/ We've been doing a lot of Witnessing and we're very excited about it, but that doesn't mean we forgot about Sony reorgs, mysterious Konami vans, fighting game failures, in-game crosshairs, questionable root beer, or mobile apps made by certain controversi Tue, 26 Jan 2016 17:15:00 PST 1600-1486 We've been doing a lot of Witnessing and we're very excited about it, but that doesn't mean we forgot about Sony reorgs, mysterious Konami vans, fighting game failures, in-game crosshairs, questionable root beer, or mobile apps made by certain controversi We've been doing a lot of Witnessing and we're very excited about it, but that doesn't mean we forgot about Sony reorgs, mysterious Konami vans, fighting game failures, in-game crosshairs, questionable root beer, or mobile apps made by certain controversi Giant Bomb no 7813 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 01/19/2016 https://www.giantbomb.com/podcasts/giant-bombcast-01192016/1600-1480/ Come for the handy tips on bathing your infant, stay for the lively chat about drinking at work, "getting" Resident Evil, plumbing the Darkest Dungeon, busting up Hitman, dredging up the Ninja Turtles, and chugging a 40 faster than anyone you know! Tue, 19 Jan 2016 17:15:00 PST 1600-1480 Come for the handy tips on bathing your infant, stay for the lively chat about drinking at work, "getting" Resident Evil, plumbing the Darkest Dungeon, busting up Hitman, dredging up the Ninja Turtles, and chugging a 40 faster than anyone you know! Come for the handy tips on bathing your infant, stay for the lively chat about drinking at work, "getting" Resident Evil, plumbing the Darkest Dungeon, busting up Hitman, dredging up the Ninja Turtles, and chugging a 40 faster than anyone you know! Giant Bomb no 10165 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 01/12/2016 https://www.giantbomb.com/podcasts/giant-bombcast-01122016/1600-1473/ We come perilously close to probing the mysteries of a dwarven fortress before retreating to the relative comfort of safer topics like XCOM 2, SNL movies, VR pricing, Valve retirements, desert buses, grocery haulists, rap skits, and... M*A*S*H? Tue, 12 Jan 2016 18:00:00 PST 1600-1473 We come perilously close to probing the mysteries of a dwarven fortress before retreating to the relative comfort of safer topics like XCOM 2, SNL movies, VR pricing, Valve retirements, desert buses, grocery haulists, rap skits, and... M*A*S*H? We come perilously close to probing the mysteries of a dwarven fortress before retreating to the relative comfort of safer topics like XCOM 2, SNL movies, VR pricing, Valve retirements, desert buses, grocery haulists, rap skits, and... M*A*S*H? Giant Bomb no 10514 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 01/05/2016 https://www.giantbomb.com/podcasts/giant-bombcast-01052016/1600-1467/ We're *yawn* back from break and, uh, feelin' refreshed in 2016! Time to remember how to talk as we chew the fat about Oculus Rift preorders, esports sales, Mario Maker websites, Steam breaches, Hall &amp; Oates, and a year without Assassin's Creed. Tue, 05 Jan 2016 13:50:00 PST 1600-1467 We're *yawn* back from break and, uh, feelin' refreshed in 2016! Time to remember how to talk as we chew the fat about Oculus Rift preorders, esports sales, Mario Maker websites, Steam breaches, Hall &amp; Oates, and a year without Assassin's Creed. We're *yawn* back from break and, uh, feelin' refreshed in 2016! Time to remember how to talk as we chew the fat about Oculus Rift preorders, esports sales, Mario Maker websites, Steam breaches, Hall &amp; Oates, and a year without Assassin's Creed. Giant Bomb no 9574 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bomb's Game of the Year 2015: Day Five https://www.giantbomb.com/podcasts/giant-bombs-game-of-the-year-2015-day-five/1600-1452/ All threads converge on our final day of discussions, in which we'll name the Best Use of FMV, Animal of the Year, Incremental/Idle Experience of the Year, and Best Game. Fri, 01 Jan 2016 09:00:00 PST 1600-1452 All threads converge on our final day of discussions, in which we'll name the Best Use of FMV, Animal of the Year, Incremental/Idle Experience of the Year, and Best Game. All threads converge on our final day of discussions, in which we'll name the Best Use of FMV, Animal of the Year, Incremental/Idle Experience of the Year, and Best Game. Giant Bomb no 16792 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bomb's Game of the Year 2015: Day Four https://www.giantbomb.com/podcasts/giant-bombs-game-of-the-year-2015-day-four/1600-1451/ Four days in, Game of the Year stops for nothing! We've made it to Best Story, Best Styyyyyyyyyyle, Worst Game of the Year, and PLEASE STOP. Thu, 31 Dec 2015 09:00:00 PST 1600-1451 Four days in, Game of the Year stops for nothing! We've made it to Best Story, Best Styyyyyyyyyyle, Worst Game of the Year, and PLEASE STOP. Four days in, Game of the Year stops for nothing! We've made it to Best Story, Best Styyyyyyyyyyle, Worst Game of the Year, and PLEASE STOP. Giant Bomb no 12630 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bomb's Game of the Year 2015: Day Three https://www.giantbomb.com/podcasts/giant-bombs-game-of-the-year-2015-day-three/1600-1450/ We're at the halfway point in our week-long deliberations, with Best Debut, Best Multiplayer, Best Moment or Sequence, and Hottest Mess rounding out day three. Wed, 30 Dec 2015 09:00:00 PST 1600-1450 We're at the halfway point in our week-long deliberations, with Best Debut, Best Multiplayer, Best Moment or Sequence, and Hottest Mess rounding out day three. We're at the halfway point in our week-long deliberations, with Best Debut, Best Multiplayer, Best Moment or Sequence, and Hottest Mess rounding out day three. Giant Bomb no 13607 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bomb's Game of the Year 2015: Day Two https://www.giantbomb.com/podcasts/giant-bombs-game-of-the-year-2015-day-two/1600-1449/ Our mammoth second day of GOTY deliberations gets rolling with categories including Best Music, Most Disappointing Game, Best Short-Time Game, and Best New Character. Tue, 29 Dec 2015 09:00:00 PST 1600-1449 Our mammoth second day of GOTY deliberations gets rolling with categories including Best Music, Most Disappointing Game, Best Short-Time Game, and Best New Character. Our mammoth second day of GOTY deliberations gets rolling with categories including Best Music, Most Disappointing Game, Best Short-Time Game, and Best New Character. Giant Bomb no 15600 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bomb's Game of the Year 2015: Day One https://www.giantbomb.com/podcasts/giant-bombs-game-of-the-year-2015-day-one/1600-1448/ The gang's all here to kick off our year-end deliberations with discussions on 2015's Old Game of the Year, Best Surprise, Least Necessary HD Remaster, and Best Looking Game. Mon, 28 Dec 2015 09:00:00 PST 1600-1448 The gang's all here to kick off our year-end deliberations with discussions on 2015's Old Game of the Year, Best Surprise, Least Necessary HD Remaster, and Best Looking Game. The gang's all here to kick off our year-end deliberations with discussions on 2015's Old Game of the Year, Best Surprise, Least Necessary HD Remaster, and Best Looking Game. Giant Bomb no 9046 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 12/22/2015 https://www.giantbomb.com/podcasts/giant-bombcast-12222015/1600-1460/ The year's almost over, so let's quickly run over a little bit of news and dive headfirst into your emails and tmails! Tmails? Tue, 22 Dec 2015 08:12:00 PST 1600-1460 The year's almost over, so let's quickly run over a little bit of news and dive headfirst into your emails and tmails! Tmails? The year's almost over, so let's quickly run over a little bit of news and dive headfirst into your emails and tmails! Tmails? Giant Bomb no 10661 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 12/15/2015 https://www.giantbomb.com/podcasts/giant-bombcast-12152015/1600-1446/ As the holidays draw nigh, GameSpot's Mary Kish joins in for a chilly chat about Nintendo patents, produce rankings, Star Wars saturation, the long-awaited release of Nuclear Throne, smelly VR, Pokemon pooping, more foreign movie titles, and the perils of Tue, 15 Dec 2015 12:45:00 PST 1600-1446 As the holidays draw nigh, GameSpot's Mary Kish joins in for a chilly chat about Nintendo patents, produce rankings, Star Wars saturation, the long-awaited release of Nuclear Throne, smelly VR, Pokemon pooping, more foreign movie titles, and the perils of As the holidays draw nigh, GameSpot's Mary Kish joins in for a chilly chat about Nintendo patents, produce rankings, Star Wars saturation, the long-awaited release of Nuclear Throne, smelly VR, Pokemon pooping, more foreign movie titles, and the perils of Giant Bomb no 9153 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 12/08/2015 https://www.giantbomb.com/podcasts/giant-bombcast-12082015/1600-1437/ It's December. Where'd all this news come from? Oh well, time to break down all the goings-on out of the Game Awards and the PlayStation Experience with the help of one very special Irish guest. All this plus new offices, KGB spies, erstwhile hooahs, and Tue, 08 Dec 2015 14:00:00 PST 1600-1437 It's December. Where'd all this news come from? Oh well, time to break down all the goings-on out of the Game Awards and the PlayStation Experience with the help of one very special Irish guest. All this plus new offices, KGB spies, erstwhile hooahs, and It's December. Where'd all this news come from? Oh well, time to break down all the goings-on out of the Game Awards and the PlayStation Experience with the help of one very special Irish guest. All this plus new offices, KGB spies, erstwhile hooahs, and Giant Bomb no 9999 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 12/01/2015 https://www.giantbomb.com/podcasts/giant-bombcast-12012015/1600-1432/ The gang's all here in what may be our longest and most chaotic episode ever. Black Friday strategies! Just Cause 3! NX release speculation! Lara Croft's prepping tips! Very old emails! This week we've got it all. Tue, 01 Dec 2015 15:20:00 PST 1600-1432 The gang's all here in what may be our longest and most chaotic episode ever. Black Friday strategies! Just Cause 3! NX release speculation! Lara Croft's prepping tips! Very old emails! This week we've got it all. The gang's all here in what may be our longest and most chaotic episode ever. Black Friday strategies! Just Cause 3! NX release speculation! Lara Croft's prepping tips! Very old emails! This week we've got it all. Giant Bomb no 12932 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 11/24/2015 https://www.giantbomb.com/podcasts/giant-bombcast-11242015/1600-1426/ Hot topics this week include airsoft, stuff in Jeff's garage, the new Bloodborne DLC, PlayStation 4 PlayStation 2 emulation, messing with the Steam Link and Controller, Xbox 360 memories, and more emails about synthetic weed than you ever thought possible Tue, 24 Nov 2015 15:00:00 PST 1600-1426 Hot topics this week include airsoft, stuff in Jeff's garage, the new Bloodborne DLC, PlayStation 4 PlayStation 2 emulation, messing with the Steam Link and Controller, Xbox 360 memories, and more emails about synthetic weed than you ever thought possible Hot topics this week include airsoft, stuff in Jeff's garage, the new Bloodborne DLC, PlayStation 4 PlayStation 2 emulation, messing with the Steam Link and Controller, Xbox 360 memories, and more emails about synthetic weed than you ever thought possible Giant Bomb no 10992 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 11/17/2015 https://www.giantbomb.com/podcasts/giant-bombcast-11172015/1600-1421/ Battlefront! Fallout! Tomb Raider! StarCraft! The games of holiday 2015 are upon us, but that doesn't keep us from other important topics like old Bruce Lee games, Nintendo's first post-Iwata Direct, the fate of System Shock, seafood pizza, a bunch of gam Tue, 17 Nov 2015 15:45:00 PST 1600-1421 Battlefront! Fallout! Tomb Raider! StarCraft! The games of holiday 2015 are upon us, but that doesn't keep us from other important topics like old Bruce Lee games, Nintendo's first post-Iwata Direct, the fate of System Shock, seafood pizza, a bunch of gam Battlefront! Fallout! Tomb Raider! StarCraft! The games of holiday 2015 are upon us, but that doesn't keep us from other important topics like old Bruce Lee games, Nintendo's first post-Iwata Direct, the fate of System Shock, seafood pizza, a bunch of gam Giant Bomb no 12829 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 11/10/2015 https://www.giantbomb.com/podcasts/giant-bombcast-11102015/1600-1410/ Fresh off of Extra Life, Chicago's favorite son swoops in to chat about the biggest games of the season, open-world quality assurance, 6 billion dollar acquisitions, forced eSports, questionable parenting tips, a whole bunch of business minutes, and the j Tue, 10 Nov 2015 14:30:00 PST 1600-1410 Fresh off of Extra Life, Chicago's favorite son swoops in to chat about the biggest games of the season, open-world quality assurance, 6 billion dollar acquisitions, forced eSports, questionable parenting tips, a whole bunch of business minutes, and the j Fresh off of Extra Life, Chicago's favorite son swoops in to chat about the biggest games of the season, open-world quality assurance, 6 billion dollar acquisitions, forced eSports, questionable parenting tips, a whole bunch of business minutes, and the j Giant Bomb no 10799 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 11/03/2015 https://www.giantbomb.com/podcasts/giant-bombcast-11032015/1600-1405/ Drew's back from Europe! Jeff's bummed about Need for Speed! Dan's a wrestling manager! Brad can't really talk about Tomb Raider! Questionable tax advice! The mystery of Half-Life 3! Applebee's vs. Chili's! IHOP vs. Waffle House! Sweet 'nade bro! Tue, 03 Nov 2015 12:30:00 PST 1600-1405 Drew's back from Europe! Jeff's bummed about Need for Speed! Dan's a wrestling manager! Brad can't really talk about Tomb Raider! Questionable tax advice! The mystery of Half-Life 3! Applebee's vs. Chili's! IHOP vs. Waffle House! Sweet 'nade bro! Drew's back from Europe! Jeff's bummed about Need for Speed! Dan's a wrestling manager! Brad can't really talk about Tomb Raider! Questionable tax advice! The mystery of Half-Life 3! Applebee's vs. Chili's! IHOP vs. Waffle House! Sweet 'nade bro! Giant Bomb no 10438 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 10/27/2015 https://www.giantbomb.com/podcasts/giant-bombcast-10272015/1600-1399/ Between fall video games shipping and Sony holding press conferences, we almost missed this week's podcast! Luckily we rode our bears here from Paris to touch on all these topics, plus the quirks of Canadian money, the horrors of Bayou Billy, educational Tue, 27 Oct 2015 17:15:00 PST 1600-1399 Between fall video games shipping and Sony holding press conferences, we almost missed this week's podcast! Luckily we rode our bears here from Paris to touch on all these topics, plus the quirks of Canadian money, the horrors of Bayou Billy, educational Between fall video games shipping and Sony holding press conferences, we almost missed this week's podcast! Luckily we rode our bears here from Paris to touch on all these topics, plus the quirks of Canadian money, the horrors of Bayou Billy, educational Giant Bomb no 10770 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast: LA Podfest 2015 Edition https://www.giantbomb.com/podcasts/giant-bombcast-la-podfest-2015-edition/1600-1390/ Live from Los Angeles, it's our show from the LA Podfest! Well, it was live when it happened. You'll just have to trust us. Wed, 21 Oct 2015 15:00:00 PST 1600-1390 Live from Los Angeles, it's our show from the LA Podfest! Well, it was live when it happened. You'll just have to trust us. Live from Los Angeles, it's our show from the LA Podfest! Well, it was live when it happened. You'll just have to trust us. Giant Bomb no 5628 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 10/20/2015 https://www.giantbomb.com/podcasts/giant-bombcast-10202015/1600-1387/ A harrowing two-week journey without any video producers has begun, but we'll survive by recruiting one Matthew Rorie to chat about water-cooled laptops, nasty time capsules, NES memories, not much Halo (yet), the NX timeline (again), the wonders of arcad Tue, 20 Oct 2015 16:20:00 PST 1600-1387 A harrowing two-week journey without any video producers has begun, but we'll survive by recruiting one Matthew Rorie to chat about water-cooled laptops, nasty time capsules, NES memories, not much Halo (yet), the NX timeline (again), the wonders of arcad A harrowing two-week journey without any video producers has begun, but we'll survive by recruiting one Matthew Rorie to chat about water-cooled laptops, nasty time capsules, NES memories, not much Halo (yet), the NX timeline (again), the wonders of arcad Giant Bomb no 9198 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 10/13/2015 https://www.giantbomb.com/podcasts/giant-bombcast-10132015/1600-1380/ Danny O'Dwyer joins us as we uncover the 10 Hottest Spots in Lisbon and discuss our adventures in amateur level design, disappearing Darth Vader, the FOB rebalance, the saga of Finicky Larry, mods for the console version of Fallout 4, that New Xbox One Ex Tue, 13 Oct 2015 12:32:00 PST 1600-1380 Danny O'Dwyer joins us as we uncover the 10 Hottest Spots in Lisbon and discuss our adventures in amateur level design, disappearing Darth Vader, the FOB rebalance, the saga of Finicky Larry, mods for the console version of Fallout 4, that New Xbox One Ex Danny O'Dwyer joins us as we uncover the 10 Hottest Spots in Lisbon and discuss our adventures in amateur level design, disappearing Darth Vader, the FOB rebalance, the saga of Finicky Larry, mods for the console version of Fallout 4, that New Xbox One Ex Giant Bomb no 11621 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 10/06/2015 https://www.giantbomb.com/podcasts/giant-bombcast-10062015/1600-1375/ It's an indie-stravaganza this week with Undertale, The Beginner's Guide, Read Only Memories, and Indivisible, along with a little much-needed Tony Hawk catharsis, some now-outdated Far Cry speculation, thoughts on wrasslin' and Rock Band, and... yeah, OK Tue, 06 Oct 2015 14:00:00 PST 1600-1375 It's an indie-stravaganza this week with Undertale, The Beginner's Guide, Read Only Memories, and Indivisible, along with a little much-needed Tony Hawk catharsis, some now-outdated Far Cry speculation, thoughts on wrasslin' and Rock Band, and... yeah, OK It's an indie-stravaganza this week with Undertale, The Beginner's Guide, Read Only Memories, and Indivisible, along with a little much-needed Tony Hawk catharsis, some now-outdated Far Cry speculation, thoughts on wrasslin' and Rock Band, and... yeah, OK Giant Bomb no 10378 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 09/29/2015 https://www.giantbomb.com/podcasts/giant-bombcast-09292015/1600-1364/ Just as fall is starting to heat up, let's talk about all the games we HAVEN'T played yet! Like Tony Hawk 5! And Lego Dimensions! And Destin...yeah, no, we've been playing way too much of that. Anyway, whatever. Video games! They're back! Tue, 29 Sep 2015 16:55:00 PST 1600-1364 Just as fall is starting to heat up, let's talk about all the games we HAVEN'T played yet! Like Tony Hawk 5! And Lego Dimensions! And Destin...yeah, no, we've been playing way too much of that. Anyway, whatever. Video games! They're back! Just as fall is starting to heat up, let's talk about all the games we HAVEN'T played yet! Like Tony Hawk 5! And Lego Dimensions! And Destin...yeah, no, we've been playing way too much of that. Anyway, whatever. Video games! They're back! Giant Bomb no 9713 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 09/22/2015 https://www.giantbomb.com/podcasts/giant-bombcast-09222015/1600-1359/ We've got some new podcasting equipment, and we talked directly into it for your listening enjoyment! Just in time for Destiny: The Taken King, Animal Crossing: Happy Home Designer, Tokyo Game Show: Not Much Happened, Video Games: A Few Got Delayed, Email Tue, 22 Sep 2015 15:35:00 PST 1600-1359 We've got some new podcasting equipment, and we talked directly into it for your listening enjoyment! Just in time for Destiny: The Taken King, Animal Crossing: Happy Home Designer, Tokyo Game Show: Not Much Happened, Video Games: A Few Got Delayed, Email We've got some new podcasting equipment, and we talked directly into it for your listening enjoyment! Just in time for Destiny: The Taken King, Animal Crossing: Happy Home Designer, Tokyo Game Show: Not Much Happened, Video Games: A Few Got Delayed, Email Giant Bomb no 8411 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 09/15/2015 https://www.giantbomb.com/podcasts/giant-bombcast-09152015/1600-1350/ Should Drew buy a Wii U? What's the best emoji of 2015's freshman class? Just how good IS Super Mario Maker? Does Forza 6 still have cars? All these and other burning questions will be explored on this week's edition of... what's this podcast called again Tue, 15 Sep 2015 12:30:00 PST 1600-1350 Should Drew buy a Wii U? What's the best emoji of 2015's freshman class? Just how good IS Super Mario Maker? Does Forza 6 still have cars? All these and other burning questions will be explored on this week's edition of... what's this podcast called again Should Drew buy a Wii U? What's the best emoji of 2015's freshman class? Just how good IS Super Mario Maker? Does Forza 6 still have cars? All these and other burning questions will be explored on this week's edition of... what's this podcast called again Giant Bomb no 9887 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 09/08/2015 https://www.giantbomb.com/podcasts/giant-bombcast-09082015/1600-1346/ Roughly 75 percent of this podcast is about Metal Gear Solid V, but we somehow manage to sneak in a tidbit here and there about Marty O'Donnell and the future of Destiny, new PS4 firmware business, Dan's adventures in pants-buying, and the video game mona Tue, 08 Sep 2015 16:30:00 PST 1600-1346 Roughly 75 percent of this podcast is about Metal Gear Solid V, but we somehow manage to sneak in a tidbit here and there about Marty O'Donnell and the future of Destiny, new PS4 firmware business, Dan's adventures in pants-buying, and the video game mona Roughly 75 percent of this podcast is about Metal Gear Solid V, but we somehow manage to sneak in a tidbit here and there about Marty O'Donnell and the future of Destiny, new PS4 firmware business, Dan's adventures in pants-buying, and the video game mona Giant Bomb no 8419 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 09/01/2015 https://www.giantbomb.com/podcasts/giant-bombcast-09012015/1600-1335/ All anyone wants to do is play Metal Gear, but we also manage to squeeze in some chit-chat about Lara Croft Go, Mad Max, the HTC Vive, crowdfunded preorders, Christmas games, E40's 40s, and getting too old for PAX. Tue, 01 Sep 2015 16:45:00 PST 1600-1335 All anyone wants to do is play Metal Gear, but we also manage to squeeze in some chit-chat about Lara Croft Go, Mad Max, the HTC Vive, crowdfunded preorders, Christmas games, E40's 40s, and getting too old for PAX. All anyone wants to do is play Metal Gear, but we also manage to squeeze in some chit-chat about Lara Croft Go, Mad Max, the HTC Vive, crowdfunded preorders, Christmas games, E40's 40s, and getting too old for PAX. Giant Bomb no 8970 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 08/25/2015 https://www.giantbomb.com/podcasts/giant-bombcast-08252015/1600-1329/ We talk about airplanes and drive-ins and video games and Metal Gear! Someone said "Sad Factory" and that was pretty funny! See you at PAX! Tue, 25 Aug 2015 18:05:00 PST 1600-1329 We talk about airplanes and drive-ins and video games and Metal Gear! Someone said "Sad Factory" and that was pretty funny! See you at PAX! We talk about airplanes and drive-ins and video games and Metal Gear! Someone said "Sad Factory" and that was pretty funny! See you at PAX! Giant Bomb no 9930 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 08/18/2015 https://www.giantbomb.com/podcasts/giant-bombcast-08182015/1600-1319/ We've got thoughts on movies new and old, and by golly, you're gonna hear 'em. Also: video game tattoos, way too much Metal Gear, doping in electronic sports, and Dan's unexpected spiritual awakening. Don't forget to tip your server! Tue, 18 Aug 2015 14:00:00 PST 1600-1319 We've got thoughts on movies new and old, and by golly, you're gonna hear 'em. Also: video game tattoos, way too much Metal Gear, doping in electronic sports, and Dan's unexpected spiritual awakening. Don't forget to tip your server! We've got thoughts on movies new and old, and by golly, you're gonna hear 'em. Also: video game tattoos, way too much Metal Gear, doping in electronic sports, and Dan's unexpected spiritual awakening. Don't forget to tip your server! Giant Bomb no 11205 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 08/11/2015 https://www.giantbomb.com/podcasts/giant-bombcast-08112015/1600-1313/ This week! Jeff's clicking sakuras, Brad visited Tacoma, Jason's sneaking in Galak-Z, and Dan's boldly going... somewhere. Also: WOW expansions, Mafia announcements, Time Magazine covers, Dr. Dre albums, a vigorous conversation about nuts, and your emails Tue, 11 Aug 2015 13:05:00 PST 1600-1313 This week! Jeff's clicking sakuras, Brad visited Tacoma, Jason's sneaking in Galak-Z, and Dan's boldly going... somewhere. Also: WOW expansions, Mafia announcements, Time Magazine covers, Dr. Dre albums, a vigorous conversation about nuts, and your emails This week! Jeff's clicking sakuras, Brad visited Tacoma, Jason's sneaking in Galak-Z, and Dan's boldly going... somewhere. Also: WOW expansions, Mafia announcements, Time Magazine covers, Dr. Dre albums, a vigorous conversation about nuts, and your emails Giant Bomb no 10936 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 08/04/2015 https://www.giantbomb.com/podcasts/giant-bombcast-08042015/1600-1304/ Hot off the presses, straight from the streets, we're here with the latest chatter about Microsoft's Gamescom showing, the savage spaceship abuses of Galak-Z, Rare's economy-sized 30-pack, the Konami surveillance state, and the weirdest changes to hit Des Tue, 04 Aug 2015 14:30:00 PST 1600-1304 Hot off the presses, straight from the streets, we're here with the latest chatter about Microsoft's Gamescom showing, the savage spaceship abuses of Galak-Z, Rare's economy-sized 30-pack, the Konami surveillance state, and the weirdest changes to hit Des Hot off the presses, straight from the streets, we're here with the latest chatter about Microsoft's Gamescom showing, the savage spaceship abuses of Galak-Z, Rare's economy-sized 30-pack, the Konami surveillance state, and the weirdest changes to hit Des Giant Bomb no 9701 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07/28/2015 https://www.giantbomb.com/podcasts/giant-bombcast-07282015/1600-1300/ We console our sadness about the broken Street Fighter V beta by, um, talking a lot about Street Fighter, along with the new King's Quest, the end of Ouya, way more Rocket League, super healthy living, super unhealthy clicking, and the war of humans again Tue, 28 Jul 2015 09:30:00 PST 1600-1300 We console our sadness about the broken Street Fighter V beta by, um, talking a lot about Street Fighter, along with the new King's Quest, the end of Ouya, way more Rocket League, super healthy living, super unhealthy clicking, and the war of humans again We console our sadness about the broken Street Fighter V beta by, um, talking a lot about Street Fighter, along with the new King's Quest, the end of Ouya, way more Rocket League, super healthy living, super unhealthy clicking, and the war of humans again Giant Bomb no 10600 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07/21/2015 https://www.giantbomb.com/podcasts/giant-bombcast-07212015/1600-1290/ When Brad's away, you'll get to play... a new episode of the Giant Bombcast, that is! Join Jeff, Dan, Drew, and Jason for another installment of the world's only video game podcast as we discuss Street Fighter V's post-release purchasing plans, Rising Thu Mon, 20 Jul 2015 19:45:00 PST 1600-1290 When Brad's away, you'll get to play... a new episode of the Giant Bombcast, that is! Join Jeff, Dan, Drew, and Jason for another installment of the world's only video game podcast as we discuss Street Fighter V's post-release purchasing plans, Rising Thu When Brad's away, you'll get to play... a new episode of the Giant Bombcast, that is! Join Jeff, Dan, Drew, and Jason for another installment of the world's only video game podcast as we discuss Street Fighter V's post-release purchasing plans, Rising Thu Giant Bomb no 8334 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07/14/2015 https://www.giantbomb.com/podcasts/giant-bombcast-07142015/1600-1284/ We come together to talk about the untimely passing of Nintendo's Satoru Iwata before moving on to lighter topics like Rocket League, EA's Jade Raymond, The Magic Circle, face-scannin', the dissolution of KojiPro, and... look out everyone, Kratos is MAD!! Tue, 14 Jul 2015 12:30:00 PST 1600-1284 We come together to talk about the untimely passing of Nintendo's Satoru Iwata before moving on to lighter topics like Rocket League, EA's Jade Raymond, The Magic Circle, face-scannin', the dissolution of KojiPro, and... look out everyone, Kratos is MAD!! We come together to talk about the untimely passing of Nintendo's Satoru Iwata before moving on to lighter topics like Rocket League, EA's Jade Raymond, The Magic Circle, face-scannin', the dissolution of KojiPro, and... look out everyone, Kratos is MAD!! Giant Bomb no 11157 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07/07/2015 https://www.giantbomb.com/podcasts/giant-bombcast-07072015/1600-1277/ Bellies full with deep-fried candy bars, we're ready to dig deep into the Nintendo PlayStation, weird Minecraft news, the dubious allure of Fallout Shelter, multiple weird Japanese fighting games, Nintendo's tough investor talk, hot pepper facts, and much Tue, 07 Jul 2015 12:30:00 PST 1600-1277 Bellies full with deep-fried candy bars, we're ready to dig deep into the Nintendo PlayStation, weird Minecraft news, the dubious allure of Fallout Shelter, multiple weird Japanese fighting games, Nintendo's tough investor talk, hot pepper facts, and much Bellies full with deep-fried candy bars, we're ready to dig deep into the Nintendo PlayStation, weird Minecraft news, the dubious allure of Fallout Shelter, multiple weird Japanese fighting games, Nintendo's tough investor talk, hot pepper facts, and much Giant Bomb no 11692 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 06/30/2015 https://www.giantbomb.com/podcasts/giant-bombcast-06302015/1600-1270/ This week: a lot of PlayStation Vue gets vued, we all played Batman, dances get very expensive, Dan definitely shouldn't play with fireworks, and Driveclub will never, ever be spoken of again. All this, plus your emails! Tue, 30 Jun 2015 13:00:00 PST 1600-1270 This week: a lot of PlayStation Vue gets vued, we all played Batman, dances get very expensive, Dan definitely shouldn't play with fireworks, and Driveclub will never, ever be spoken of again. All this, plus your emails! This week: a lot of PlayStation Vue gets vued, we all played Batman, dances get very expensive, Dan definitely shouldn't play with fireworks, and Driveclub will never, ever be spoken of again. All this, plus your emails! Giant Bomb no 10558 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 06/23/2015 https://www.giantbomb.com/podcasts/giant-bombcast-06-23-2015/1600-1260/ We've dragged ourselves from the smoldering wreckage of E3 to wrap up some lingering topics from the show, including impressions of Horizon: Zero Dawn, Black Ops 3, Rise of the Tomb Raider, and MGS5, the incontinent effects of VR, that new Xbox One UI, fi Tue, 23 Jun 2015 11:00:00 PST 1600-1260 We've dragged ourselves from the smoldering wreckage of E3 to wrap up some lingering topics from the show, including impressions of Horizon: Zero Dawn, Black Ops 3, Rise of the Tomb Raider, and MGS5, the incontinent effects of VR, that new Xbox One UI, fi We've dragged ourselves from the smoldering wreckage of E3 to wrap up some lingering topics from the show, including impressions of Horizon: Zero Dawn, Black Ops 3, Rise of the Tomb Raider, and MGS5, the incontinent effects of VR, that new Xbox One UI, fi Giant Bomb no 10348 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS E3 2015: Giant Bomb's Day 3 Live Broadcast https://www.giantbomb.com/podcasts/e3-2015-giant-bomb-s-day-3-live-broadcast/1600-1257/ Given the way E3 2015 ended, we're not sure if it'll even be possible to have an E3 2016. Sat, 20 Jun 2015 19:00:00 PST 1600-1257 Given the way E3 2015 ended, we're not sure if it'll even be possible to have an E3 2016. Given the way E3 2015 ended, we're not sure if it'll even be possible to have an E3 2016. Giant Bomb no 12194 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS E3 2015: Giant Bomb's Day 2 Live Broadcast https://www.giantbomb.com/podcasts/e3-2015-giant-bomb-s-day-2-live-broadcast/1600-1251/ E3 continues to burn down Los Angeles as we bring in a big ol' range of people working on Deus Ex: Mankind Divided, Tony Hawk 5, Volume, Destiny, Below, Rock Band 4, and professional wrestling! Thu, 18 Jun 2015 13:45:00 PST 1600-1251 E3 continues to burn down Los Angeles as we bring in a big ol' range of people working on Deus Ex: Mankind Divided, Tony Hawk 5, Volume, Destiny, Below, Rock Band 4, and professional wrestling! E3 continues to burn down Los Angeles as we bring in a big ol' range of people working on Deus Ex: Mankind Divided, Tony Hawk 5, Volume, Destiny, Below, Rock Band 4, and professional wrestling! Giant Bomb no 9131 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS E3 2015: Giant Bomb's Day 1 Live Broadcast https://www.giantbomb.com/podcasts/e3-2015-giant-bomb-s-day-1-live-broadcast/1600-1248/ We collect a wicked assortment of guests and cover virtual reality, Microsoft's Hololens, Def Jam Icon, the number of explosions found in Just Cause 3, Halo 5's new warzone mode, playing soccer in a prison camp, how the heck the Xbox One is emulating 360 Wed, 17 Jun 2015 01:37:00 PST 1600-1248 We collect a wicked assortment of guests and cover virtual reality, Microsoft's Hololens, Def Jam Icon, the number of explosions found in Just Cause 3, Halo 5's new warzone mode, playing soccer in a prison camp, how the heck the Xbox One is emulating 360 We collect a wicked assortment of guests and cover virtual reality, Microsoft's Hololens, Def Jam Icon, the number of explosions found in Just Cause 3, Halo 5's new warzone mode, playing soccer in a prison camp, how the heck the Xbox One is emulating 360 Giant Bomb no 9309 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS The Giant Bombcast E3 2015 Sealed Envelope Spectacular https://www.giantbomb.com/podcasts/the-giant-bombcast-e3-2015-sealed-envelope-spectac/1600-1240/ We plow through all the remaining games Jeff saw at judges' week before launching into a bunch of predictions about what already happened at E3! Tue, 16 Jun 2015 12:01:00 PST 1600-1240 We plow through all the remaining games Jeff saw at judges' week before launching into a bunch of predictions about what already happened at E3! We plow through all the remaining games Jeff saw at judges' week before launching into a bunch of predictions about what already happened at E3! Giant Bomb no 9963 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS E3 2015: The Giant Bomb E3 2015 Attack Plan https://www.giantbomb.com/podcasts/e3-2015-the-giant-bomb-e3-2015-attack-plan/1600-1243/ Where are we? When are we streaming? What's going on in Los Angeles next week? Get all the answers right here! Fri, 12 Jun 2015 18:43:00 PST 1600-1243 Where are we? When are we streaming? What's going on in Los Angeles next week? Get all the answers right here! Where are we? When are we streaming? What's going on in Los Angeles next week? Get all the answers right here! Giant Bomb no 0 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 06/09/2015 https://www.giantbomb.com/podcasts/giant-bombcast-06-09-2015/1600-1235/ With E3 close on the horizon, Jeff starts spilling the beans on stuff like Fortnite and Metal Gear Solid 5, Fallout 4 makes itself known, the rebirth of Digital Eclipse turns a few heads, a long-overdue mattress update appears, then we all get knighted. S Tue, 09 Jun 2015 15:25:00 PST 1600-1235 With E3 close on the horizon, Jeff starts spilling the beans on stuff like Fortnite and Metal Gear Solid 5, Fallout 4 makes itself known, the rebirth of Digital Eclipse turns a few heads, a long-overdue mattress update appears, then we all get knighted. S With E3 close on the horizon, Jeff starts spilling the beans on stuff like Fortnite and Metal Gear Solid 5, Fallout 4 makes itself known, the rebirth of Digital Eclipse turns a few heads, a long-overdue mattress update appears, then we all get knighted. S Giant Bomb no 10172 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 06/02/2015 https://www.giantbomb.com/podcasts/giant-bombcast-06-02-2015/1600-1229/ Hey, who splattered ink all over this podcast? We're diving deep into Splatoon, E3 sandwiches, XCOM with swords, impressions of Batman: Arkham Knight and Lego Dimensions, killer shadows, and the great Amiibo caper of 2015. Tue, 02 Jun 2015 13:10:00 PST 1600-1229 Hey, who splattered ink all over this podcast? We're diving deep into Splatoon, E3 sandwiches, XCOM with swords, impressions of Batman: Arkham Knight and Lego Dimensions, killer shadows, and the great Amiibo caper of 2015. Hey, who splattered ink all over this podcast? We're diving deep into Splatoon, E3 sandwiches, XCOM with swords, impressions of Batman: Arkham Knight and Lego Dimensions, killer shadows, and the great Amiibo caper of 2015. Giant Bomb no 9734 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 05/26/2015 https://www.giantbomb.com/podcasts/giant-bombcast-05-26-2015/1600-1220/ Straight out of the emergency backup recording shelter, we've cobbled together our thoughts on The Witcher 3, Mad Max (the game), Eurovision 2015, that Star Citizen leak, new-old Need for Speed, Dan's childhood machinations... and Destiny: House of Wolves Tue, 26 May 2015 17:30:00 PST 1600-1220 Straight out of the emergency backup recording shelter, we've cobbled together our thoughts on The Witcher 3, Mad Max (the game), Eurovision 2015, that Star Citizen leak, new-old Need for Speed, Dan's childhood machinations... and Destiny: House of Wolves Straight out of the emergency backup recording shelter, we've cobbled together our thoughts on The Witcher 3, Mad Max (the game), Eurovision 2015, that Star Citizen leak, new-old Need for Speed, Dan's childhood machinations... and Destiny: House of Wolves Giant Bomb no 10836 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 05/19/2015 https://www.giantbomb.com/podcasts/giant-bombcast-05-19-2015/1600-1213/ Bay to Breakers may have scoured the landscape clean, but we were safely cowering in our suck buckets the whole time! Now we're back to go in-depth with The Witcher 3, ponder Mario &amp; Luigi &amp; Puzzle &amp; Dragons, try to get excited about another A Tue, 19 May 2015 14:10:00 PST 1600-1213 Bay to Breakers may have scoured the landscape clean, but we were safely cowering in our suck buckets the whole time! Now we're back to go in-depth with The Witcher 3, ponder Mario &amp; Luigi &amp; Puzzle &amp; Dragons, try to get excited about another A Bay to Breakers may have scoured the landscape clean, but we were safely cowering in our suck buckets the whole time! Now we're back to go in-depth with The Witcher 3, ponder Mario &amp; Luigi &amp; Puzzle &amp; Dragons, try to get excited about another A Giant Bomb no 9695 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 05/12/2015 https://www.giantbomb.com/podcasts/giant-bombcast-05-12-2015/1600-1208/ This week, it's Kirkhope vs. Wise! Sword vs. whip! Dan vs. figs! The Giant Bombcast is all about strife... and also dabbling with The Witcher 3, pondering the Desert Golf endgame, drinking in The Old Blood, cohabitating with Notch, and spending even more Tue, 12 May 2015 15:45:00 PST 1600-1208 This week, it's Kirkhope vs. Wise! Sword vs. whip! Dan vs. figs! The Giant Bombcast is all about strife... and also dabbling with The Witcher 3, pondering the Desert Golf endgame, drinking in The Old Blood, cohabitating with Notch, and spending even more This week, it's Kirkhope vs. Wise! Sword vs. whip! Dan vs. figs! The Giant Bombcast is all about strife... and also dabbling with The Witcher 3, pondering the Desert Golf endgame, drinking in The Old Blood, cohabitating with Notch, and spending even more Giant Bomb no 11067 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 05/05/2015 https://www.giantbomb.com/podcasts/giant-bombcast-05-05-2015/1600-1201/ This week! We say later to Letterman, Drew gets back into Dirt 'n Destiny, Brad and Jeff cast their lot in the Great Composer Showdown 2015, Dan's never seen Law &amp; Order. Westerado! Project CARS! Avalon mysteries! Billy Corgan! Nuclear missiles! Tue, 05 May 2015 11:00:00 PST 1600-1201 This week! We say later to Letterman, Drew gets back into Dirt 'n Destiny, Brad and Jeff cast their lot in the Great Composer Showdown 2015, Dan's never seen Law &amp; Order. Westerado! Project CARS! Avalon mysteries! Billy Corgan! Nuclear missiles! This week! We say later to Letterman, Drew gets back into Dirt 'n Destiny, Brad and Jeff cast their lot in the Great Composer Showdown 2015, Dan's never seen Law &amp; Order. Westerado! Project CARS! Avalon mysteries! Billy Corgan! Nuclear missiles! Giant Bomb no 12906 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 04/28/2015 https://www.giantbomb.com/podcasts/giant-bombcast-04-28-2015/1600-1197/ Vinny and Alex party-in-the-sky their way from New Yawk to San Francisco so we can chat about the Silent Hills that wasn't, Valve's paid-mod calamity, the fully formed Broken Age, the Telltale fast food tie-in, video game knockoffs, lady MCs, the future o Tue, 28 Apr 2015 13:30:00 PST 1600-1197 Vinny and Alex party-in-the-sky their way from New Yawk to San Francisco so we can chat about the Silent Hills that wasn't, Valve's paid-mod calamity, the fully formed Broken Age, the Telltale fast food tie-in, video game knockoffs, lady MCs, the future o Vinny and Alex party-in-the-sky their way from New Yawk to San Francisco so we can chat about the Silent Hills that wasn't, Valve's paid-mod calamity, the fully formed Broken Age, the Telltale fast food tie-in, video game knockoffs, lady MCs, the future o Giant Bomb no 13615 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 04/21/2015 https://www.giantbomb.com/podcasts/giant-bombcast-04-21-2015/1600-1194/ Giant Bomb Action News is live on the scene with the latest on high-speed chases (onscreen and off), Star Wars of all kinds, Mortal Kombat hacks, Titan Souls, still more Bloodborne, celebrity governors, our expert E3 strategies, and the uncertain whereabo Tue, 21 Apr 2015 15:05:00 PST 1600-1194 Giant Bomb Action News is live on the scene with the latest on high-speed chases (onscreen and off), Star Wars of all kinds, Mortal Kombat hacks, Titan Souls, still more Bloodborne, celebrity governors, our expert E3 strategies, and the uncertain whereabo Giant Bomb Action News is live on the scene with the latest on high-speed chases (onscreen and off), Star Wars of all kinds, Mortal Kombat hacks, Titan Souls, still more Bloodborne, celebrity governors, our expert E3 strategies, and the uncertain whereabo Giant Bomb no 11099 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 04/14/2015 https://www.giantbomb.com/podcasts/giant-bombcast-04-14-2015/1600-1189/ Mortal Monday may be over, but we're still here to talk about MK past and present, the martial absurdity of WMAC Masters, the return of (FMV) Guitar Hero, the travails of video game preservation, a crash course in Irish, the Oestreicher origin story, and Tue, 14 Apr 2015 18:00:00 PST 1600-1189 Mortal Monday may be over, but we're still here to talk about MK past and present, the martial absurdity of WMAC Masters, the return of (FMV) Guitar Hero, the travails of video game preservation, a crash course in Irish, the Oestreicher origin story, and Mortal Monday may be over, but we're still here to talk about MK past and present, the martial absurdity of WMAC Masters, the return of (FMV) Guitar Hero, the travails of video game preservation, a crash course in Irish, the Oestreicher origin story, and Giant Bomb no 11201 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 04/07/2015 https://www.giantbomb.com/podcasts/giant-bombcast-04-07-2015/1600-1182/ We interrupt your regularly scheduled video game podcast for a special report on DMX's latest legal troubles. Now back to way more Bloodborne chat, the latest direct from Nintendo, Drew's trip south of the border, the death of OnLive, and a belated elegy Tue, 07 Apr 2015 13:30:00 PST 1600-1182 We interrupt your regularly scheduled video game podcast for a special report on DMX's latest legal troubles. Now back to way more Bloodborne chat, the latest direct from Nintendo, Drew's trip south of the border, the death of OnLive, and a belated elegy We interrupt your regularly scheduled video game podcast for a special report on DMX's latest legal troubles. Now back to way more Bloodborne chat, the latest direct from Nintendo, Drew's trip south of the border, the death of OnLive, and a belated elegy Giant Bomb no 10709 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03/31/2015 https://www.giantbomb.com/podcasts/giant-bombcast-03-31-2015/1600-1176/ What's the haps, daddy-o? This week the Giant Bombcast is spinning all the platters that matter, like that brand new hit record Axiom Verge, more Bloodborne, the Wrasslemania fallout, the mystery of Puzzle &amp; Dragons, the modern Kickstarter landscape, Tue, 31 Mar 2015 16:30:00 PST 1600-1176 What's the haps, daddy-o? This week the Giant Bombcast is spinning all the platters that matter, like that brand new hit record Axiom Verge, more Bloodborne, the Wrasslemania fallout, the mystery of Puzzle &amp; Dragons, the modern Kickstarter landscape, What's the haps, daddy-o? This week the Giant Bombcast is spinning all the platters that matter, like that brand new hit record Axiom Verge, more Bloodborne, the Wrasslemania fallout, the mystery of Puzzle &amp; Dragons, the modern Kickstarter landscape, Giant Bomb no 11198 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03/24/2015 https://www.giantbomb.com/podcasts/giant-bombcast-03-24-2015/1600-1169/ Bloodborne is out, we've played a lot of it, and we'll now discuss it in excruciating detail! Also: Pillars of Eternity, The Handsome Collection, Nintendo on mobile, the Kojima future, eau de burgers, Rorie's frequent pee breaks, and tips for taming your Mon, 23 Mar 2015 21:00:00 PST 1600-1169 Bloodborne is out, we've played a lot of it, and we'll now discuss it in excruciating detail! Also: Pillars of Eternity, The Handsome Collection, Nintendo on mobile, the Kojima future, eau de burgers, Rorie's frequent pee breaks, and tips for taming your Bloodborne is out, we've played a lot of it, and we'll now discuss it in excruciating detail! Also: Pillars of Eternity, The Handsome Collection, Nintendo on mobile, the Kojima future, eau de burgers, Rorie's frequent pee breaks, and tips for taming your Giant Bomb no 10707 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03/17/2015 https://www.giantbomb.com/podcasts/giant-bombcast-03-17-2015/1600-1163/ As St. Patrick scourges the land, we hunker down in our bunker to discuss adventures in civic planning, the glut of dumb cop-show games, Final Fantasies of all stripes, Ori and the Delightful Difficulty, the return (?) of Joe Montana, further uses for liq Tue, 17 Mar 2015 17:00:00 PST 1600-1163 As St. Patrick scourges the land, we hunker down in our bunker to discuss adventures in civic planning, the glut of dumb cop-show games, Final Fantasies of all stripes, Ori and the Delightful Difficulty, the return (?) of Joe Montana, further uses for liq As St. Patrick scourges the land, we hunker down in our bunker to discuss adventures in civic planning, the glut of dumb cop-show games, Final Fantasies of all stripes, Ori and the Delightful Difficulty, the return (?) of Joe Montana, further uses for liq Giant Bomb no 12334 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03/10/2015 https://www.giantbomb.com/podcasts/giant-bombcast-03-10-2015/1600-1159/ We've clawed our way back from the great white hellscape that is Boston to wrap up the business out of PAX and GDC before turning our attention to more pertinent topics. Can you take a 3DS into North Korea? Where's Chris Cashman these days? And who the he Tue, 10 Mar 2015 17:30:00 PST 1600-1159 We've clawed our way back from the great white hellscape that is Boston to wrap up the business out of PAX and GDC before turning our attention to more pertinent topics. Can you take a 3DS into North Korea? Where's Chris Cashman these days? And who the he We've clawed our way back from the great white hellscape that is Boston to wrap up the business out of PAX and GDC before turning our attention to more pertinent topics. Can you take a 3DS into North Korea? Where's Chris Cashman these days? And who the he Giant Bomb no 9453 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 3/3/2015 https://www.giantbomb.com/podcasts/giant-bombcast-3-3-2015/1600-1153/ Fresh from Japan, 8-4's John Ricciardi and Mark MacDonald are here to talk about, well, Monster Hunter and Destiny! Wait, where are you goi...um, and also the state of games in Japan, VR VR VR, the (non-)revival of old PC games, the whereabouts of Koji Ig Tue, 03 Mar 2015 14:00:00 PST 1600-1153 Fresh from Japan, 8-4's John Ricciardi and Mark MacDonald are here to talk about, well, Monster Hunter and Destiny! Wait, where are you goi...um, and also the state of games in Japan, VR VR VR, the (non-)revival of old PC games, the whereabouts of Koji Ig Fresh from Japan, 8-4's John Ricciardi and Mark MacDonald are here to talk about, well, Monster Hunter and Destiny! Wait, where are you goi...um, and also the state of games in Japan, VR VR VR, the (non-)revival of old PC games, the whereabouts of Koji Ig Giant Bomb no 12008 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 55/2015 https://www.giantbomb.com/podcasts/giant-bombcast-55-2015/1600-1148/ This week, Simon says "Bleed... and then listen to our chatter about Dan's adventures in San Angeles, all about The Order, the Kirby curse, award-winning middleware, the magic of unaffiliated local TV, and the many endings of Red Dead Redemption. OK, you Tue, 24 Feb 2015 13:15:00 PST 1600-1148 This week, Simon says "Bleed... and then listen to our chatter about Dan's adventures in San Angeles, all about The Order, the Kirby curse, award-winning middleware, the magic of unaffiliated local TV, and the many endings of Red Dead Redemption. OK, you This week, Simon says "Bleed... and then listen to our chatter about Dan's adventures in San Angeles, all about The Order, the Kirby curse, award-winning middleware, the magic of unaffiliated local TV, and the many endings of Red Dead Redemption. OK, you Giant Bomb no 10573 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 02/17/2015 https://www.giantbomb.com/podcasts/giant-bombcast-02-17-2015/1600-1143/ After a weekend honoring our founding fathers, we're back with the straight dope on Evolve, Tekken vs. Soul Calibur, sidewalk-poop-as-entertainment, the game of the (last) generation, 40 years of SNL, the trials and tribulations of Peter Molyneux, and our Tue, 17 Feb 2015 18:30:00 PST 1600-1143 After a weekend honoring our founding fathers, we're back with the straight dope on Evolve, Tekken vs. Soul Calibur, sidewalk-poop-as-entertainment, the game of the (last) generation, 40 years of SNL, the trials and tribulations of Peter Molyneux, and our After a weekend honoring our founding fathers, we're back with the straight dope on Evolve, Tekken vs. Soul Calibur, sidewalk-poop-as-entertainment, the game of the (last) generation, 40 years of SNL, the trials and tribulations of Peter Molyneux, and our Giant Bomb no 9853 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 02/10/2015 https://www.giantbomb.com/podcasts/giant-bombcast-02-10-2015/1600-1139/ This week! Mortal Kombat oldsters, the clumsy climbing of Grow Home, Jeff's adventures on the Chinese Internet, the updating of automotive firmware, and how to obtain membership at the Super Elite Zelda country club. Please apply the Giant Bombcast direct Tue, 10 Feb 2015 14:00:00 PST 1600-1139 This week! Mortal Kombat oldsters, the clumsy climbing of Grow Home, Jeff's adventures on the Chinese Internet, the updating of automotive firmware, and how to obtain membership at the Super Elite Zelda country club. Please apply the Giant Bombcast direct This week! Mortal Kombat oldsters, the clumsy climbing of Grow Home, Jeff's adventures on the Chinese Internet, the updating of automotive firmware, and how to obtain membership at the Super Elite Zelda country club. Please apply the Giant Bombcast direct Giant Bomb no 10910 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 02/03/2015 https://www.giantbomb.com/podcasts/giant-bombcast-02-03-2015/1600-1130/ Our very favorite Irishman Danny O'Dwyer joins us to shake off Super Bowl hangovers and talk about European American Football, the down low on Dying Light, SOE's sudden independence, the dangers of Mendocino County, and the most learned analysis of Ninten Tue, 03 Feb 2015 14:30:00 PST 1600-1130 Our very favorite Irishman Danny O'Dwyer joins us to shake off Super Bowl hangovers and talk about European American Football, the down low on Dying Light, SOE's sudden independence, the dangers of Mendocino County, and the most learned analysis of Ninten Our very favorite Irishman Danny O'Dwyer joins us to shake off Super Bowl hangovers and talk about European American Football, the down low on Dying Light, SOE's sudden independence, the dangers of Mendocino County, and the most learned analysis of Ninten Giant Bomb no 10669 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 01/27/2015 https://www.giantbomb.com/podcasts/giant-bombcast-01-27-2015/1600-1127/ Everyone's back from San Antonio and other parts unknown to run down PAX South before addressing the pertinent issues of the day, like that new Majora's Mask, Dying Light, Norm MacDonald's storied career, multiple Resident Evils, the plight of the noble l Tue, 27 Jan 2015 17:00:00 PST 1600-1127 Everyone's back from San Antonio and other parts unknown to run down PAX South before addressing the pertinent issues of the day, like that new Majora's Mask, Dying Light, Norm MacDonald's storied career, multiple Resident Evils, the plight of the noble l Everyone's back from San Antonio and other parts unknown to run down PAX South before addressing the pertinent issues of the day, like that new Majora's Mask, Dying Light, Norm MacDonald's storied career, multiple Resident Evils, the plight of the noble l Giant Bomb no 8686 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 01/20/2015 https://www.giantbomb.com/podcasts/giant-bombcast-01-20-2015/1600-1123/ This century is 15 percent over, and it's high time we pondered the important questions! For instance: What are Colin Quinn's current whereabouts? Is Gat out of Hell any good? What the heck is up with Rock Band? When, where, and what is Nintendo's next ha Tue, 20 Jan 2015 17:45:00 PST 1600-1123 This century is 15 percent over, and it's high time we pondered the important questions! For instance: What are Colin Quinn's current whereabouts? Is Gat out of Hell any good? What the heck is up with Rock Band? When, where, and what is Nintendo's next ha This century is 15 percent over, and it's high time we pondered the important questions! For instance: What are Colin Quinn's current whereabouts? Is Gat out of Hell any good? What the heck is up with Rock Band? When, where, and what is Nintendo's next ha Giant Bomb no 11588 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 01/13/2015 https://www.giantbomb.com/podcasts/giant-bombcast-01-13-2015/1600-1122/ Video games, and the people who love them! Herein lies discussion of The Talos Principle, emulated Marios, Internet video archival strategies, Drew's adventures in spacefaring, the magic of Puyo Puyo Tetris, and illicit uses for your cough syrup. Tue, 13 Jan 2015 17:15:00 PST 1600-1122 Video games, and the people who love them! Herein lies discussion of The Talos Principle, emulated Marios, Internet video archival strategies, Drew's adventures in spacefaring, the magic of Puyo Puyo Tetris, and illicit uses for your cough syrup. Video games, and the people who love them! Herein lies discussion of The Talos Principle, emulated Marios, Internet video archival strategies, Drew's adventures in spacefaring, the magic of Puyo Puyo Tetris, and illicit uses for your cough syrup. Giant Bomb no 11650 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 01/06/2015 https://www.giantbomb.com/podcasts/giant-bombcast-01-06-2015/1600-1118/ Welcome to 2015! We're getting our obvious Back to the Future II jokes out of the way nice and early so we can move on to more important topics like holiday hijinks, Dan's debilitating disease, console network outages, the white whale that is Mike Tyson, Tue, 06 Jan 2015 12:00:00 PST 1600-1118 Welcome to 2015! We're getting our obvious Back to the Future II jokes out of the way nice and early so we can move on to more important topics like holiday hijinks, Dan's debilitating disease, console network outages, the white whale that is Mike Tyson, Welcome to 2015! We're getting our obvious Back to the Future II jokes out of the way nice and early so we can move on to more important topics like holiday hijinks, Dan's debilitating disease, console network outages, the white whale that is Mike Tyson, Giant Bomb no 9481 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bomb Game of the Year 2014: Day Five https://www.giantbomb.com/podcasts/giant-bomb-game-of-the-year-2014-day-five/1600-1106/ No brakes on the GOTY train! We're plowing through to the Best Game of 2014, but not before we also name Best Horror Game, Worst Game, and the coveted PLEASE STOP. Tue, 30 Dec 2014 10:00:00 PST 1600-1106 No brakes on the GOTY train! We're plowing through to the Best Game of 2014, but not before we also name Best Horror Game, Worst Game, and the coveted PLEASE STOP. No brakes on the GOTY train! We're plowing through to the Best Game of 2014, but not before we also name Best Horror Game, Worst Game, and the coveted PLEASE STOP. Giant Bomb no 15288 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bomb Game of the Year 2014: Day Four https://www.giantbomb.com/podcasts/giant-bomb-game-of-the-year-2014-day-four/1600-1104/ We're coming down the home stretch, but there are still winners to select for Hottest Mess, Best Moment or Sequence, Best Local Multiplayer, and Best Styyyyyyyyyyle! Mon, 29 Dec 2014 10:00:00 PST 1600-1104 We're coming down the home stretch, but there are still winners to select for Hottest Mess, Best Moment or Sequence, Best Local Multiplayer, and Best Styyyyyyyyyyle! We're coming down the home stretch, but there are still winners to select for Hottest Mess, Best Moment or Sequence, Best Local Multiplayer, and Best Styyyyyyyyyyle! Giant Bomb no 5649 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bomb Game of the Year 2014: Day Three https://www.giantbomb.com/podcasts/giant-bomb-game-of-the-year-2014-day-three/1600-1102/ The deliberations rage on, with winners for Best New Character, Best Early Access Experience, Best Console Exclusives, and Best Debut emerging from the fray. Sun, 28 Dec 2014 10:00:00 PST 1600-1102 The deliberations rage on, with winners for Best New Character, Best Early Access Experience, Best Console Exclusives, and Best Debut emerging from the fray. The deliberations rage on, with winners for Best New Character, Best Early Access Experience, Best Console Exclusives, and Best Debut emerging from the fray. Giant Bomb no 6541 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bomb Game of the Year 2014: Day Two https://www.giantbomb.com/podcasts/giant-bomb-game-of-the-year-2014-day-two/1600-1100/ Game of the Year continues! It's time to hash out the winners of Best Story, Best Music, Best Short-Time Game, and Most Disappointing Game. Sat, 27 Dec 2014 10:00:00 PST 1600-1100 Game of the Year continues! It's time to hash out the winners of Best Story, Best Music, Best Short-Time Game, and Most Disappointing Game. Game of the Year continues! It's time to hash out the winners of Best Story, Best Music, Best Short-Time Game, and Most Disappointing Game. Giant Bomb no 8970 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bomb Game of the Year 2014: Day One https://www.giantbomb.com/podcasts/giant-bomb-game-of-the-year-2014-day-one/1600-1098/ Our annual awardstravaganza commences with deliberations on 2014's Old Game of the Year, Best Surprise, Best-Looking Game, and, uh, Most Likely To Be Frog Fractions 2! Fri, 26 Dec 2014 10:00:00 PST 1600-1098 Our annual awardstravaganza commences with deliberations on 2014's Old Game of the Year, Best Surprise, Best-Looking Game, and, uh, Most Likely To Be Frog Fractions 2! Our annual awardstravaganza commences with deliberations on 2014's Old Game of the Year, Best Surprise, Best-Looking Game, and, uh, Most Likely To Be Frog Fractions 2! Giant Bomb no 8758 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 12/23/2014 https://www.giantbomb.com/podcasts/giant-bombcast-12-23-2014/1600-1114/ With the rest of the team out for the holiday break or feverishly finishing up our Game of the Year content, Jeff and Matthew sit down to take a handful of your questions on a variety of topics. Tue, 23 Dec 2014 18:49:00 PST 1600-1114 With the rest of the team out for the holiday break or feverishly finishing up our Game of the Year content, Jeff and Matthew sit down to take a handful of your questions on a variety of topics. With the rest of the team out for the holiday break or feverishly finishing up our Game of the Year content, Jeff and Matthew sit down to take a handful of your questions on a variety of topics. Giant Bomb no 10754 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 12/16/2014 https://www.giantbomb.com/podcasts/giant-bombcast-12-16-2014/1600-1096/ A couple of tall, dark and handsome clowns blow into town to tell the tallest tales of comically large telephones, Jeff's history with the Dark Carnival, the latest Surge surge, the "truth" about the Wa "brothers," November hardware sales, the likely wher Tue, 16 Dec 2014 12:15:00 PST 1600-1096 A couple of tall, dark and handsome clowns blow into town to tell the tallest tales of comically large telephones, Jeff's history with the Dark Carnival, the latest Surge surge, the "truth" about the Wa "brothers," November hardware sales, the likely wher A couple of tall, dark and handsome clowns blow into town to tell the tallest tales of comically large telephones, Jeff's history with the Dark Carnival, the latest Surge surge, the "truth" about the Wa "brothers," November hardware sales, the likely wher Giant Bomb no 10060 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 12/09/2014 https://www.giantbomb.com/podcasts/giant-bombcast-12-09-2014/1600-1087/ Who went and gave the video game industry permission to break all this news in December? We convene our eight-seat roundtable of experts to discuss all the latest happenings at the Game Awards and PlayStation Experience, along with the passing of Ralph Ba Tue, 09 Dec 2014 19:30:00 PST 1600-1087 Who went and gave the video game industry permission to break all this news in December? We convene our eight-seat roundtable of experts to discuss all the latest happenings at the Game Awards and PlayStation Experience, along with the passing of Ralph Ba Who went and gave the video game industry permission to break all this news in December? We convene our eight-seat roundtable of experts to discuss all the latest happenings at the Game Awards and PlayStation Experience, along with the passing of Ralph Ba Giant Bomb no 10494 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 12/02/2014 https://www.giantbomb.com/podcasts/giant-bombcast-12-02-2014/1600-1084/ The holidays are almost upon us, and we're cramming every last person we can into this podcast just for you! The entire current Giant Bomb staff is here to discuss the games of the day, the perils of home ownership, why you'd want a mortgage, living in ge Tue, 02 Dec 2014 15:25:00 PST 1600-1084 The holidays are almost upon us, and we're cramming every last person we can into this podcast just for you! The entire current Giant Bomb staff is here to discuss the games of the day, the perils of home ownership, why you'd want a mortgage, living in ge The holidays are almost upon us, and we're cramming every last person we can into this podcast just for you! The entire current Giant Bomb staff is here to discuss the games of the day, the perils of home ownership, why you'd want a mortgage, living in ge Giant Bomb no 13500 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 11/25/2014 https://www.giantbomb.com/podcasts/giant-bombcast-11-25-2014/1600-1079/ We're reconvening the drink council for a very important test before moving on to the regular business of, uh, talking about whatever. There's a new Geometry Wars! Master Chief Collection is still broken! Smash Bros. came out! Little girls hate Quick Look Tue, 25 Nov 2014 12:45:00 PST 1600-1079 We're reconvening the drink council for a very important test before moving on to the regular business of, uh, talking about whatever. There's a new Geometry Wars! Master Chief Collection is still broken! Smash Bros. came out! Little girls hate Quick Look We're reconvening the drink council for a very important test before moving on to the regular business of, uh, talking about whatever. There's a new Geometry Wars! Master Chief Collection is still broken! Smash Bros. came out! Little girls hate Quick Look Giant Bomb no 12707 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 11/18/2014 https://www.giantbomb.com/podcasts/giant-bombcast-11-18-2014/1600-1074/ Rorie substitutes in for Drew to chat about the latest Age of Dragons before we move on to kneecap last week's shoddy releases. There's no talking in the library, but plenty of talk about Far Cry 4, the new GTA V, Corbin Bernsen's directing career, PlaySt Tue, 18 Nov 2014 14:30:00 PST 1600-1074 Rorie substitutes in for Drew to chat about the latest Age of Dragons before we move on to kneecap last week's shoddy releases. There's no talking in the library, but plenty of talk about Far Cry 4, the new GTA V, Corbin Bernsen's directing career, PlaySt Rorie substitutes in for Drew to chat about the latest Age of Dragons before we move on to kneecap last week's shoddy releases. There's no talking in the library, but plenty of talk about Far Cry 4, the new GTA V, Corbin Bernsen's directing career, PlaySt Giant Bomb no 11898 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 11/11/2014 https://www.giantbomb.com/podcasts/giant-bombcast-11-11-2014/1600-1065/ The fourth quarter is HEATING UP, and Giant Bomb Action News is on the scene to report on Assassin's Creed: Unity, the Master Chief Collection, "new" Blizzard games, the Mario Stack Rank, the return of one Mr. Hawk, and the true identity of the rap game K Tue, 11 Nov 2014 11:30:00 PST 1600-1065 The fourth quarter is HEATING UP, and Giant Bomb Action News is on the scene to report on Assassin's Creed: Unity, the Master Chief Collection, "new" Blizzard games, the Mario Stack Rank, the return of one Mr. Hawk, and the true identity of the rap game K The fourth quarter is HEATING UP, and Giant Bomb Action News is on the scene to report on Assassin's Creed: Unity, the Master Chief Collection, "new" Blizzard games, the Mario Stack Rank, the return of one Mr. Hawk, and the true identity of the rap game K Giant Bomb no 10424 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 11/04/2014 https://www.giantbomb.com/podcasts/giant-bombcast-11-04-2014/1600-1057/ Dan's back from his Kansas City odyssey to regale us with tales of... well, you'll see, plus the annual Call of Duty check-in, Freddie Mercury's Sunset Overdrive, the true value of Donkey Kong Country, Dennis Dyack's re-return, the latest Canseco mishap, Tue, 04 Nov 2014 15:30:00 PST 1600-1057 Dan's back from his Kansas City odyssey to regale us with tales of... well, you'll see, plus the annual Call of Duty check-in, Freddie Mercury's Sunset Overdrive, the true value of Donkey Kong Country, Dennis Dyack's re-return, the latest Canseco mishap, Dan's back from his Kansas City odyssey to regale us with tales of... well, you'll see, plus the annual Call of Duty check-in, Freddie Mercury's Sunset Overdrive, the true value of Donkey Kong Country, Dennis Dyack's re-return, the latest Canseco mishap, Giant Bomb no 10683 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 10/28/2014 https://www.giantbomb.com/podcasts/giant-bombcast-10-28-2014/1600-1048/ We're fresh (?!) off of Extra Life to recap strategies for stayin' up all night, Drew's globetrotting adventures, more on Sunset Overdrive, the not-very-mysterious identity of Quartermann, Xbox price drops, and the gastric processes of vampires. Tue, 28 Oct 2014 18:00:00 PST 1600-1048 We're fresh (?!) off of Extra Life to recap strategies for stayin' up all night, Drew's globetrotting adventures, more on Sunset Overdrive, the not-very-mysterious identity of Quartermann, Xbox price drops, and the gastric processes of vampires. We're fresh (?!) off of Extra Life to recap strategies for stayin' up all night, Drew's globetrotting adventures, more on Sunset Overdrive, the not-very-mysterious identity of Quartermann, Xbox price drops, and the gastric processes of vampires. Giant Bomb no 8863 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 10/21/2014 https://www.giantbomb.com/podcasts/giant-bombcast-10-21-2014/1600-1041/ With Drew wrapping up his odyssey on the other side of the world, Jason's back to keep the podcast party going with more on Bayonetta 2, Sunset Overdrive, Borderlands: The Pre-Sequel, Killer Instinct Season 2, Axl Rose's favorite pinball phrases, some byg Tue, 21 Oct 2014 14:30:00 PST 1600-1041 With Drew wrapping up his odyssey on the other side of the world, Jason's back to keep the podcast party going with more on Bayonetta 2, Sunset Overdrive, Borderlands: The Pre-Sequel, Killer Instinct Season 2, Axl Rose's favorite pinball phrases, some byg With Drew wrapping up his odyssey on the other side of the world, Jason's back to keep the podcast party going with more on Bayonetta 2, Sunset Overdrive, Borderlands: The Pre-Sequel, Killer Instinct Season 2, Axl Rose's favorite pinball phrases, some byg Giant Bomb no 11894 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 10/14/2014 https://www.giantbomb.com/podcasts/giant-bombcast-10-14-2014/1600-1034/ With the Destiny raid completed, we sit back and, um, chat about the Destiny raid... Wait, come back! Jason A. Striker joins us to talk Bayonetta 2, The Evil Within, Borderlands: The Pre-Sequel, the new New 3DS, more on AC: Unity resolutions, nice bounty Tue, 14 Oct 2014 17:30:00 PST 1600-1034 With the Destiny raid completed, we sit back and, um, chat about the Destiny raid... Wait, come back! Jason A. Striker joins us to talk Bayonetta 2, The Evil Within, Borderlands: The Pre-Sequel, the new New 3DS, more on AC: Unity resolutions, nice bounty With the Destiny raid completed, we sit back and, um, chat about the Destiny raid... Wait, come back! Jason A. Striker joins us to talk Bayonetta 2, The Evil Within, Borderlands: The Pre-Sequel, the new New 3DS, more on AC: Unity resolutions, nice bounty Giant Bomb no 10221 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 10/07/2014 https://www.giantbomb.com/podcasts/giant-bombcast-10-07-2014/1600-1027/ We're back from Black Rock City with all the latest on art cars, sex tents, desert drugs, and video games! Matthew "Matt" Rorie joins us to chat Driveclub, Alien: Isolation, even more on the Destiny endgame, beaver butts, the 900th P, and Dan Ryckert's fe Tue, 07 Oct 2014 18:00:00 PST 1600-1027 We're back from Black Rock City with all the latest on art cars, sex tents, desert drugs, and video games! Matthew "Matt" Rorie joins us to chat Driveclub, Alien: Isolation, even more on the Destiny endgame, beaver butts, the 900th P, and Dan Ryckert's fe We're back from Black Rock City with all the latest on art cars, sex tents, desert drugs, and video games! Matthew "Matt" Rorie joins us to chat Driveclub, Alien: Isolation, even more on the Destiny endgame, beaver butts, the 900th P, and Dan Ryckert's fe Giant Bomb no 12198 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 09/30/2014 https://www.giantbomb.com/podcasts/giant-bombcast-09-30-2014/1600-1021/ Quarter four is upon us and it's all games all the time around here, with in-depth chattin' about Shadow of Mordor, Forza Horizon 2, Super Smash Bros. 3DS, and Gauntlet. Well, fine, you can also hang around for our favorite hangover avoidance strategies. Tue, 30 Sep 2014 16:30:00 PST 1600-1021 Quarter four is upon us and it's all games all the time around here, with in-depth chattin' about Shadow of Mordor, Forza Horizon 2, Super Smash Bros. 3DS, and Gauntlet. Well, fine, you can also hang around for our favorite hangover avoidance strategies. Quarter four is upon us and it's all games all the time around here, with in-depth chattin' about Shadow of Mordor, Forza Horizon 2, Super Smash Bros. 3DS, and Gauntlet. Well, fine, you can also hang around for our favorite hangover avoidance strategies. Giant Bomb no 11043 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 09/23/2014 https://www.giantbomb.com/podcasts/giant-bombcast-09-23-2014/1600-1013/ It's an Irish invasion as GameSpot's Danny O'Dwyer joins us to talk about the right way to enjoy Destiny, the wrong way to parse English accents, whatever the hell Final Fantasy is now, and the perils of programming video games. It has been two (2) weeks Tue, 23 Sep 2014 16:15:00 PST 1600-1013 It's an Irish invasion as GameSpot's Danny O'Dwyer joins us to talk about the right way to enjoy Destiny, the wrong way to parse English accents, whatever the hell Final Fantasy is now, and the perils of programming video games. It has been two (2) weeks It's an Irish invasion as GameSpot's Danny O'Dwyer joins us to talk about the right way to enjoy Destiny, the wrong way to parse English accents, whatever the hell Final Fantasy is now, and the perils of programming video games. It has been two (2) weeks Giant Bomb no 7920 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 09/16/2014 https://www.giantbomb.com/podcasts/giant-bombcast-09-16-2014/1600-1006/ Destiny still rules the video game talk around these parts... but then, who just listens to this podcast for games? Especially when you can also hear about hot topics like dying on Mars, drinking on battleships, the John Carmack Tweet of the Week, and TWO Tue, 16 Sep 2014 14:00:00 PST 1600-1006 Destiny still rules the video game talk around these parts... but then, who just listens to this podcast for games? Especially when you can also hear about hot topics like dying on Mars, drinking on battleships, the John Carmack Tweet of the Week, and TWO Destiny still rules the video game talk around these parts... but then, who just listens to this podcast for games? Especially when you can also hear about hot topics like dying on Mars, drinking on battleships, the John Carmack Tweet of the Week, and TWO Giant Bomb no 10862 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 09/09/2014 https://www.giantbomb.com/podcasts/giant-bombcast-09-09-2014/1600-996/ Destiny is here and it's time to talk about it. Once we've gone over our first few hours with Bungie's latest, stick around for further discussion of Drew's introduction to local wrestling, Dan's recipe for bathtub chicken, and the popularity of Giant Bom Tue, 09 Sep 2014 18:00:00 PST 1600-996 Destiny is here and it's time to talk about it. Once we've gone over our first few hours with Bungie's latest, stick around for further discussion of Drew's introduction to local wrestling, Dan's recipe for bathtub chicken, and the popularity of Giant Bom Destiny is here and it's time to talk about it. Once we've gone over our first few hours with Bungie's latest, stick around for further discussion of Drew's introduction to local wrestling, Dan's recipe for bathtub chicken, and the popularity of Giant Bom Giant Bomb no 7920 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 09/02/2014 https://www.giantbomb.com/podcasts/giant-bombcast-09-02-2014/1600-985/ Join us as we mop up the last little bit of PAX Prime business before moving on to more pressing discussions about eating bugs, Sony's TGS news, Frasier Pinball, the marvels of food science, and how to survive the apocalypse. Tue, 02 Sep 2014 18:00:00 PST 1600-985 Join us as we mop up the last little bit of PAX Prime business before moving on to more pressing discussions about eating bugs, Sony's TGS news, Frasier Pinball, the marvels of food science, and how to survive the apocalypse. Join us as we mop up the last little bit of PAX Prime business before moving on to more pressing discussions about eating bugs, Sony's TGS news, Frasier Pinball, the marvels of food science, and how to survive the apocalypse. Giant Bomb no 7920 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 08/26/2014 https://www.giantbomb.com/podcasts/giant-bombcast-08-26-2014/1600-982/ Not even the earth shaking beneath our feet can stop us from talking about bad Mario Kart tournaments, Infamous: First Light, the feasibility of Star Citizen, the Amazon/Twitch deal, Smash Bros. leaks, and another of Dan's awful, awful stories. Tue, 26 Aug 2014 18:00:00 PST 1600-982 Not even the earth shaking beneath our feet can stop us from talking about bad Mario Kart tournaments, Infamous: First Light, the feasibility of Star Citizen, the Amazon/Twitch deal, Smash Bros. leaks, and another of Dan's awful, awful stories. Not even the earth shaking beneath our feet can stop us from talking about bad Mario Kart tournaments, Infamous: First Light, the feasibility of Star Citizen, the Amazon/Twitch deal, Smash Bros. leaks, and another of Dan's awful, awful stories. Giant Bomb no 7920 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 08/19/2014 https://www.giantbomb.com/podcasts/giant-bombcast-08-19-2014/1600-974/ With Dan out at SummerSlam, Matt Rorie joins us to... have a lengthy conversation about professional wrestling, not to mention discussions of platform exclusivity, the Gamescom meat grinder, John Romero's return to shooters, and how to protect your virtua Tue, 19 Aug 2014 13:30:00 PST 1600-974 With Dan out at SummerSlam, Matt Rorie joins us to... have a lengthy conversation about professional wrestling, not to mention discussions of platform exclusivity, the Gamescom meat grinder, John Romero's return to shooters, and how to protect your virtua With Dan out at SummerSlam, Matt Rorie joins us to... have a lengthy conversation about professional wrestling, not to mention discussions of platform exclusivity, the Gamescom meat grinder, John Romero's return to shooters, and how to protect your virtua Giant Bomb no 7920 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 08/12/2014 https://www.giantbomb.com/podcasts/giant-bombcast-08-12-2014/1600-965/ Jeff is back in the office...just long enough to tell us about his budding career as a pro Blitzball player. Brad played games other than Dota. Drew did battle in Golden Gate Park. Dan's been hanging out with the riff raff again. All this, plus your scari Tue, 12 Aug 2014 17:00:00 PST 1600-965 Jeff is back in the office...just long enough to tell us about his budding career as a pro Blitzball player. Brad played games other than Dota. Drew did battle in Golden Gate Park. Dan's been hanging out with the riff raff again. All this, plus your scari Jeff is back in the office...just long enough to tell us about his budding career as a pro Blitzball player. Brad played games other than Dota. Drew did battle in Golden Gate Park. Dan's been hanging out with the riff raff again. All this, plus your scari Giant Bomb no 12503 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 08/05/2014 https://www.giantbomb.com/podcasts/giant-bombcast-08-05-2014/1600-957/ Newly minted Sony company man John T. Drake has completed his cross-country trek just in time to discuss the mystery of Matt Kessler, the riddle of Dan Ryckert, the curse of historic Barkerville, and the dilemma of Dwayne Johnson. Tue, 05 Aug 2014 17:00:00 PST 1600-957 Newly minted Sony company man John T. Drake has completed his cross-country trek just in time to discuss the mystery of Matt Kessler, the riddle of Dan Ryckert, the curse of historic Barkerville, and the dilemma of Dwayne Johnson. Newly minted Sony company man John T. Drake has completed his cross-country trek just in time to discuss the mystery of Matt Kessler, the riddle of Dan Ryckert, the curse of historic Barkerville, and the dilemma of Dwayne Johnson. Giant Bomb no 11198 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07/29/2014 https://www.giantbomb.com/podcasts/giant-bombcast-07-29-2014/1600-949/ We're live from the great state of Silicon Valley, USA with a hot list of summer tips to keep your water usage cool and conservational! Then you can beat the heat with the latest on Firefall, Destiny, Velvet Sundown, The Last of Us Remastered, and the end Tue, 29 Jul 2014 14:30:00 PST 1600-949 We're live from the great state of Silicon Valley, USA with a hot list of summer tips to keep your water usage cool and conservational! Then you can beat the heat with the latest on Firefall, Destiny, Velvet Sundown, The Last of Us Remastered, and the end We're live from the great state of Silicon Valley, USA with a hot list of summer tips to keep your water usage cool and conservational! Then you can beat the heat with the latest on Firefall, Destiny, Velvet Sundown, The Last of Us Remastered, and the end Giant Bomb no 11657 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07/22/2014 https://www.giantbomb.com/podcasts/giant-bombcast-07-22-2014/1600-941/ Brad's fresh off a plane from The International 4 to talk about rare couriers! Oh, and also Dota 2. Drew is a Ghostship Snowpiercer. Jeff plays too much bingo. Dan Ryckert doesn't know how to cook. Plus your incredible edible emails! Tue, 22 Jul 2014 21:00:00 PST 1600-941 Brad's fresh off a plane from The International 4 to talk about rare couriers! Oh, and also Dota 2. Drew is a Ghostship Snowpiercer. Jeff plays too much bingo. Dan Ryckert doesn't know how to cook. Plus your incredible edible emails! Brad's fresh off a plane from The International 4 to talk about rare couriers! Oh, and also Dota 2. Drew is a Ghostship Snowpiercer. Jeff plays too much bingo. Dan Ryckert doesn't know how to cook. Plus your incredible edible emails! Giant Bomb no 13370 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07/15/2014 https://www.giantbomb.com/podcasts/giant-bombcast-07-15-2014/1600-924/ Sentris developer Samantha Kalman drops by to chat with us about GaymerX2, the value of programming, the Nintendo 64's forgotten lineup, electronic sports, the secret identity of Freezyfrog, microbial science, and Dan Ryckert's odd, odd palate. Tue, 15 Jul 2014 16:45:00 PST 1600-924 Sentris developer Samantha Kalman drops by to chat with us about GaymerX2, the value of programming, the Nintendo 64's forgotten lineup, electronic sports, the secret identity of Freezyfrog, microbial science, and Dan Ryckert's odd, odd palate. Sentris developer Samantha Kalman drops by to chat with us about GaymerX2, the value of programming, the Nintendo 64's forgotten lineup, electronic sports, the secret identity of Freezyfrog, microbial science, and Dan Ryckert's odd, odd palate. Giant Bomb no 9021 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07/08/2014 https://www.giantbomb.com/podcasts/giant-bombcast-07-08-2014/1600-918/ July rages on with discussion of important games like horseshoes. Also we discuss Cliff Blezinski's new operation, Gearbox's new hobby-grade meta-growth video gaming product, Destiny's ninety different versions, Mighty No. 9's hat-passing techniques, and Tue, 08 Jul 2014 18:49:00 PST 1600-918 July rages on with discussion of important games like horseshoes. Also we discuss Cliff Blezinski's new operation, Gearbox's new hobby-grade meta-growth video gaming product, Destiny's ninety different versions, Mighty No. 9's hat-passing techniques, and July rages on with discussion of important games like horseshoes. Also we discuss Cliff Blezinski's new operation, Gearbox's new hobby-grade meta-growth video gaming product, Destiny's ninety different versions, Mighty No. 9's hat-passing techniques, and Giant Bomb no 8112 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07/01/2014 https://www.giantbomb.com/podcasts/giant-bombcast-07-01-2014/1600-915/ Brad returns from vacation to discuss his handheld travel adventures while Jeff and Drew wax poetic about the news of the week, shooting Nazis in their privates, buying Japanese PSN games, and your emails. This week: Why can't Jeff stop playing Marvel Her Mon, 30 Jun 2014 18:11:00 PST 1600-915 Brad returns from vacation to discuss his handheld travel adventures while Jeff and Drew wax poetic about the news of the week, shooting Nazis in their privates, buying Japanese PSN games, and your emails. This week: Why can't Jeff stop playing Marvel Her Brad returns from vacation to discuss his handheld travel adventures while Jeff and Drew wax poetic about the news of the week, shooting Nazis in their privates, buying Japanese PSN games, and your emails. This week: Why can't Jeff stop playing Marvel Her Giant Bomb no 7549 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 06/24/2014 https://www.giantbomb.com/podcasts/giant-bombcast-06-24-2014/1600-905/ Drew and Jeff are joined by a pair of guests as we discuss table flipping arcade games, the mysterious appearance of Vince, EA's UFC, Primal Rage 2, floppy disk versions of Strider, and "football." Tue, 24 Jun 2014 14:51:00 PST 1600-905 Drew and Jeff are joined by a pair of guests as we discuss table flipping arcade games, the mysterious appearance of Vince, EA's UFC, Primal Rage 2, floppy disk versions of Strider, and "football." Drew and Jeff are joined by a pair of guests as we discuss table flipping arcade games, the mysterious appearance of Vince, EA's UFC, Primal Rage 2, floppy disk versions of Strider, and "football." Giant Bomb no 7981 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 06/17/2014 https://www.giantbomb.com/podcasts/giant-bombcast-06-17-2014/1600-900/ E3 2014 has come and gone, and we're left to pick up the pieces with further ruminations on No Man's Sky, Battlefield Hardline, Far Cry 4, and Destiny, along with Drew's weekend combat experience, Danny's Irish plague, Rorie's E3 at home, and the one emai Tue, 17 Jun 2014 18:30:00 PST 1600-900 E3 2014 has come and gone, and we're left to pick up the pieces with further ruminations on No Man's Sky, Battlefield Hardline, Far Cry 4, and Destiny, along with Drew's weekend combat experience, Danny's Irish plague, Rorie's E3 at home, and the one emai E3 2014 has come and gone, and we're left to pick up the pieces with further ruminations on No Man's Sky, Battlefield Hardline, Far Cry 4, and Destiny, along with Drew's weekend combat experience, Danny's Irish plague, Rorie's E3 at home, and the one emai Giant Bomb no 8594 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS E3 2014: Day Three LIVE! https://www.giantbomb.com/podcasts/e3-2014-day-three-live/1600-896/ We close out the show with our impressions and a lineup of guests that includes Ed Boon, Zoe Quinn, Geoff Keighley, Alexa Ray Corriea, Josh Sawyer, Abbie Heppe, Rami Ismail, Paul Barnett, and more! Fri, 13 Jun 2014 13:48:00 PST 1600-896 We close out the show with our impressions and a lineup of guests that includes Ed Boon, Zoe Quinn, Geoff Keighley, Alexa Ray Corriea, Josh Sawyer, Abbie Heppe, Rami Ismail, Paul Barnett, and more! We close out the show with our impressions and a lineup of guests that includes Ed Boon, Zoe Quinn, Geoff Keighley, Alexa Ray Corriea, Josh Sawyer, Abbie Heppe, Rami Ismail, Paul Barnett, and more! Giant Bomb no 13506 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS E3 2014: Day Two LIVE! https://www.giantbomb.com/podcasts/e3-2014-day-two-live/1600-894/ We're joined by Some Brothers McElroy, Cara Ellison, Casey Lynch, Mikey Neumann, Beef O'Brady, Seth Killian, Wes Phillips, Jeremy Hoffman, Chris Charla, Mike Mika, Dennis Wedin, Nathan Vella, Kris Piotrowski, Greg Rice, Rayme Vinson, Abbie Heppe, and more Thu, 12 Jun 2014 13:39:00 PST 1600-894 We're joined by Some Brothers McElroy, Cara Ellison, Casey Lynch, Mikey Neumann, Beef O'Brady, Seth Killian, Wes Phillips, Jeremy Hoffman, Chris Charla, Mike Mika, Dennis Wedin, Nathan Vella, Kris Piotrowski, Greg Rice, Rayme Vinson, Abbie Heppe, and more We're joined by Some Brothers McElroy, Cara Ellison, Casey Lynch, Mikey Neumann, Beef O'Brady, Seth Killian, Wes Phillips, Jeremy Hoffman, Chris Charla, Mike Mika, Dennis Wedin, Nathan Vella, Kris Piotrowski, Greg Rice, Rayme Vinson, Abbie Heppe, and more Giant Bomb no 11953 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS E3 2014: Day One LIVE! https://www.giantbomb.com/podcasts/e3-2014-day-one-live/1600-892/ We're joined by Palmer Luckey, Shuhei Yoshida, Phil Spencer, Dave Lang, Adam Boyes, Greg Kasavin, Sean Murray, John Mamais, and a host of additional luminaries as our first day of E3 2014 wraps up! Wed, 11 Jun 2014 12:39:00 PST 1600-892 We're joined by Palmer Luckey, Shuhei Yoshida, Phil Spencer, Dave Lang, Adam Boyes, Greg Kasavin, Sean Murray, John Mamais, and a host of additional luminaries as our first day of E3 2014 wraps up! We're joined by Palmer Luckey, Shuhei Yoshida, Phil Spencer, Dave Lang, Adam Boyes, Greg Kasavin, Sean Murray, John Mamais, and a host of additional luminaries as our first day of E3 2014 wraps up! Giant Bomb no 9858 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 06/10/2014: E3 Preview and Predictions! https://www.giantbomb.com/podcasts/giant-bombcast-06-10-2014-e3-preview-and-predictio/1600-888/ We gather together the week before E3 to cover the games Jeff saw during his pre-show sojourn and make a bunch of very half-cocked predictions. Listen in to see just how wrong we were! Tue, 10 Jun 2014 12:00:00 PST 1600-888 We gather together the week before E3 to cover the games Jeff saw during his pre-show sojourn and make a bunch of very half-cocked predictions. Listen in to see just how wrong we were! We gather together the week before E3 to cover the games Jeff saw during his pre-show sojourn and make a bunch of very half-cocked predictions. Listen in to see just how wrong we were! Giant Bomb no 8970 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS E3 2014: Day Zero Wrap-Up! https://www.giantbomb.com/podcasts/e3-2014-day-zero-wrap-up/1600-890/ The press conferences are over and we're wrapping up with friends from 8-4, Harmonix, and more! Tue, 10 Jun 2014 08:44:00 PST 1600-890 The press conferences are over and we're wrapping up with friends from 8-4, Harmonix, and more! The press conferences are over and we're wrapping up with friends from 8-4, Harmonix, and more! Giant Bomb no 0 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 06/03/2014 https://www.giantbomb.com/podcasts/giant-bombcast-06-03-2014/1600-882/ It's the week before E3 and we're just going to shout "Pushmo World" over and over again. OK, well, maybe we'll talk a bit about Batman: Arkham Knight, Mortal Kombat X, Sonic Boom, Mario Kart 8, Battlefield Hardline, Forza Horizon 2, PSO2's English chance Tue, 03 Jun 2014 17:59:00 PST 1600-882 It's the week before E3 and we're just going to shout "Pushmo World" over and over again. OK, well, maybe we'll talk a bit about Batman: Arkham Knight, Mortal Kombat X, Sonic Boom, Mario Kart 8, Battlefield Hardline, Forza Horizon 2, PSO2's English chance It's the week before E3 and we're just going to shout "Pushmo World" over and over again. OK, well, maybe we'll talk a bit about Batman: Arkham Knight, Mortal Kombat X, Sonic Boom, Mario Kart 8, Battlefield Hardline, Forza Horizon 2, PSO2's English chance Giant Bomb no 9450 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 05/27/2014 https://www.giantbomb.com/podcasts/giant-bombcast-05-27-2014/1600-876/ Games, games, games! We're talking about Watch Dogs, we're talking about The Order, we're talking about Driveclub, we're talking about The Evil Within, Lego Batman 3, UFC, Middle-earth: Shadow of Mordor, Evolve, the process of packing and moving, French v Tue, 27 May 2014 14:10:00 PST 1600-876 Games, games, games! We're talking about Watch Dogs, we're talking about The Order, we're talking about Driveclub, we're talking about The Evil Within, Lego Batman 3, UFC, Middle-earth: Shadow of Mordor, Evolve, the process of packing and moving, French v Games, games, games! We're talking about Watch Dogs, we're talking about The Order, we're talking about Driveclub, we're talking about The Evil Within, Lego Batman 3, UFC, Middle-earth: Shadow of Mordor, Evolve, the process of packing and moving, French v Giant Bomb no 9497 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 05/20/2014 https://www.giantbomb.com/podcasts/giant-bombcast-05-20-2014/1600-874/ We break down the latest details in the Grand Giant Bomb Expansion Plan and then cover the Kinectless Xbox One, the relevance of E3, Nintendo's Wi-Fi Connection (or lack thereof), Rockstar, Superhot, Far Cry 4, that Halo stuff, Night Trap, and your emails Tue, 20 May 2014 19:58:00 PST 1600-874 We break down the latest details in the Grand Giant Bomb Expansion Plan and then cover the Kinectless Xbox One, the relevance of E3, Nintendo's Wi-Fi Connection (or lack thereof), Rockstar, Superhot, Far Cry 4, that Halo stuff, Night Trap, and your emails We break down the latest details in the Grand Giant Bomb Expansion Plan and then cover the Kinectless Xbox One, the relevance of E3, Nintendo's Wi-Fi Connection (or lack thereof), Rockstar, Superhot, Far Cry 4, that Halo stuff, Night Trap, and your emails Giant Bomb no 11590 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 05/13/2014 https://www.giantbomb.com/podcasts/giant-bombcast-05-13-2014/1600-869/ Greg Kasavin and Danny O'Dwyer join us as we talk about Super Time Force, Sunset Overdrive, releasing a game, Eurovision, butt holes in your wall, and how many pillows is enough pillows. Tue, 13 May 2014 19:00:00 PST 1600-869 Greg Kasavin and Danny O'Dwyer join us as we talk about Super Time Force, Sunset Overdrive, releasing a game, Eurovision, butt holes in your wall, and how many pillows is enough pillows. Greg Kasavin and Danny O'Dwyer join us as we talk about Super Time Force, Sunset Overdrive, releasing a game, Eurovision, butt holes in your wall, and how many pillows is enough pillows. Giant Bomb no 9981 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 05/06/2014 https://www.giantbomb.com/podcasts/giant-bombcast-05-06-2014/1600-860/ The Giant Bomb Gang reconvenes to discuss the proper lineage of Datel's cheat devices, that Kevin Spacey Call of Duty thing, Sony's grip of indie announcements, DIsney's Marvel thing, the ambitions of Zenimax's legal team, and all that. Tue, 06 May 2014 14:16:00 PST 1600-860 The Giant Bomb Gang reconvenes to discuss the proper lineage of Datel's cheat devices, that Kevin Spacey Call of Duty thing, Sony's grip of indie announcements, DIsney's Marvel thing, the ambitions of Zenimax's legal team, and all that. The Giant Bomb Gang reconvenes to discuss the proper lineage of Datel's cheat devices, that Kevin Spacey Call of Duty thing, Sony's grip of indie announcements, DIsney's Marvel thing, the ambitions of Zenimax's legal team, and all that. Giant Bomb no 9636 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 04/29/2014 https://www.giantbomb.com/podcasts/giant-bombcast-04-29-2014/1600-851/ We get ourselves into a room and discuss landfill diving for old video games, The Amazing Spider-Man 2, James Bond making out with imaginary ladies, firebombs, the new Skylanders, Colorado's view of Dave Lang, Vinny's hometown, and more! Tue, 29 Apr 2014 19:17:00 PST 1600-851 We get ourselves into a room and discuss landfill diving for old video games, The Amazing Spider-Man 2, James Bond making out with imaginary ladies, firebombs, the new Skylanders, Colorado's view of Dave Lang, Vinny's hometown, and more! We get ourselves into a room and discuss landfill diving for old video games, The Amazing Spider-Man 2, James Bond making out with imaginary ladies, firebombs, the new Skylanders, Colorado's view of Dave Lang, Vinny's hometown, and more! Giant Bomb no 9615 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 04/22/2014 https://www.giantbomb.com/podcasts/giant-bombcast-04-22-2014/1600-839/ We briefly celebrate the anniversary of the Game Boy and get into a little Trials Fusion before trying to figure out what the heck is happening over at Naughty Dog, what the heck is happening over at Bungie, and what the heck is up with Spider-Man on the Tue, 22 Apr 2014 17:05:00 PST 1600-839 We briefly celebrate the anniversary of the Game Boy and get into a little Trials Fusion before trying to figure out what the heck is happening over at Naughty Dog, what the heck is happening over at Bungie, and what the heck is up with Spider-Man on the We briefly celebrate the anniversary of the Game Boy and get into a little Trials Fusion before trying to figure out what the heck is happening over at Naughty Dog, what the heck is happening over at Bungie, and what the heck is up with Spider-Man on the Giant Bomb no 8476 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 04/15/2014 https://www.giantbomb.com/podcasts/giant-bombcast-04-15-2014/1600-831/ A trio of Giant Bomb compadres compare notes on PAX East 2014, Wrestlemania 2000, tank simulators, Trials Fusion, Snoop Dogg's latest release, Johnny Gat's latest cameo, drinking soda in front of a camera, and more stuff! Tue, 15 Apr 2014 17:30:00 PST 1600-831 A trio of Giant Bomb compadres compare notes on PAX East 2014, Wrestlemania 2000, tank simulators, Trials Fusion, Snoop Dogg's latest release, Johnny Gat's latest cameo, drinking soda in front of a camera, and more stuff! A trio of Giant Bomb compadres compare notes on PAX East 2014, Wrestlemania 2000, tank simulators, Trials Fusion, Snoop Dogg's latest release, Johnny Gat's latest cameo, drinking soda in front of a camera, and more stuff! Giant Bomb no 7372 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 04/08/2014 https://www.giantbomb.com/podcasts/giant-bombcast-04-08-2014/1600-825/ Brad returns from the wilderness of his mind to talk with us about Dark Souls II for the PC, that new Batman game, Amy Hennig's new Star Wars gig, the fine art of launching missiles, the appeal of Dynasty Warriors, our PAX East plans, Amazon's new Fire TV Tue, 08 Apr 2014 00:01:00 PST 1600-825 Brad returns from the wilderness of his mind to talk with us about Dark Souls II for the PC, that new Batman game, Amy Hennig's new Star Wars gig, the fine art of launching missiles, the appeal of Dynasty Warriors, our PAX East plans, Amazon's new Fire TV Brad returns from the wilderness of his mind to talk with us about Dark Souls II for the PC, that new Batman game, Amy Hennig's new Star Wars gig, the fine art of launching missiles, the appeal of Dynasty Warriors, our PAX East plans, Amazon's new Fire TV Giant Bomb no 8253 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 04/01/2014 https://www.giantbomb.com/podcasts/giant-bombcast-04-01-2014/1600-814/ Illness befalls the Giant Bomb office and Vinny, Drew, and Jeff must soldier on to discuss Facebook's purchase of the Oculus Rift, Diablo III's new adventure mode, Elder Scrolls Online, the budding conflict between Liverpool and Manchester by way of Japan Tue, 01 Apr 2014 11:00:00 PST 1600-814 Illness befalls the Giant Bomb office and Vinny, Drew, and Jeff must soldier on to discuss Facebook's purchase of the Oculus Rift, Diablo III's new adventure mode, Elder Scrolls Online, the budding conflict between Liverpool and Manchester by way of Japan Illness befalls the Giant Bomb office and Vinny, Drew, and Jeff must soldier on to discuss Facebook's purchase of the Oculus Rift, Diablo III's new adventure mode, Elder Scrolls Online, the budding conflict between Liverpool and Manchester by way of Japan Giant Bomb no 9497 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03/25/2014 https://www.giantbomb.com/podcasts/giant-bombcast-03-25-2014/1600-809/ We clear away the post-GDC haze to discuss Sony's virtual reality plans, Metal Gear Solid V: Ground Zeroes, Arrowhead's new Gauntlet reboot, hot firmware updates, Infamous: Second Son, and another batch of profoundly terrible listener mail. Tue, 25 Mar 2014 16:12:00 PST 1600-809 We clear away the post-GDC haze to discuss Sony's virtual reality plans, Metal Gear Solid V: Ground Zeroes, Arrowhead's new Gauntlet reboot, hot firmware updates, Infamous: Second Son, and another batch of profoundly terrible listener mail. We clear away the post-GDC haze to discuss Sony's virtual reality plans, Metal Gear Solid V: Ground Zeroes, Arrowhead's new Gauntlet reboot, hot firmware updates, Infamous: Second Son, and another batch of profoundly terrible listener mail. Giant Bomb no 9182 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03/18/2014 https://www.giantbomb.com/podcasts/giant-bombcast-03-18-2014/1600-799/ We get a Chicago double as Patrick Klepek comes home to the Giant Bombcast for GDC week! Also, he brought Iron Galaxy's Dave Lang with him, and we discuss Luftrausers, Metal Gear Solid: Ground Zeroes, Dark Souls 2, and real steps you can take to make Wind Tue, 18 Mar 2014 10:30:00 PST 1600-799 We get a Chicago double as Patrick Klepek comes home to the Giant Bombcast for GDC week! Also, he brought Iron Galaxy's Dave Lang with him, and we discuss Luftrausers, Metal Gear Solid: Ground Zeroes, Dark Souls 2, and real steps you can take to make Wind We get a Chicago double as Patrick Klepek comes home to the Giant Bombcast for GDC week! Also, he brought Iron Galaxy's Dave Lang with him, and we discuss Luftrausers, Metal Gear Solid: Ground Zeroes, Dark Souls 2, and real steps you can take to make Wind Giant Bomb no 11935 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03/11/2014 https://www.giantbomb.com/podcasts/giant-bombcast-03-11-2014/1600-790/ Drummer, professional traveler, and apparent Grim Reaper John Drake joins us to discuss the horrible things he's seen on the road, the release of Titanfall, the continued non-release of Driveclub, the release of Amy Hennig, the release of Jack Tretton, th Tue, 11 Mar 2014 16:45:00 PST 1600-790 Drummer, professional traveler, and apparent Grim Reaper John Drake joins us to discuss the horrible things he's seen on the road, the release of Titanfall, the continued non-release of Driveclub, the release of Amy Hennig, the release of Jack Tretton, th Drummer, professional traveler, and apparent Grim Reaper John Drake joins us to discuss the horrible things he's seen on the road, the release of Titanfall, the continued non-release of Driveclub, the release of Amy Hennig, the release of Jack Tretton, th Giant Bomb no 9983 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03/04/2014 https://www.giantbomb.com/podcasts/giant-bombcast-03-04-2014/1600-781/ Your favorite Australian fashion podcast returns with a special video-game-themed episode! Thong talk alongside discussion of South Park, Castlevania: Lords of Shadow 2, the Diablo III patch, Loadout, and more? Sounds like a good time, mate! Koala bears. Tue, 04 Mar 2014 19:03:00 PST 1600-781 Your favorite Australian fashion podcast returns with a special video-game-themed episode! Thong talk alongside discussion of South Park, Castlevania: Lords of Shadow 2, the Diablo III patch, Loadout, and more? Sounds like a good time, mate! Koala bears. Your favorite Australian fashion podcast returns with a special video-game-themed episode! Thong talk alongside discussion of South Park, Castlevania: Lords of Shadow 2, the Diablo III patch, Loadout, and more? Sounds like a good time, mate! Koala bears. Giant Bomb no 9611 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 02/25/2014 https://www.giantbomb.com/podcasts/giant-bombcast-02-25-2014/1600-773/ Things heat up as the release calendar intensifies, forcing us to discuss hot new releases such as Thief, Plants vs. Zombies Garden Warfare, Castlevania: Lords of Shadow 2, Epic Pinball, and Tyrian. Tue, 25 Feb 2014 16:08:00 PST 1600-773 Things heat up as the release calendar intensifies, forcing us to discuss hot new releases such as Thief, Plants vs. Zombies Garden Warfare, Castlevania: Lords of Shadow 2, Epic Pinball, and Tyrian. Things heat up as the release calendar intensifies, forcing us to discuss hot new releases such as Thief, Plants vs. Zombies Garden Warfare, Castlevania: Lords of Shadow 2, Epic Pinball, and Tyrian. Giant Bomb no 12713 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 02/18/2014 https://www.giantbomb.com/podcasts/giant-bombcast-02-18-2014/1600-761/ Vinny leaves his home in search of information about the upcoming human/cyborg conflict while Jeff stays home to type "start" into a Twitch chat window over and over again. Drew flies a plane. Oh, and Brad Shoemaker rushes in to talk about that DLC for Th Tue, 18 Feb 2014 18:17:00 PST 1600-761 Vinny leaves his home in search of information about the upcoming human/cyborg conflict while Jeff stays home to type "start" into a Twitch chat window over and over again. Drew flies a plane. Oh, and Brad Shoemaker rushes in to talk about that DLC for Th Vinny leaves his home in search of information about the upcoming human/cyborg conflict while Jeff stays home to type "start" into a Twitch chat window over and over again. Drew flies a plane. Oh, and Brad Shoemaker rushes in to talk about that DLC for Th Giant Bomb no 10637 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 02/11/2014 https://www.giantbomb.com/podcasts/giant-bombcast-02-11-2014/1600-755/ The podcast gang reforms to discuss Super Metroid. Oh, and also Bravely Default, more horrific workplace nudity, Dungeon Keeper (not that one, the other one), Jeff's trip to the DICE Summit, Titanfall on the Xbox 360, the business of arcade games in laund Tue, 11 Feb 2014 16:24:00 PST 1600-755 The podcast gang reforms to discuss Super Metroid. Oh, and also Bravely Default, more horrific workplace nudity, Dungeon Keeper (not that one, the other one), Jeff's trip to the DICE Summit, Titanfall on the Xbox 360, the business of arcade games in laund The podcast gang reforms to discuss Super Metroid. Oh, and also Bravely Default, more horrific workplace nudity, Dungeon Keeper (not that one, the other one), Jeff's trip to the DICE Summit, Titanfall on the Xbox 360, the business of arcade games in laund Giant Bomb no 12483 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 02/04/2014 https://www.giantbomb.com/podcasts/giant-bombcast-02-04-2014/1600-750/ Will Smith and Dave Snider join us as we swap tales of games, space battles, and workplace nightmare scenarios. Everything a good woodworking podcast needs. Tue, 04 Feb 2014 20:47:00 PST 1600-750 Will Smith and Dave Snider join us as we swap tales of games, space battles, and workplace nightmare scenarios. Everything a good woodworking podcast needs. Will Smith and Dave Snider join us as we swap tales of games, space battles, and workplace nightmare scenarios. Everything a good woodworking podcast needs. Giant Bomb no 11391 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 01/28/2014 https://www.giantbomb.com/podcasts/giant-bombcast-01-28-2014/1600-741/ Vinny practices The Castle Doctrine while Jeff makes a serious attempt to become a Strider. Meanwhile, Drew gets into something wild while Brad continues to suffer from a crippling MOBA addiction. Also, we talk Nintendo, getting "Genesis big," Las Vegas, Tue, 28 Jan 2014 12:30:00 PST 1600-741 Vinny practices The Castle Doctrine while Jeff makes a serious attempt to become a Strider. Meanwhile, Drew gets into something wild while Brad continues to suffer from a crippling MOBA addiction. Also, we talk Nintendo, getting "Genesis big," Las Vegas, Vinny practices The Castle Doctrine while Jeff makes a serious attempt to become a Strider. Meanwhile, Drew gets into something wild while Brad continues to suffer from a crippling MOBA addiction. Also, we talk Nintendo, getting "Genesis big," Las Vegas, Giant Bomb no 9454 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 01/21/2014 https://www.giantbomb.com/podcasts/giant-bombcast-01-21-2014/1600-730/ Giant Bomb checks in this week with timely coverage of Dark Souls, Broken Age, OlliOlli, Beyond 2000, cataloguing your classics, how to kill the teens of Maniac Mansion, and the precise number of Atari 2600s a person should own. Tue, 21 Jan 2014 20:59:00 PST 1600-730 Giant Bomb checks in this week with timely coverage of Dark Souls, Broken Age, OlliOlli, Beyond 2000, cataloguing your classics, how to kill the teens of Maniac Mansion, and the precise number of Atari 2600s a person should own. Giant Bomb checks in this week with timely coverage of Dark Souls, Broken Age, OlliOlli, Beyond 2000, cataloguing your classics, how to kill the teens of Maniac Mansion, and the precise number of Atari 2600s a person should own. Giant Bomb no 10764 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 01/14/2014 https://www.giantbomb.com/podcasts/giant-bombcast-01-14-2014/1600-725/ The health experts at Giant Bomb finally wade into the flu vaccine debate, then we discuss the deeper nuances of Action Biker for the Commodore 64, some of this Dota 2 business, and end up talking about Ryu's magical/not-magical abilities some more. Tue, 14 Jan 2014 14:21:00 PST 1600-725 The health experts at Giant Bomb finally wade into the flu vaccine debate, then we discuss the deeper nuances of Action Biker for the Commodore 64, some of this Dota 2 business, and end up talking about Ryu's magical/not-magical abilities some more. The health experts at Giant Bomb finally wade into the flu vaccine debate, then we discuss the deeper nuances of Action Biker for the Commodore 64, some of this Dota 2 business, and end up talking about Ryu's magical/not-magical abilities some more. Giant Bomb no 12174 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 01/07/2014 https://www.giantbomb.com/podcasts/giant-bombcast-01-07-2014/1600-714/ It's CES week, so you know that means it's time to talk televisions! Get down and dirty with our resolution resolutions for 2014... or should we say 2014K????? Because 4K televisions, you know? Anyway, video games. Tue, 07 Jan 2014 00:00:00 PST 1600-714 It's CES week, so you know that means it's time to talk televisions! Get down and dirty with our resolution resolutions for 2014... or should we say 2014K????? Because 4K televisions, you know? Anyway, video games. It's CES week, so you know that means it's time to talk televisions! Get down and dirty with our resolution resolutions for 2014... or should we say 2014K????? Because 4K televisions, you know? Anyway, video games. Giant Bomb no 10738 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 12/31/2013 https://www.giantbomb.com/podcasts/giant-bombcast-12-31-2013/1600-713/ This episode of the Giant Bombcast was filmed live in front of a webcam audience. The audio is pretty rough for the first five minutes, then it gets better. But it's still not as good as it sounds when we're in a studio, because we weren't in a studio. Th Mon, 30 Dec 2013 20:24:00 PST 1600-713 This episode of the Giant Bombcast was filmed live in front of a webcam audience. The audio is pretty rough for the first five minutes, then it gets better. But it's still not as good as it sounds when we're in a studio, because we weren't in a studio. Th This episode of the Giant Bombcast was filmed live in front of a webcam audience. The audio is pretty rough for the first five minutes, then it gets better. But it's still not as good as it sounds when we're in a studio, because we weren't in a studio. Th Giant Bomb no 6751 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bomb Game of the Year 2013: Day Five https://www.giantbomb.com/podcasts/giant-bomb-game-of-the-year-2013-day-five/1600-708/ The final day is upon us, so sit down and get angry as we determine Giant Bomb's Best Horror Game, "Please Stop," Worst Game, and Best Game. Best game! Fri, 27 Dec 2013 10:00:00 PST 1600-708 The final day is upon us, so sit down and get angry as we determine Giant Bomb's Best Horror Game, "Please Stop," Worst Game, and Best Game. Best game! The final day is upon us, so sit down and get angry as we determine Giant Bomb's Best Horror Game, "Please Stop," Worst Game, and Best Game. Best game! Giant Bomb no 12076 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bomb Game of the Year 2013: Day Four https://www.giantbomb.com/podcasts/giant-bomb-game-of-the-year-2013-day-four/1600-707/ Day four is here and it's time to talk about 2013's Hottest Mess, Best Moment or Sequence, Best Use of a Licensed Song, and the Biggest News. Thu, 26 Dec 2013 10:00:00 PST 1600-707 Day four is here and it's time to talk about 2013's Hottest Mess, Best Moment or Sequence, Best Use of a Licensed Song, and the Biggest News. Day four is here and it's time to talk about 2013's Hottest Mess, Best Moment or Sequence, Best Use of a Licensed Song, and the Biggest News. Giant Bomb no 6975 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bomb Game of the Year 2013: Day Three https://www.giantbomb.com/podcasts/giant-bomb-game-of-the-year-2013-day-three/1600-706/ Strap in and prepare yourself as we get set to debate Best Exclusive Launch Game, Apology of the Year, Best Trend, and Best Debut. Wed, 25 Dec 2013 10:00:00 PST 1600-706 Strap in and prepare yourself as we get set to debate Best Exclusive Launch Game, Apology of the Year, Best Trend, and Best Debut. Strap in and prepare yourself as we get set to debate Best Exclusive Launch Game, Apology of the Year, Best Trend, and Best Debut. Giant Bomb no 5879 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bomb Game of the Year 2013: Day Two https://www.giantbomb.com/podcasts/giant-bomb-game-of-the-year-2013-day-two/1600-705/ Giant Bomb's deliberations continue as we determine the winners of Best Story, Best Music, Most Disappointing Game, and Best New Character. Tue, 24 Dec 2013 10:00:00 PST 1600-705 Giant Bomb's deliberations continue as we determine the winners of Best Story, Best Music, Most Disappointing Game, and Best New Character. Giant Bomb's deliberations continue as we determine the winners of Best Story, Best Music, Most Disappointing Game, and Best New Character. Giant Bomb no 8488 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bomb Game of the Year 2013: Day One https://www.giantbomb.com/podcasts/giant-bomb-game-of-the-year-2013-day-one/1600-704/ We convene to determine the winners of 2013’s Old Game of the Year, URL of the Year, Best Surprise, and Best-Looking Game as this year's Game of the Year presentation commences! Mon, 23 Dec 2013 10:00:00 PST 1600-704 We convene to determine the winners of 2013’s Old Game of the Year, URL of the Year, Best Surprise, and Best-Looking Game as this year's Game of the Year presentation commences! We convene to determine the winners of 2013’s Old Game of the Year, URL of the Year, Best Surprise, and Best-Looking Game as this year's Game of the Year presentation commences! Giant Bomb no 7489 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 12/17/2013 https://www.giantbomb.com/podcasts/giant-bombcast-12-17-2013/1600-701/ We close out the year in "typical" podcasting with one that's loaded up solid with your emails. Tue, 17 Dec 2013 12:55:00 PST 1600-701 We close out the year in "typical" podcasting with one that's loaded up solid with your emails. We close out the year in "typical" podcasting with one that's loaded up solid with your emails. Giant Bomb no 9377 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 12/10/2013 https://www.giantbomb.com/podcasts/giant-bombcast-12-10-2013/1600-695/ The crew convenes just before beginning the long trek to determine Giant Bomb's Official and Binding Game of the Year for 2013 to talk about Peggle 2, Starbound, Doki-Doki Universe, and other such video games. Tue, 10 Dec 2013 16:30:00 PST 1600-695 The crew convenes just before beginning the long trek to determine Giant Bomb's Official and Binding Game of the Year for 2013 to talk about Peggle 2, Starbound, Doki-Doki Universe, and other such video games. The crew convenes just before beginning the long trek to determine Giant Bomb's Official and Binding Game of the Year for 2013 to talk about Peggle 2, Starbound, Doki-Doki Universe, and other such video games. Giant Bomb no 10603 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 12/03/2013 https://www.giantbomb.com/podcasts/giant-bombcast-12-03-2013/1600-688/ "Eastside" Alex Navarro comes to town to discuss cold weather and trampolines, but the rest of us are on-hand to discuss video games! (Also, Thanksgiving.) Tue, 03 Dec 2013 19:28:00 PST 1600-688 "Eastside" Alex Navarro comes to town to discuss cold weather and trampolines, but the rest of us are on-hand to discuss video games! (Also, Thanksgiving.) "Eastside" Alex Navarro comes to town to discuss cold weather and trampolines, but the rest of us are on-hand to discuss video games! (Also, Thanksgiving.) Giant Bomb no 7912 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 11/26/2013 https://www.giantbomb.com/podcasts/giant-bombcast-11-26-2013/1600-679/ Atlus gets serious about another generation of video game consoles, Drew goes for a run. Brad and Vinny think about earning PP while Jeff lives the life of a pirate. Tue, 26 Nov 2013 14:44:00 PST 1600-679 Atlus gets serious about another generation of video game consoles, Drew goes for a run. Brad and Vinny think about earning PP while Jeff lives the life of a pirate. Atlus gets serious about another generation of video game consoles, Drew goes for a run. Brad and Vinny think about earning PP while Jeff lives the life of a pirate. Giant Bomb no 12706 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 11/19/2013 https://www.giantbomb.com/podcasts/giant-bombcast-11-19-2013/1600-677/ "Scoops" of the popular morning show, Scoops &amp; The Wolf, joins the team for a special video-game-themed episode, where we discuss current generation video game devices, like the Sony PlayStation 4, Microsoft Xbox One, and Nintendo Wii U. Tue, 19 Nov 2013 21:00:00 PST 1600-677 "Scoops" of the popular morning show, Scoops &amp; The Wolf, joins the team for a special video-game-themed episode, where we discuss current generation video game devices, like the Sony PlayStation 4, Microsoft Xbox One, and Nintendo Wii U. "Scoops" of the popular morning show, Scoops &amp; The Wolf, joins the team for a special video-game-themed episode, where we discuss current generation video game devices, like the Sony PlayStation 4, Microsoft Xbox One, and Nintendo Wii U. Giant Bomb no 12606 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 11/12/2013 https://www.giantbomb.com/podcasts/giant-bombcast-11-12-2013/1600-671/ Brad talks about Dota 2, Jeff shares his years of industry knowledge, and Drew recalls his weekend adventures. EVERYTHING IS UNDER CONTROL! Tue, 12 Nov 2013 20:15:00 PST 1600-671 Brad talks about Dota 2, Jeff shares his years of industry knowledge, and Drew recalls his weekend adventures. EVERYTHING IS UNDER CONTROL! Brad talks about Dota 2, Jeff shares his years of industry knowledge, and Drew recalls his weekend adventures. EVERYTHING IS UNDER CONTROL! Giant Bomb no 10094 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 11/05/2013: That's a Tuesday! https://www.giantbomb.com/podcasts/giant-bombcast-11-05-2013-that-s-a-tuesday/1600-660/ The Giant Bomb Gang reflects on its marathon livestreaming weekend while discussing deep Windjammers strats, Call of Duty For Ghosts, Kameo, that ill-advised pizza order, how to give candy to children, and a distinct lack of Diretide. Tue, 05 Nov 2013 19:44:00 PST 1600-660 The Giant Bomb Gang reflects on its marathon livestreaming weekend while discussing deep Windjammers strats, Call of Duty For Ghosts, Kameo, that ill-advised pizza order, how to give candy to children, and a distinct lack of Diretide. The Giant Bomb Gang reflects on its marathon livestreaming weekend while discussing deep Windjammers strats, Call of Duty For Ghosts, Kameo, that ill-advised pizza order, how to give candy to children, and a distinct lack of Diretide. Giant Bomb no 10489 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 10/29/2013 https://www.giantbomb.com/podcasts/giant-bombcast-10-29-2013/1600-653/ Drew gets deep into video game nudity while Vinny explores his piratical side. Jeff and Brad steal a big-rig full of beer and attempt to smuggle it into Dota City before sundown. Tue, 29 Oct 2013 16:19:00 PST 1600-653 Drew gets deep into video game nudity while Vinny explores his piratical side. Jeff and Brad steal a big-rig full of beer and attempt to smuggle it into Dota City before sundown. Drew gets deep into video game nudity while Vinny explores his piratical side. Jeff and Brad steal a big-rig full of beer and attempt to smuggle it into Dota City before sundown. Giant Bomb no 9809 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 10/22/2013 https://www.giantbomb.com/podcasts/giant-bombcast-10-22-2013/1600-649/ With Jeff out of town we get a chance to savor topics including Beyond: Two Souls, the PS4, The Stanley Parable, and our legitimate concerns about the Holodeck. It's the most grande Bombcast ever! Tue, 22 Oct 2013 14:30:00 PST 1600-649 With Jeff out of town we get a chance to savor topics including Beyond: Two Souls, the PS4, The Stanley Parable, and our legitimate concerns about the Holodeck. It's the most grande Bombcast ever! With Jeff out of town we get a chance to savor topics including Beyond: Two Souls, the PS4, The Stanley Parable, and our legitimate concerns about the Holodeck. It's the most grande Bombcast ever! Giant Bomb no 9036 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 10/15/2013 https://www.giantbomb.com/podcasts/giant-bombcast-10-15-2013/1600-643/ Jeff warns the team of the dangers of pipe dope while Vinny misses his winDOw. Brad and Drew atTempt to find new wAys 2 receive the signal. Tue, 15 Oct 2013 00:00:00 PST 1600-643 Jeff warns the team of the dangers of pipe dope while Vinny misses his winDOw. Brad and Drew atTempt to find new wAys 2 receive the signal. Jeff warns the team of the dangers of pipe dope while Vinny misses his winDOw. Brad and Drew atTempt to find new wAys 2 receive the signal. Giant Bomb no 9684 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 10/08/2013 https://www.giantbomb.com/podcasts/giant-bombcast-10-08-2013/1600-636/ Vinny attempts to live out his solo crime saga while Jeff bangs his head against Grand Theft Auto V's online component. Meanwhile, Drew learns a valuable lesson about a different kind of automotive thievery. Brad buys a Wii U in preparation for the inevit Tue, 08 Oct 2013 00:14:00 PST 1600-636 Vinny attempts to live out his solo crime saga while Jeff bangs his head against Grand Theft Auto V's online component. Meanwhile, Drew learns a valuable lesson about a different kind of automotive thievery. Brad buys a Wii U in preparation for the inevit Vinny attempts to live out his solo crime saga while Jeff bangs his head against Grand Theft Auto V's online component. Meanwhile, Drew learns a valuable lesson about a different kind of automotive thievery. Brad buys a Wii U in preparation for the inevit Giant Bomb no 10221 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 10/01/2013 https://www.giantbomb.com/podcasts/giant-bombcast-10-01-2013/1600-631/ The gang reconvenes to discuss Brad's Grand Theft Auto V vacation, Jeff's love of thunderstorms, Steam's odd future, Drew's descent into ArmA III, the power of alcohol, Vinny's voicework career, and the idea of playing Dota 2 on a controller. Tue, 01 Oct 2013 12:08:00 PST 1600-631 The gang reconvenes to discuss Brad's Grand Theft Auto V vacation, Jeff's love of thunderstorms, Steam's odd future, Drew's descent into ArmA III, the power of alcohol, Vinny's voicework career, and the idea of playing Dota 2 on a controller. The gang reconvenes to discuss Brad's Grand Theft Auto V vacation, Jeff's love of thunderstorms, Steam's odd future, Drew's descent into ArmA III, the power of alcohol, Vinny's voicework career, and the idea of playing Dota 2 on a controller. Giant Bomb no 11896 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 09/24/2013 https://www.giantbomb.com/podcasts/giant-bombcast-09-24-2013/1600-626/ With that pesky Brad Shoemaker out on vacation, we can finally get down and dirty with the rest of the team's favorite game, Dota 2. Grand Theft Auto V, America's Cup, fireworks, SteamOS, and way more video games are also discussed. Tue, 24 Sep 2013 14:42:00 PST 1600-626 With that pesky Brad Shoemaker out on vacation, we can finally get down and dirty with the rest of the team's favorite game, Dota 2. Grand Theft Auto V, America's Cup, fireworks, SteamOS, and way more video games are also discussed. With that pesky Brad Shoemaker out on vacation, we can finally get down and dirty with the rest of the team's favorite game, Dota 2. Grand Theft Auto V, America's Cup, fireworks, SteamOS, and way more video games are also discussed. Giant Bomb no 11620 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 09-17-2013 https://www.giantbomb.com/podcasts/giant-bombcast-09-17-2013/1600-615/ Jeff has some things to say about Grand Theft Auto V while Vinny attempts to talk Brad off the ledge after a dismal Dota 2 weekend. Meanwhile Drew looks on from his jet simulator, disapprovingly. Tue, 17 Sep 2013 15:45:00 PST 1600-615 Jeff has some things to say about Grand Theft Auto V while Vinny attempts to talk Brad off the ledge after a dismal Dota 2 weekend. Meanwhile Drew looks on from his jet simulator, disapprovingly. Jeff has some things to say about Grand Theft Auto V while Vinny attempts to talk Brad off the ledge after a dismal Dota 2 weekend. Meanwhile Drew looks on from his jet simulator, disapprovingly. Giant Bomb no 10136 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 09-10-2013 https://www.giantbomb.com/podcasts/giant-bombcast-09-10-2013/1600-606/ Vinny returns from vacation with a secret. Brad ponders the fate of open-world video games. Drew crashes a Jetski. Jeff looks on, disapprovingly. Dota 2 gets caught up in a liquor store heist gone horribly wrong. Tue, 10 Sep 2013 14:42:00 PST 1600-606 Vinny returns from vacation with a secret. Brad ponders the fate of open-world video games. Drew crashes a Jetski. Jeff looks on, disapprovingly. Dota 2 gets caught up in a liquor store heist gone horribly wrong. Vinny returns from vacation with a secret. Brad ponders the fate of open-world video games. Drew crashes a Jetski. Jeff looks on, disapprovingly. Dota 2 gets caught up in a liquor store heist gone horribly wrong. Giant Bomb no 11297 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 09-03-2013 https://www.giantbomb.com/podcasts/giant-bombcast-09-03-2013/1600-598/ Jeff, Brad, and Drew go over their final PAX notes to discuss Samurai Gunn, Grand Theft Auto V, Steamworld Dig, games for the Vita, extreme PAX panel injuries, D.O.T.A. II, potential butt energy, and a hot grip of your emails on this emails-focused podcas Tue, 03 Sep 2013 19:15:00 PST 1600-598 Jeff, Brad, and Drew go over their final PAX notes to discuss Samurai Gunn, Grand Theft Auto V, Steamworld Dig, games for the Vita, extreme PAX panel injuries, D.O.T.A. II, potential butt energy, and a hot grip of your emails on this emails-focused podcas Jeff, Brad, and Drew go over their final PAX notes to discuss Samurai Gunn, Grand Theft Auto V, Steamworld Dig, games for the Vita, extreme PAX panel injuries, D.O.T.A. II, potential butt energy, and a hot grip of your emails on this emails-focused podcas Giant Bomb no 8598 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 08/27/2013 https://www.giantbomb.com/podcasts/giant-bombcast-08-27-2013/1600-582/ This week's podcast gets down and dirty on the real with further discussion of submarines, Saints Row IV, Lost Planet 3, Splinter Cell, trying to buy a hybrid, Final Fantasy XIV-2, bathroom design, how to handle dust, and all the Dota 2 that you can possi Tue, 27 Aug 2013 12:37:00 PST 1600-582 This week's podcast gets down and dirty on the real with further discussion of submarines, Saints Row IV, Lost Planet 3, Splinter Cell, trying to buy a hybrid, Final Fantasy XIV-2, bathroom design, how to handle dust, and all the Dota 2 that you can possi This week's podcast gets down and dirty on the real with further discussion of submarines, Saints Row IV, Lost Planet 3, Splinter Cell, trying to buy a hybrid, Final Fantasy XIV-2, bathroom design, how to handle dust, and all the Dota 2 that you can possi Giant Bomb no 11031 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 08-20-2013 https://www.giantbomb.com/podcasts/giant-bombcast-08-20-2013/1600-558/ The gang gets together to discuss John Cena's catchphrase, the magic of Disney Infinity, the even-more-magic of krokodil, Dota 2, Gone Home, Ultima Forever vs. Plants vs. Zombies, War Thunder, GTA Online, and the value of pretending to be into football. Tue, 20 Aug 2013 14:45:00 PST 1600-558 The gang gets together to discuss John Cena's catchphrase, the magic of Disney Infinity, the even-more-magic of krokodil, Dota 2, Gone Home, Ultima Forever vs. Plants vs. Zombies, War Thunder, GTA Online, and the value of pretending to be into football. The gang gets together to discuss John Cena's catchphrase, the magic of Disney Infinity, the even-more-magic of krokodil, Dota 2, Gone Home, Ultima Forever vs. Plants vs. Zombies, War Thunder, GTA Online, and the value of pretending to be into football. Giant Bomb no 12077 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 08-13-2013 https://www.giantbomb.com/podcasts/giant-bombcast-08-13-2013/1600-549/ The Giant Bomb Podcast Gang reconvenes to talk about Microsoft's inability to commit, Vinny's ability to Pikmin, introducing new people to the Oculus Rift, and a new multiplayer online battle arena video game called Dota II. Tue, 13 Aug 2013 16:07:00 PST 1600-549 The Giant Bomb Podcast Gang reconvenes to talk about Microsoft's inability to commit, Vinny's ability to Pikmin, introducing new people to the Oculus Rift, and a new multiplayer online battle arena video game called Dota II. The Giant Bomb Podcast Gang reconvenes to talk about Microsoft's inability to commit, Vinny's ability to Pikmin, introducing new people to the Oculus Rift, and a new multiplayer online battle arena video game called Dota II. Giant Bomb no 13956 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 08-06-2013 https://www.giantbomb.com/podcasts/giant-bombcast-08-06-2013/1600-546/ We pile five-deep into a room to discuss the finer points of Uncle Luke, the magic of iRacing, Bioshock Infinite's add-ons, what it's like to speak directly to the Ultimate Warrior, beeeeeees, Atlus, and why you should NEVER bet on DBZ. Dota 2. Tue, 06 Aug 2013 11:12:00 PST 1600-546 We pile five-deep into a room to discuss the finer points of Uncle Luke, the magic of iRacing, Bioshock Infinite's add-ons, what it's like to speak directly to the Ultimate Warrior, beeeeeees, Atlus, and why you should NEVER bet on DBZ. Dota 2. We pile five-deep into a room to discuss the finer points of Uncle Luke, the magic of iRacing, Bioshock Infinite's add-ons, what it's like to speak directly to the Ultimate Warrior, beeeeeees, Atlus, and why you should NEVER bet on DBZ. Dota 2. Giant Bomb no 12666 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07-30-2013 https://www.giantbomb.com/podcasts/giant-bombcast-07-30-2013/1600-542/ The cast and crew of Giant Bomb dot com get together to discuss the PAX 10, Drew's trip to an aircraft carrier, Ridiculous Fishing, Phil Fishing, Reel Fishing, real fishing, and Valve's hot new online strategy game, Defense of the Ancients II. Tue, 30 Jul 2013 17:59:00 PST 1600-542 The cast and crew of Giant Bomb dot com get together to discuss the PAX 10, Drew's trip to an aircraft carrier, Ridiculous Fishing, Phil Fishing, Reel Fishing, real fishing, and Valve's hot new online strategy game, Defense of the Ancients II. The cast and crew of Giant Bomb dot com get together to discuss the PAX 10, Drew's trip to an aircraft carrier, Ridiculous Fishing, Phil Fishing, Reel Fishing, real fishing, and Valve's hot new online strategy game, Defense of the Ancients II. Giant Bomb no 9829 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07-23-2013 https://www.giantbomb.com/podcasts/giant-bombcast-07-23-2013/1600-537/ We let Zartan burn as we discuss the right time to release DLC, getting/being old, Rockapella, this "Dota 2" game, and that evil Nintendo salesrabbit. Tue, 23 Jul 2013 14:29:00 PST 1600-537 We let Zartan burn as we discuss the right time to release DLC, getting/being old, Rockapella, this "Dota 2" game, and that evil Nintendo salesrabbit. We let Zartan burn as we discuss the right time to release DLC, getting/being old, Rockapella, this "Dota 2" game, and that evil Nintendo salesrabbit. Giant Bomb no 13254 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07-16-2013 https://www.giantbomb.com/podcasts/giant-bombcast-07-16-2013/1600-533/ Bombcast! continues with some bootleg high-pitched music, video games to play when you barely feel like playing video games, and... Dota 2. Yeah, again. Tue, 16 Jul 2013 12:34:00 PST 1600-533 Bombcast! continues with some bootleg high-pitched music, video games to play when you barely feel like playing video games, and... Dota 2. Yeah, again. Bombcast! continues with some bootleg high-pitched music, video games to play when you barely feel like playing video games, and... Dota 2. Yeah, again. Giant Bomb no 9481 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07-09-2013 https://www.giantbomb.com/podcasts/giant-bombcast-07-09-2013/1600-530/ Giant Bomb comes together to remember our dear friend and colleague, Ryan Davis. Tue, 09 Jul 2013 21:21:00 PST 1600-530 Giant Bomb comes together to remember our dear friend and colleague, Ryan Davis. Giant Bomb comes together to remember our dear friend and colleague, Ryan Davis. Giant Bomb no 7593 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07-02-2013 https://www.giantbomb.com/podcasts/giant-bombcast-07-02-2013/1600-527/ Jeff, Brad, and Drew sit back and spin a yarn about surfing, the Saints, Don Mattrick, the infinite power of cloud magic, and... sure, numbers stations. Why not? Tue, 02 Jul 2013 18:40:00 PST 1600-527 Jeff, Brad, and Drew sit back and spin a yarn about surfing, the Saints, Don Mattrick, the infinite power of cloud magic, and... sure, numbers stations. Why not? Jeff, Brad, and Drew sit back and spin a yarn about surfing, the Saints, Don Mattrick, the infinite power of cloud magic, and... sure, numbers stations. Why not? Giant Bomb no 9489 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 06-25-2013 https://www.giantbomb.com/podcasts/giant-bombcast-06-25-2013/1600-526/ We talk The Biggest Little City, The Last of Us, the fate of Phantasy Star Online 2, virtual Slurpee machines, Ken Levine's Logan's Run, bricked PlayStation 3s, Microsoft's shocking Xbox One DRM policy revision, and more! Tue, 25 Jun 2013 18:03:00 PST 1600-526 We talk The Biggest Little City, The Last of Us, the fate of Phantasy Star Online 2, virtual Slurpee machines, Ken Levine's Logan's Run, bricked PlayStation 3s, Microsoft's shocking Xbox One DRM policy revision, and more! We talk The Biggest Little City, The Last of Us, the fate of Phantasy Star Online 2, virtual Slurpee machines, Ken Levine's Logan's Run, bricked PlayStation 3s, Microsoft's shocking Xbox One DRM policy revision, and more! Giant Bomb no 10706 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 06-18-2013 https://www.giantbomb.com/podcasts/giant-bombcast-06-18-2013/1600-519/ Before we ship Patrick off to the hot streets of Chicago, we get the gang back together to reflect on the events of E3 2013. Tue, 18 Jun 2013 19:41:00 PST 1600-519 Before we ship Patrick off to the hot streets of Chicago, we get the gang back together to reflect on the events of E3 2013. Before we ship Patrick off to the hot streets of Chicago, we get the gang back together to reflect on the events of E3 2013. Giant Bomb no 11273 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast E3 2013 Day Three https://www.giantbomb.com/podcasts/giant-bombcast-e3-2013-day-three/1600-515/ E3 2013: case closed. Fri, 14 Jun 2013 19:15:00 PST 1600-515 E3 2013: case closed. E3 2013: case closed. Giant Bomb no 11064 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast E3 2013 Day Two https://www.giantbomb.com/podcasts/giant-bombcast-e3-2013-day-two/1600-513/ We bring Cliff Bleszinski, Jonathan Blow, Vince Zampella and the Respawn team, John Drake and Eric Pope from Harmonix, and Double Fine's own Brad Muir in for questioning. Thu, 13 Jun 2013 13:16:00 PST 1600-513 We bring Cliff Bleszinski, Jonathan Blow, Vince Zampella and the Respawn team, John Drake and Eric Pope from Harmonix, and Double Fine's own Brad Muir in for questioning. We bring Cliff Bleszinski, Jonathan Blow, Vince Zampella and the Respawn team, John Drake and Eric Pope from Harmonix, and Double Fine's own Brad Muir in for questioning. Giant Bomb no 10284 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast E3 2013 Day One https://www.giantbomb.com/podcasts/giant-bombcast-e3-2013-day-one/1600-509/ Special guests from Naughty Dog, Polygon, Gearbox, Game Informer, and more join us for our first nightly wrap-up from E3 2013. Includes bonus pre-show banter! Wed, 12 Jun 2013 12:24:00 PST 1600-509 Special guests from Naughty Dog, Polygon, Gearbox, Game Informer, and more join us for our first nightly wrap-up from E3 2013. Includes bonus pre-show banter! Special guests from Naughty Dog, Polygon, Gearbox, Game Informer, and more join us for our first nightly wrap-up from E3 2013. Includes bonus pre-show banter! Giant Bomb no 11131 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast E3 2013: The Sealed Envelope https://www.giantbomb.com/podcasts/giant-bombcast-e3-2013-the-sealed-envelope/1600-502/ Recorded prior to Monday's dramatic press conferences, Jeff shares more of his Judges' Week experiences, while the whole staff makes predictions that are, in hindsight, hilarious. Tue, 11 Jun 2013 12:00:00 PST 1600-502 Recorded prior to Monday's dramatic press conferences, Jeff shares more of his Judges' Week experiences, while the whole staff makes predictions that are, in hindsight, hilarious. Recorded prior to Monday's dramatic press conferences, Jeff shares more of his Judges' Week experiences, while the whole staff makes predictions that are, in hindsight, hilarious. Giant Bomb no 5660 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 06-04-2013 https://www.giantbomb.com/podcasts/giant-bombcast-06-04-2013/1600-497/ We stress out about E3s past and future, free-to-play games, Kickstarter, and more! Mostly E3, though. Tue, 04 Jun 2013 18:39:00 PST 1600-497 We stress out about E3s past and future, free-to-play games, Kickstarter, and more! Mostly E3, though. We stress out about E3s past and future, free-to-play games, Kickstarter, and more! Mostly E3, though. Giant Bomb no 13112 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 05-28-2013 https://www.giantbomb.com/podcasts/giant-bombcast-05-28-2013/1600-493/ Vinny dives into the sordid world of voice-acting for toys and grapples with gophers, Jeff shares his first weekend with the Oculus Rift, and we all discuss FUSE, Valve economics, next-gen aftermarkets, The Swapper, the dark side of Star Trek, and more! Tue, 28 May 2013 20:30:00 PST 1600-493 Vinny dives into the sordid world of voice-acting for toys and grapples with gophers, Jeff shares his first weekend with the Oculus Rift, and we all discuss FUSE, Valve economics, next-gen aftermarkets, The Swapper, the dark side of Star Trek, and more! Vinny dives into the sordid world of voice-acting for toys and grapples with gophers, Jeff shares his first weekend with the Oculus Rift, and we all discuss FUSE, Valve economics, next-gen aftermarkets, The Swapper, the dark side of Star Trek, and more! Giant Bomb no 12501 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 05-21-2013 https://www.giantbomb.com/podcasts/giant-bombcast-05-21-2013/1600-489/ Hot on the heels of Microsoft's Xbox One reveal event, we talk at length about the forthcoming next-gen console battle. Also Star Trek. And spiders. Go Bears! Tue, 21 May 2013 19:29:00 PST 1600-489 Hot on the heels of Microsoft's Xbox One reveal event, we talk at length about the forthcoming next-gen console battle. Also Star Trek. And spiders. Go Bears! Hot on the heels of Microsoft's Xbox One reveal event, we talk at length about the forthcoming next-gen console battle. Also Star Trek. And spiders. Go Bears! Giant Bomb no 11259 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 05-14-2013 https://www.giantbomb.com/podcasts/giant-bombcast-05-14-2013/1600-486/ With Jeff out of the office on pre-E3 business, we spend an inordinate amount of time on Durango speculation while also finding the time to talk Metro: Last Light, Wolfenstein: The New Order, Prison Architect, and more! Tue, 14 May 2013 20:03:00 PST 1600-486 With Jeff out of the office on pre-E3 business, we spend an inordinate amount of time on Durango speculation while also finding the time to talk Metro: Last Light, Wolfenstein: The New Order, Prison Architect, and more! With Jeff out of the office on pre-E3 business, we spend an inordinate amount of time on Durango speculation while also finding the time to talk Metro: Last Light, Wolfenstein: The New Order, Prison Architect, and more! Giant Bomb no 12129 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 05-07-2013 https://www.giantbomb.com/podcasts/giant-bombcast-05-07-2013/1600-481/ Ryan mistakes Bob Hoskins for dead; Jeff loves Riff-Raff; Vinny loves sleep; Brad loves Dota 2; Patrick loves Ellen; the gang learns what the best console is; the Shmoo is real. Tue, 07 May 2013 09:17:00 PST 1600-481 Ryan mistakes Bob Hoskins for dead; Jeff loves Riff-Raff; Vinny loves sleep; Brad loves Dota 2; Patrick loves Ellen; the gang learns what the best console is; the Shmoo is real. Ryan mistakes Bob Hoskins for dead; Jeff loves Riff-Raff; Vinny loves sleep; Brad loves Dota 2; Patrick loves Ellen; the gang learns what the best console is; the Shmoo is real. Giant Bomb no 12383 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 04-30-2013 https://www.giantbomb.com/podcasts/giant-bombcast-04-30-2013/1600-477/ Patrick's back from Iceland with three solid hours of Bjork stories. Tue, 30 Apr 2013 19:52:00 PST 1600-477 Patrick's back from Iceland with three solid hours of Bjork stories. Patrick's back from Iceland with three solid hours of Bjork stories. Giant Bomb no 11727 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 04-23-2013 https://www.giantbomb.com/podcasts/giant-bombcast-04-23-2013/1600-471/ Brad discovers a use for interns in Dota 2; Patrick prepares for Reyjkavik; Ryan endorses the Neti pot; Jeff is assaulted by the Neti pot; Vinny hangs drywall. Tue, 23 Apr 2013 10:00:00 PST 1600-471 Brad discovers a use for interns in Dota 2; Patrick prepares for Reyjkavik; Ryan endorses the Neti pot; Jeff is assaulted by the Neti pot; Vinny hangs drywall. Brad discovers a use for interns in Dota 2; Patrick prepares for Reyjkavik; Ryan endorses the Neti pot; Jeff is assaulted by the Neti pot; Vinny hangs drywall. Giant Bomb no 11960 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 04-16-2013 https://www.giantbomb.com/podcasts/giant-bombcast-04-16-2013/1600-465/ Vinny finds new homes for old possessions; Jeff fantasizes about his own Coke Freestyle machine; Patrick considers a new hat; Ryan is sleepy; Brad is named Bombcast Ombudsman. Tue, 16 Apr 2013 19:55:00 PST 1600-465 Vinny finds new homes for old possessions; Jeff fantasizes about his own Coke Freestyle machine; Patrick considers a new hat; Ryan is sleepy; Brad is named Bombcast Ombudsman. Vinny finds new homes for old possessions; Jeff fantasizes about his own Coke Freestyle machine; Patrick considers a new hat; Ryan is sleepy; Brad is named Bombcast Ombudsman. Giant Bomb no 9534 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 04-09-2013 https://www.giantbomb.com/podcasts/giant-bombcast-04-09-2013/1600-461/ Vinny returns with harrowing tales of airplanes, babies, and bathtubs; Patrick combines his love of BioShock and Lost into a... Singularity; Jeff tries to make sense of Defiance; Brad falls down a Dota 2 hole; everyone mourns the passing of LucasArts. Tue, 09 Apr 2013 19:00:00 PST 1600-461 Vinny returns with harrowing tales of airplanes, babies, and bathtubs; Patrick combines his love of BioShock and Lost into a... Singularity; Jeff tries to make sense of Defiance; Brad falls down a Dota 2 hole; everyone mourns the passing of LucasArts. Vinny returns with harrowing tales of airplanes, babies, and bathtubs; Patrick combines his love of BioShock and Lost into a... Singularity; Jeff tries to make sense of Defiance; Brad falls down a Dota 2 hole; everyone mourns the passing of LucasArts. Giant Bomb no 11671 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 04/02/2013 https://www.giantbomb.com/podcasts/giant-bombcast-04-02-2013/1600-458/ After back-to-back PAX East and GDC, it's a decidedly low-key week on the Bombcast. We fight off the malaise with spoiler-free BioShock Infinite talk, Ouya impressions, Metal Gear Solid V thoughts, and more! Tue, 02 Apr 2013 14:14:00 PST 1600-458 After back-to-back PAX East and GDC, it's a decidedly low-key week on the Bombcast. We fight off the malaise with spoiler-free BioShock Infinite talk, Ouya impressions, Metal Gear Solid V thoughts, and more! After back-to-back PAX East and GDC, it's a decidedly low-key week on the Bombcast. We fight off the malaise with spoiler-free BioShock Infinite talk, Ouya impressions, Metal Gear Solid V thoughts, and more! Giant Bomb no 8616 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03-26-2013 https://www.giantbomb.com/podcasts/giant-bombcast-03-26-2013/1600-447/ Ryan, Jeff, and Patrick return from PAX East 2013 exhausted, excited, and looking forward to the shenanigans promised by GDC 2013. Now! Who wants pie? Tue, 26 Mar 2013 18:12:00 PST 1600-447 Ryan, Jeff, and Patrick return from PAX East 2013 exhausted, excited, and looking forward to the shenanigans promised by GDC 2013. Now! Who wants pie? Ryan, Jeff, and Patrick return from PAX East 2013 exhausted, excited, and looking forward to the shenanigans promised by GDC 2013. Now! Who wants pie? Giant Bomb no 8331 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03-19-2013 https://www.giantbomb.com/podcasts/giant-bombcast-03-19-2013/1600-433/ We talk about "smart" watches and the inevitable Cyborg Wars while occasionally slipping into a little Gears of War: Judgment, Monster Hunter (!?!?!), and mooooore. Tue, 19 Mar 2013 19:55:00 PST 1600-433 We talk about "smart" watches and the inevitable Cyborg Wars while occasionally slipping into a little Gears of War: Judgment, Monster Hunter (!?!?!), and mooooore. We talk about "smart" watches and the inevitable Cyborg Wars while occasionally slipping into a little Gears of War: Judgment, Monster Hunter (!?!?!), and mooooore. Giant Bomb no 11780 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03-12-2013 https://www.giantbomb.com/podcasts/giant-bombcast-03-12-2013/1600-429/ We're downright feverish in our discussions of Mass Effect 3 DLC, God of War: Ascension, SimCity, Starcraft II: Heart of the Swarm, Thief, and more! Tue, 12 Mar 2013 19:43:00 PST 1600-429 We're downright feverish in our discussions of Mass Effect 3 DLC, God of War: Ascension, SimCity, Starcraft II: Heart of the Swarm, Thief, and more! We're downright feverish in our discussions of Mass Effect 3 DLC, God of War: Ascension, SimCity, Starcraft II: Heart of the Swarm, Thief, and more! Giant Bomb no 11704 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03-05-2013 https://www.giantbomb.com/podcasts/giant-bombcast-03-05-2013/1600-427/ Ryan returns from Disneyland; Jeff and Vinny reinvent bath-time and mealtime; Brad falls down an apocalyptic rabbit hole; everyone has allergies. Tue, 05 Mar 2013 18:08:00 PST 1600-427 Ryan returns from Disneyland; Jeff and Vinny reinvent bath-time and mealtime; Brad falls down an apocalyptic rabbit hole; everyone has allergies. Ryan returns from Disneyland; Jeff and Vinny reinvent bath-time and mealtime; Brad falls down an apocalyptic rabbit hole; everyone has allergies. Giant Bomb no 11230 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 02/26/2013 https://www.giantbomb.com/podcasts/giant-bombcast-02-26-2013/1600-423/ Jeff. Vinny, Brad, and Patrick talk over Metal Gear Rising, Crysis 3, the PlayStation 4, having a body full of foreign objects, Tomb Raider, and more. Tue, 26 Feb 2013 15:17:00 PST 1600-423 Jeff. Vinny, Brad, and Patrick talk over Metal Gear Rising, Crysis 3, the PlayStation 4, having a body full of foreign objects, Tomb Raider, and more. Jeff. Vinny, Brad, and Patrick talk over Metal Gear Rising, Crysis 3, the PlayStation 4, having a body full of foreign objects, Tomb Raider, and more. Giant Bomb no 11240 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 02-19-2013 https://www.giantbomb.com/podcasts/giant-bombcast-02-19-2013/1600-399/ Everything new is old again as the Giant Bombcast feels the crushing weight of the unrelenting passage of time! With special guest star Dave Snider! Tue, 19 Feb 2013 19:57:00 PST 1600-399 Everything new is old again as the Giant Bombcast feels the crushing weight of the unrelenting passage of time! With special guest star Dave Snider! Everything new is old again as the Giant Bombcast feels the crushing weight of the unrelenting passage of time! With special guest star Dave Snider! Giant Bomb no 8574 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 02-12-2013 https://www.giantbomb.com/podcasts/giant-bombcast-02-12-2013/1600-379/ The pitfalls of potholes, rumored Durango specs, Hit Clips and MiniDiscs, The Witcher 3, Bald Paul Walker, JJ Abrams vs. Gabe Newell, the delay of Rayman Legends, Impossible Studios’ final mission, and if we sell enough GRIT then we can get a bike! Tue, 12 Feb 2013 17:14:00 PST 1600-379 The pitfalls of potholes, rumored Durango specs, Hit Clips and MiniDiscs, The Witcher 3, Bald Paul Walker, JJ Abrams vs. Gabe Newell, the delay of Rayman Legends, Impossible Studios’ final mission, and if we sell enough GRIT then we can get a bike! The pitfalls of potholes, rumored Durango specs, Hit Clips and MiniDiscs, The Witcher 3, Bald Paul Walker, JJ Abrams vs. Gabe Newell, the delay of Rayman Legends, Impossible Studios’ final mission, and if we sell enough GRIT then we can get a bike! Giant Bomb no 11159 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 2013 Relaunch PSA https://www.giantbomb.com/podcasts/giant-bombcast-2013-relaunch-psa/1600-378/ We're relaunching giantbomb.com on February 12, 2013! Here's how that may impact our beloved podcast listeners. Fri, 08 Feb 2013 15:35:00 PST 1600-378 We're relaunching giantbomb.com on February 12, 2013! Here's how that may impact our beloved podcast listeners. We're relaunching giantbomb.com on February 12, 2013! Here's how that may impact our beloved podcast listeners. Giant Bomb no 280 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 02-05-2013 https://www.giantbomb.com/podcasts/giant-bombcast-02-05-2013/1600-377/ We might as well rename it the "Fast and Furious"…cast. Tue, 05 Feb 2013 11:13:00 PST 1600-377 We might as well rename it the "Fast and Furious"…cast. We might as well rename it the "Fast and Furious"…cast. Giant Bomb no 12575 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 01-29-2013 https://www.giantbomb.com/podcasts/giant-bombcast-01-29-2013/1600-376/ We go spelunking in The Cave, compare the relative merits of the Underworld and Resident Evil film franchises, dig into the bureaucracy of SimCity, question the very nature of reality with Antichamber, and pour one out for THQ on this week's Bombcast! Tue, 29 Jan 2013 15:24:00 PST 1600-376 We go spelunking in The Cave, compare the relative merits of the Underworld and Resident Evil film franchises, dig into the bureaucracy of SimCity, question the very nature of reality with Antichamber, and pour one out for THQ on this week's Bombcast! We go spelunking in The Cave, compare the relative merits of the Underworld and Resident Evil film franchises, dig into the bureaucracy of SimCity, question the very nature of reality with Antichamber, and pour one out for THQ on this week's Bombcast! Giant Bomb no 11545 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 01-22-2013 https://www.giantbomb.com/podcasts/giant-bombcast-01-22-2013/1600-374/ After spending no less than a half-hour talking about Yelp, the gang finally gets down to business with Letterpress, Ni no Kuni, Halo 4 spoilers, Kentucky Route Zero, Antichamber, and, of course, Beverly Hills Cop. Tue, 22 Jan 2013 18:37:00 PST 1600-374 After spending no less than a half-hour talking about Yelp, the gang finally gets down to business with Letterpress, Ni no Kuni, Halo 4 spoilers, Kentucky Route Zero, Antichamber, and, of course, Beverly Hills Cop. After spending no less than a half-hour talking about Yelp, the gang finally gets down to business with Letterpress, Ni no Kuni, Halo 4 spoilers, Kentucky Route Zero, Antichamber, and, of course, Beverly Hills Cop. Giant Bomb no 10998 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 01-15-2013 https://www.giantbomb.com/podcasts/giant-bombcast-01-15-2013/1600-373/ We talk flu watch, dog food, contentious furniture ownership, Black Ops II, Twin Peaks, Devil May Cry, and more! Tue, 15 Jan 2013 12:05:00 PST 1600-373 We talk flu watch, dog food, contentious furniture ownership, Black Ops II, Twin Peaks, Devil May Cry, and more! We talk flu watch, dog food, contentious furniture ownership, Black Ops II, Twin Peaks, Devil May Cry, and more! Giant Bomb no 11528 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 01-08-2013 https://www.giantbomb.com/podcasts/giant-bombcast-01-08-2013/1600-371/ Everyone's back in the office and ready to grapple with the big issues of 2013, including Jeff Goldblum, Hundreds, Barkley Shut Up and Jam: Gaiden, Halo déjà vu, the fate of THQ, the cost of doing next-gen business, Nvidia's Project Shield, fried chicke Tue, 08 Jan 2013 14:44:00 PST 1600-371 Everyone's back in the office and ready to grapple with the big issues of 2013, including Jeff Goldblum, Hundreds, Barkley Shut Up and Jam: Gaiden, Halo déjà vu, the fate of THQ, the cost of doing next-gen business, Nvidia's Project Shield, fried chicke Everyone's back in the office and ready to grapple with the big issues of 2013, including Jeff Goldblum, Hundreds, Barkley Shut Up and Jam: Gaiden, Halo déjà vu, the fate of THQ, the cost of doing next-gen business, Nvidia's Project Shield, fried chicke Giant Bomb no 11422 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 01-01-2013 https://www.giantbomb.com/podcasts/giant-bombcast-01-01-2013/1600-370/ Everyone's still on vacation, but nothing stops the Bombcast! Not even dodgy Skype calls, illegal drinks, and the death of Dick Clark! Tue, 01 Jan 2013 17:33:00 PST 1600-370 Everyone's still on vacation, but nothing stops the Bombcast! Not even dodgy Skype calls, illegal drinks, and the death of Dick Clark! Everyone's still on vacation, but nothing stops the Bombcast! Not even dodgy Skype calls, illegal drinks, and the death of Dick Clark! Giant Bomb no 6689 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bomb Game of the Year 2012: Day Five https://www.giantbomb.com/podcasts/giant-bomb-game-of-the-year-2012-day-five/1600-369/ We close out our Game of the Year 2012 deliberations with our picks for Dumbest Motion-Controlled Moment, Best Trend, Biggest News, Worst Game, and finally, our pick for overall Game of the Year. Fri, 28 Dec 2012 10:00:00 PST 1600-369 We close out our Game of the Year 2012 deliberations with our picks for Dumbest Motion-Controlled Moment, Best Trend, Biggest News, Worst Game, and finally, our pick for overall Game of the Year. We close out our Game of the Year 2012 deliberations with our picks for Dumbest Motion-Controlled Moment, Best Trend, Biggest News, Worst Game, and finally, our pick for overall Game of the Year. Giant Bomb no 8868 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bomb Game of the Year 2012: Day Four https://www.giantbomb.com/podcasts/giant-bomb-game-of-the-year-2012-day-four/1600-367/ We choose winners for the WarioWare Spirit Award, Best Multiplayer, Best Download Game, Best Story, and Most Disappointing Game of 2012. Thu, 27 Dec 2012 10:00:00 PST 1600-367 We choose winners for the WarioWare Spirit Award, Best Multiplayer, Best Download Game, Best Story, and Most Disappointing Game of 2012. We choose winners for the WarioWare Spirit Award, Best Multiplayer, Best Download Game, Best Story, and Most Disappointing Game of 2012. Giant Bomb no 7364 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bomb Game of the Year 2012: Day Three https://www.giantbomb.com/podcasts/giant-bomb-game-of-the-year-2012-day-three/1600-366/ We make some hard decisions concerning Skrillex, Nolan North, good-looking games, bad trends, and browser-based games on day three of our 2012 deliberations. Wed, 26 Dec 2012 10:00:00 PST 1600-366 We make some hard decisions concerning Skrillex, Nolan North, good-looking games, bad trends, and browser-based games on day three of our 2012 deliberations. We make some hard decisions concerning Skrillex, Nolan North, good-looking games, bad trends, and browser-based games on day three of our 2012 deliberations. Giant Bomb no 4177 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bomb Game of the Year 2012: Day Two https://www.giantbomb.com/podcasts/giant-bomb-game-of-the-year-2012-day-two/1600-365/ Listen in as we hash out our choices for Walking Dead Episode of the Year, Best Debut, Best Surprise, Miiverse Community of the Year, and Best Use of a Licensed Song. Tue, 25 Dec 2012 10:00:00 PST 1600-365 Listen in as we hash out our choices for Walking Dead Episode of the Year, Best Debut, Best Surprise, Miiverse Community of the Year, and Best Use of a Licensed Song. Listen in as we hash out our choices for Walking Dead Episode of the Year, Best Debut, Best Surprise, Miiverse Community of the Year, and Best Use of a Licensed Song. Giant Bomb no 5142 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bomb Game of the Year 2012: Day One https://www.giantbomb.com/podcasts/giant-bomb-game-of-the-year-2012-day-one/1600-363/ We kick things off with our picks for 2012's 2011 Game of the Year, Best Moment/Sequence, Best New Character, Best Music, and Best Classic Revival. Mon, 24 Dec 2012 10:00:00 PST 1600-363 We kick things off with our picks for 2012's 2011 Game of the Year, Best Moment/Sequence, Best New Character, Best Music, and Best Classic Revival. We kick things off with our picks for 2012's 2011 Game of the Year, Best Moment/Sequence, Best New Character, Best Music, and Best Classic Revival. Giant Bomb no 7397 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 12-18-2012 https://www.giantbomb.com/podcasts/giant-bombcast-12-18-2012/1600-362/ Patrick learns first-hand about the karmic repercussions of sports-team trash-talking, Brad gets an iPhone 5, Ryan sees The Hobbit, and we read as many listener emails as we can stand. Tue, 18 Dec 2012 15:34:00 PST 1600-362 Patrick learns first-hand about the karmic repercussions of sports-team trash-talking, Brad gets an iPhone 5, Ryan sees The Hobbit, and we read as many listener emails as we can stand. Patrick learns first-hand about the karmic repercussions of sports-team trash-talking, Brad gets an iPhone 5, Ryan sees The Hobbit, and we read as many listener emails as we can stand. Giant Bomb no 5995 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 12-11-2012 https://www.giantbomb.com/podcasts/giant-bombcast-12-11-2012/1600-360/ Now that Brad has finally finished Mass Effect 3, we spend a solid hour going over that trilogy's conclusion, while also discussing FTL, ZombiU, Far Cry 2, 999, Phantom Pain, and more! Tue, 11 Dec 2012 17:51:00 PST 1600-360 Now that Brad has finally finished Mass Effect 3, we spend a solid hour going over that trilogy's conclusion, while also discussing FTL, ZombiU, Far Cry 2, 999, Phantom Pain, and more! Now that Brad has finally finished Mass Effect 3, we spend a solid hour going over that trilogy's conclusion, while also discussing FTL, ZombiU, Far Cry 2, 999, Phantom Pain, and more! Giant Bomb no 10582 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 12-04-2012 https://www.giantbomb.com/podcasts/giant-bombcast-12-04-2012/1600-359/ After his two-week absence, Patrick returns to us with harrowing tales of Sports Assholes, while we also tackle topics including The Walking Dead, Far Cry 3, "the new Wii", Bungie's Destiny, and the 2012 Levia-thon, going on now at your local Reaper deale Tue, 04 Dec 2012 15:02:00 PST 1600-359 After his two-week absence, Patrick returns to us with harrowing tales of Sports Assholes, while we also tackle topics including The Walking Dead, Far Cry 3, "the new Wii", Bungie's Destiny, and the 2012 Levia-thon, going on now at your local Reaper deale After his two-week absence, Patrick returns to us with harrowing tales of Sports Assholes, while we also tackle topics including The Walking Dead, Far Cry 3, "the new Wii", Bungie's Destiny, and the 2012 Levia-thon, going on now at your local Reaper deale Giant Bomb no 10173 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 11-27-2012 https://www.giantbomb.com/podcasts/giant-bombcast-11-27-2012/1600-357/ We're back from Thanksgiving break with tales of Funky Barn, Wii U retail experiences, pocket watches, Kickstarter, Assassin's Creed III, Far Cry 3, The Walking Dead, Persona 4, PlanetSide 2, big-ass monitors, and more! Tue, 27 Nov 2012 18:23:00 PST 1600-357 We're back from Thanksgiving break with tales of Funky Barn, Wii U retail experiences, pocket watches, Kickstarter, Assassin's Creed III, Far Cry 3, The Walking Dead, Persona 4, PlanetSide 2, big-ass monitors, and more! We're back from Thanksgiving break with tales of Funky Barn, Wii U retail experiences, pocket watches, Kickstarter, Assassin's Creed III, Far Cry 3, The Walking Dead, Persona 4, PlanetSide 2, big-ass monitors, and more! Giant Bomb no 11138 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 11-20-2012 https://www.giantbomb.com/podcasts/giant-bombcast-11-20-2012/1600-356/ We give thanks for a short work week, Home Run Pies, Assassin's Creed III, Hitman: Absolution, the Wii U launch, the evolution of Mario, PlayStation All-Stars, Mass Effect 3, Starcraft II: Heart of the Swarm, Grand Theft Auto V, and more! Tue, 20 Nov 2012 16:29:00 PST 1600-356 We give thanks for a short work week, Home Run Pies, Assassin's Creed III, Hitman: Absolution, the Wii U launch, the evolution of Mario, PlayStation All-Stars, Mass Effect 3, Starcraft II: Heart of the Swarm, Grand Theft Auto V, and more! We give thanks for a short work week, Home Run Pies, Assassin's Creed III, Hitman: Absolution, the Wii U launch, the evolution of Mario, PlayStation All-Stars, Mass Effect 3, Starcraft II: Heart of the Swarm, Grand Theft Auto V, and more! Giant Bomb no 11636 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 11-13-2012 https://www.giantbomb.com/podcasts/giant-bombcast-11-13-2012/1600-354/ We report in on our first week of Wii U ownership with a scathing treatise on the music of New Super Mario Bros. U, plus we share our latest thoughts on Halo 4, Black Ops II, Curiosity's life-changing secret, and the sexual enigma that is Michael Keaton. Tue, 13 Nov 2012 15:45:00 PST 1600-354 We report in on our first week of Wii U ownership with a scathing treatise on the music of New Super Mario Bros. U, plus we share our latest thoughts on Halo 4, Black Ops II, Curiosity's life-changing secret, and the sexual enigma that is Michael Keaton. We report in on our first week of Wii U ownership with a scathing treatise on the music of New Super Mario Bros. U, plus we share our latest thoughts on Halo 4, Black Ops II, Curiosity's life-changing secret, and the sexual enigma that is Michael Keaton. Giant Bomb no 11382 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 11-06-2012 https://www.giantbomb.com/podcasts/giant-bombcast-11-06-2012/1600-353/ Ryan and Patrick throw down the Assassin's Creed gauntlet with Brad, Vinny learns the hard way about infant incompatibility with Daylight Savings, Jeff plays a bunch of Halo 4, and more! Tue, 06 Nov 2012 14:55:00 PST 1600-353 Ryan and Patrick throw down the Assassin's Creed gauntlet with Brad, Vinny learns the hard way about infant incompatibility with Daylight Savings, Jeff plays a bunch of Halo 4, and more! Ryan and Patrick throw down the Assassin's Creed gauntlet with Brad, Vinny learns the hard way about infant incompatibility with Daylight Savings, Jeff plays a bunch of Halo 4, and more! Giant Bomb no 13306 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 10-30-2012 https://www.giantbomb.com/podcasts/giant-bombcast-10-30-2012/1600-351/ We talk Need for Speed: Most Wanted, Assassin's Creed III, The Walking Dead, Dust: An Elysian Tail, Zynga layoffs, and the current state of ethics in game journalism. Tue, 30 Oct 2012 21:42:00 PST 1600-351 We talk Need for Speed: Most Wanted, Assassin's Creed III, The Walking Dead, Dust: An Elysian Tail, Zynga layoffs, and the current state of ethics in game journalism. We talk Need for Speed: Most Wanted, Assassin's Creed III, The Walking Dead, Dust: An Elysian Tail, Zynga layoffs, and the current state of ethics in game journalism. Giant Bomb no 12439 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 10-23-2012 https://www.giantbomb.com/podcasts/giant-bombcast-10-23-2012/1600-350/ When they're not still going on and on about XCOM, the guys manage to squeeze in some talk about Dance Central 3, Skylanders: Giants, Doom 3 BFG, The Walking Dead, the horrors of Kinect, and more! Tue, 23 Oct 2012 14:47:00 PST 1600-350 When they're not still going on and on about XCOM, the guys manage to squeeze in some talk about Dance Central 3, Skylanders: Giants, Doom 3 BFG, The Walking Dead, the horrors of Kinect, and more! When they're not still going on and on about XCOM, the guys manage to squeeze in some talk about Dance Central 3, Skylanders: Giants, Doom 3 BFG, The Walking Dead, the horrors of Kinect, and more! Giant Bomb no 8323 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 10-16-2012 https://www.giantbomb.com/podcasts/giant-bombcast-10-16-2012/1600-348/ With Ryan out of commission, Jeff takes the helm to discuss Brad's Mass Effect 3 deadline, XCOM: Enemy Unknown, Dishonored, Forza Horizon, expired soda, Dance Central 3, couch treasure hunting, Jeff's Internet woes, Halo 4 leaks, and more! Tue, 16 Oct 2012 16:14:00 PST 1600-348 With Ryan out of commission, Jeff takes the helm to discuss Brad's Mass Effect 3 deadline, XCOM: Enemy Unknown, Dishonored, Forza Horizon, expired soda, Dance Central 3, couch treasure hunting, Jeff's Internet woes, Halo 4 leaks, and more! With Ryan out of commission, Jeff takes the helm to discuss Brad's Mass Effect 3 deadline, XCOM: Enemy Unknown, Dishonored, Forza Horizon, expired soda, Dance Central 3, couch treasure hunting, Jeff's Internet woes, Halo 4 leaks, and more! Giant Bomb no 11158 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 10-09-2012 https://www.giantbomb.com/podcasts/giant-bombcast-10-09-2012/1600-347/ Vinny returns to regale us with the pleasures of air-travel with a six-month old, Brad returns to Albion in Fable: The Journey, Jeff plots out his raid on Tokyo, Patrick chooses his own adventure in Dishonored, and Ryan gets overwhelmed by the alien scour Tue, 09 Oct 2012 19:39:00 PST 1600-347 Vinny returns to regale us with the pleasures of air-travel with a six-month old, Brad returns to Albion in Fable: The Journey, Jeff plots out his raid on Tokyo, Patrick chooses his own adventure in Dishonored, and Ryan gets overwhelmed by the alien scour Vinny returns to regale us with the pleasures of air-travel with a six-month old, Brad returns to Albion in Fable: The Journey, Jeff plots out his raid on Tokyo, Patrick chooses his own adventure in Dishonored, and Ryan gets overwhelmed by the alien scour Giant Bomb no 11812 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 10-02-2012 https://www.giantbomb.com/podcasts/giant-bombcast-10-02-2012/1600-345/ We download our collective consciousness into Cybertown to air our grievances with Resident Evil 6 and NiGHTS, while also spending an inordinate amount of time discussing the TurboGrafx-16, the Ataris Lynx and Jaguar, Merlin Racing for the Nuon, Elexis Si Tue, 02 Oct 2012 19:11:00 PST 1600-345 We download our collective consciousness into Cybertown to air our grievances with Resident Evil 6 and NiGHTS, while also spending an inordinate amount of time discussing the TurboGrafx-16, the Ataris Lynx and Jaguar, Merlin Racing for the Nuon, Elexis Si We download our collective consciousness into Cybertown to air our grievances with Resident Evil 6 and NiGHTS, while also spending an inordinate amount of time discussing the TurboGrafx-16, the Ataris Lynx and Jaguar, Merlin Racing for the Nuon, Elexis Si Giant Bomb no 10182 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 09-24-2012 https://www.giantbomb.com/podcasts/giant-bombcast-09-24-2012/1600-344/ We talk Halo 4, Hell Yeah, Borderlands 2, Transformers: Fall of Cybertron, Sleeping Dogs, Dead or Alive 5, FTL, Torchlight II, Tokyo Jungle, Far Cry 3, and more! Tue, 25 Sep 2012 17:38:00 PST 1600-344 We talk Halo 4, Hell Yeah, Borderlands 2, Transformers: Fall of Cybertron, Sleeping Dogs, Dead or Alive 5, FTL, Torchlight II, Tokyo Jungle, Far Cry 3, and more! We talk Halo 4, Hell Yeah, Borderlands 2, Transformers: Fall of Cybertron, Sleeping Dogs, Dead or Alive 5, FTL, Torchlight II, Tokyo Jungle, Far Cry 3, and more! Giant Bomb no 9270 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 09-18-2012 https://www.giantbomb.com/podcasts/giant-bombcast-09-18-2012/1600-342/ The Giant Bombcast: your home for classic bing bong, Borderlands 2, Torchlight II, Oregon Trail in Space, franchise maths, Wii U, BioWare, and more! Tue, 18 Sep 2012 18:47:00 PST 1600-342 The Giant Bombcast: your home for classic bing bong, Borderlands 2, Torchlight II, Oregon Trail in Space, franchise maths, Wii U, BioWare, and more! The Giant Bombcast: your home for classic bing bong, Borderlands 2, Torchlight II, Oregon Trail in Space, franchise maths, Wii U, BioWare, and more! Giant Bomb no 10069 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 09-11-2012 https://www.giantbomb.com/podcasts/giant-bombcast-09-11-2012/1600-340/ CHINA DON'T CARE. Tue, 11 Sep 2012 19:35:00 PST 1600-340 CHINA DON'T CARE. CHINA DON'T CARE. Giant Bomb no 11402 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 09-04-2012 https://www.giantbomb.com/podcasts/giant-bombcast-09-04-2012/1600-338/ With PAX Prime 2012 now in our rearview, we try to retrace our steps to figure out where it all went so horribly awesome. Tue, 04 Sep 2012 18:53:00 PST 1600-338 With PAX Prime 2012 now in our rearview, we try to retrace our steps to figure out where it all went so horribly awesome. With PAX Prime 2012 now in our rearview, we try to retrace our steps to figure out where it all went so horribly awesome. Giant Bomb no 11028 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 08-28-2012 https://www.giantbomb.com/podcasts/giant-bombcast-08-28-2012/1600-336/ We prep for PAX with yelling lessons from Sam Kinison, waterbeds, new cars, Rock Band Blitz, Darksiders, Dick's, Guild Wars 2, Nolan North's upcoming Burn Notice spin-off, Nintendo Power, Masocore Mario, and much more! Tue, 28 Aug 2012 12:42:00 PST 1600-336 We prep for PAX with yelling lessons from Sam Kinison, waterbeds, new cars, Rock Band Blitz, Darksiders, Dick's, Guild Wars 2, Nolan North's upcoming Burn Notice spin-off, Nintendo Power, Masocore Mario, and much more! We prep for PAX with yelling lessons from Sam Kinison, waterbeds, new cars, Rock Band Blitz, Darksiders, Dick's, Guild Wars 2, Nolan North's upcoming Burn Notice spin-off, Nintendo Power, Masocore Mario, and much more! Giant Bomb no 10069 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 08-21-2012 https://www.giantbomb.com/podcasts/giant-bombcast-08-21-2012/1600-334/ With Patrick Klepek fresh from his Hawaiian honeymoon we discuss superior BBS software, Sleepy Dawgz, Dust: An Elysian Tail, Pitfall!, Windows 8, Transformers: Fall of Cybertron, Assassin's Creed III, XCOM: Enemy Unknown, OnLive, and more! Tue, 21 Aug 2012 18:24:00 PST 1600-334 With Patrick Klepek fresh from his Hawaiian honeymoon we discuss superior BBS software, Sleepy Dawgz, Dust: An Elysian Tail, Pitfall!, Windows 8, Transformers: Fall of Cybertron, Assassin's Creed III, XCOM: Enemy Unknown, OnLive, and more! With Patrick Klepek fresh from his Hawaiian honeymoon we discuss superior BBS software, Sleepy Dawgz, Dust: An Elysian Tail, Pitfall!, Windows 8, Transformers: Fall of Cybertron, Assassin's Creed III, XCOM: Enemy Unknown, OnLive, and more! Giant Bomb no 11675 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 08-14-2012 https://www.giantbomb.com/podcasts/giant-bombcast-08-14-2012/1600-333/ Brad Shoemaker returns to the fold and we're joined by Will Smith from Tested.com for the latest on Mars, TechNeck, Windows 8, MakerBot, dodgy pronunciations, Darksiders, New Super Mario Bros. 2, LaserDiscs, Pokémon, After Earth, and more on this week’ Tue, 14 Aug 2012 15:08:00 PST 1600-333 Brad Shoemaker returns to the fold and we're joined by Will Smith from Tested.com for the latest on Mars, TechNeck, Windows 8, MakerBot, dodgy pronunciations, Darksiders, New Super Mario Bros. 2, LaserDiscs, Pokémon, After Earth, and more on this week’ Brad Shoemaker returns to the fold and we're joined by Will Smith from Tested.com for the latest on Mars, TechNeck, Windows 8, MakerBot, dodgy pronunciations, Darksiders, New Super Mario Bros. 2, LaserDiscs, Pokémon, After Earth, and more on this week’ Giant Bomb no 11600 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 08-07-2012 https://www.giantbomb.com/podcasts/giant-bombcast-08-07-2012/1600-331/ This week we do battle with dodgy technology to bring you "Brad Shoemaker", the triumphant return and immediate retirement of Energy Drink Taste Tests, Iron Brigade for PC, the future of Persona, life after Mass Effect 3, and more! #crackinwise Tue, 07 Aug 2012 15:42:00 PST 1600-331 This week we do battle with dodgy technology to bring you "Brad Shoemaker", the triumphant return and immediate retirement of Energy Drink Taste Tests, Iron Brigade for PC, the future of Persona, life after Mass Effect 3, and more! #crackinwise This week we do battle with dodgy technology to bring you "Brad Shoemaker", the triumphant return and immediate retirement of Energy Drink Taste Tests, Iron Brigade for PC, the future of Persona, life after Mass Effect 3, and more! #crackinwise Giant Bomb no 10326 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07-31-2012 https://www.giantbomb.com/podcasts/giant-bombcast-07-31-2012/1600-330/ We discuss the 3DS XL, grinding coins in New Super Mario Bros. 2, Dumbo rides, California Extreme, Snoop Lion, the drunken value of half a hot dog, and more! Tue, 31 Jul 2012 20:11:00 PST 1600-330 We discuss the 3DS XL, grinding coins in New Super Mario Bros. 2, Dumbo rides, California Extreme, Snoop Lion, the drunken value of half a hot dog, and more! We discuss the 3DS XL, grinding coins in New Super Mario Bros. 2, Dumbo rides, California Extreme, Snoop Lion, the drunken value of half a hot dog, and more! Giant Bomb no 10719 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07-24-2012 https://www.giantbomb.com/podcasts/giant-bombcast-07-24-2012/1600-328/ It's our 300th podcast! To celebrate this most momentous occasion, we talk about…video games. And other nonsense. You won't want to miss it! Tue, 24 Jul 2012 17:40:00 PST 1600-328 It's our 300th podcast! To celebrate this most momentous occasion, we talk about…video games. And other nonsense. You won't want to miss it! It's our 300th podcast! To celebrate this most momentous occasion, we talk about…video games. And other nonsense. You won't want to miss it! Giant Bomb no 10113 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07-17-2012 https://www.giantbomb.com/podcasts/giant-bombcast-07-17-2012/1600-327/ We prepare for the end-days with Jim-Bakker-endorsed food buckets, ham radios, suburban crime, chemtrails, hummingbird masks, modem sounds, the Gizmondo, cable TV, the Commodore 128, CPS2 games, Dyad, Olympic sex, and more! Tue, 17 Jul 2012 12:44:00 PST 1600-327 We prepare for the end-days with Jim-Bakker-endorsed food buckets, ham radios, suburban crime, chemtrails, hummingbird masks, modem sounds, the Gizmondo, cable TV, the Commodore 128, CPS2 games, Dyad, Olympic sex, and more! We prepare for the end-days with Jim-Bakker-endorsed food buckets, ham radios, suburban crime, chemtrails, hummingbird masks, modem sounds, the Gizmondo, cable TV, the Commodore 128, CPS2 games, Dyad, Olympic sex, and more! Giant Bomb no 10408 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07-10-2012 https://www.giantbomb.com/podcasts/giant-bombcast-07-10-2012/1600-325/ Let's get a little buzzer going up in here as Drew Scanlon joins us to talk numbers stations, the proper way to operate a HAM radio, The Secret World, Downloads of a Nintendo persuasion, and how to figure out if the computer that's recording your podcast Tue, 10 Jul 2012 18:32:00 PST 1600-325 Let's get a little buzzer going up in here as Drew Scanlon joins us to talk numbers stations, the proper way to operate a HAM radio, The Secret World, Downloads of a Nintendo persuasion, and how to figure out if the computer that's recording your podcast Let's get a little buzzer going up in here as Drew Scanlon joins us to talk numbers stations, the proper way to operate a HAM radio, The Secret World, Downloads of a Nintendo persuasion, and how to figure out if the computer that's recording your podcast Giant Bomb no 7454 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07-03-2012 https://www.giantbomb.com/podcasts/giant-bombcast-07-03-2012/1600-324/ We prepare for the Molotov cocktail of American holidays with fireworks fantasies, Cisco on Cisco on Sisqó, the unexpected legacy of Spec Ops: The Line, One Winged Angel vs. Freebird, the end of Radical, the state of Sega, launch-day server woes, and mor Tue, 03 Jul 2012 17:18:00 PST 1600-324 We prepare for the Molotov cocktail of American holidays with fireworks fantasies, Cisco on Cisco on Sisqó, the unexpected legacy of Spec Ops: The Line, One Winged Angel vs. Freebird, the end of Radical, the state of Sega, launch-day server woes, and mor We prepare for the Molotov cocktail of American holidays with fireworks fantasies, Cisco on Cisco on Sisqó, the unexpected legacy of Spec Ops: The Line, One Winged Angel vs. Freebird, the end of Radical, the state of Sega, launch-day server woes, and mor Giant Bomb no 10589 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 06-26-2012 https://www.giantbomb.com/podcasts/giant-bombcast-06-26-2012/1600-322/ It's like a bucket of confetti for your ears as we talk zombies, Globetrotters, Law &amp; Order, LEGO Batman 2, Quantum Conundrum, Phantasy Star Online 2, The Amazing Spider-Man, Spec Ops: The Line, beer delivery technology, Spencer's Gifts, and more! Tue, 26 Jun 2012 16:23:00 PST 1600-322 It's like a bucket of confetti for your ears as we talk zombies, Globetrotters, Law &amp; Order, LEGO Batman 2, Quantum Conundrum, Phantasy Star Online 2, The Amazing Spider-Man, Spec Ops: The Line, beer delivery technology, Spencer's Gifts, and more! It's like a bucket of confetti for your ears as we talk zombies, Globetrotters, Law &amp; Order, LEGO Batman 2, Quantum Conundrum, Phantasy Star Online 2, The Amazing Spider-Man, Spec Ops: The Line, beer delivery technology, Spencer's Gifts, and more! Giant Bomb no 10848 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 06-19-2012 https://www.giantbomb.com/podcasts/giant-bombcast-06-19-2012/1600-321/ We talk Microsoft Surface, fresh Wii U hands-on impressions, the Diablo III real money auction house, the ideal ratio of alcohol to Amnesia: The Dark Descent, the categorical failures of Steel Battalion: Heavy Armor, and, of course, our inevitable guest a Tue, 19 Jun 2012 20:37:00 PST 1600-321 We talk Microsoft Surface, fresh Wii U hands-on impressions, the Diablo III real money auction house, the ideal ratio of alcohol to Amnesia: The Dark Descent, the categorical failures of Steel Battalion: Heavy Armor, and, of course, our inevitable guest a We talk Microsoft Surface, fresh Wii U hands-on impressions, the Diablo III real money auction house, the ideal ratio of alcohol to Amnesia: The Dark Descent, the categorical failures of Steel Battalion: Heavy Armor, and, of course, our inevitable guest a Giant Bomb no 10543 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 06-12-2012 https://www.giantbomb.com/podcasts/giant-bombcast-06-12-2012/1600-319/ With E3 2012 mostly behind us, and our bodies brimming with coconut water and Portillo's, we step up to the plate with a Japanese curveball of StarCraft II: Heart of the Swarm, car adventures, Jason Rubin, Tomb Raider, and more. Tue, 12 Jun 2012 17:08:00 PST 1600-319 With E3 2012 mostly behind us, and our bodies brimming with coconut water and Portillo's, we step up to the plate with a Japanese curveball of StarCraft II: Heart of the Swarm, car adventures, Jason Rubin, Tomb Raider, and more. With E3 2012 mostly behind us, and our bodies brimming with coconut water and Portillo's, we step up to the plate with a Japanese curveball of StarCraft II: Heart of the Swarm, car adventures, Jason Rubin, Tomb Raider, and more. Giant Bomb no 7798 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast: E3 2012 Day Three https://www.giantbomb.com/podcasts/giant-bombcast-e3-2012-day-three/1600-318/ We close out the show with IGN's Greg Miller, 343 Industries' Frank O'Connor, Josh Holmes, and David Ellis, Hello Games, Eric Pope, Alex Rigopulos, and John Drake from Harmonix, Justin McElroy and Russ Frushtick from Polygon, and, of course, MAGIC. Fri, 08 Jun 2012 20:25:00 PST 1600-318 We close out the show with IGN's Greg Miller, 343 Industries' Frank O'Connor, Josh Holmes, and David Ellis, Hello Games, Eric Pope, Alex Rigopulos, and John Drake from Harmonix, Justin McElroy and Russ Frushtick from Polygon, and, of course, MAGIC. We close out the show with IGN's Greg Miller, 343 Industries' Frank O'Connor, Josh Holmes, and David Ellis, Hello Games, Eric Pope, Alex Rigopulos, and John Drake from Harmonix, Justin McElroy and Russ Frushtick from Polygon, and, of course, MAGIC. Giant Bomb no 12485 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast: E3 2012 Day Two https://www.giantbomb.com/podcasts/giant-bombcast-e3-2012-day-two/1600-317/ We're joined by Geoff Keighley, Ed Boon, Rich Gallup, Rocco from Mega64, Iron Galaxy's Dave Lang, Sony Computer Entertainment's Adam Boyes, Disney Interactive's John Vignocchi, Stephen Totilo, DrinkBox Studios, Alphonso, and, of course, Hawkman. Thu, 07 Jun 2012 10:51:00 PST 1600-317 We're joined by Geoff Keighley, Ed Boon, Rich Gallup, Rocco from Mega64, Iron Galaxy's Dave Lang, Sony Computer Entertainment's Adam Boyes, Disney Interactive's John Vignocchi, Stephen Totilo, DrinkBox Studios, Alphonso, and, of course, Hawkman. We're joined by Geoff Keighley, Ed Boon, Rich Gallup, Rocco from Mega64, Iron Galaxy's Dave Lang, Sony Computer Entertainment's Adam Boyes, Disney Interactive's John Vignocchi, Stephen Totilo, DrinkBox Studios, Alphonso, and, of course, Hawkman. Giant Bomb no 15005 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast: E3 2012 Day One https://www.giantbomb.com/podcasts/giant-bombcast-e3-2012-day-one/1600-315/ We end our first day on the show floor with Jake Solomon and Garth DeAngelis from Firaxis, Mikey Neumann from Gearbox, Cowboy from Naughty Dog, Chris Tilton, Cards Against Humanity's Max Temkin, Will Smith and Norm Chan, and David Jaffe! Wed, 06 Jun 2012 09:38:00 PST 1600-315 We end our first day on the show floor with Jake Solomon and Garth DeAngelis from Firaxis, Mikey Neumann from Gearbox, Cowboy from Naughty Dog, Chris Tilton, Cards Against Humanity's Max Temkin, Will Smith and Norm Chan, and David Jaffe! We end our first day on the show floor with Jake Solomon and Garth DeAngelis from Firaxis, Mikey Neumann from Gearbox, Cowboy from Naughty Dog, Chris Tilton, Cards Against Humanity's Max Temkin, Will Smith and Norm Chan, and David Jaffe! Giant Bomb no 12121 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast Pre-E3 2012: The Sealed Envelope https://www.giantbomb.com/podcasts/giant-bombcast-pre-e3-2012-the-sealed-envelope/1600-314/ We send a message to the future with our (now hilariously out-of-date) pre-show predictions, as well as the last of Jeff's Judges' Week secrets. Tue, 05 Jun 2012 12:00:00 PST 1600-314 We send a message to the future with our (now hilariously out-of-date) pre-show predictions, as well as the last of Jeff's Judges' Week secrets. We send a message to the future with our (now hilariously out-of-date) pre-show predictions, as well as the last of Jeff's Judges' Week secrets. Giant Bomb no 8019 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast: E3 2012 Day Zero https://www.giantbomb.com/podcasts/giant-bombcast-e3-2012-day-zero/1600-313/ We burn the midnight oil wrapping up the day's press conferences with Jeff Green, Brad Muir, Michael Pachter, Ben Gilbert, and Alexander Sliwinsky. Tue, 05 Jun 2012 08:55:00 PST 1600-313 We burn the midnight oil wrapping up the day's press conferences with Jeff Green, Brad Muir, Michael Pachter, Ben Gilbert, and Alexander Sliwinsky. We burn the midnight oil wrapping up the day's press conferences with Jeff Green, Brad Muir, Michael Pachter, Ben Gilbert, and Alexander Sliwinsky. Giant Bomb no 8438 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast Pre-E3 2012 With Paul Barnett https://www.giantbomb.com/podcasts/giant-bombcast-pre-e3-2012-with-paul-barnett/1600-312/ BioWare's Paul Barnett is a regular fixture of Giant Bomb's E3 coverage. Apparently Paul has more important things to do this year, so we check in with him before we take off for the big show. Fri, 01 Jun 2012 15:15:00 PST 1600-312 BioWare's Paul Barnett is a regular fixture of Giant Bomb's E3 coverage. Apparently Paul has more important things to do this year, so we check in with him before we take off for the big show. BioWare's Paul Barnett is a regular fixture of Giant Bomb's E3 coverage. Apparently Paul has more important things to do this year, so we check in with him before we take off for the big show. Giant Bomb no 0 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 05-29-2012 https://www.giantbomb.com/podcasts/giant-bombcast-05-29-2012/1600-310/ We spend even more time talking Diablo III while also finding the time to discuss drinking and old age, getting your car towed, home owners associates, Hitman, Way of the Warrior 2, Amnesia: The Dark Descent, the 38 Studios aftermath, Ecto Cooler, and Who Tue, 29 May 2012 19:37:00 PST 1600-310 We spend even more time talking Diablo III while also finding the time to discuss drinking and old age, getting your car towed, home owners associates, Hitman, Way of the Warrior 2, Amnesia: The Dark Descent, the 38 Studios aftermath, Ecto Cooler, and Who We spend even more time talking Diablo III while also finding the time to discuss drinking and old age, getting your car towed, home owners associates, Hitman, Way of the Warrior 2, Amnesia: The Dark Descent, the 38 Studios aftermath, Ecto Cooler, and Who Giant Bomb no 10911 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 05-22-2012 https://www.giantbomb.com/podcasts/giant-bombcast-05-22-2012/1600-309/ We’ve got spit-roasting pigs with Peter Dinklage, long babies, the finer points of eating your friend’s leg, The Last of Us, XCOM Enemy Unkown, Diablo III, Dragon’s Dogma, annular solar eclipses, BREAKING NEWS, the dire state of 38 Studios, and mor Tue, 22 May 2012 15:45:00 PST 1600-309 We’ve got spit-roasting pigs with Peter Dinklage, long babies, the finer points of eating your friend’s leg, The Last of Us, XCOM Enemy Unkown, Diablo III, Dragon’s Dogma, annular solar eclipses, BREAKING NEWS, the dire state of 38 Studios, and mor We’ve got spit-roasting pigs with Peter Dinklage, long babies, the finer points of eating your friend’s leg, The Last of Us, XCOM Enemy Unkown, Diablo III, Dragon’s Dogma, annular solar eclipses, BREAKING NEWS, the dire state of 38 Studios, and mor Giant Bomb no 9680 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 05-15-2012 https://www.giantbomb.com/podcasts/giant-bombcast-05-15-2012/1600-307/ It's the secret cow level of podcasts as we discuss Diablo III, Max Payne 3, game delays, the fate of 38 Studios, and more! Tue, 15 May 2012 18:15:00 PST 1600-307 It's the secret cow level of podcasts as we discuss Diablo III, Max Payne 3, game delays, the fate of 38 Studios, and more! It's the secret cow level of podcasts as we discuss Diablo III, Max Payne 3, game delays, the fate of 38 Studios, and more! Giant Bomb no 9320 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 05-08-2012 https://www.giantbomb.com/podcasts/giant-bombcast-05-08-2012/1600-306/ Unemployment enthusiast and master sleuth Adam Sessler joins us this week to talk GameSpot TV, Infinity Ward vs. Activision, arts vs. crafts, AdamSessler.com, The Money Machine, Minecraft, hot tubs, Thunderbird, and more! Tue, 08 May 2012 12:51:00 PST 1600-306 Unemployment enthusiast and master sleuth Adam Sessler joins us this week to talk GameSpot TV, Infinity Ward vs. Activision, arts vs. crafts, AdamSessler.com, The Money Machine, Minecraft, hot tubs, Thunderbird, and more! Unemployment enthusiast and master sleuth Adam Sessler joins us this week to talk GameSpot TV, Infinity Ward vs. Activision, arts vs. crafts, AdamSessler.com, The Money Machine, Minecraft, hot tubs, Thunderbird, and more! Giant Bomb no 10490 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant CODcast: Black Ops II https://www.giantbomb.com/podcasts/giant-codcast-black-ops-ii/1600-304/ We interrogate Jeff about his recent visit to Treyarch and his first impressions of Call of Duty: Black Ops II. Tue, 01 May 2012 21:00:00 PST 1600-304 We interrogate Jeff about his recent visit to Treyarch and his first impressions of Call of Duty: Black Ops II. We interrogate Jeff about his recent visit to Treyarch and his first impressions of Call of Duty: Black Ops II. Giant Bomb no 0 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 05-01-2012 https://www.giantbomb.com/podcasts/giant-bombcast-05-01-2012/1600-303/ Close the shades, lock the door, and enjoy this May Day Bombcast in private as we discuss The Walking Dead, Trials Evolution, Asura's Wrath, and more. Your pal Clippy, of course, just likes to watch. Tue, 01 May 2012 14:55:00 PST 1600-303 Close the shades, lock the door, and enjoy this May Day Bombcast in private as we discuss The Walking Dead, Trials Evolution, Asura's Wrath, and more. Your pal Clippy, of course, just likes to watch. Close the shades, lock the door, and enjoy this May Day Bombcast in private as we discuss The Walking Dead, Trials Evolution, Asura's Wrath, and more. Your pal Clippy, of course, just likes to watch. Giant Bomb no 10134 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 04-24-2012 https://www.giantbomb.com/podcasts/giant-bombcast-04-24-2012/1600-294/ Ryan's out and we have no idea how any of this works, but we still manage to get Johnny on the phone near the end. Oh, and we talk about Prey 2, God of War, Prototype 2, Bloodforge, and more Fez! Tue, 24 Apr 2012 18:51:00 PST 1600-294 Ryan's out and we have no idea how any of this works, but we still manage to get Johnny on the phone near the end. Oh, and we talk about Prey 2, God of War, Prototype 2, Bloodforge, and more Fez! Ryan's out and we have no idea how any of this works, but we still manage to get Johnny on the phone near the end. Oh, and we talk about Prey 2, God of War, Prototype 2, Bloodforge, and more Fez! Giant Bomb no 7673 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 04-17-2012 https://www.giantbomb.com/podcasts/giant-bombcast-04-17-2012/1600-293/ New father Vinny Caravella returns to the Giant Bombcast with champagne wishes and baby-deathwatch dreams! We also talk a whole lot about FEZ, Kickstarter, The Witcher 2, and more. Tue, 17 Apr 2012 09:28:00 PST 1600-293 New father Vinny Caravella returns to the Giant Bombcast with champagne wishes and baby-deathwatch dreams! We also talk a whole lot about FEZ, Kickstarter, The Witcher 2, and more. New father Vinny Caravella returns to the Giant Bombcast with champagne wishes and baby-deathwatch dreams! We also talk a whole lot about FEZ, Kickstarter, The Witcher 2, and more. Giant Bomb no 9106 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast: The Walking Dead https://www.giantbomb.com/podcasts/giant-bombcast-the-walking-dead/1600-292/ Ryan and Patrick are joined by Telltale's Richard Iggo and writer Gary Whitta to discuss The Walking Dead. Wed, 11 Apr 2012 17:45:00 PST 1600-292 Ryan and Patrick are joined by Telltale's Richard Iggo and writer Gary Whitta to discuss The Walking Dead. Ryan and Patrick are joined by Telltale's Richard Iggo and writer Gary Whitta to discuss The Walking Dead. Giant Bomb no 3158 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 04-10-2012 https://www.giantbomb.com/podcasts/giant-bombcast-04-10-2012/1600-290/ Still exhausted from PAX East 2012, our laconic commentators muster up all they've got to discuss Capcom's latest, the non-ironic appeal of Bud Light Lime, gong ownership, and more. Tue, 10 Apr 2012 11:36:00 PST 1600-290 Still exhausted from PAX East 2012, our laconic commentators muster up all they've got to discuss Capcom's latest, the non-ironic appeal of Bud Light Lime, gong ownership, and more. Still exhausted from PAX East 2012, our laconic commentators muster up all they've got to discuss Capcom's latest, the non-ironic appeal of Bud Light Lime, gong ownership, and more. Giant Bomb no 9399 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast: PAX East 2012 https://www.giantbomb.com/podcasts/giant-bombcast-pax-east-2012/1600-291/ We make friends, enemies, and plenty of ska music during our Saturday night panel at the Penny Arcade Expo East 2012! Tue, 10 Apr 2012 04:14:00 PST 1600-291 We make friends, enemies, and plenty of ska music during our Saturday night panel at the Penny Arcade Expo East 2012! We make friends, enemies, and plenty of ska music during our Saturday night panel at the Penny Arcade Expo East 2012! Giant Bomb no 5692 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 04-03-2012 https://www.giantbomb.com/podcasts/giant-bombcast-04-03-2012/1600-289/ It's All-You-Can-Eat Soup, Salad, and Breadsticks night on the Giant Bombcast as special guest Giancarlo Varanini traces his storied career, Brad laments the Kinect Star Wars experience, Patrick and Ryan talk horror, and much more! Tue, 03 Apr 2012 18:00:00 PST 1600-289 It's All-You-Can-Eat Soup, Salad, and Breadsticks night on the Giant Bombcast as special guest Giancarlo Varanini traces his storied career, Brad laments the Kinect Star Wars experience, Patrick and Ryan talk horror, and much more! It's All-You-Can-Eat Soup, Salad, and Breadsticks night on the Giant Bombcast as special guest Giancarlo Varanini traces his storied career, Brad laments the Kinect Star Wars experience, Patrick and Ryan talk horror, and much more! Giant Bomb no 10842 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03-27-2012 https://www.giantbomb.com/podcasts/giant-bombcast-03-27-2012/1600-288/ This week's discussions of Kid Icarus, Dragon's Lair, Operation Raccoon City, Guild Wars 2, Journey, Asura's Wrath, pizza tycoons, and Prey 2 will not leave you indifferent! Tue, 27 Mar 2012 13:02:00 PST 1600-288 This week's discussions of Kid Icarus, Dragon's Lair, Operation Raccoon City, Guild Wars 2, Journey, Asura's Wrath, pizza tycoons, and Prey 2 will not leave you indifferent! This week's discussions of Kid Icarus, Dragon's Lair, Operation Raccoon City, Guild Wars 2, Journey, Asura's Wrath, pizza tycoons, and Prey 2 will not leave you indifferent! Giant Bomb no 10492 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03-20-2012 https://www.giantbomb.com/podcasts/giant-bombcast-03-20-2012/1600-286/ Coming to you, live, from Television City in Hollywood, it's The Giant Bombcast!!! Tue, 20 Mar 2012 18:13:00 PST 1600-286 Coming to you, live, from Television City in Hollywood, it's The Giant Bombcast!!! Coming to you, live, from Television City in Hollywood, it's The Giant Bombcast!!! Giant Bomb no 9026 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03-13-2012 https://www.giantbomb.com/podcasts/giant-bombcast-03-13-2012/1600-285/ We celebrate Chili Day with loads of Mass Effect 3 talk, some Street Fighter X Tekken, thatgamecompany's Journey, and, of course, plenty of Pokémon poop-flinging tactics. Tue, 13 Mar 2012 17:13:00 PST 1600-285 We celebrate Chili Day with loads of Mass Effect 3 talk, some Street Fighter X Tekken, thatgamecompany's Journey, and, of course, plenty of Pokémon poop-flinging tactics. We celebrate Chili Day with loads of Mass Effect 3 talk, some Street Fighter X Tekken, thatgamecompany's Journey, and, of course, plenty of Pokémon poop-flinging tactics. Giant Bomb no 12261 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03-06-2012 https://www.giantbomb.com/podcasts/giant-bombcast-03-06-2012/1600-284/ We burn the midnight oil with GDC 2012, Indie Game: The Movie, Mass Effect 3, Street Fighter X Tekken, I Am Alive, Steele Battalion: Heavy Armor, Fable: The Journey, Halo 4, Trials Evolution, Max Payne 3, and Assassin's Creed III. Tue, 06 Mar 2012 21:18:00 PST 1600-284 We burn the midnight oil with GDC 2012, Indie Game: The Movie, Mass Effect 3, Street Fighter X Tekken, I Am Alive, Steele Battalion: Heavy Armor, Fable: The Journey, Halo 4, Trials Evolution, Max Payne 3, and Assassin's Creed III. We burn the midnight oil with GDC 2012, Indie Game: The Movie, Mass Effect 3, Street Fighter X Tekken, I Am Alive, Steele Battalion: Heavy Armor, Fable: The Journey, Halo 4, Trials Evolution, Max Payne 3, and Assassin's Creed III. Giant Bomb no 9216 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast: Mass Effect 3 Edition https://www.giantbomb.com/podcasts/giant-bombcast-mass-effect-3-edition/1600-283/ The Master of Mass Effect Casey Hudson stops by to give us the full briefing on Commander Shepard's final mission. Wed, 29 Feb 2012 17:45:00 PST 1600-283 The Master of Mass Effect Casey Hudson stops by to give us the full briefing on Commander Shepard's final mission. The Master of Mass Effect Casey Hudson stops by to give us the full briefing on Commander Shepard's final mission. Giant Bomb no 2892 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 02-28-2012 https://www.giantbomb.com/podcasts/giant-bombcast-02-28-2012/1600-282/ Giant Bomb's own Dave Snider joins us to talk mechs, head tracking, and fools going wild on livestreams. Tue, 28 Feb 2012 18:14:00 PST 1600-282 Giant Bomb's own Dave Snider joins us to talk mechs, head tracking, and fools going wild on livestreams. Giant Bomb's own Dave Snider joins us to talk mechs, head tracking, and fools going wild on livestreams. Giant Bomb no 9533 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 02-21-2012 https://www.giantbomb.com/podcasts/giant-bombcast-02-21-2012/1600-281/ Join us for some compelling post-Presidents-Day discussion of flight sticks, Dear Esther, Syndicate, Assassin's Creed III, Karateka, The Darkness vs. Alan Wake, Hoarders vs. Storage Wars, Laugh-In vs. Hee-Haw vs. You Can't Do That On Television, and more! Tue, 21 Feb 2012 16:47:00 PST 1600-281 Join us for some compelling post-Presidents-Day discussion of flight sticks, Dear Esther, Syndicate, Assassin's Creed III, Karateka, The Darkness vs. Alan Wake, Hoarders vs. Storage Wars, Laugh-In vs. Hee-Haw vs. You Can't Do That On Television, and more! Join us for some compelling post-Presidents-Day discussion of flight sticks, Dear Esther, Syndicate, Assassin's Creed III, Karateka, The Darkness vs. Alan Wake, Hoarders vs. Storage Wars, Laugh-In vs. Hee-Haw vs. You Can't Do That On Television, and more! Giant Bomb no 9480 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 02-14-2012 https://www.giantbomb.com/podcasts/giant-bombcast-02-14-2012/1600-280/ Join us for a laid-back vibe session with Valentine's Day stab wounds, The Darkness II, virtual pinball wish lists, the highs and lows of the Vita launch, Blizzard vs. Valve, and that whole, crazy-ass Double Fine/Kickstarter thing. Tue, 14 Feb 2012 15:30:00 PST 1600-280 Join us for a laid-back vibe session with Valentine's Day stab wounds, The Darkness II, virtual pinball wish lists, the highs and lows of the Vita launch, Blizzard vs. Valve, and that whole, crazy-ass Double Fine/Kickstarter thing. Join us for a laid-back vibe session with Valentine's Day stab wounds, The Darkness II, virtual pinball wish lists, the highs and lows of the Vita launch, Blizzard vs. Valve, and that whole, crazy-ass Double Fine/Kickstarter thing. Giant Bomb no 11440 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 02-07-2012 https://www.giantbomb.com/podcasts/giant-bombcast-02-07-2012/1600-279/ We deliver insightful coverage of Jedi ghosts, in-depth Super Bowl commercial analysis, the superiority of off-brand Zelda, Kingdoms of Amalur: Reckoning, good stupid vs. bad stupid in Resident Evil, Final Fantasy naming conventions, and more! Tue, 07 Feb 2012 12:35:00 PST 1600-279 We deliver insightful coverage of Jedi ghosts, in-depth Super Bowl commercial analysis, the superiority of off-brand Zelda, Kingdoms of Amalur: Reckoning, good stupid vs. bad stupid in Resident Evil, Final Fantasy naming conventions, and more! We deliver insightful coverage of Jedi ghosts, in-depth Super Bowl commercial analysis, the superiority of off-brand Zelda, Kingdoms of Amalur: Reckoning, good stupid vs. bad stupid in Resident Evil, Final Fantasy naming conventions, and more! Giant Bomb no 9188 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 01-31-2012 https://www.giantbomb.com/podcasts/giant-bombcast-01-31-2012/1600-278/ Ranger Rick's Tumblr, Kingdoms of Amalur: Reckoning, close encounters with Dan Aykroyd, Soul Calibur V, Final Fantasy XIII-2, Resident Evil: Revelations, Jeff's space-garbage-and-murder-slingshot election ticket...yeah. It's a weird week. Tue, 31 Jan 2012 15:28:00 PST 1600-278 Ranger Rick's Tumblr, Kingdoms of Amalur: Reckoning, close encounters with Dan Aykroyd, Soul Calibur V, Final Fantasy XIII-2, Resident Evil: Revelations, Jeff's space-garbage-and-murder-slingshot election ticket...yeah. It's a weird week. Ranger Rick's Tumblr, Kingdoms of Amalur: Reckoning, close encounters with Dan Aykroyd, Soul Calibur V, Final Fantasy XIII-2, Resident Evil: Revelations, Jeff's space-garbage-and-murder-slingshot election ticket...yeah. It's a weird week. Giant Bomb no 11298 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 01-24-2012 https://www.giantbomb.com/podcasts/giant-bombcast-01-24-2012/1600-277/ What do chewy tannins, Chicago sports, warm fronts, makin' cables, Steven Tyler, the Crypt Keeper, SSX, and Resident Evil 6 all have in common? You'll have to listen to this week's episode of the Giant Bombcast to find out! Tue, 24 Jan 2012 17:49:00 PST 1600-277 What do chewy tannins, Chicago sports, warm fronts, makin' cables, Steven Tyler, the Crypt Keeper, SSX, and Resident Evil 6 all have in common? You'll have to listen to this week's episode of the Giant Bombcast to find out! What do chewy tannins, Chicago sports, warm fronts, makin' cables, Steven Tyler, the Crypt Keeper, SSX, and Resident Evil 6 all have in common? You'll have to listen to this week's episode of the Giant Bombcast to find out! Giant Bomb no 9138 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 01-17-2012 https://www.giantbomb.com/podcasts/giant-bombcast-01-17-2012/1600-276/ A penny for your thoughts on Skyrim bugs, Star Trek Online, Hitman: Absolution, SOPA, and more. Tue, 17 Jan 2012 19:18:00 PST 1600-276 A penny for your thoughts on Skyrim bugs, Star Trek Online, Hitman: Absolution, SOPA, and more. A penny for your thoughts on Skyrim bugs, Star Trek Online, Hitman: Absolution, SOPA, and more. Giant Bomb no 11572 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bomb's GOTY 2011: Supplemental https://www.giantbomb.com/podcasts/giant-bombs-goty-2011-supplemental/1600-275/ Electronic Arts' Paul Barnett explains his top 10 games of 2011, brought to you by the letter D. Thu, 12 Jan 2012 12:28:00 PST 1600-275 Electronic Arts' Paul Barnett explains his top 10 games of 2011, brought to you by the letter D. Electronic Arts' Paul Barnett explains his top 10 games of 2011, brought to you by the letter D. Giant Bomb no 1599 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast: Amalur Edition https://www.giantbomb.com/podcasts/giant-bombcast-amalur-edition/1600-274/ Ryan and Brad sit down with Big Huge Games' Ken Rolston and Joe Quadara to discuss Kingdoms of Amalur: Reckoning, dungeon masters, Curt Schilling's fastball, and more! Wed, 11 Jan 2012 13:39:00 PST 1600-274 Ryan and Brad sit down with Big Huge Games' Ken Rolston and Joe Quadara to discuss Kingdoms of Amalur: Reckoning, dungeon masters, Curt Schilling's fastball, and more! Ryan and Brad sit down with Big Huge Games' Ken Rolston and Joe Quadara to discuss Kingdoms of Amalur: Reckoning, dungeon masters, Curt Schilling's fastball, and more! Giant Bomb no 2945 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 01-10-2012 https://www.giantbomb.com/podcasts/giant-bombcast-01-10-2012/1600-273/ Go green with this week's Giant Bombcast as we welcome Jeff and Patrick back to the show and discuss Star Wars: The Old Republic, Guild Wars, Skyrim, and the great Petaluma pizza drought. There won't be a heart left beating! Tue, 10 Jan 2012 11:46:00 PST 1600-273 Go green with this week's Giant Bombcast as we welcome Jeff and Patrick back to the show and discuss Star Wars: The Old Republic, Guild Wars, Skyrim, and the great Petaluma pizza drought. There won't be a heart left beating! Go green with this week's Giant Bombcast as we welcome Jeff and Patrick back to the show and discuss Star Wars: The Old Republic, Guild Wars, Skyrim, and the great Petaluma pizza drought. There won't be a heart left beating! Giant Bomb no 9032 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 01-03-2012 https://www.giantbomb.com/podcasts/giant-bombcast-01-03-2012/1600-271/ We ease back into things for the Deuce Dizzy with talk of earthquake preparedness, Game of the Year behind the scenes, townhouse barbecuing, cutting the cable, and, you know, maybe some games! Tue, 03 Jan 2012 18:35:00 PST 1600-271 We ease back into things for the Deuce Dizzy with talk of earthquake preparedness, Game of the Year behind the scenes, townhouse barbecuing, cutting the cable, and, you know, maybe some games! We ease back into things for the Deuce Dizzy with talk of earthquake preparedness, Game of the Year behind the scenes, townhouse barbecuing, cutting the cable, and, you know, maybe some games! Giant Bomb no 8778 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bomb's GOTY 2011 Deliberations: Day Five https://www.giantbomb.com/podcasts/giant-bombs-goty-2011-deliberations-day-five/1600-270/ We finish out our regular categories before facing off in a tense game of Russian roulette as we whittle down Giant Bomb's top 10 games of 2011. Fri, 30 Dec 2011 09:00:00 PST 1600-270 We finish out our regular categories before facing off in a tense game of Russian roulette as we whittle down Giant Bomb's top 10 games of 2011. We finish out our regular categories before facing off in a tense game of Russian roulette as we whittle down Giant Bomb's top 10 games of 2011. Giant Bomb no 14380 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bomb's GOTY 2011 Deliberations: Day Four https://www.giantbomb.com/podcasts/giant-bombs-goty-2011-deliberations-day-four/1600-269/ Things turn straight-up Real World ugly as discuss our choices for Best Download-Only Game, Best Co-Op, Best Story, Most Disappointing, and Best Remake/HD Update. WHO WILL GET VOTED OUT OF THE HOUSE??? Thu, 29 Dec 2011 09:00:00 PST 1600-269 Things turn straight-up Real World ugly as discuss our choices for Best Download-Only Game, Best Co-Op, Best Story, Most Disappointing, and Best Remake/HD Update. WHO WILL GET VOTED OUT OF THE HOUSE??? Things turn straight-up Real World ugly as discuss our choices for Best Download-Only Game, Best Co-Op, Best Story, Most Disappointing, and Best Remake/HD Update. WHO WILL GET VOTED OUT OF THE HOUSE??? Giant Bomb no 5891 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bomb's GOTY 2011 Deliberations: Day Three https://www.giantbomb.com/podcasts/giant-bombs-goty-2011-deliberations-day-three/1600-268/ Supplies begin to run low and panic sets in as we frantically decide Best Competitive Multiplayer, Best Use of Nolan North, and more! Wed, 28 Dec 2011 09:29:00 PST 1600-268 Supplies begin to run low and panic sets in as we frantically decide Best Competitive Multiplayer, Best Use of Nolan North, and more! Supplies begin to run low and panic sets in as we frantically decide Best Competitive Multiplayer, Best Use of Nolan North, and more! Giant Bomb no 5580 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bomb's GOTY 2011 Deliberations: Day Two https://www.giantbomb.com/podcasts/giant-bombs-goty-2011-deliberations-day-two/1600-267/ Things heat up on day two as we choose our winners for Skylander of the Year, Best Debut, Best Surprise, Best Sky Game, and Best Use of a Licensed Song. Tue, 27 Dec 2011 09:00:00 PST 1600-267 Things heat up on day two as we choose our winners for Skylander of the Year, Best Debut, Best Surprise, Best Sky Game, and Best Use of a Licensed Song. Things heat up on day two as we choose our winners for Skylander of the Year, Best Debut, Best Surprise, Best Sky Game, and Best Use of a Licensed Song. Giant Bomb no 6124 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bomb's GOTY 2011 Deliberations: Day One https://www.giantbomb.com/podcasts/giant-bombs-goty-2011-deliberations-day-one/1600-266/ We kick off our annual verbal knife fight with 2011's 2010 Game of the Year, Best Mission/Level, Best New Character, Dave's Eastern Bloc Game of the Year, and Best Music. Mon, 26 Dec 2011 09:00:00 PST 1600-266 We kick off our annual verbal knife fight with 2011's 2010 Game of the Year, Best Mission/Level, Best New Character, Dave's Eastern Bloc Game of the Year, and Best Music. We kick off our annual verbal knife fight with 2011's 2010 Game of the Year, Best Mission/Level, Best New Character, Dave's Eastern Bloc Game of the Year, and Best Music. Giant Bomb no 5796 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 12-20-2011 https://www.giantbomb.com/podcasts/giant-bombcast-12-20-2011/1600-265/ Just in time for the holidays, we discuss Skyrim on the PlayStation 3, Trine 2, the Japanese Vita launch, the future of full-motion video, and our first days with Star Wars: The Old Republic. Plus, emails galore! Tue, 20 Dec 2011 13:25:00 PST 1600-265 Just in time for the holidays, we discuss Skyrim on the PlayStation 3, Trine 2, the Japanese Vita launch, the future of full-motion video, and our first days with Star Wars: The Old Republic. Plus, emails galore! Just in time for the holidays, we discuss Skyrim on the PlayStation 3, Trine 2, the Japanese Vita launch, the future of full-motion video, and our first days with Star Wars: The Old Republic. Plus, emails galore! Giant Bomb no 9064 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 12-13-2011 https://www.giantbomb.com/podcasts/giant-bombcast-12-13-2011/1600-264/ We work out the kinks in Vinny's diabolical plan to clone the Beatles, talk Kingdoms of Amalur: Reckoning with Brad, reminisce about rap tapes, and generally spend way, way too much time discussing the Spike TV VGAs on this week's Bombcast! Tue, 13 Dec 2011 12:52:00 PST 1600-264 We work out the kinks in Vinny's diabolical plan to clone the Beatles, talk Kingdoms of Amalur: Reckoning with Brad, reminisce about rap tapes, and generally spend way, way too much time discussing the Spike TV VGAs on this week's Bombcast! We work out the kinks in Vinny's diabolical plan to clone the Beatles, talk Kingdoms of Amalur: Reckoning with Brad, reminisce about rap tapes, and generally spend way, way too much time discussing the Spike TV VGAs on this week's Bombcast! Giant Bomb no 11496 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 12-06-2011 https://www.giantbomb.com/podcasts/giant-bombcast-12-06-2011/1600-263/ Vinny makes his triumphant return with tales from the suburbs, Patrick cruises Internet chat rooms, Brad catches Black Friday Fever, Ryan hates giant laptops, Jeff craves Texas toast, and everyone plays Saints Row: The Third. Tue, 06 Dec 2011 13:34:00 PST 1600-263 Vinny makes his triumphant return with tales from the suburbs, Patrick cruises Internet chat rooms, Brad catches Black Friday Fever, Ryan hates giant laptops, Jeff craves Texas toast, and everyone plays Saints Row: The Third. Vinny makes his triumphant return with tales from the suburbs, Patrick cruises Internet chat rooms, Brad catches Black Friday Fever, Ryan hates giant laptops, Jeff craves Texas toast, and everyone plays Saints Row: The Third. Giant Bomb no 10535 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 11-29-2011 https://www.giantbomb.com/podcasts/giant-bombcast-11-29-2011/1600-262/ Alex Navarro joins us for post-Thanksgiving discussions of Rodian roadies, finding asylum in Raider Nation, hair security, shark punching, the great Zelda switcheroo, Mario Kart 7, tugging' vs. dumpin', Spec Ops: The Line, and more! Tue, 29 Nov 2011 15:56:00 PST 1600-262 Alex Navarro joins us for post-Thanksgiving discussions of Rodian roadies, finding asylum in Raider Nation, hair security, shark punching, the great Zelda switcheroo, Mario Kart 7, tugging' vs. dumpin', Spec Ops: The Line, and more! Alex Navarro joins us for post-Thanksgiving discussions of Rodian roadies, finding asylum in Raider Nation, hair security, shark punching, the great Zelda switcheroo, Mario Kart 7, tugging' vs. dumpin', Spec Ops: The Line, and more! Giant Bomb no 9676 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 11-22-2011 https://www.giantbomb.com/podcasts/giant-bombcast-11-22-2011/1600-261/ Tested.com’s Will Smith brings his signature word pronunciations, Patrick goes back to NASbraska, Jeff talks high-level Blitz play, Brad runs HDMI cables, and Ryan gets serious about Ultranationalism in this week’s Bombcast! Tue, 22 Nov 2011 17:49:00 PST 1600-261 Tested.com’s Will Smith brings his signature word pronunciations, Patrick goes back to NASbraska, Jeff talks high-level Blitz play, Brad runs HDMI cables, and Ryan gets serious about Ultranationalism in this week’s Bombcast! Tested.com’s Will Smith brings his signature word pronunciations, Patrick goes back to NASbraska, Jeff talks high-level Blitz play, Brad runs HDMI cables, and Ryan gets serious about Ultranationalism in this week’s Bombcast! Giant Bomb no 10110 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 11-15-2011 https://www.giantbomb.com/podcasts/giant-bombcast-11-15-2011/1600-259/ Nearly three hours of Skyrim, Uncharted 3, Assassin's Creed: Revelations, Halo: Combat Evolved Anniversary, The Legend of Zelda: Skyward Sword, Need for Speed: The Run, and more! Tue, 15 Nov 2011 17:12:00 PST 1600-259 Nearly three hours of Skyrim, Uncharted 3, Assassin's Creed: Revelations, Halo: Combat Evolved Anniversary, The Legend of Zelda: Skyward Sword, Need for Speed: The Run, and more! Nearly three hours of Skyrim, Uncharted 3, Assassin's Creed: Revelations, Halo: Combat Evolved Anniversary, The Legend of Zelda: Skyward Sword, Need for Speed: The Run, and more! Giant Bomb no 10640 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 11-08-2011 https://www.giantbomb.com/podcasts/giant-bombcast-11-08-2011/1600-258/ Get all cozy with a nice, piping-hot 40, and join us for some heated conversation about our experiences with Call of Duty: Modern Warfare 3, Saints Row: The Third, RAGE, Uncharted 3: Drake’s Deception, and much more! Tue, 08 Nov 2011 15:37:00 PST 1600-258 Get all cozy with a nice, piping-hot 40, and join us for some heated conversation about our experiences with Call of Duty: Modern Warfare 3, Saints Row: The Third, RAGE, Uncharted 3: Drake’s Deception, and much more! Get all cozy with a nice, piping-hot 40, and join us for some heated conversation about our experiences with Call of Duty: Modern Warfare 3, Saints Row: The Third, RAGE, Uncharted 3: Drake’s Deception, and much more! Giant Bomb no 9970 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 11-01-2011 https://www.giantbomb.com/podcasts/giant-bombcast-11-01-2011/1600-257/ We nurse our fun-size Halloween hangovers with the Bat-man, Rocksmith, Battlefield 3, Uncharted 3, horror movies, and, of course, an inappropriate amount of candy. Tue, 01 Nov 2011 16:02:00 PST 1600-257 We nurse our fun-size Halloween hangovers with the Bat-man, Rocksmith, Battlefield 3, Uncharted 3, horror movies, and, of course, an inappropriate amount of candy. We nurse our fun-size Halloween hangovers with the Bat-man, Rocksmith, Battlefield 3, Uncharted 3, horror movies, and, of course, an inappropriate amount of candy. Giant Bomb no 10444 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 10-25-2011 https://www.giantbomb.com/podcasts/giant-bombcast-10-25-2011/1600-256/ We make breakthroughs on Brad's crippling Altoids addiction and Jeff's crippling Skylanders addiction, while also covering Batman's ethics, Rocksmith, learning to type the old-fashioned way, Battlefield 3, Uncharted 3, BlizzCon, and more! Je m'appelle Tra Tue, 25 Oct 2011 14:32:00 PST 1600-256 We make breakthroughs on Brad's crippling Altoids addiction and Jeff's crippling Skylanders addiction, while also covering Batman's ethics, Rocksmith, learning to type the old-fashioned way, Battlefield 3, Uncharted 3, BlizzCon, and more! Je m'appelle Tra We make breakthroughs on Brad's crippling Altoids addiction and Jeff's crippling Skylanders addiction, while also covering Batman's ethics, Rocksmith, learning to type the old-fashioned way, Battlefield 3, Uncharted 3, BlizzCon, and more! Je m'appelle Tra Giant Bomb no 8983 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 10-18-2011 https://www.giantbomb.com/podcasts/giant-bombcast-10-18-2011/1600-255/ We talk Transformers, Skylanders, Resistance 3, Rage, Skyrim, Max Payne 3, Russian Martian Bears, Double Fine Happy Action Theater, Dance Central 2, Just Dance 3, Batman, Batman, and, you guessed it, Batman, all on this week’s Giant Bombcast! Tue, 18 Oct 2011 17:03:00 PST 1600-255 We talk Transformers, Skylanders, Resistance 3, Rage, Skyrim, Max Payne 3, Russian Martian Bears, Double Fine Happy Action Theater, Dance Central 2, Just Dance 3, Batman, Batman, and, you guessed it, Batman, all on this week’s Giant Bombcast! We talk Transformers, Skylanders, Resistance 3, Rage, Skyrim, Max Payne 3, Russian Martian Bears, Double Fine Happy Action Theater, Dance Central 2, Just Dance 3, Batman, Batman, and, you guessed it, Batman, all on this week’s Giant Bombcast! Giant Bomb no 9712 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 10-11-2011 https://www.giantbomb.com/podcasts/giant-bombcast-10-11-2011/1600-254/ It's Muppets vs. monsters, Wipeout vs. Wipeout, and Forza 4 vs. Trackmania 2 on this week's Giant Bombcast. We also cover the multiple layers of griefing in Dark Souls, Dead Rising canon, bad comic book games, and more. And Brad Shoemaker is here! Tue, 11 Oct 2011 18:25:00 PST 1600-254 It's Muppets vs. monsters, Wipeout vs. Wipeout, and Forza 4 vs. Trackmania 2 on this week's Giant Bombcast. We also cover the multiple layers of griefing in Dark Souls, Dead Rising canon, bad comic book games, and more. And Brad Shoemaker is here! It's Muppets vs. monsters, Wipeout vs. Wipeout, and Forza 4 vs. Trackmania 2 on this week's Giant Bombcast. We also cover the multiple layers of griefing in Dark Souls, Dead Rising canon, bad comic book games, and more. And Brad Shoemaker is here! Giant Bomb no 9695 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 10-04-2011 https://www.giantbomb.com/podcasts/giant-bombcast-10-04-2011/1600-252/ Ol’ Vinny “Two Pens” Caravella gives us the whole Dark Souls rigmarole, Jeff returns from Vegas with the latest on Syndicate, Kingdoms of Amalur: Reckoning, SSX, and Need for Speed: The Run, and we misinterpret Occam’s Razor in the grossest way po Tue, 04 Oct 2011 17:11:00 PST 1600-252 Ol’ Vinny “Two Pens” Caravella gives us the whole Dark Souls rigmarole, Jeff returns from Vegas with the latest on Syndicate, Kingdoms of Amalur: Reckoning, SSX, and Need for Speed: The Run, and we misinterpret Occam’s Razor in the grossest way po Ol’ Vinny “Two Pens” Caravella gives us the whole Dark Souls rigmarole, Jeff returns from Vegas with the latest on Syndicate, Kingdoms of Amalur: Reckoning, SSX, and Need for Speed: The Run, and we misinterpret Occam’s Razor in the grossest way po Giant Bomb no 9480 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 09-27-2011 https://www.giantbomb.com/podcasts/giant-bombcast-09-27-2011/1600-251/ With Jeff in Vegas, Ryan, Vinny, Patrick, and Brad explore the limits of microphone clipping, Total Recall technology, marathon Gears of War 3 horde sessions, the mystery of From Software, AMC's Breaking Bad featuring Rage from id Software, and the raw, u Tue, 27 Sep 2011 18:30:00 PST 1600-251 With Jeff in Vegas, Ryan, Vinny, Patrick, and Brad explore the limits of microphone clipping, Total Recall technology, marathon Gears of War 3 horde sessions, the mystery of From Software, AMC's Breaking Bad featuring Rage from id Software, and the raw, u With Jeff in Vegas, Ryan, Vinny, Patrick, and Brad explore the limits of microphone clipping, Total Recall technology, marathon Gears of War 3 horde sessions, the mystery of From Software, AMC's Breaking Bad featuring Rage from id Software, and the raw, u Giant Bomb no 10481 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 09-20-2011 https://www.giantbomb.com/podcasts/giant-bombcast-09-20-2011/1600-250/ Gears of War 3 is out today! So we talk about Gears of War 3. A lot. Turns out, we have no idea what a cog actually is! We're a little more knowledgable about TrackMania 2, Burnout CRASH!, Resident Evil 4, and Renegade Ops, though. Tue, 20 Sep 2011 16:22:00 PST 1600-250 Gears of War 3 is out today! So we talk about Gears of War 3. A lot. Turns out, we have no idea what a cog actually is! We're a little more knowledgable about TrackMania 2, Burnout CRASH!, Resident Evil 4, and Renegade Ops, though. Gears of War 3 is out today! So we talk about Gears of War 3. A lot. Turns out, we have no idea what a cog actually is! We're a little more knowledgable about TrackMania 2, Burnout CRASH!, Resident Evil 4, and Renegade Ops, though. Giant Bomb no 8726 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 09-13-2011 https://www.giantbomb.com/podcasts/giant-bombcast-09-13-2011/1600-249/ We recover from the Second Annual Big Live Live Show: Live! with Infinite Vinnys, technology acronyms for idiots, ManiaPlanet’s insane potential, Johann Sebastian Joust, the new 360 dashboard, The Gunstringer, the dire state of the 3DS, Syndicate, and m Tue, 13 Sep 2011 17:43:00 PST 1600-249 We recover from the Second Annual Big Live Live Show: Live! with Infinite Vinnys, technology acronyms for idiots, ManiaPlanet’s insane potential, Johann Sebastian Joust, the new 360 dashboard, The Gunstringer, the dire state of the 3DS, Syndicate, and m We recover from the Second Annual Big Live Live Show: Live! with Infinite Vinnys, technology acronyms for idiots, ManiaPlanet’s insane potential, Johann Sebastian Joust, the new 360 dashboard, The Gunstringer, the dire state of the 3DS, Syndicate, and m Giant Bomb no 8243 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 09-06-2011 https://www.giantbomb.com/podcasts/giant-bombcast-09-06-2011/1600-248/ Pickles, Daggerfall, Warhammers, Driver: San Francisco, Dead Island, Resistance 3, Rock of Ages, and, oh, did we mention? The Second Annual Whiskey Media Big Live Live Show Live is happening this Friday! Tue, 06 Sep 2011 18:18:00 PST 1600-248 Pickles, Daggerfall, Warhammers, Driver: San Francisco, Dead Island, Resistance 3, Rock of Ages, and, oh, did we mention? The Second Annual Whiskey Media Big Live Live Show Live is happening this Friday! Pickles, Daggerfall, Warhammers, Driver: San Francisco, Dead Island, Resistance 3, Rock of Ages, and, oh, did we mention? The Second Annual Whiskey Media Big Live Live Show Live is happening this Friday! Giant Bomb no 8866 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 08-30-2011 https://www.giantbomb.com/podcasts/giant-bombcast-08-30-2011/1600-247/ We escape the gravitational pull of the PAX Firefall booth with no shortage of inscrutable inside jokes, as well as some thoughts on Fez, Word Fighter, Charlie Murder, Borderlands 2, Super Monday Night Combat, and much more! Tue, 30 Aug 2011 18:05:00 PST 1600-247 We escape the gravitational pull of the PAX Firefall booth with no shortage of inscrutable inside jokes, as well as some thoughts on Fez, Word Fighter, Charlie Murder, Borderlands 2, Super Monday Night Combat, and much more! We escape the gravitational pull of the PAX Firefall booth with no shortage of inscrutable inside jokes, as well as some thoughts on Fez, Word Fighter, Charlie Murder, Borderlands 2, Super Monday Night Combat, and much more! Giant Bomb no 8468 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 08-23-2011 https://www.giantbomb.com/podcasts/giant-bombcast-08-23-2011/1600-246/ We kick off Comedy Relief 2011 with Richard Belzer, Judy Tenuta, The Witcher 2, Deus Ex: Human Revolution, TrackMania 2, free-to-play fighting games, Tetris Battle Gaiden, Street Fighter III, Ridge Racer Unbounded, and much much more! Tue, 23 Aug 2011 14:11:00 PST 1600-246 We kick off Comedy Relief 2011 with Richard Belzer, Judy Tenuta, The Witcher 2, Deus Ex: Human Revolution, TrackMania 2, free-to-play fighting games, Tetris Battle Gaiden, Street Fighter III, Ridge Racer Unbounded, and much much more! We kick off Comedy Relief 2011 with Richard Belzer, Judy Tenuta, The Witcher 2, Deus Ex: Human Revolution, TrackMania 2, free-to-play fighting games, Tetris Battle Gaiden, Street Fighter III, Ridge Racer Unbounded, and much much more! Giant Bomb no 10553 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 08-16-2011 https://www.giantbomb.com/podcasts/giant-bombcast-08-16-2011/1600-245/ Jeff returns from his exile of silence to weigh in on the Summer of Disappointment, Patrick scratches an itch, Brad goes free-to-play, and Ryan catches the MOBA bug, plus Steam trading, Creative Suite: Global Offensive, and more in this week’s Bombcast! Tue, 16 Aug 2011 12:11:00 PST 1600-245 Jeff returns from his exile of silence to weigh in on the Summer of Disappointment, Patrick scratches an itch, Brad goes free-to-play, and Ryan catches the MOBA bug, plus Steam trading, Creative Suite: Global Offensive, and more in this week’s Bombcast! Jeff returns from his exile of silence to weigh in on the Summer of Disappointment, Patrick scratches an itch, Brad goes free-to-play, and Ryan catches the MOBA bug, plus Steam trading, Creative Suite: Global Offensive, and more in this week’s Bombcast! Giant Bomb no 9746 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 08-09-2011 https://www.giantbomb.com/podcasts/giant-bombcast-08-09-2011/1600-244/ It’s natural 20s for everyone as Patrick and Ryan testify about their time with The Witness, Vinny continues to be bewitched by The Witcher, and Brad gets physical with fruit. We also discuss the Borderlands 2 kerfuffle, Pandaren Brewmasters, and more! Tue, 09 Aug 2011 14:47:00 PST 1600-244 It’s natural 20s for everyone as Patrick and Ryan testify about their time with The Witness, Vinny continues to be bewitched by The Witcher, and Brad gets physical with fruit. We also discuss the Borderlands 2 kerfuffle, Pandaren Brewmasters, and more! It’s natural 20s for everyone as Patrick and Ryan testify about their time with The Witness, Vinny continues to be bewitched by The Witcher, and Brad gets physical with fruit. We also discuss the Borderlands 2 kerfuffle, Pandaren Brewmasters, and more! Giant Bomb no 8361 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 08-02-2011 https://www.giantbomb.com/podcasts/giant-bombcast-08-02-2011/1600-243/ We blow your shirt clean off your back with over two-and-a-half hours of alcohol-fueled, nitro-burnin' funny podcast action! Scantron standardized tests! From Dust! Secret Caravella Podcasts! Insanely Twisted Shadow Planet! AND MORE!!! Tue, 02 Aug 2011 16:30:00 PST 1600-243 We blow your shirt clean off your back with over two-and-a-half hours of alcohol-fueled, nitro-burnin' funny podcast action! Scantron standardized tests! From Dust! Secret Caravella Podcasts! Insanely Twisted Shadow Planet! AND MORE!!! We blow your shirt clean off your back with over two-and-a-half hours of alcohol-fueled, nitro-burnin' funny podcast action! Scantron standardized tests! From Dust! Secret Caravella Podcasts! Insanely Twisted Shadow Planet! AND MORE!!! Giant Bomb no 9784 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07-26-2011 https://www.giantbomb.com/podcasts/giant-bombcast-07-26-2011/1600-242/ Email chaos continues to infect the Giant Bombcast as we try and discuss Vinny's tortilla-craft, Jeff's dysfunctional relationship with Catherine, Brad's affection for Starfox's vocal stylings, the fate of Mega Man, From Dust, Demolition Man, and more! Tue, 26 Jul 2011 16:30:00 PST 1600-242 Email chaos continues to infect the Giant Bombcast as we try and discuss Vinny's tortilla-craft, Jeff's dysfunctional relationship with Catherine, Brad's affection for Starfox's vocal stylings, the fate of Mega Man, From Dust, Demolition Man, and more! Email chaos continues to infect the Giant Bombcast as we try and discuss Vinny's tortilla-craft, Jeff's dysfunctional relationship with Catherine, Brad's affection for Starfox's vocal stylings, the fate of Mega Man, From Dust, Demolition Man, and more! Giant Bomb no 9371 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07-19-2011 https://www.giantbomb.com/podcasts/giant-bombcast-07-19-2011/1600-241/ Ryan reinvents the remix as we discuss Doom 3, Garcia Hotspur's Pepsi endorsement, socks and pillows, public pools and gas station bathrooms, and, of course, Bastion. Tue, 19 Jul 2011 13:50:00 PST 1600-241 Ryan reinvents the remix as we discuss Doom 3, Garcia Hotspur's Pepsi endorsement, socks and pillows, public pools and gas station bathrooms, and, of course, Bastion. Ryan reinvents the remix as we discuss Doom 3, Garcia Hotspur's Pepsi endorsement, socks and pillows, public pools and gas station bathrooms, and, of course, Bastion. Giant Bomb no 7906 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07-12-2011 https://www.giantbomb.com/podcasts/giant-bombcast-07-12-2011/1600-240/ Patrick tells the tale of his first California Extreme, Jeff hates Applebee's, Vinny gets disturbed by American McGee, Brad gets carried in Starcraft, and Ryan's a goddamn narc. Tue, 12 Jul 2011 14:00:00 PST 1600-240 Patrick tells the tale of his first California Extreme, Jeff hates Applebee's, Vinny gets disturbed by American McGee, Brad gets carried in Starcraft, and Ryan's a goddamn narc. Patrick tells the tale of his first California Extreme, Jeff hates Applebee's, Vinny gets disturbed by American McGee, Brad gets carried in Starcraft, and Ryan's a goddamn narc. Giant Bomb no 9774 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07-05-2011 https://www.giantbomb.com/podcasts/giant-bombcast-07-05-2011/1600-239/ The boys recuperate from an amnesia-inducing holiday weekend with Puzzle Agent 2, Galaga Legions DX, thatgamecompany's Journey, and more! Tue, 05 Jul 2011 16:00:00 PST 1600-239 The boys recuperate from an amnesia-inducing holiday weekend with Puzzle Agent 2, Galaga Legions DX, thatgamecompany's Journey, and more! The boys recuperate from an amnesia-inducing holiday weekend with Puzzle Agent 2, Galaga Legions DX, thatgamecompany's Journey, and more! Giant Bomb no 5658 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 06-28-2011 https://www.giantbomb.com/podcasts/giant-bombcast-06-28-2011/1600-238/ We celebrate a special birthday with a 100-foot lava man, wizard beef, controversial pie, the world's worst lapdance, Swery, and everyone's favorite, the United States Supreme Court. It's a party, y'all! Tue, 28 Jun 2011 12:44:00 PST 1600-238 We celebrate a special birthday with a 100-foot lava man, wizard beef, controversial pie, the world's worst lapdance, Swery, and everyone's favorite, the United States Supreme Court. It's a party, y'all! We celebrate a special birthday with a 100-foot lava man, wizard beef, controversial pie, the world's worst lapdance, Swery, and everyone's favorite, the United States Supreme Court. It's a party, y'all! Giant Bomb no 9859 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 06-21-2011 https://www.giantbomb.com/podcasts/giant-bombcast-06-21-2011/1600-237/ The steamiest podcast heats up just in time for summer as we jam on inFamous 2, Origin.com, bad milk and worse steaks, Trenched, fake rumors about blood ninjas, Ocarina of Time, Wii U, stealing Redboxes, and more...girl. Tue, 21 Jun 2011 18:00:00 PST 1600-237 The steamiest podcast heats up just in time for summer as we jam on inFamous 2, Origin.com, bad milk and worse steaks, Trenched, fake rumors about blood ninjas, Ocarina of Time, Wii U, stealing Redboxes, and more...girl. The steamiest podcast heats up just in time for summer as we jam on inFamous 2, Origin.com, bad milk and worse steaks, Trenched, fake rumors about blood ninjas, Ocarina of Time, Wii U, stealing Redboxes, and more...girl. Giant Bomb no 9842 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 06-14-2011 https://www.giantbomb.com/podcasts/giant-bombcast-06-14-2011/1600-236/ As if you didn't get enough Giant Bomb podcasting action last week, this week our E3 2011 PTSD is compounded by the release of Duke Nukem Forever, which, it turns out, is an actual game. Sorta. You know what? You should probably just listen. Tue, 14 Jun 2011 16:44:00 PST 1600-236 As if you didn't get enough Giant Bomb podcasting action last week, this week our E3 2011 PTSD is compounded by the release of Duke Nukem Forever, which, it turns out, is an actual game. Sorta. You know what? You should probably just listen. As if you didn't get enough Giant Bomb podcasting action last week, this week our E3 2011 PTSD is compounded by the release of Duke Nukem Forever, which, it turns out, is an actual game. Sorta. You know what? You should probably just listen. Giant Bomb no 7949 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast: E3 2011 Day Three https://www.giantbomb.com/podcasts/giant-bombcast-e3-2011-day-three/1600-235/ No one man should have all this podcast! Fri, 10 Jun 2011 08:25:00 PST 1600-235 No one man should have all this podcast! No one man should have all this podcast! Giant Bomb no 10817 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast: E3 2011 Day Two https://www.giantbomb.com/podcasts/giant-bombcast-e3-2011-day-two/1600-234/ By jove! What an extraordinarily long podcast! Thu, 09 Jun 2011 13:06:00 PST 1600-234 By jove! What an extraordinarily long podcast! By jove! What an extraordinarily long podcast! Giant Bomb no 16622 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast: E3 2011 Day One https://www.giantbomb.com/podcasts/giant-bombcast-e3-2011-day-one/1600-233/ Mega64. Naughty Dog. Double Fine. David Jaffe. Rich Gallup. Four hours and twenty four minutes of the rawest, realest developer conversation you will ever hear. Wed, 08 Jun 2011 11:54:00 PST 1600-233 Mega64. Naughty Dog. Double Fine. David Jaffe. Rich Gallup. Four hours and twenty four minutes of the rawest, realest developer conversation you will ever hear. Mega64. Naughty Dog. Double Fine. David Jaffe. Rich Gallup. Four hours and twenty four minutes of the rawest, realest developer conversation you will ever hear. Giant Bomb no 15917 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast: E3 2011 Day Zero https://www.giantbomb.com/podcasts/giant-bombcast-e3-2011-day-zero/1600-232/ We welcome several special guests--including Braid creator Jonathan Blow, e &amp; Stepto from Xbox, and Gary Whitta--while also covering the Microsoft, EA, Ubisoft, and Sony press conferences. Tue, 07 Jun 2011 07:40:27 PST 1600-232 We welcome several special guests--including Braid creator Jonathan Blow, e &amp; Stepto from Xbox, and Gary Whitta--while also covering the Microsoft, EA, Ubisoft, and Sony press conferences. We welcome several special guests--including Braid creator Jonathan Blow, e &amp; Stepto from Xbox, and Gary Whitta--while also covering the Microsoft, EA, Ubisoft, and Sony press conferences. Giant Bomb no 12107 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 05-31-2011 https://www.giantbomb.com/podcasts/giant-bombcast-05-31-2011/1600-231/ It's our last regularly scheduled Bombcast before the crew ships off to Los Angeles for E3! We cover men's haircuts, L.A. Noire, Call of Duty Elite, StarCraft II: Heart of the Swarm, PlayStation Vita, and, of course, E3. Tue, 31 May 2011 18:08:15 PST 1600-231 It's our last regularly scheduled Bombcast before the crew ships off to Los Angeles for E3! We cover men's haircuts, L.A. Noire, Call of Duty Elite, StarCraft II: Heart of the Swarm, PlayStation Vita, and, of course, E3. It's our last regularly scheduled Bombcast before the crew ships off to Los Angeles for E3! We cover men's haircuts, L.A. Noire, Call of Duty Elite, StarCraft II: Heart of the Swarm, PlayStation Vita, and, of course, E3. Giant Bomb no 10193 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast Pre-E3 2011 Edition https://www.giantbomb.com/podcasts/giant-bombcast-pre-e3-2011-edition/1600-230/ Special guest Michael "Pach-Man" Pachter joins Ryan, Jeff, and Patrick for this pre-E3 Bombcast full of predictions, hopes, fears, and more! Thu, 26 May 2011 13:28:59 PST 1600-230 Special guest Michael "Pach-Man" Pachter joins Ryan, Jeff, and Patrick for this pre-E3 Bombcast full of predictions, hopes, fears, and more! Special guest Michael "Pach-Man" Pachter joins Ryan, Jeff, and Patrick for this pre-E3 Bombcast full of predictions, hopes, fears, and more! Giant Bomb no 4262 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 05-24-2011 https://www.giantbomb.com/podcasts/giant-bombcast-05-24-2011/1600-229/ Brad messes around with his Windows Phone 7 phone, Jeff waxes rhapsodic about BioShock Infinite, Vinny buries himself in Witcher backlog, Ryan goes to a parade, and everyone stresses hard on E3 in this week's Bombcast! Tue, 24 May 2011 16:33:16 PST 1600-229 Brad messes around with his Windows Phone 7 phone, Jeff waxes rhapsodic about BioShock Infinite, Vinny buries himself in Witcher backlog, Ryan goes to a parade, and everyone stresses hard on E3 in this week's Bombcast! Brad messes around with his Windows Phone 7 phone, Jeff waxes rhapsodic about BioShock Infinite, Vinny buries himself in Witcher backlog, Ryan goes to a parade, and everyone stresses hard on E3 in this week's Bombcast! Giant Bomb no 9122 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 05-17-2011 https://www.giantbomb.com/podcasts/giant-bombcast-05-17-2011/1600-228/ It's brown apples for everyone as we discuss the finer points of mustaches, sailboat brunches, the rich tradition of running through the park drunk and naked, and more. We also spend way, way too much time discussing Rockstar's latest, L.A. Noire. Tue, 17 May 2011 16:16:04 PST 1600-228 It's brown apples for everyone as we discuss the finer points of mustaches, sailboat brunches, the rich tradition of running through the park drunk and naked, and more. We also spend way, way too much time discussing Rockstar's latest, L.A. Noire. It's brown apples for everyone as we discuss the finer points of mustaches, sailboat brunches, the rich tradition of running through the park drunk and naked, and more. We also spend way, way too much time discussing Rockstar's latest, L.A. Noire. Giant Bomb no 9627 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 05-10-2011 https://www.giantbomb.com/podcasts/giant-bombcast-05-10-2011/1600-227/ We build a scatological birdhouse in this week's Bombcast, discussing Lorne Michaels' royalties, Sony's E3 press conference, the burden of fruit trees, the controversial popcorn issue, foot food, and, of course, lobthtuh monthtuth. Tue, 10 May 2011 17:31:04 PST 1600-227 We build a scatological birdhouse in this week's Bombcast, discussing Lorne Michaels' royalties, Sony's E3 press conference, the burden of fruit trees, the controversial popcorn issue, foot food, and, of course, lobthtuh monthtuth. We build a scatological birdhouse in this week's Bombcast, discussing Lorne Michaels' royalties, Sony's E3 press conference, the burden of fruit trees, the controversial popcorn issue, foot food, and, of course, lobthtuh monthtuth. Giant Bomb no 9379 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 05-03-2011 https://www.giantbomb.com/podcasts/giant-bombcast-05-03-2011/1600-226/ We re-open old Fable III wounds, get serious about Mortal Kombat fiction, spend an inordinate amount of time figuring out how to bring pizza to space, try and make sense of Jet's publishing/foreign language business, and more in this week's Bombcast! Tue, 03 May 2011 17:16:14 PST 1600-226 We re-open old Fable III wounds, get serious about Mortal Kombat fiction, spend an inordinate amount of time figuring out how to bring pizza to space, try and make sense of Jet's publishing/foreign language business, and more in this week's Bombcast! We re-open old Fable III wounds, get serious about Mortal Kombat fiction, spend an inordinate amount of time figuring out how to bring pizza to space, try and make sense of Jet's publishing/foreign language business, and more in this week's Bombcast! Giant Bomb no 9316 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 04-26-2011 https://www.giantbomb.com/podcasts/giant-bombcast-04-26-2011/1600-225/ Brad returns from Mexico with magical tales of free pool bars, Ryan dares Vinny to stop playing Dragon Age II, and Patrick helps us digest what has been an action-packed week in news in this week's edition of the Giant Bombcast! Tue, 26 Apr 2011 17:54:27 PST 1600-225 Brad returns from Mexico with magical tales of free pool bars, Ryan dares Vinny to stop playing Dragon Age II, and Patrick helps us digest what has been an action-packed week in news in this week's edition of the Giant Bombcast! Brad returns from Mexico with magical tales of free pool bars, Ryan dares Vinny to stop playing Dragon Age II, and Patrick helps us digest what has been an action-packed week in news in this week's edition of the Giant Bombcast! Giant Bomb no 9116 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Portal 2 Spoilercast! https://www.giantbomb.com/podcasts/portal-2-spoilercast/1600-224/ Ryan Davis sits down with Valve's Erik Wolpaw, Jay Pinkerton, and Chet Faliszek to discuss the inner workings of Portal 2. WARNING! Do not listen if you haven't finished Portal 2 yet. You will ruin Portal 2 for yourself. Sun, 24 Apr 2011 07:02:08 PST 1600-224 Ryan Davis sits down with Valve's Erik Wolpaw, Jay Pinkerton, and Chet Faliszek to discuss the inner workings of Portal 2. WARNING! Do not listen if you haven't finished Portal 2 yet. You will ruin Portal 2 for yourself. Ryan Davis sits down with Valve's Erik Wolpaw, Jay Pinkerton, and Chet Faliszek to discuss the inner workings of Portal 2. WARNING! Do not listen if you haven't finished Portal 2 yet. You will ruin Portal 2 for yourself. Giant Bomb no 1847 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 04-19-2011 https://www.giantbomb.com/podcasts/giant-bombcast-04-19-2011/1600-223/ We get messy with Grandma's Cookies as the conversation leans towards less tawdry fare, like Might &amp; Magic: Clash of Heroes, Bethesda's open-world first-person shooter factory, vendor trash, Wii HD, and--surprise surprise--Mortal Kombat and Portal 2. Tue, 19 Apr 2011 15:19:15 PST 1600-223 We get messy with Grandma's Cookies as the conversation leans towards less tawdry fare, like Might &amp; Magic: Clash of Heroes, Bethesda's open-world first-person shooter factory, vendor trash, Wii HD, and--surprise surprise--Mortal Kombat and Portal 2. We get messy with Grandma's Cookies as the conversation leans towards less tawdry fare, like Might &amp; Magic: Clash of Heroes, Bethesda's open-world first-person shooter factory, vendor trash, Wii HD, and--surprise surprise--Mortal Kombat and Portal 2. Giant Bomb no 8969 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 04-11-2011 https://www.giantbomb.com/podcasts/giant-bombcast-04-11-2011/1600-222/ Jeff, Vinny, and Dave take to the microphones to discuss the stupidity of kayaking, Capcom's recent announcements, that Persona 4 anime, and more. Tue, 12 Apr 2011 17:43:04 PST 1600-222 Jeff, Vinny, and Dave take to the microphones to discuss the stupidity of kayaking, Capcom's recent announcements, that Persona 4 anime, and more. Jeff, Vinny, and Dave take to the microphones to discuss the stupidity of kayaking, Capcom's recent announcements, that Persona 4 anime, and more. Giant Bomb no 8711 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 04-05-2011 https://www.giantbomb.com/podcasts/giant-bombcast-04-05-2011/1600-221/ Brad returns from his self-imposed exile, and we dazzle him--Rip-Van-Winkle-style--with tales of Mega Man Universe, the cancellation of The Agency, the rise and fall and re-rise of Majesco, GameStop going digital, Stardock confusion, and much more! Tue, 05 Apr 2011 17:38:01 PST 1600-221 Brad returns from his self-imposed exile, and we dazzle him--Rip-Van-Winkle-style--with tales of Mega Man Universe, the cancellation of The Agency, the rise and fall and re-rise of Majesco, GameStop going digital, Stardock confusion, and much more! Brad returns from his self-imposed exile, and we dazzle him--Rip-Van-Winkle-style--with tales of Mega Man Universe, the cancellation of The Agency, the rise and fall and re-rise of Majesco, GameStop going digital, Stardock confusion, and much more! Giant Bomb no 8475 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03-29-2011 https://www.giantbomb.com/podcasts/giant-bombcast-03-29-2011/1600-220/ It's your boy, the big dog pitbull, dropping' bombs on 'em with Zojirushi action journals, Dragon Age II economics, the 3DS launch, Pac-Man Battle Royale, Fight for Relief, Resident Evil, Duke Nukem delays, and more! Yo, rewind that! Tue, 29 Mar 2011 18:54:16 PST 1600-220 It's your boy, the big dog pitbull, dropping' bombs on 'em with Zojirushi action journals, Dragon Age II economics, the 3DS launch, Pac-Man Battle Royale, Fight for Relief, Resident Evil, Duke Nukem delays, and more! Yo, rewind that! It's your boy, the big dog pitbull, dropping' bombs on 'em with Zojirushi action journals, Dragon Age II economics, the 3DS launch, Pac-Man Battle Royale, Fight for Relief, Resident Evil, Duke Nukem delays, and more! Yo, rewind that! Giant Bomb no 8692 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03-22-2011 https://www.giantbomb.com/podcasts/giant-bombcast-03-22-2011/1600-219/ The World Champions of Podcasting are back at it again! Get your fill of Dragon Age II, premium Japanese thermoses, Philip K. Dick's insatiable appetite for amphetamines, Crysis 2, our first week with the Nintendo 3DS, and much more! Tue, 22 Mar 2011 16:34:28 PST 1600-219 The World Champions of Podcasting are back at it again! Get your fill of Dragon Age II, premium Japanese thermoses, Philip K. Dick's insatiable appetite for amphetamines, Crysis 2, our first week with the Nintendo 3DS, and much more! The World Champions of Podcasting are back at it again! Get your fill of Dragon Age II, premium Japanese thermoses, Philip K. Dick's insatiable appetite for amphetamines, Crysis 2, our first week with the Nintendo 3DS, and much more! Giant Bomb no 6517 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03-15-2011 https://www.giantbomb.com/podcasts/giant-bombcast-03-15-2011/1600-218/ The brave few that made it back from the Penny Arcade Expo with any serious longterm damage gather to discuss the games at the show along with our shiny new Nintendo 3DS, Prey 2, and the best way to smith up some rocks. Tue, 15 Mar 2011 21:35:26 PST 1600-218 The brave few that made it back from the Penny Arcade Expo with any serious longterm damage gather to discuss the games at the show along with our shiny new Nintendo 3DS, Prey 2, and the best way to smith up some rocks. The brave few that made it back from the Penny Arcade Expo with any serious longterm damage gather to discuss the games at the show along with our shiny new Nintendo 3DS, Prey 2, and the best way to smith up some rocks. Giant Bomb no 4973 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03-08-2011 https://www.giantbomb.com/podcasts/giant-bombcast-03-08-2011/1600-217/ We've got BurgerTime pathos, Shanghai McGee, Suda51's boner, the far-flung future of the Gathering of Juggalos, Beyond Good &amp; Evil HD, spoiler Pokemon, Tiny Iwata, and more! Oh, and Max Schaefer stops by to talk about all things Torchlight. Strap it o Tue, 08 Mar 2011 18:09:23 PST 1600-217 We've got BurgerTime pathos, Shanghai McGee, Suda51's boner, the far-flung future of the Gathering of Juggalos, Beyond Good &amp; Evil HD, spoiler Pokemon, Tiny Iwata, and more! Oh, and Max Schaefer stops by to talk about all things Torchlight. Strap it o We've got BurgerTime pathos, Shanghai McGee, Suda51's boner, the far-flung future of the Gathering of Juggalos, Beyond Good &amp; Evil HD, spoiler Pokemon, Tiny Iwata, and more! Oh, and Max Schaefer stops by to talk about all things Torchlight. Strap it o Giant Bomb no 8141 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03-03-2011 (GDC 2011) https://www.giantbomb.com/podcasts/giant-bombcast-03-03-2011-gdc-2011/1600-216/ Jeff and Brad lure a fresh batch of guests into the Giant Bomb bar, including Jeremiah Slaczka, Ben Gilbert, John Vignocchi, John Bellomy, John Drake, and more! Listen in to this noisy podcast as we discuss Chicago, Japan, Tron threesomes, and GDC 2011. Sun, 06 Mar 2011 14:19:25 PST 1600-216 Jeff and Brad lure a fresh batch of guests into the Giant Bomb bar, including Jeremiah Slaczka, Ben Gilbert, John Vignocchi, John Bellomy, John Drake, and more! Listen in to this noisy podcast as we discuss Chicago, Japan, Tron threesomes, and GDC 2011. Jeff and Brad lure a fresh batch of guests into the Giant Bomb bar, including Jeremiah Slaczka, Ben Gilbert, John Vignocchi, John Bellomy, John Drake, and more! Listen in to this noisy podcast as we discuss Chicago, Japan, Tron threesomes, and GDC 2011. Giant Bomb no 6366 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03-02-2011 (GDC 2011) https://www.giantbomb.com/podcasts/giant-bombcast-03-02-2011-gdc-2011/1600-215/ Jeff and Brad are joined by guests for the first of our two podcasts from Game Developers Conference 2011. Hang out with us as we chat with Adam Sessler, John Pearl, Chris Remo, Patrick Klepek, and more! Fri, 04 Mar 2011 11:39:27 PST 1600-215 Jeff and Brad are joined by guests for the first of our two podcasts from Game Developers Conference 2011. Hang out with us as we chat with Adam Sessler, John Pearl, Chris Remo, Patrick Klepek, and more! Jeff and Brad are joined by guests for the first of our two podcasts from Game Developers Conference 2011. Hang out with us as we chat with Adam Sessler, John Pearl, Chris Remo, Patrick Klepek, and more! Giant Bomb no 5280 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03-01-2011 https://www.giantbomb.com/podcasts/giant-bombcast-03-01-2011/1600-214/ Brad and Jeff went to the Microsoft showcase and have a lot to say about Batman: Arkham City, Gears of War 3, ketchup, and Vinny and Alex are here, too! WARNING: Nintendo downloads are also discussed. Tue, 01 Mar 2011 10:18:42 PST 1600-214 Brad and Jeff went to the Microsoft showcase and have a lot to say about Batman: Arkham City, Gears of War 3, ketchup, and Vinny and Alex are here, too! WARNING: Nintendo downloads are also discussed. Brad and Jeff went to the Microsoft showcase and have a lot to say about Batman: Arkham City, Gears of War 3, ketchup, and Vinny and Alex are here, too! WARNING: Nintendo downloads are also discussed. Giant Bomb no 7000 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 02-22-2011 https://www.giantbomb.com/podcasts/giant-bombcast-02-22-2011/1600-213/ Vinny punishes himself with 10 more inexplicable hours of Demon's Souls, Jeff tries to buy the publishing rights to RBI Baseball, Brad celebrates American royalty on Presidents Day, Ryan denounces saxophones, and everyone yells on this week's Bombcast! Tue, 22 Feb 2011 16:49:05 PST 1600-213 Vinny punishes himself with 10 more inexplicable hours of Demon's Souls, Jeff tries to buy the publishing rights to RBI Baseball, Brad celebrates American royalty on Presidents Day, Ryan denounces saxophones, and everyone yells on this week's Bombcast! Vinny punishes himself with 10 more inexplicable hours of Demon's Souls, Jeff tries to buy the publishing rights to RBI Baseball, Brad celebrates American royalty on Presidents Day, Ryan denounces saxophones, and everyone yells on this week's Bombcast! Giant Bomb no 7860 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 02-15-2011 https://www.giantbomb.com/podcasts/giant-bombcast-02-15-2011/1600-212/ Jeff and Ryan return from DICE with tales of chest models, Hollywood agents, outer space, and Facebook! We also discuss You Don't Know Jack, Stacking, Killzone 3, Marvel vs. Capcom 3, Duke Nukem Forever, and more! Tue, 15 Feb 2011 17:31:43 PST 1600-212 Jeff and Ryan return from DICE with tales of chest models, Hollywood agents, outer space, and Facebook! We also discuss You Don't Know Jack, Stacking, Killzone 3, Marvel vs. Capcom 3, Duke Nukem Forever, and more! Jeff and Ryan return from DICE with tales of chest models, Hollywood agents, outer space, and Facebook! We also discuss You Don't Know Jack, Stacking, Killzone 3, Marvel vs. Capcom 3, Duke Nukem Forever, and more! Giant Bomb no 8476 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 02-08-2011 https://www.giantbomb.com/podcasts/giant-bombcast-02-08-2011/1600-211/ Our expert team of broadcasters bring you the Super Bowl wrap-up coverage you crave, hitting other hot topics like, Dead Space subtitles, Stanley Kubrick and Terry Gilliam vs. Buckaroo Bonzai, Bionic Commando Rearmed 2, wizards, and more along the way! Tue, 08 Feb 2011 10:51:23 PST 1600-211 Our expert team of broadcasters bring you the Super Bowl wrap-up coverage you crave, hitting other hot topics like, Dead Space subtitles, Stanley Kubrick and Terry Gilliam vs. Buckaroo Bonzai, Bionic Commando Rearmed 2, wizards, and more along the way! Our expert team of broadcasters bring you the Super Bowl wrap-up coverage you crave, hitting other hot topics like, Dead Space subtitles, Stanley Kubrick and Terry Gilliam vs. Buckaroo Bonzai, Bionic Commando Rearmed 2, wizards, and more along the way! Giant Bomb no 8419 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 02-01-2011 https://www.giantbomb.com/podcasts/giant-bombcast-02-01-2011/1600-210/ Despite a compromised immune system, Ryan reclaims his rightful hosting duties, doing his best to keep it focused on Dead Space 2, Bionic Commando: Rearmed 2, the Sony NGP, and MMO pricing structures, and away from Jeff's insane Nintendo agenda. Ningenda? Tue, 01 Feb 2011 17:14:27 PST 1600-210 Despite a compromised immune system, Ryan reclaims his rightful hosting duties, doing his best to keep it focused on Dead Space 2, Bionic Commando: Rearmed 2, the Sony NGP, and MMO pricing structures, and away from Jeff's insane Nintendo agenda. Ningenda? Despite a compromised immune system, Ryan reclaims his rightful hosting duties, doing his best to keep it focused on Dead Space 2, Bionic Commando: Rearmed 2, the Sony NGP, and MMO pricing structures, and away from Jeff's insane Nintendo agenda. Ningenda? Giant Bomb no 8110 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 01-25-2011 https://www.giantbomb.com/podcasts/giant-bombcast-01-25-2011/1600-209/ With Ryan planted firmly on the bench, Jeff steps into the role of host and there's nothing you can do to stop him. Nothing! Also, the 3DS and PSP2 are totally discussed in exhaustive detail and/or speculation! Can you possibly afford to miss this? Tue, 25 Jan 2011 18:45:04 PST 1600-209 With Ryan planted firmly on the bench, Jeff steps into the role of host and there's nothing you can do to stop him. Nothing! Also, the 3DS and PSP2 are totally discussed in exhaustive detail and/or speculation! Can you possibly afford to miss this? With Ryan planted firmly on the bench, Jeff steps into the role of host and there's nothing you can do to stop him. Nothing! Also, the 3DS and PSP2 are totally discussed in exhaustive detail and/or speculation! Can you possibly afford to miss this? Giant Bomb no 8442 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 01-18-2011 https://www.giantbomb.com/podcasts/giant-bombcast-01-18-2011/1600-208/ Alex Navarro tags in on this week's conversations about DC Universe Online's shortcomings, whatever “Macho Man” Randy Savage is up to these days, the unexplored qualities of the Charlie Sheen movie The Chase, Final Fantasy XIII-2, and much more! Tue, 18 Jan 2011 16:23:29 PST 1600-208 Alex Navarro tags in on this week's conversations about DC Universe Online's shortcomings, whatever “Macho Man” Randy Savage is up to these days, the unexplored qualities of the Charlie Sheen movie The Chase, Final Fantasy XIII-2, and much more! Alex Navarro tags in on this week's conversations about DC Universe Online's shortcomings, whatever “Macho Man” Randy Savage is up to these days, the unexplored qualities of the Charlie Sheen movie The Chase, Final Fantasy XIII-2, and much more! Giant Bomb no 7586 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 01-11-2011 https://www.giantbomb.com/podcasts/giant-bombcast-01-11-2011/1600-207/ Jeff takes a break from his go-kart training to join our discussions of kill room aesthetics, earthquakes, Predator tech support, Mel Blanc oral reports, Borderlands sadism, ilomilo pronunciation, crank calls, crypto, and 3DS redesigns. Plus, a contest! Tue, 11 Jan 2011 16:25:50 PST 1600-207 Jeff takes a break from his go-kart training to join our discussions of kill room aesthetics, earthquakes, Predator tech support, Mel Blanc oral reports, Borderlands sadism, ilomilo pronunciation, crank calls, crypto, and 3DS redesigns. Plus, a contest! Jeff takes a break from his go-kart training to join our discussions of kill room aesthetics, earthquakes, Predator tech support, Mel Blanc oral reports, Borderlands sadism, ilomilo pronunciation, crank calls, crypto, and 3DS redesigns. Plus, a contest! Giant Bomb no 8448 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 01-04-2011 https://www.giantbomb.com/podcasts/giant-bombcast-01-04-2011/1600-206/ Ryan, Vinny, and Brad are joined by a very special flaxen-haired guest in this, our inaugural Bombcast of 2011! We return from our holiday break with heartwarming tales of family togetherness and... actually, it's mostly just games. Tue, 04 Jan 2011 12:23:42 PST 1600-206 Ryan, Vinny, and Brad are joined by a very special flaxen-haired guest in this, our inaugural Bombcast of 2011! We return from our holiday break with heartwarming tales of family togetherness and... actually, it's mostly just games. Ryan, Vinny, and Brad are joined by a very special flaxen-haired guest in this, our inaugural Bombcast of 2011! We return from our holiday break with heartwarming tales of family togetherness and... actually, it's mostly just games. Giant Bomb no 6505 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bomb Game of the Year 2010: Day Six https://www.giantbomb.com/podcasts/giant-bomb-game-of-the-year-2010-day-six/1600-205/ And lo, the sixth seal was broken, and it revealed our Best Game Room Release, Best Motion-Controlled Game, Worst Game of the Year, Most Disappointing Game, Best Multiplatform Game, and our 2010 Game of the Year! Thu, 30 Dec 2010 12:15:27 PST 1600-205 And lo, the sixth seal was broken, and it revealed our Best Game Room Release, Best Motion-Controlled Game, Worst Game of the Year, Most Disappointing Game, Best Multiplatform Game, and our 2010 Game of the Year! And lo, the sixth seal was broken, and it revealed our Best Game Room Release, Best Motion-Controlled Game, Worst Game of the Year, Most Disappointing Game, Best Multiplatform Game, and our 2010 Game of the Year! Giant Bomb no 9084 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bomb Game of the Year 2010: Day Five https://www.giantbomb.com/podcasts/giant-bomb-game-of-the-year-2010-day-five/1600-204/ Our descent into madness is almost complete as we enter day five of our deliberations, where we choose winners for The Northies - Best Performance by Nolan North, Best Competitive Multiplayer, Best Ending, the Take a Break Award, and Best PS3-Only Game. Thu, 30 Dec 2010 12:14:44 PST 1600-204 Our descent into madness is almost complete as we enter day five of our deliberations, where we choose winners for The Northies - Best Performance by Nolan North, Best Competitive Multiplayer, Best Ending, the Take a Break Award, and Best PS3-Only Game. Our descent into madness is almost complete as we enter day five of our deliberations, where we choose winners for The Northies - Best Performance by Nolan North, Best Competitive Multiplayer, Best Ending, the Take a Break Award, and Best PS3-Only Game. Giant Bomb no 0 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bomb Game of the Year 2010: Paul Barnett's Top 10 https://www.giantbomb.com/podcasts/giant-bomb-game-of-the-year-2010-paul-barnetts-top/1600-203/ EA Mythic's Paul Barnett brings some holiday cheer and his top 10 games of 2010. Fri, 24 Dec 2010 09:58:51 PST 1600-203 EA Mythic's Paul Barnett brings some holiday cheer and his top 10 games of 2010. EA Mythic's Paul Barnett brings some holiday cheer and his top 10 games of 2010. Giant Bomb no 0 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bomb Game of the Year 2010: Day Four https://www.giantbomb.com/podcasts/giant-bomb-game-of-the-year-2010-day-four/1600-200/ We pass the point of no return in our deliberations, which today include Character We'd Most Like to Party With, Dave's Eastern Bloc Game of the Year, Worst Trend, Best Story, and Best DS-Only Game. Fri, 24 Dec 2010 09:38:32 PST 1600-200 We pass the point of no return in our deliberations, which today include Character We'd Most Like to Party With, Dave's Eastern Bloc Game of the Year, Worst Trend, Best Story, and Best DS-Only Game. We pass the point of no return in our deliberations, which today include Character We'd Most Like to Party With, Dave's Eastern Bloc Game of the Year, Worst Trend, Best Story, and Best DS-Only Game. Giant Bomb no 3750 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bomb Game of the Year 2010: Day Three https://www.giantbomb.com/podcasts/giant-bomb-game-of-the-year-2010-day-three/1600-199/ Who will be the first to snap as we enter day three of our Game of the Year deliberations, which include Most Ridiculous Use of FMV, Most Improved Franchise, Most Egregious Use of Product Placement/In-Game Advertising, Worst Accent, and Best Wii-Only Game Fri, 24 Dec 2010 09:37:12 PST 1600-199 Who will be the first to snap as we enter day three of our Game of the Year deliberations, which include Most Ridiculous Use of FMV, Most Improved Franchise, Most Egregious Use of Product Placement/In-Game Advertising, Worst Accent, and Best Wii-Only Game Who will be the first to snap as we enter day three of our Game of the Year deliberations, which include Most Ridiculous Use of FMV, Most Improved Franchise, Most Egregious Use of Product Placement/In-Game Advertising, Worst Accent, and Best Wii-Only Game Giant Bomb no 0 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bomb Game of the Year 2010: Day Two https://www.giantbomb.com/podcasts/giant-bomb-game-of-the-year-2010-day-two/1600-198/ The battle continues with Best Downloadable Add-On, Best Co-Op, Best Download-Only Game, Best-Looking Game, and Best Xbox 360-Only Game. Fri, 24 Dec 2010 09:35:13 PST 1600-198 The battle continues with Best Downloadable Add-On, Best Co-Op, Best Download-Only Game, Best-Looking Game, and Best Xbox 360-Only Game. The battle continues with Best Downloadable Add-On, Best Co-Op, Best Download-Only Game, Best-Looking Game, and Best Xbox 360-Only Game. Giant Bomb no 6942 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bomb Game of the Year 2010: Day One https://www.giantbomb.com/podcasts/giant-bomb-game-of-the-year-2010-day-one/1600-197/ We open up our deliberations with 2010's 2009 Game of the Year, Best New Character, Best Original Song, Best Debut, and Best PC-Only Game. Fri, 24 Dec 2010 09:28:52 PST 1600-197 We open up our deliberations with 2010's 2009 Game of the Year, Best New Character, Best Original Song, Best Debut, and Best PC-Only Game. We open up our deliberations with 2010's 2009 Game of the Year, Best New Character, Best Original Song, Best Debut, and Best PC-Only Game. Giant Bomb no 5510 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 12-21-2010 https://www.giantbomb.com/podcasts/giant-bombcast-12-21-2010/1600-196/ Hey 2010! Put your head between your legs and kiss your ass goodbye with this all-emails edition of the Giant Bombcast! Tue, 21 Dec 2010 15:00:50 PST 1600-196 Hey 2010! Put your head between your legs and kiss your ass goodbye with this all-emails edition of the Giant Bombcast! Hey 2010! Put your head between your legs and kiss your ass goodbye with this all-emails edition of the Giant Bombcast! Giant Bomb no 6791 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 12-14-2010 https://www.giantbomb.com/podcasts/giant-bombcast-12-14-2010/1600-194/ We match three with PopCap's own Jeff Green, who joins us for this week's discussions of adult-themed Bejeweled, our Doritos Game of the Year, Andy Serkis' one-man show, inventing ancient artifacts for Uncharted 3, and much more! Tue, 14 Dec 2010 12:42:38 PST 1600-194 We match three with PopCap's own Jeff Green, who joins us for this week's discussions of adult-themed Bejeweled, our Doritos Game of the Year, Andy Serkis' one-man show, inventing ancient artifacts for Uncharted 3, and much more! We match three with PopCap's own Jeff Green, who joins us for this week's discussions of adult-themed Bejeweled, our Doritos Game of the Year, Andy Serkis' one-man show, inventing ancient artifacts for Uncharted 3, and much more! Giant Bomb no 9752 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 12-07-2010 https://www.giantbomb.com/podcasts/giant-bombcast-12-07-2010/1600-193/ Get your meat-eaters license, it's another episode of the Giant Bombcast! This week we put Assassin's Creed: Brotherhood to rest, address annoying save mechanics, catch up with Wesley Snipes, and more. There really are Bombcasts for every occasion! Tue, 07 Dec 2010 17:28:59 PST 1600-193 Get your meat-eaters license, it's another episode of the Giant Bombcast! This week we put Assassin's Creed: Brotherhood to rest, address annoying save mechanics, catch up with Wesley Snipes, and more. There really are Bombcasts for every occasion! Get your meat-eaters license, it's another episode of the Giant Bombcast! This week we put Assassin's Creed: Brotherhood to rest, address annoying save mechanics, catch up with Wesley Snipes, and more. There really are Bombcasts for every occasion! Giant Bomb no 8691 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 11-30-2010 https://www.giantbomb.com/podcasts/giant-bombcast-11-30-2010/1600-192/ We return from the Thanksgiving break ready to discuss milk and Pepsi, Ezio’s posse, expert Foley work, Rosetta Stone-induced panic, Tron, Japanese smooth jazz, Brad’s introduction to drifting, speed stacking, and more! Tue, 30 Nov 2010 13:23:16 PST 1600-192 We return from the Thanksgiving break ready to discuss milk and Pepsi, Ezio’s posse, expert Foley work, Rosetta Stone-induced panic, Tron, Japanese smooth jazz, Brad’s introduction to drifting, speed stacking, and more! We return from the Thanksgiving break ready to discuss milk and Pepsi, Ezio’s posse, expert Foley work, Rosetta Stone-induced panic, Tron, Japanese smooth jazz, Brad’s introduction to drifting, speed stacking, and more! Giant Bomb no 8389 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 11-23-2010 https://www.giantbomb.com/podcasts/giant-bombcast-11-23-2010/1600-191/ We put the Bomb in Bombcast with Assassin's Creed: Brotherhood's paranoid multiplayer, our collective Fable III disappointment, the dilating effect of Pac-Man Championship Edition DX, Drifting 101 in Need for Speed: Hot Pursuit, and more! Tue, 23 Nov 2010 15:26:36 PST 1600-191 We put the Bomb in Bombcast with Assassin's Creed: Brotherhood's paranoid multiplayer, our collective Fable III disappointment, the dilating effect of Pac-Man Championship Edition DX, Drifting 101 in Need for Speed: Hot Pursuit, and more! We put the Bomb in Bombcast with Assassin's Creed: Brotherhood's paranoid multiplayer, our collective Fable III disappointment, the dilating effect of Pac-Man Championship Edition DX, Drifting 101 in Need for Speed: Hot Pursuit, and more! Giant Bomb no 8835 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 11-16-2010 https://www.giantbomb.com/podcasts/giant-bombcast-11-16-2010/1600-190/ Brad returns from Seoul, Korea with a head cold and StarCraft II stories aplenty, Jeff and Vinny conside Ice Cube’s Russian and Sam Worthington’s Alaskan accents, Ryan sharpens his blades for Assassin’s Creed: Brotherhood, and we consider potential Tue, 16 Nov 2010 14:52:45 PST 1600-190 Brad returns from Seoul, Korea with a head cold and StarCraft II stories aplenty, Jeff and Vinny conside Ice Cube’s Russian and Sam Worthington’s Alaskan accents, Ryan sharpens his blades for Assassin’s Creed: Brotherhood, and we consider potential Brad returns from Seoul, Korea with a head cold and StarCraft II stories aplenty, Jeff and Vinny conside Ice Cube’s Russian and Sam Worthington’s Alaskan accents, Ryan sharpens his blades for Assassin’s Creed: Brotherhood, and we consider potential Giant Bomb no 8673 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 11-09-2010 https://www.giantbomb.com/podcasts/giant-bombcast-11-09-2010/1600-189/ With Ryan on the IR list, we lure Alex Navarro out of his van with some candy to talk about zombie reproduction, Fable III's wrinkle in time, the highs and lows of the Kinect launch, Call of Duty: Black Ops, the cancellation of NBA Elite 11, and more! Tue, 09 Nov 2010 14:59:27 PST 1600-189 With Ryan on the IR list, we lure Alex Navarro out of his van with some candy to talk about zombie reproduction, Fable III's wrinkle in time, the highs and lows of the Kinect launch, Call of Duty: Black Ops, the cancellation of NBA Elite 11, and more! With Ryan on the IR list, we lure Alex Navarro out of his van with some candy to talk about zombie reproduction, Fable III's wrinkle in time, the highs and lows of the Kinect launch, Call of Duty: Black Ops, the cancellation of NBA Elite 11, and more! Giant Bomb no 7726 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 11-02-2010 https://www.giantbomb.com/podcasts/giant-bombcast-11-02-2010/1600-188/ Ladies and gentlemen, here's the starting lineup for the 2010 World Champions, your San Francisco Giant... Bombcast! We check in from the riots to discuss Fable III, cell phone distraction in James Bond 007: Blood Stone, The Force Unleashed II, and more! Tue, 02 Nov 2010 18:29:46 PST 1600-188 Ladies and gentlemen, here's the starting lineup for the 2010 World Champions, your San Francisco Giant... Bombcast! We check in from the riots to discuss Fable III, cell phone distraction in James Bond 007: Blood Stone, The Force Unleashed II, and more! Ladies and gentlemen, here's the starting lineup for the 2010 World Champions, your San Francisco Giant... Bombcast! We check in from the riots to discuss Fable III, cell phone distraction in James Bond 007: Blood Stone, The Force Unleashed II, and more! Giant Bomb no 8866 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 10-26-2010 https://www.giantbomb.com/podcasts/giant-bombcast-10-26-2010/1600-187/ Shirtless masseurs, pancakes prepared by drunk firefighters, the Fallout fixing powers of the command console, the seasonal potential of Costume Quest, the end of the line for rhythm games, plus the very worst kind of cake, all in this week's Bombcast! Tue, 26 Oct 2010 17:02:42 PST 1600-187 Shirtless masseurs, pancakes prepared by drunk firefighters, the Fallout fixing powers of the command console, the seasonal potential of Costume Quest, the end of the line for rhythm games, plus the very worst kind of cake, all in this week's Bombcast! Shirtless masseurs, pancakes prepared by drunk firefighters, the Fallout fixing powers of the command console, the seasonal potential of Costume Quest, the end of the line for rhythm games, plus the very worst kind of cake, all in this week's Bombcast! Giant Bomb no 8352 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 10-19-2010 https://www.giantbomb.com/podcasts/giant-bombcast-10-19-2010/1600-186/ We bring in Alex Navarro to help us discuss the insane torrent of new releases, including Super Meat Boy, Kirby's Epic Yarn, Costume Quest, Fallout: New Vegas, EA Sports MMA, Vanquish, Game Dev Story, and much more! Tue, 19 Oct 2010 16:11:19 PST 1600-186 We bring in Alex Navarro to help us discuss the insane torrent of new releases, including Super Meat Boy, Kirby's Epic Yarn, Costume Quest, Fallout: New Vegas, EA Sports MMA, Vanquish, Game Dev Story, and much more! We bring in Alex Navarro to help us discuss the insane torrent of new releases, including Super Meat Boy, Kirby's Epic Yarn, Costume Quest, Fallout: New Vegas, EA Sports MMA, Vanquish, Game Dev Story, and much more! Giant Bomb no 9360 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 10-12-2010 https://www.giantbomb.com/podcasts/giant-bombcast-10-12-2010/1600-185/ We hold the tomato sauce AND the crust on this week's Bombcast, leaving plenty of room for funky coleslaw, Medal of Honor, Tron: Evolution - The Video Game, Rock Band 3, MODOK's fighting style, and many other delicious, wholesome toppings! Tue, 12 Oct 2010 18:30:05 PST 1600-185 We hold the tomato sauce AND the crust on this week's Bombcast, leaving plenty of room for funky coleslaw, Medal of Honor, Tron: Evolution - The Video Game, Rock Band 3, MODOK's fighting style, and many other delicious, wholesome toppings! We hold the tomato sauce AND the crust on this week's Bombcast, leaving plenty of room for funky coleslaw, Medal of Honor, Tron: Evolution - The Video Game, Rock Band 3, MODOK's fighting style, and many other delicious, wholesome toppings! Giant Bomb no 8727 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 10-05-2010 https://www.giantbomb.com/podcasts/giant-bombcast-10-05-2010/1600-184/ The Giant Bombcast heads to Kidsylvania to do battle with an army of Nazi zombies, Claptraps, fruit dealers, the Taliban, lambent Ice-Ts, and more! All in stunning 3-D!!! Tue, 05 Oct 2010 15:45:45 PST 1600-184 The Giant Bombcast heads to Kidsylvania to do battle with an army of Nazi zombies, Claptraps, fruit dealers, the Taliban, lambent Ice-Ts, and more! All in stunning 3-D!!! The Giant Bombcast heads to Kidsylvania to do battle with an army of Nazi zombies, Claptraps, fruit dealers, the Taliban, lambent Ice-Ts, and more! All in stunning 3-D!!! Giant Bomb no 8536 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 09-28-2010 https://www.giantbomb.com/podcasts/giant-bombcast-09-28-2010/1600-183/ We accidentally burn the Bombcast to the ground with our red-hot discussions of Civilization V, Minecraft, Dead Rising 2, the fate of old computer parts, and other nonsense! Tue, 28 Sep 2010 16:43:51 PST 1600-183 We accidentally burn the Bombcast to the ground with our red-hot discussions of Civilization V, Minecraft, Dead Rising 2, the fate of old computer parts, and other nonsense! We accidentally burn the Bombcast to the ground with our red-hot discussions of Civilization V, Minecraft, Dead Rising 2, the fate of old computer parts, and other nonsense! Giant Bomb no 7505 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 09-21-2010 https://www.giantbomb.com/podcasts/giant-bombcast-09-21-2010/1600-182/ It's the first meeting of the Giant Bomb Civilization V Support group as we spend a considerable amount of time discussing Sid Meier's latest, as well as more thoughts on Halo: Reach, Dead Rising 2: Case Zero, the Tokyo Game Show, and more! Tue, 21 Sep 2010 14:52:12 PST 1600-182 It's the first meeting of the Giant Bomb Civilization V Support group as we spend a considerable amount of time discussing Sid Meier's latest, as well as more thoughts on Halo: Reach, Dead Rising 2: Case Zero, the Tokyo Game Show, and more! It's the first meeting of the Giant Bomb Civilization V Support group as we spend a considerable amount of time discussing Sid Meier's latest, as well as more thoughts on Halo: Reach, Dead Rising 2: Case Zero, the Tokyo Game Show, and more! Giant Bomb no 9994 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 09-14-2010 https://www.giantbomb.com/podcasts/giant-bombcast-09-14-2010/1600-181/ We spend a whole lot of time talking about Halo: Reach and the history of the Halo franchise, get ridiculously excited about Pac-Man Championship Edition DX, and much more in this three-hour, free-as-all-hell episode of the Giant Bombcast! Tue, 14 Sep 2010 16:44:52 PST 1600-181 We spend a whole lot of time talking about Halo: Reach and the history of the Halo franchise, get ridiculously excited about Pac-Man Championship Edition DX, and much more in this three-hour, free-as-all-hell episode of the Giant Bombcast! We spend a whole lot of time talking about Halo: Reach and the history of the Halo franchise, get ridiculously excited about Pac-Man Championship Edition DX, and much more in this three-hour, free-as-all-hell episode of the Giant Bombcast! Giant Bomb no 10879 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Let's Talk About Memberships! https://www.giantbomb.com/podcasts/lets-talk-about-memberships/1600-180/ Giant Bomb's Ryan Davis and Jeff Gerstmann sit down with Whiskey Media's Dave Snider to talk about our new membership program. Wed, 08 Sep 2010 13:28:50 PST 1600-180 Giant Bomb's Ryan Davis and Jeff Gerstmann sit down with Whiskey Media's Dave Snider to talk about our new membership program. Giant Bomb's Ryan Davis and Jeff Gerstmann sit down with Whiskey Media's Dave Snider to talk about our new membership program. Giant Bomb no 0 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 09-07-2010 https://www.giantbomb.com/podcasts/giant-bombcast-09-07-2010/1600-179/ We recuperate from an amazing weekend at the Penny Arcade Expo and reflect on our time with Duke Nukem Forever, Portal 2 co-op, Mortal Kombat, Torchlight II, a menagerie of awesome and inventive indie games, and much more! Tue, 07 Sep 2010 15:05:07 PST 1600-179 We recuperate from an amazing weekend at the Penny Arcade Expo and reflect on our time with Duke Nukem Forever, Portal 2 co-op, Mortal Kombat, Torchlight II, a menagerie of awesome and inventive indie games, and much more! We recuperate from an amazing weekend at the Penny Arcade Expo and reflect on our time with Duke Nukem Forever, Portal 2 co-op, Mortal Kombat, Torchlight II, a menagerie of awesome and inventive indie games, and much more! Giant Bomb no 7290 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast Live! PAX 2010 https://www.giantbomb.com/podcasts/giant-bombcast-live-pax-2010/1600-177/ Enjoy the audio from Giant Bomb's live podcast panel at PAX 2010, featuring special guests John Vignocchi, Michael Pachter, Gary Whitta, and Jeff Green! Mon, 06 Sep 2010 11:19:11 PST 1600-177 Enjoy the audio from Giant Bomb's live podcast panel at PAX 2010, featuring special guests John Vignocchi, Michael Pachter, Gary Whitta, and Jeff Green! Enjoy the audio from Giant Bomb's live podcast panel at PAX 2010, featuring special guests John Vignocchi, Michael Pachter, Gary Whitta, and Jeff Green! Giant Bomb no 5540 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 08-31-2010 https://www.giantbomb.com/podcasts/giant-bombcast-08-31-2010/1600-176/ Giant Bomb newsman Brad Nicholson takes a quick break from the free weights and joins our merry band this week to discuss Bayonetta, Shank, Halo: Reach, the Xbox Live price hike, the latest installment in the award-winning myNotebook franchise, and more! Tue, 31 Aug 2010 14:55:38 PST 1600-176 Giant Bomb newsman Brad Nicholson takes a quick break from the free weights and joins our merry band this week to discuss Bayonetta, Shank, Halo: Reach, the Xbox Live price hike, the latest installment in the award-winning myNotebook franchise, and more! Giant Bomb newsman Brad Nicholson takes a quick break from the free weights and joins our merry band this week to discuss Bayonetta, Shank, Halo: Reach, the Xbox Live price hike, the latest installment in the award-winning myNotebook franchise, and more! Giant Bomb no 7144 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 08-24-2010 https://www.giantbomb.com/podcasts/giant-bombcast-08-24-2010/1600-175/ Vinny makes some bad food decisions, Jeff gets blinded by the speed of Quake, Ryan buys a bunch of LaserDiscs, and Brad, against all odds, continues obsessing on StarCraft II, in this week's edition of the Giant Bombcast! Tue, 24 Aug 2010 18:34:34 PST 1600-175 Vinny makes some bad food decisions, Jeff gets blinded by the speed of Quake, Ryan buys a bunch of LaserDiscs, and Brad, against all odds, continues obsessing on StarCraft II, in this week's edition of the Giant Bombcast! Vinny makes some bad food decisions, Jeff gets blinded by the speed of Quake, Ryan buys a bunch of LaserDiscs, and Brad, against all odds, continues obsessing on StarCraft II, in this week's edition of the Giant Bombcast! Giant Bomb no 8198 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 08-17-2010 https://www.giantbomb.com/podcasts/giant-bombcast-08-17-2010/1600-174/ With Vinny out on special assignment, we're joined by none other than Jeff Green for this XXL edition of the Giant Bombcast, where we discuss the joys of unemployment, Kane &amp; Lynch 2, BioShock Infinite, the state of id Software, Dance Central, and muc Tue, 17 Aug 2010 16:22:10 PST 1600-174 With Vinny out on special assignment, we're joined by none other than Jeff Green for this XXL edition of the Giant Bombcast, where we discuss the joys of unemployment, Kane &amp; Lynch 2, BioShock Infinite, the state of id Software, Dance Central, and muc With Vinny out on special assignment, we're joined by none other than Jeff Green for this XXL edition of the Giant Bombcast, where we discuss the joys of unemployment, Kane &amp; Lynch 2, BioShock Infinite, the state of id Software, Dance Central, and muc Giant Bomb no 8644 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 08-10-2010 https://www.giantbomb.com/podcasts/giant-bombcast-08-10-2010/1600-173/ Arachnophobia rears its ugly, murderous head this week, and yet we soldier on with discussions of NBA Jam, Batman, Pokemon, and of course, StarCraft, StarCraft, StarCraft. Tue, 10 Aug 2010 15:19:15 PST 1600-173 Arachnophobia rears its ugly, murderous head this week, and yet we soldier on with discussions of NBA Jam, Batman, Pokemon, and of course, StarCraft, StarCraft, StarCraft. Arachnophobia rears its ugly, murderous head this week, and yet we soldier on with discussions of NBA Jam, Batman, Pokemon, and of course, StarCraft, StarCraft, StarCraft. Giant Bomb no 8025 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 08-03-2010 https://www.giantbomb.com/podcasts/giant-bombcast-08-03-2010/1600-172/ Though Brad spends an inordinate amount of time talking about StarCraft II this week, we still find time to talk a little truck, debate the console future of Battlefield 3, discuss John Riccitiello's hair-suit, and much more. Good luck, have Batman! Tue, 03 Aug 2010 13:01:03 PST 1600-172 Though Brad spends an inordinate amount of time talking about StarCraft II this week, we still find time to talk a little truck, debate the console future of Battlefield 3, discuss John Riccitiello's hair-suit, and much more. Good luck, have Batman! Though Brad spends an inordinate amount of time talking about StarCraft II this week, we still find time to talk a little truck, debate the console future of Battlefield 3, discuss John Riccitiello's hair-suit, and much more. Good luck, have Batman! Giant Bomb no 7990 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07-27-2010 https://www.giantbomb.com/podcasts/giant-bombcast-07-27-2010/1600-171/ Vinny and Ryan recount their weekend adventures in arcade-hunting, Brad exhibits a Pavlovian response to the very mention of StarCraft II, and Jeff goes toobin' with Toobin'. Tue, 27 Jul 2010 14:32:59 PST 1600-171 Vinny and Ryan recount their weekend adventures in arcade-hunting, Brad exhibits a Pavlovian response to the very mention of StarCraft II, and Jeff goes toobin' with Toobin'. Vinny and Ryan recount their weekend adventures in arcade-hunting, Brad exhibits a Pavlovian response to the very mention of StarCraft II, and Jeff goes toobin' with Toobin'. Giant Bomb no 8247 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07-20-2010 https://www.giantbomb.com/podcasts/giant-bombcast-07-20-2010/1600-170/ We're joined by a very special guest on this week's Bombcast, where we talk about our classic arcade experience at California Extreme 2010, the dark arts of Limbo, the fate of 1 vs. 100, bad video-game television shows, and much more! Tue, 20 Jul 2010 18:26:32 PST 1600-170 We're joined by a very special guest on this week's Bombcast, where we talk about our classic arcade experience at California Extreme 2010, the dark arts of Limbo, the fate of 1 vs. 100, bad video-game television shows, and much more! We're joined by a very special guest on this week's Bombcast, where we talk about our classic arcade experience at California Extreme 2010, the dark arts of Limbo, the fate of 1 vs. 100, bad video-game television shows, and much more! Giant Bomb no 7863 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07-13-2010 https://www.giantbomb.com/podcasts/giant-bombcast-07-13-2010/1600-169/ Dave sits in while Brad recovers from a non-fish-can-related food injury and we do some competition-grade jaw-jacking about Singularity, Puzzle Agent, EVO 2010, Internet awfulness, vinyl collectors in space, pre-LC, the laziness of zombies, and more! Tue, 13 Jul 2010 17:40:31 PST 1600-169 Dave sits in while Brad recovers from a non-fish-can-related food injury and we do some competition-grade jaw-jacking about Singularity, Puzzle Agent, EVO 2010, Internet awfulness, vinyl collectors in space, pre-LC, the laziness of zombies, and more! Dave sits in while Brad recovers from a non-fish-can-related food injury and we do some competition-grade jaw-jacking about Singularity, Puzzle Agent, EVO 2010, Internet awfulness, vinyl collectors in space, pre-LC, the laziness of zombies, and more! Giant Bomb no 8070 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07-06-2010 https://www.giantbomb.com/podcasts/giant-bombcast-07-06-2010/1600-168/ We return from celebrating America's Birthday with all our fingers and toes miraculously intact to christen Giant Bomb's new San Francisco offices with plenty of hot, sweaty talk about Crackdown 2, Singularity, illegal fireworks, and more! Tue, 06 Jul 2010 21:58:59 PST 1600-168 We return from celebrating America's Birthday with all our fingers and toes miraculously intact to christen Giant Bomb's new San Francisco offices with plenty of hot, sweaty talk about Crackdown 2, Singularity, illegal fireworks, and more! We return from celebrating America's Birthday with all our fingers and toes miraculously intact to christen Giant Bomb's new San Francisco offices with plenty of hot, sweaty talk about Crackdown 2, Singularity, illegal fireworks, and more! Giant Bomb no 8542 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 06-29-2010 https://www.giantbomb.com/podcasts/giant-bombcast-06-29-2010/1600-167/ We talk about Sherlock Holmes, EVE Online, Uplink, Risk: Factions, APB, Transformers: War For Cybertron, DeathSpank, and more, before being driven absolutely mad by the sounds of deliberately broken electronics in our final Sausalito-based Bombcast! Tue, 29 Jun 2010 17:19:09 PST 1600-167 We talk about Sherlock Holmes, EVE Online, Uplink, Risk: Factions, APB, Transformers: War For Cybertron, DeathSpank, and more, before being driven absolutely mad by the sounds of deliberately broken electronics in our final Sausalito-based Bombcast! We talk about Sherlock Holmes, EVE Online, Uplink, Risk: Factions, APB, Transformers: War For Cybertron, DeathSpank, and more, before being driven absolutely mad by the sounds of deliberately broken electronics in our final Sausalito-based Bombcast! Giant Bomb no 8417 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 06-22-2010 https://www.giantbomb.com/podcasts/giant-bombcast-06-22-2010/1600-166/ We return to our regularly scheduled Bombcast with a little E3 wrap-up. Jeff and Brad indulge their compulsive Mortal Kombat needs, Ryan considers Kinect achievements, and Vinny keeps the Bombcast blue! Tue, 22 Jun 2010 18:49:45 PST 1600-166 We return to our regularly scheduled Bombcast with a little E3 wrap-up. Jeff and Brad indulge their compulsive Mortal Kombat needs, Ryan considers Kinect achievements, and Vinny keeps the Bombcast blue! We return to our regularly scheduled Bombcast with a little E3 wrap-up. Jeff and Brad indulge their compulsive Mortal Kombat needs, Ryan considers Kinect achievements, and Vinny keeps the Bombcast blue! Giant Bomb no 7096 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast E3 2010 Day Three https://www.giantbomb.com/podcasts/giant-bombcast-e3-2010-day-three/1600-165/ E3 2010 is over! As the Lakers win the Finals and LA riots outside, we produce plenty of our own chaos with special guests Dino Ignacio, Paul Barnett, Leigh Alexander, Eric Pope, Chris Tilton, and alcohol. Fri, 18 Jun 2010 13:31:36 PST 1600-165 E3 2010 is over! As the Lakers win the Finals and LA riots outside, we produce plenty of our own chaos with special guests Dino Ignacio, Paul Barnett, Leigh Alexander, Eric Pope, Chris Tilton, and alcohol. E3 2010 is over! As the Lakers win the Finals and LA riots outside, we produce plenty of our own chaos with special guests Dino Ignacio, Paul Barnett, Leigh Alexander, Eric Pope, Chris Tilton, and alcohol. Giant Bomb no 10633 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast E3 2010 Day Two https://www.giantbomb.com/podcasts/giant-bombcast-e3-2010-day-two/1600-164/ This is one for the books. Nearly three hours of Jeff Bridges, regrettable impressions, even more regrettable wagers, Spec Ops: The Line, Rock Band 3, Dance Central, SOCOM 4, Fable III, Gears of War 3, Halo: Reach, Deus Ex: Human Revolution, Def Jam: Raps Thu, 17 Jun 2010 02:02:54 PST 1600-164 This is one for the books. Nearly three hours of Jeff Bridges, regrettable impressions, even more regrettable wagers, Spec Ops: The Line, Rock Band 3, Dance Central, SOCOM 4, Fable III, Gears of War 3, Halo: Reach, Deus Ex: Human Revolution, Def Jam: Raps This is one for the books. Nearly three hours of Jeff Bridges, regrettable impressions, even more regrettable wagers, Spec Ops: The Line, Rock Band 3, Dance Central, SOCOM 4, Fable III, Gears of War 3, Halo: Reach, Deus Ex: Human Revolution, Def Jam: Raps Giant Bomb no 10731 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast E3 2010 Day One https://www.giantbomb.com/podcasts/giant-bombcast-e3-2010-day-one/1600-163/ With day one come to a close, we rap about the Nintendo and Sony press conferences, Zelda, our hands-on experiences with the 3DS, Jack Tretton, Need for Speed: Hot Pursuit, and more Mortal Kombat than the law will allow. Wed, 16 Jun 2010 00:20:48 PST 1600-163 With day one come to a close, we rap about the Nintendo and Sony press conferences, Zelda, our hands-on experiences with the 3DS, Jack Tretton, Need for Speed: Hot Pursuit, and more Mortal Kombat than the law will allow. With day one come to a close, we rap about the Nintendo and Sony press conferences, Zelda, our hands-on experiences with the 3DS, Jack Tretton, Need for Speed: Hot Pursuit, and more Mortal Kombat than the law will allow. Giant Bomb no 5926 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast E3 2010 Day Zero https://www.giantbomb.com/podcasts/giant-bombcast-e3-2010-day-zero/1600-162/ We run down the day's events, including the Microsoft, Electronic Arts, and Ubisoft press conferences, plus some first-hand Kinect experiences and the oversized Activision soiree at the Staples Center. Tue, 15 Jun 2010 01:21:21 PST 1600-162 We run down the day's events, including the Microsoft, Electronic Arts, and Ubisoft press conferences, plus some first-hand Kinect experiences and the oversized Activision soiree at the Staples Center. We run down the day's events, including the Microsoft, Electronic Arts, and Ubisoft press conferences, plus some first-hand Kinect experiences and the oversized Activision soiree at the Staples Center. Giant Bomb no 4568 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast E3 2010 Day Minus One https://www.giantbomb.com/podcasts/giant-bombcast-e3-2010-day-minus-one/1600-161/ We snare a wood nymph and bring it back to the Bomb House to tell us all about Microsoft's Cirque du Soleil show, the Kinect reveal, and the Xbox 360 slim. Also, white smocks for everyone! Sun, 13 Jun 2010 23:55:52 PST 1600-161 We snare a wood nymph and bring it back to the Bomb House to tell us all about Microsoft's Cirque du Soleil show, the Kinect reveal, and the Xbox 360 slim. Also, white smocks for everyone! We snare a wood nymph and bring it back to the Bomb House to tell us all about Microsoft's Cirque du Soleil show, the Kinect reveal, and the Xbox 360 slim. Also, white smocks for everyone! Giant Bomb no 0 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 06-08-2010 https://www.giantbomb.com/podcasts/giant-bombcast-06-08-2010/1600-160/ In our last regular Bombcast before E3 2010, we discuss overconfident drum reveals, Kid Rock's authenticity, Ice-T on the internet, Infamous 2, Kevin Butler's E3 presence, Activision's independence, Gene Simmons, Hulu on the 360, PSP fire sales, and more! Tue, 08 Jun 2010 19:08:24 PST 1600-160 In our last regular Bombcast before E3 2010, we discuss overconfident drum reveals, Kid Rock's authenticity, Ice-T on the internet, Infamous 2, Kevin Butler's E3 presence, Activision's independence, Gene Simmons, Hulu on the 360, PSP fire sales, and more! In our last regular Bombcast before E3 2010, we discuss overconfident drum reveals, Kid Rock's authenticity, Ice-T on the internet, Infamous 2, Kevin Butler's E3 presence, Activision's independence, Gene Simmons, Hulu on the 360, PSP fire sales, and more! Giant Bomb no 7681 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 06-01-2010 https://www.giantbomb.com/podcasts/giant-bombcast-06-01-2010/1600-159/ We return from our glorious three-day weekend rested and ready for lengthy discussions about Red Dead Redemption, Alpha Protocol, Crackdown 2, Killzone 3, J Allard and Robbie Bach's departures from Microsoft, Insomniac's multiplatform deal, and more! Tue, 01 Jun 2010 16:23:26 PST 1600-159 We return from our glorious three-day weekend rested and ready for lengthy discussions about Red Dead Redemption, Alpha Protocol, Crackdown 2, Killzone 3, J Allard and Robbie Bach's departures from Microsoft, Insomniac's multiplatform deal, and more! We return from our glorious three-day weekend rested and ready for lengthy discussions about Red Dead Redemption, Alpha Protocol, Crackdown 2, Killzone 3, J Allard and Robbie Bach's departures from Microsoft, Insomniac's multiplatform deal, and more! Giant Bomb no 7419 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 05-25-2010 https://www.giantbomb.com/podcasts/giant-bombcast-05-25-2010/1600-158/ Jeff returns with tales of Tron: Evolution, Pirates of the Caribbean: Armada of the Damned, and mini-cheeseburgers. We also dig into Red Dead Redemption's slow start, Blur's kart comparisons, Killzone 3, the trajectory of J Allard, and much more! Tue, 25 May 2010 18:09:11 PST 1600-158 Jeff returns with tales of Tron: Evolution, Pirates of the Caribbean: Armada of the Damned, and mini-cheeseburgers. We also dig into Red Dead Redemption's slow start, Blur's kart comparisons, Killzone 3, the trajectory of J Allard, and much more! Jeff returns with tales of Tron: Evolution, Pirates of the Caribbean: Armada of the Damned, and mini-cheeseburgers. We also dig into Red Dead Redemption's slow start, Blur's kart comparisons, Killzone 3, the trajectory of J Allard, and much more! Giant Bomb no 7791 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 05-18-2010 https://www.giantbomb.com/podcasts/giant-bombcast-05-18-2010/1600-157/ Get ready for a little three-man dance as Ryan, Vinny, and Brad shed light on what makes Damnation so awful, the dry heat of Prince of Persia: The Forgotten Sands, the Bruckheimerian appeal of Split/Second, the ongoing Korean Starcraft scandal, and more! Tue, 18 May 2010 15:36:43 PST 1600-157 Get ready for a little three-man dance as Ryan, Vinny, and Brad shed light on what makes Damnation so awful, the dry heat of Prince of Persia: The Forgotten Sands, the Bruckheimerian appeal of Split/Second, the ongoing Korean Starcraft scandal, and more! Get ready for a little three-man dance as Ryan, Vinny, and Brad shed light on what makes Damnation so awful, the dry heat of Prince of Persia: The Forgotten Sands, the Bruckheimerian appeal of Split/Second, the ongoing Korean Starcraft scandal, and more! Giant Bomb no 7288 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 05-11-2010 https://www.giantbomb.com/podcasts/giant-bombcast-05-11-2010/1600-156/ We're joined by two very special guests as we discuss Skate 3, Alan Wake, EA's multiplayer offensive, in-game advertising, Michael Ironside's LittleBigPlanet 2 audition, Marvel vs. Capcom 3, and much more on this week's Bombcast! Tue, 11 May 2010 13:31:56 PST 1600-156 We're joined by two very special guests as we discuss Skate 3, Alan Wake, EA's multiplayer offensive, in-game advertising, Michael Ironside's LittleBigPlanet 2 audition, Marvel vs. Capcom 3, and much more on this week's Bombcast! We're joined by two very special guests as we discuss Skate 3, Alan Wake, EA's multiplayer offensive, in-game advertising, Michael Ironside's LittleBigPlanet 2 audition, Marvel vs. Capcom 3, and much more on this week's Bombcast! Giant Bomb no 7842 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 05-04-2010 https://www.giantbomb.com/podcasts/giant-bombcast-05-04-2010/1600-155/ Gerstmann goes off on headshots, Vinny gets Dieseled, Brad defends his slap-worthy sunburn, Ryan succumbs to the madness of the Mickey Rourke Whopper, and we still find the time to talk about some damn games on this week's Bombcast! Tue, 04 May 2010 13:39:55 PST 1600-155 Gerstmann goes off on headshots, Vinny gets Dieseled, Brad defends his slap-worthy sunburn, Ryan succumbs to the madness of the Mickey Rourke Whopper, and we still find the time to talk about some damn games on this week's Bombcast! Gerstmann goes off on headshots, Vinny gets Dieseled, Brad defends his slap-worthy sunburn, Ryan succumbs to the madness of the Mickey Rourke Whopper, and we still find the time to talk about some damn games on this week's Bombcast! Giant Bomb no 7144 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 04-27-2010 https://www.giantbomb.com/podcasts/giant-bombcast-04-27-2010/1600-154/ We tackle Just Cause 2 mods, Super Street Fighter IV, Starcraft haircare products, Halo: Reach, the cameraman in Kane &amp; Lynch 2: Dog Days, the intellectual property rights for RZA's mocap, the fool's promise of another GoldenEye game, and more! Tue, 27 Apr 2010 15:49:54 PST 1600-154 We tackle Just Cause 2 mods, Super Street Fighter IV, Starcraft haircare products, Halo: Reach, the cameraman in Kane &amp; Lynch 2: Dog Days, the intellectual property rights for RZA's mocap, the fool's promise of another GoldenEye game, and more! We tackle Just Cause 2 mods, Super Street Fighter IV, Starcraft haircare products, Halo: Reach, the cameraman in Kane &amp; Lynch 2: Dog Days, the intellectual property rights for RZA's mocap, the fool's promise of another GoldenEye game, and more! Giant Bomb no 7879 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 04-20-2010 https://www.giantbomb.com/podcasts/giant-bombcast-04-20-2010/1600-153/ Jeff tells us all about the games of Captivate 2010 and we reflect on last week's Xboxalypse, plus discussions of Nick Nolte's role in South Korea's Starcraft scandal, Nolan Bushnell's glorious return to Atari, and, you know, other stuff! Bombcast! Tue, 20 Apr 2010 14:05:00 PST 1600-153 Jeff tells us all about the games of Captivate 2010 and we reflect on last week's Xboxalypse, plus discussions of Nick Nolte's role in South Korea's Starcraft scandal, Nolan Bushnell's glorious return to Atari, and, you know, other stuff! Bombcast! Jeff tells us all about the games of Captivate 2010 and we reflect on last week's Xboxalypse, plus discussions of Nick Nolte's role in South Korea's Starcraft scandal, Nolan Bushnell's glorious return to Atari, and, you know, other stuff! Bombcast! Giant Bomb no 7357 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 04-13-2010 https://www.giantbomb.com/podcasts/giant-bombcast-04-13-2010/1600-152/ We discuss high-score tactics in Yar's Revenge, Bleszinski vs Bieber, the birth of Respawn Entertainment, the exciting conclusion to our Splinter Cell: Conviction wager, the potato turducken, and, if you can believe it, much more! Tue, 13 Apr 2010 13:59:44 PST 1600-152 We discuss high-score tactics in Yar's Revenge, Bleszinski vs Bieber, the birth of Respawn Entertainment, the exciting conclusion to our Splinter Cell: Conviction wager, the potato turducken, and, if you can believe it, much more! We discuss high-score tactics in Yar's Revenge, Bleszinski vs Bieber, the birth of Respawn Entertainment, the exciting conclusion to our Splinter Cell: Conviction wager, the potato turducken, and, if you can believe it, much more! Giant Bomb no 8267 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 04-06-2010 https://www.giantbomb.com/podcasts/giant-bombcast-04-06-2010/1600-151/ Tested.com's own Will Smith and Norm Chan join Ryan and Vinny to discuss the finer points of technology vs. science-ology, iPad return policies, OCD in Just Cause 2, the most expensive game of Scrabble ever, Liar's Day highlights, and more! Tue, 06 Apr 2010 17:04:23 PST 1600-151 Tested.com's own Will Smith and Norm Chan join Ryan and Vinny to discuss the finer points of technology vs. science-ology, iPad return policies, OCD in Just Cause 2, the most expensive game of Scrabble ever, Liar's Day highlights, and more! Tested.com's own Will Smith and Norm Chan join Ryan and Vinny to discuss the finer points of technology vs. science-ology, iPad return policies, OCD in Just Cause 2, the most expensive game of Scrabble ever, Liar's Day highlights, and more! Giant Bomb no 8063 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03-30-2010 https://www.giantbomb.com/podcasts/giant-bombcast-03-30-2010/1600-150/ Jeff returns from the Beast Coast and Brad recovers from a bad case of Banana Mouth just in time to discuss UFC Undisputed 2010, PAX East highlights, Just Cause 2, and more edge-of-your-seat console firmware conversations than you can possibly handle! Tue, 30 Mar 2010 16:51:48 PST 1600-150 Jeff returns from the Beast Coast and Brad recovers from a bad case of Banana Mouth just in time to discuss UFC Undisputed 2010, PAX East highlights, Just Cause 2, and more edge-of-your-seat console firmware conversations than you can possibly handle! Jeff returns from the Beast Coast and Brad recovers from a bad case of Banana Mouth just in time to discuss UFC Undisputed 2010, PAX East highlights, Just Cause 2, and more edge-of-your-seat console firmware conversations than you can possibly handle! Giant Bomb no 8374 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03-23-2010 https://www.giantbomb.com/podcasts/giant-bombcast-03-23-2010/1600-149/ It's your favorite Farmer's Almanac with the latest on the Nintendo 3DS, Dragon Age: Awakening, God of War III, Command &amp; Conquer 4, Dawn of War II: Chaos Rising, Super Street Fighter IV, David Cage's take on one of our favorite Flash games, and more! Tue, 23 Mar 2010 13:44:41 PST 1600-149 It's your favorite Farmer's Almanac with the latest on the Nintendo 3DS, Dragon Age: Awakening, God of War III, Command &amp; Conquer 4, Dawn of War II: Chaos Rising, Super Street Fighter IV, David Cage's take on one of our favorite Flash games, and more! It's your favorite Farmer's Almanac with the latest on the Nintendo 3DS, Dragon Age: Awakening, God of War III, Command &amp; Conquer 4, Dawn of War II: Chaos Rising, Super Street Fighter IV, David Cage's take on one of our favorite Flash games, and more! Giant Bomb no 9068 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03-16-2010 https://www.giantbomb.com/podcasts/giant-bombcast-03-16-2010/1600-148/ We recover from GDC 2010 to bring you the latest on Splinter Cell: Conviction, Mafia II, Medal of Honor, Final Fantasy XIII, Yakuza 3, Hunted: The Demon's Forge, Lara Croft and the Guardian of Light, Modern Warfare 2 DLC, PlayStation Move, and much more! Tue, 16 Mar 2010 17:59:34 PST 1600-148 We recover from GDC 2010 to bring you the latest on Splinter Cell: Conviction, Mafia II, Medal of Honor, Final Fantasy XIII, Yakuza 3, Hunted: The Demon's Forge, Lara Croft and the Guardian of Light, Modern Warfare 2 DLC, PlayStation Move, and much more! We recover from GDC 2010 to bring you the latest on Splinter Cell: Conviction, Mafia II, Medal of Honor, Final Fantasy XIII, Yakuza 3, Hunted: The Demon's Forge, Lara Croft and the Guardian of Light, Modern Warfare 2 DLC, PlayStation Move, and much more! Giant Bomb no 8208 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast: GDC 2010 Day Two https://www.giantbomb.com/podcasts/giant-bombcast-gdc-2010-day-two/1600-147/ We're joined by Mega64 and 5th Cell for our second and final GDC 2010 Bombcast, where we spend more time talking about Tommy Tallarico, new objects for Scribblenauts 2, and, surprise surprise, Lincoln Force than we do the actual Game Developers Conference Fri, 12 Mar 2010 23:22:21 PST 1600-147 We're joined by Mega64 and 5th Cell for our second and final GDC 2010 Bombcast, where we spend more time talking about Tommy Tallarico, new objects for Scribblenauts 2, and, surprise surprise, Lincoln Force than we do the actual Game Developers Conference We're joined by Mega64 and 5th Cell for our second and final GDC 2010 Bombcast, where we spend more time talking about Tommy Tallarico, new objects for Scribblenauts 2, and, surprise surprise, Lincoln Force than we do the actual Game Developers Conference Giant Bomb no 5736 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast: GDC 2010 Day One https://www.giantbomb.com/podcasts/giant-bombcast-gdc-2010-day-one/1600-146/ A rotating cast of characters from 343 Studios, Irrational Games, 38 Studios, and Capcom--among others--join us for some chaotic conversation in our first podcast from GDC 2010. Fri, 12 Mar 2010 01:40:22 PST 1600-146 A rotating cast of characters from 343 Studios, Irrational Games, 38 Studios, and Capcom--among others--join us for some chaotic conversation in our first podcast from GDC 2010. A rotating cast of characters from 343 Studios, Irrational Games, 38 Studios, and Capcom--among others--join us for some chaotic conversation in our first podcast from GDC 2010. Giant Bomb no 6022 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03-09-2010 https://www.giantbomb.com/podcasts/giant-bombcast-03-09-2010/1600-145/ We are joined by special guest "Vinny Caravella" as we warm up for GDC 2010 with close calls with Bam Margera, the scrum master certification process, the literal definition of Phoenix Down, Ryan's Abe Lincoln action game, and much more! Tue, 09 Mar 2010 18:03:54 PST 1600-145 We are joined by special guest "Vinny Caravella" as we warm up for GDC 2010 with close calls with Bam Margera, the scrum master certification process, the literal definition of Phoenix Down, Ryan's Abe Lincoln action game, and much more! We are joined by special guest "Vinny Caravella" as we warm up for GDC 2010 with close calls with Bam Margera, the scrum master certification process, the literal definition of Phoenix Down, Ryan's Abe Lincoln action game, and much more! Giant Bomb no 8708 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03-02-2010 https://www.giantbomb.com/podcasts/giant-bombcast-03-02-2010/1600-144/ We break into our regularly scheduled podcast to talk about today's Infinity Ward news, then it's on to a sleepy discussion of Metroid: Other M, God of War III, Battlefield: Bad Company 2, and something that qualifies as much, much more! Tue, 02 Mar 2010 17:45:51 PST 1600-144 We break into our regularly scheduled podcast to talk about today's Infinity Ward news, then it's on to a sleepy discussion of Metroid: Other M, God of War III, Battlefield: Bad Company 2, and something that qualifies as much, much more! We break into our regularly scheduled podcast to talk about today's Infinity Ward news, then it's on to a sleepy discussion of Metroid: Other M, God of War III, Battlefield: Bad Company 2, and something that qualifies as much, much more! Giant Bomb no 9283 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 02-23-2010 https://www.giantbomb.com/podcasts/giant-bombcast-02-23-2010/1600-143/ A smokey-voiced stranger pulls up a chair and joins in on our discussions of Heavy Rain, StarCraft II, C&amp;C4, Dragon Age, Prince of Persia, Borderlands, Just Cause 2, Bad Company 2, Alan Wake, Fallout: New Vegas, and more. Damn, that's a lot of games! Tue, 23 Feb 2010 17:50:46 PST 1600-143 A smokey-voiced stranger pulls up a chair and joins in on our discussions of Heavy Rain, StarCraft II, C&amp;C4, Dragon Age, Prince of Persia, Borderlands, Just Cause 2, Bad Company 2, Alan Wake, Fallout: New Vegas, and more. Damn, that's a lot of games! A smokey-voiced stranger pulls up a chair and joins in on our discussions of Heavy Rain, StarCraft II, C&amp;C4, Dragon Age, Prince of Persia, Borderlands, Just Cause 2, Bad Company 2, Alan Wake, Fallout: New Vegas, and more. Damn, that's a lot of games! Giant Bomb no 8774 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 02-16-2010 https://www.giantbomb.com/podcasts/giant-bombcast-02-16-2010/1600-142/ Topics open for discussion in this week's support group include Vinny's crippling Mass Effect addiction, Jeff's irrational fear of Myst, Ryan's inappropriate Wii Shop music fixation, and Drew's... well, Drew's thing is off-limits for now. Tue, 16 Feb 2010 23:14:58 PST 1600-142 Topics open for discussion in this week's support group include Vinny's crippling Mass Effect addiction, Jeff's irrational fear of Myst, Ryan's inappropriate Wii Shop music fixation, and Drew's... well, Drew's thing is off-limits for now. Topics open for discussion in this week's support group include Vinny's crippling Mass Effect addiction, Jeff's irrational fear of Myst, Ryan's inappropriate Wii Shop music fixation, and Drew's... well, Drew's thing is off-limits for now. Giant Bomb no 7997 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 02-09-2010 https://www.giantbomb.com/podcasts/giant-bombcast-02-09-2010/1600-141/ We turn in our guns and our badges for this episode about fake websites, BioShock 2, the end of Xbox Live, the fourth Sonic the Hedgehog game, the most delicious Pokemon, Holodays, modern monocles, intern abuse, and more! We don't care what the commission Tue, 09 Feb 2010 17:26:57 PST 1600-141 We turn in our guns and our badges for this episode about fake websites, BioShock 2, the end of Xbox Live, the fourth Sonic the Hedgehog game, the most delicious Pokemon, Holodays, modern monocles, intern abuse, and more! We don't care what the commission We turn in our guns and our badges for this episode about fake websites, BioShock 2, the end of Xbox Live, the fourth Sonic the Hedgehog game, the most delicious Pokemon, Holodays, modern monocles, intern abuse, and more! We don't care what the commission Giant Bomb no 7635 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 02-02-2010 https://www.giantbomb.com/podcasts/giant-bombcast-02-02-2010/1600-140/ It's Groundhog Day, so you know what that means: endless conversations about Mass Effect 2 and Star Trek, with just enough Brian Doyle Murray peppered in to keep things interesting. What is this, Miami Beach? Tue, 02 Feb 2010 15:54:54 PST 1600-140 It's Groundhog Day, so you know what that means: endless conversations about Mass Effect 2 and Star Trek, with just enough Brian Doyle Murray peppered in to keep things interesting. What is this, Miami Beach? It's Groundhog Day, so you know what that means: endless conversations about Mass Effect 2 and Star Trek, with just enough Brian Doyle Murray peppered in to keep things interesting. What is this, Miami Beach? Giant Bomb no 7953 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 01-26-2010 https://www.giantbomb.com/podcasts/giant-bombcast-01-26-2010/1600-139/ We prove our love of talking about Star Trek Online and Mass Effect 2, while also touching on Bad Company 2, Spec Ops, Tony Hawk's next RIDE, and more. We also answer the question, “who in this picture's the duck, and who's wearing the powdered wig?" Tue, 26 Jan 2010 17:24:22 PST 1600-139 We prove our love of talking about Star Trek Online and Mass Effect 2, while also touching on Bad Company 2, Spec Ops, Tony Hawk's next RIDE, and more. We also answer the question, “who in this picture's the duck, and who's wearing the powdered wig?" We prove our love of talking about Star Trek Online and Mass Effect 2, while also touching on Bad Company 2, Spec Ops, Tony Hawk's next RIDE, and more. We also answer the question, “who in this picture's the duck, and who's wearing the powdered wig?" Giant Bomb no 7739 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast: Mass Effect 2 Edition https://www.giantbomb.com/podcasts/giant-bombcast-mass-effect-2-edition/1600-138/ We sit down with BioWare's Casey Hudson to discuss Mass Effect 2's sci-fi inspiration, DLC, sexy aliens, the BioWare doctors, and more. Wed, 20 Jan 2010 11:58:28 PST 1600-138 We sit down with BioWare's Casey Hudson to discuss Mass Effect 2's sci-fi inspiration, DLC, sexy aliens, the BioWare doctors, and more. We sit down with BioWare's Casey Hudson to discuss Mass Effect 2's sci-fi inspiration, DLC, sexy aliens, the BioWare doctors, and more. Giant Bomb no 0 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 01-19-2010 https://www.giantbomb.com/podcasts/giant-bombcast-01-19-2010/1600-137/ We shake things up quite literally with weird Japanese drinks, Dark Void, our ideal Star Trek game experience, multiplayer Assassin's Creed, FPS hindsight, meat virgins, video game baby names, and much more in this week's Bombcast! Tue, 19 Jan 2010 18:49:22 PST 1600-137 We shake things up quite literally with weird Japanese drinks, Dark Void, our ideal Star Trek game experience, multiplayer Assassin's Creed, FPS hindsight, meat virgins, video game baby names, and much more in this week's Bombcast! We shake things up quite literally with weird Japanese drinks, Dark Void, our ideal Star Trek game experience, multiplayer Assassin's Creed, FPS hindsight, meat virgins, video game baby names, and much more in this week's Bombcast! Giant Bomb no 7772 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 01-12-2010 https://www.giantbomb.com/podcasts/giant-bombcast-01-12-2010/1600-136/ We fortify this week's Bombcast with coffee additives as we discuss the finer points of snuggies for golems, slow-motion breakdancing, The Legend of Darksiders, Fallout 3 and Mass Effect 2 spoilers, BioShock 2, the appeal of 3D, NBA Jam, and more! Tue, 12 Jan 2010 16:15:52 PST 1600-136 We fortify this week's Bombcast with coffee additives as we discuss the finer points of snuggies for golems, slow-motion breakdancing, The Legend of Darksiders, Fallout 3 and Mass Effect 2 spoilers, BioShock 2, the appeal of 3D, NBA Jam, and more! We fortify this week's Bombcast with coffee additives as we discuss the finer points of snuggies for golems, slow-motion breakdancing, The Legend of Darksiders, Fallout 3 and Mass Effect 2 spoilers, BioShock 2, the appeal of 3D, NBA Jam, and more! Giant Bomb no 8208 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 01-05-2010 https://www.giantbomb.com/podcasts/giant-bombcast-01-05-2010/1600-135/ We return from the holiday break ready to discuss important topics like the right way to say 2010, Vinny's Steam sale bender, Brad's first impressions of Fallout 3, the return of Wrex, the legacy of NBA Jam, and much more in this week's Bombcast! Tue, 05 Jan 2010 18:55:33 PST 1600-135 We return from the holiday break ready to discuss important topics like the right way to say 2010, Vinny's Steam sale bender, Brad's first impressions of Fallout 3, the return of Wrex, the legacy of NBA Jam, and much more in this week's Bombcast! We return from the holiday break ready to discuss important topics like the right way to say 2010, Vinny's Steam sale bender, Brad's first impressions of Fallout 3, the return of Wrex, the legacy of NBA Jam, and much more in this week's Bombcast! Giant Bomb no 7613 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Game of the Year 2009 Deliberations https://www.giantbomb.com/podcasts/game-of-the-year-2009-deliberations/1600-134/ We spend nearly four hours debating which games deserve to win Giant Bomb's 2009 platform awards, as well as our overall Game of the Year, in this mammoth Bombcast. Fri, 01 Jan 2010 15:59:30 PST 1600-134 We spend nearly four hours debating which games deserve to win Giant Bomb's 2009 platform awards, as well as our overall Game of the Year, in this mammoth Bombcast. We spend nearly four hours debating which games deserve to win Giant Bomb's 2009 platform awards, as well as our overall Game of the Year, in this mammoth Bombcast. Giant Bomb no 13390 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Game of the Year 2009, Day Five https://www.giantbomb.com/podcasts/game-of-the-year-2009-day-five/1600-132/ We finish off this metric Willennium with our picks for 2009's Best New Non-Player Character, Best Performance By Nolan North, Most Disappointing Game, Best Competitive Multiplayer, and Weirdest game. Thu, 31 Dec 2009 10:43:50 PST 1600-132 We finish off this metric Willennium with our picks for 2009's Best New Non-Player Character, Best Performance By Nolan North, Most Disappointing Game, Best Competitive Multiplayer, and Weirdest game. We finish off this metric Willennium with our picks for 2009's Best New Non-Player Character, Best Performance By Nolan North, Most Disappointing Game, Best Competitive Multiplayer, and Weirdest game. Giant Bomb no 0 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Game of the Year 2009, Day Four https://www.giantbomb.com/podcasts/game-of-the-year-2009-day-four/1600-131/ In today's Game of the Year update we talk about downloads, Soulja Boy, big-ass ramps, classic revivals, and more! Wed, 30 Dec 2009 11:58:32 PST 1600-131 In today's Game of the Year update we talk about downloads, Soulja Boy, big-ass ramps, classic revivals, and more! In today's Game of the Year update we talk about downloads, Soulja Boy, big-ass ramps, classic revivals, and more! Giant Bomb no 0 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Game of the Year 2009, Day Three https://www.giantbomb.com/podcasts/game-of-the-year-2009-day-three/1600-130/ What do Eastern Europe, villainy, terrible games, DLC, and guilty pleasures all have in common? Listen here to find out! Tue, 29 Dec 2009 11:56:10 PST 1600-130 What do Eastern Europe, villainy, terrible games, DLC, and guilty pleasures all have in common? Listen here to find out! What do Eastern Europe, villainy, terrible games, DLC, and guilty pleasures all have in common? Listen here to find out! Giant Bomb no 0 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Game of the Year 2009, Day Two https://www.giantbomb.com/podcasts/game-of-the-year-2009-day-two/1600-129/ We explain our choices for Best Debut, Best Co-Op, Best Use of Zombies, Best Graphics, and Best Ending for Giant Bomb's Game of the Year 2009. Mon, 28 Dec 2009 11:13:23 PST 1600-129 We explain our choices for Best Debut, Best Co-Op, Best Use of Zombies, Best Graphics, and Best Ending for Giant Bomb's Game of the Year 2009. We explain our choices for Best Debut, Best Co-Op, Best Use of Zombies, Best Graphics, and Best Ending for Giant Bomb's Game of the Year 2009. Giant Bomb no 0 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Game of the Year 2009, Day One https://www.giantbomb.com/podcasts/game-of-the-year-2009-day-one/1600-128/ We discuss the nominees for 2009's 2008 Game of the Year, Most Divisive Game, Best Song In A Non-Rhythm Game, Best Late Title Card, and Best Original Soundtrack, and how we came to our winners. Sun, 27 Dec 2009 09:39:14 PST 1600-128 We discuss the nominees for 2009's 2008 Game of the Year, Most Divisive Game, Best Song In A Non-Rhythm Game, Best Late Title Card, and Best Original Soundtrack, and how we came to our winners. We discuss the nominees for 2009's 2008 Game of the Year, Most Divisive Game, Best Song In A Non-Rhythm Game, Best Late Title Card, and Best Original Soundtrack, and how we came to our winners. Giant Bomb no 0 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 12-22-2009 https://www.giantbomb.com/podcasts/giant-bombcast-12-22-2009/1600-126/ With videogames all curled up in their holiday hibernation, we turn to you, the listener, to help us pad out two hours of freeform nonsense in this all-email holiday edition of the Bombcast! Special thanks to coffeesash for the holly-jolly holiday theme. Tue, 22 Dec 2009 21:23:59 PST 1600-126 With videogames all curled up in their holiday hibernation, we turn to you, the listener, to help us pad out two hours of freeform nonsense in this all-email holiday edition of the Bombcast! Special thanks to coffeesash for the holly-jolly holiday theme. With videogames all curled up in their holiday hibernation, we turn to you, the listener, to help us pad out two hours of freeform nonsense in this all-email holiday edition of the Bombcast! Special thanks to coffeesash for the holly-jolly holiday theme. Giant Bomb no 7545 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 12-15-2009 https://www.giantbomb.com/podcasts/giant-bombcast-12-15-2009/1600-125/ It's nothing but drunk Santas, MKII arcade machines, fluid dynamics, James Cameron's Avatar, Swedish cowboys, Akham Asylum Too, the limits of Drew's Halo knowledge, and Game of the Year preparations in this week's Bombcast! Tue, 15 Dec 2009 20:42:17 PST 1600-125 It's nothing but drunk Santas, MKII arcade machines, fluid dynamics, James Cameron's Avatar, Swedish cowboys, Akham Asylum Too, the limits of Drew's Halo knowledge, and Game of the Year preparations in this week's Bombcast! It's nothing but drunk Santas, MKII arcade machines, fluid dynamics, James Cameron's Avatar, Swedish cowboys, Akham Asylum Too, the limits of Drew's Halo knowledge, and Game of the Year preparations in this week's Bombcast! Giant Bomb no 8214 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 12-08-2009 https://www.giantbomb.com/podcasts/giant-bombcast-12-08-2009/1600-124/ Gather 'round the ole Bombcast for tales of pagan Christmas tree rituals, suicide eff bombers, enemy trains, Le Saboteur, dice rolls in Star Wars: The Old Republic, Medal of Honor's modern warfare, the most common achievement names, and so much more! Tue, 08 Dec 2009 18:39:27 PST 1600-124 Gather 'round the ole Bombcast for tales of pagan Christmas tree rituals, suicide eff bombers, enemy trains, Le Saboteur, dice rolls in Star Wars: The Old Republic, Medal of Honor's modern warfare, the most common achievement names, and so much more! Gather 'round the ole Bombcast for tales of pagan Christmas tree rituals, suicide eff bombers, enemy trains, Le Saboteur, dice rolls in Star Wars: The Old Republic, Medal of Honor's modern warfare, the most common achievement names, and so much more! Giant Bomb no 8392 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 12-01-2009 https://www.giantbomb.com/podcasts/giant-bombcast-12-01-2009/1600-123/ All the tryptophan and cheese-covered car keys in the world can't stop us from going on about cursing at the end of the world, Assassin's Creed II, underestimating kids, Dragon Age: Origins, and the bittersweet return of Metro City mayor Mike Haggar. Tue, 01 Dec 2009 18:56:21 PST 1600-123 All the tryptophan and cheese-covered car keys in the world can't stop us from going on about cursing at the end of the world, Assassin's Creed II, underestimating kids, Dragon Age: Origins, and the bittersweet return of Metro City mayor Mike Haggar. All the tryptophan and cheese-covered car keys in the world can't stop us from going on about cursing at the end of the world, Assassin's Creed II, underestimating kids, Dragon Age: Origins, and the bittersweet return of Metro City mayor Mike Haggar. Giant Bomb no 7924 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 11-24-2009 https://www.giantbomb.com/podcasts/giant-bombcast-11-24-2009/1600-122/ Let the Giant Bombcast guide you through this hectic holiday week with conversations on turkeys full of toothpaste, the pros and cons of Fresno, Assassin's Creed II, light-gun semantics, the last days of Pandemic, and more! Brought to you by Corningware! Tue, 24 Nov 2009 15:46:05 PST 1600-122 Let the Giant Bombcast guide you through this hectic holiday week with conversations on turkeys full of toothpaste, the pros and cons of Fresno, Assassin's Creed II, light-gun semantics, the last days of Pandemic, and more! Brought to you by Corningware! Let the Giant Bombcast guide you through this hectic holiday week with conversations on turkeys full of toothpaste, the pros and cons of Fresno, Assassin's Creed II, light-gun semantics, the last days of Pandemic, and more! Brought to you by Corningware! Giant Bomb no 8782 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 11-17-2009 https://www.giantbomb.com/podcasts/giant-bombcast-11-17-2009/1600-121/ We celebrate the last big week of the holiday release season with discussions of the Dragon Age, New Super Mario Bros. Wii, more Modern Warfare 2 chatter, Super Street Fighter IV, the fate of Chicago Ted in Left 4 Dead 2, Assassin's Creed II, and more! Tue, 17 Nov 2009 19:00:22 PST 1600-121 We celebrate the last big week of the holiday release season with discussions of the Dragon Age, New Super Mario Bros. Wii, more Modern Warfare 2 chatter, Super Street Fighter IV, the fate of Chicago Ted in Left 4 Dead 2, Assassin's Creed II, and more! We celebrate the last big week of the holiday release season with discussions of the Dragon Age, New Super Mario Bros. Wii, more Modern Warfare 2 chatter, Super Street Fighter IV, the fate of Chicago Ted in Left 4 Dead 2, Assassin's Creed II, and more! Giant Bomb no 7805 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast: Modern Warfare 2 Edition https://www.giantbomb.com/podcasts/giant-bombcast-modern-warfare-2-edition/1600-120/ It's a Giant Spoilercast as we discuss many of the specifics of the single-player experience in Modern Warfare 2. Fri, 13 Nov 2009 19:09:49 PST 1600-120 It's a Giant Spoilercast as we discuss many of the specifics of the single-player experience in Modern Warfare 2. It's a Giant Spoilercast as we discuss many of the specifics of the single-player experience in Modern Warfare 2. Giant Bomb no 4321 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 11-10-2009 https://www.giantbomb.com/podcasts/giant-bombcast-11-10-2009/1600-119/ Brad has fun in Chinatown, Jeff flashes his firmware, Ryan gets Rabbid, Vinny returns a changed man, and we all talk a lot of Modern Warfare 2 in this week's edition of the Giant Bombcast. Tue, 10 Nov 2009 19:39:07 PST 1600-119 Brad has fun in Chinatown, Jeff flashes his firmware, Ryan gets Rabbid, Vinny returns a changed man, and we all talk a lot of Modern Warfare 2 in this week's edition of the Giant Bombcast. Brad has fun in Chinatown, Jeff flashes his firmware, Ryan gets Rabbid, Vinny returns a changed man, and we all talk a lot of Modern Warfare 2 in this week's edition of the Giant Bombcast. Giant Bomb no 6841 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 11-03-2009 https://www.giantbomb.com/podcasts/giant-bombcast-11-03-2009/1600-118/ Friend of Giant Bomb Jared Rea sits in for discussions of Jeff's pretty robot girlfriend, the perceived benefits of gold rhythm game controllers, the parallels between Sailor Moon fighting games and jazz music, Hideo Kojima's love of Twilight, and more! Tue, 03 Nov 2009 18:18:36 PST 1600-118 Friend of Giant Bomb Jared Rea sits in for discussions of Jeff's pretty robot girlfriend, the perceived benefits of gold rhythm game controllers, the parallels between Sailor Moon fighting games and jazz music, Hideo Kojima's love of Twilight, and more! Friend of Giant Bomb Jared Rea sits in for discussions of Jeff's pretty robot girlfriend, the perceived benefits of gold rhythm game controllers, the parallels between Sailor Moon fighting games and jazz music, Hideo Kojima's love of Twilight, and more! Giant Bomb no 8621 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 10-27-2009 https://www.giantbomb.com/podcasts/giant-bombcast-10-27-2009/1600-117/ It's a show for the over-sophisticated and the under-sophisticated as we discuss trucks and villains in Uncharted 2, Prototype's shelf life, the bitter gift of Demon's Souls, Modern Warfare on the Moon, Xbox Experience 3.0, deep-fried sandwiches, and so m Tue, 27 Oct 2009 14:14:02 PST 1600-117 It's a show for the over-sophisticated and the under-sophisticated as we discuss trucks and villains in Uncharted 2, Prototype's shelf life, the bitter gift of Demon's Souls, Modern Warfare on the Moon, Xbox Experience 3.0, deep-fried sandwiches, and so m It's a show for the over-sophisticated and the under-sophisticated as we discuss trucks and villains in Uncharted 2, Prototype's shelf life, the bitter gift of Demon's Souls, Modern Warfare on the Moon, Xbox Experience 3.0, deep-fried sandwiches, and so m Giant Bomb no 8117 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 10-20-2009 https://www.giantbomb.com/podcasts/giant-bombcast-10-20-2009/1600-116/ The Giant Bomb staff sounds off on Brutal Legend, Borderlands, The Beatles: Rock Band vs. Guitar Hero 5, wrestlers vs. cars, Infinity Ward's Modern Warfare 2 PC drama, and DOMO DOMO DOMO DOMO DOMO DOMO DOMO DOMO DOMO DOMO DOMO DOMO DOMO DOMO DOMO! Tue, 20 Oct 2009 17:13:32 PST 1600-116 The Giant Bomb staff sounds off on Brutal Legend, Borderlands, The Beatles: Rock Band vs. Guitar Hero 5, wrestlers vs. cars, Infinity Ward's Modern Warfare 2 PC drama, and DOMO DOMO DOMO DOMO DOMO DOMO DOMO DOMO DOMO DOMO DOMO DOMO DOMO DOMO DOMO! The Giant Bomb staff sounds off on Brutal Legend, Borderlands, The Beatles: Rock Band vs. Guitar Hero 5, wrestlers vs. cars, Infinity Ward's Modern Warfare 2 PC drama, and DOMO DOMO DOMO DOMO DOMO DOMO DOMO DOMO DOMO DOMO DOMO DOMO DOMO DOMO DOMO! Giant Bomb no 8032 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 10-13-2009 https://www.giantbomb.com/podcasts/giant-bombcast-10-13-2009/1600-115/ Capcom's Adam Boyes and freelance troublemaker John Vignocchi join the crew for some rowdy, champagne-fueled shouting about the downfall of Midway, Demon's Souls, Forza 3, Chuck D, Brutal Legend, New Super Mario Bros. Wii, and more in this week's Bombcast Tue, 13 Oct 2009 19:25:01 PST 1600-115 Capcom's Adam Boyes and freelance troublemaker John Vignocchi join the crew for some rowdy, champagne-fueled shouting about the downfall of Midway, Demon's Souls, Forza 3, Chuck D, Brutal Legend, New Super Mario Bros. Wii, and more in this week's Bombcast Capcom's Adam Boyes and freelance troublemaker John Vignocchi join the crew for some rowdy, champagne-fueled shouting about the downfall of Midway, Demon's Souls, Forza 3, Chuck D, Brutal Legend, New Super Mario Bros. Wii, and more in this week's Bombcast Giant Bomb no 8821 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 10-06-2009 https://www.giantbomb.com/podcasts/giant-bombcast-10-06-2009/1600-114/ With the taste of Modern Warfare 2 on our lips we set our sights on the PSPgo, the world's largest pinball expo, the acrimony of Work Time Fun, Uncharted 2, Lego Bowie, night-vision goggles in TrackMania 2, the PlayStation Threemote, and much more! Tue, 06 Oct 2009 20:21:22 PST 1600-114 With the taste of Modern Warfare 2 on our lips we set our sights on the PSPgo, the world's largest pinball expo, the acrimony of Work Time Fun, Uncharted 2, Lego Bowie, night-vision goggles in TrackMania 2, the PlayStation Threemote, and much more! With the taste of Modern Warfare 2 on our lips we set our sights on the PSPgo, the world's largest pinball expo, the acrimony of Work Time Fun, Uncharted 2, Lego Bowie, night-vision goggles in TrackMania 2, the PlayStation Threemote, and much more! Giant Bomb no 8093 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 09-29-2009 https://www.giantbomb.com/podcasts/giant-bombcast-09-29-2009/1600-113/ The Giant Bombcast rocks out with more Arkham Asylum conversation, our first DJ Hero hands-on experience, Jeff's undying love of video pinball, our TGS 2009 highlights, Super Street Fighter IV, our continuing Splinter Cell: Conviction drama, and more! Tue, 29 Sep 2009 18:33:18 PST 1600-113 The Giant Bombcast rocks out with more Arkham Asylum conversation, our first DJ Hero hands-on experience, Jeff's undying love of video pinball, our TGS 2009 highlights, Super Street Fighter IV, our continuing Splinter Cell: Conviction drama, and more! The Giant Bombcast rocks out with more Arkham Asylum conversation, our first DJ Hero hands-on experience, Jeff's undying love of video pinball, our TGS 2009 highlights, Super Street Fighter IV, our continuing Splinter Cell: Conviction drama, and more! Giant Bomb no 8547 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 09-22-2009 https://www.giantbomb.com/podcasts/giant-bombcast-09-22-2009/1600-112/ We hold it down stateside with Gears of War energy drinks as we discuss ODST and the future of Halo, TrackMania 2, the failings of Scribblenauts, Modern Warfare 2 perks, the realities of Rock Band Network, life after the Endurance Run, and more! Tue, 22 Sep 2009 20:44:12 PST 1600-112 We hold it down stateside with Gears of War energy drinks as we discuss ODST and the future of Halo, TrackMania 2, the failings of Scribblenauts, Modern Warfare 2 perks, the realities of Rock Band Network, life after the Endurance Run, and more! We hold it down stateside with Gears of War energy drinks as we discuss ODST and the future of Halo, TrackMania 2, the failings of Scribblenauts, Modern Warfare 2 perks, the realities of Rock Band Network, life after the Endurance Run, and more! Giant Bomb no 8736 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 09-15-2009 https://www.giantbomb.com/podcasts/giant-bombcast-09-15-2009/1600-111/ The first four missions of Halo 3: ODST, Need for Speed: SHIFT, the best way to scratch an Xbox 360 disc, the awesomeness of sleep, and Courtney Love's internet insanity are just a few of the topics on this week's edition of the Giant Bombcast! Tue, 15 Sep 2009 20:03:33 PST 1600-111 The first four missions of Halo 3: ODST, Need for Speed: SHIFT, the best way to scratch an Xbox 360 disc, the awesomeness of sleep, and Courtney Love's internet insanity are just a few of the topics on this week's edition of the Giant Bombcast! The first four missions of Halo 3: ODST, Need for Speed: SHIFT, the best way to scratch an Xbox 360 disc, the awesomeness of sleep, and Courtney Love's internet insanity are just a few of the topics on this week's edition of the Giant Bombcast! Giant Bomb no 8601 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 09-08-2009 https://www.giantbomb.com/podcasts/giant-bombcast-09-08-2009/1600-110/ We look back at some of our personal highlights from PAX09, discuss the relative merits of The Beatles: Rock Band and Guitar Hero 5, and warn of the perils of playing Doom on a plane, and much more in this week's edition of the Giant Bombcast. Tue, 08 Sep 2009 21:00:03 PST 1600-110 We look back at some of our personal highlights from PAX09, discuss the relative merits of The Beatles: Rock Band and Guitar Hero 5, and warn of the perils of playing Doom on a plane, and much more in this week's edition of the Giant Bombcast. We look back at some of our personal highlights from PAX09, discuss the relative merits of The Beatles: Rock Band and Guitar Hero 5, and warn of the perils of playing Doom on a plane, and much more in this week's edition of the Giant Bombcast. Giant Bomb no 6792 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast: PAX Edition https://www.giantbomb.com/podcasts/giant-bombcast-pax-edition/1600-109/ We kick it Sea-town style with Kotaku's Stephen Totilo, 38 Studios' Rich Gallup, Obsidian Entertainment's Matthew Rorie, Harmonix Music Systems' Alex Navarro, and Blizzard Entertainment's Bob Colayco in this surprisingly orderly PAX edition Bombcast! Sat, 05 Sep 2009 09:04:08 PST 1600-109 We kick it Sea-town style with Kotaku's Stephen Totilo, 38 Studios' Rich Gallup, Obsidian Entertainment's Matthew Rorie, Harmonix Music Systems' Alex Navarro, and Blizzard Entertainment's Bob Colayco in this surprisingly orderly PAX edition Bombcast! We kick it Sea-town style with Kotaku's Stephen Totilo, 38 Studios' Rich Gallup, Obsidian Entertainment's Matthew Rorie, Harmonix Music Systems' Alex Navarro, and Blizzard Entertainment's Bob Colayco in this surprisingly orderly PAX edition Bombcast! Giant Bomb no 5839 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 09-01-2009 https://www.giantbomb.com/podcasts/giant-bombcast-09-01-2009/1600-108/ The fantastic foursome is back in effect with the outlaw economics in Borderlands, playing like an a-hole, life after the PS3 Slim, The Bat-Man, The Final Destination, DJ AM, Marvel vs. Disney, and more! Brought to you by the Vietnam Corporation! Tue, 01 Sep 2009 17:23:57 PST 1600-108 The fantastic foursome is back in effect with the outlaw economics in Borderlands, playing like an a-hole, life after the PS3 Slim, The Bat-Man, The Final Destination, DJ AM, Marvel vs. Disney, and more! Brought to you by the Vietnam Corporation! The fantastic foursome is back in effect with the outlaw economics in Borderlands, playing like an a-hole, life after the PS3 Slim, The Bat-Man, The Final Destination, DJ AM, Marvel vs. Disney, and more! Brought to you by the Vietnam Corporation! Giant Bomb no 8826 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 08-25-2009 https://www.giantbomb.com/podcasts/giant-bombcast-08-25-2009/1600-106/ With Jeff on vacation we bring Drew to the table for discussions of the subtle art of people getting sliced in half, sequence breaking in Shadow Complex, Jim Raynor vs. the devil, Pandaren Brewmasters, the PS3 Slim, and, of course, Peter Molyneux's balls. Tue, 25 Aug 2009 18:02:02 PST 1600-106 With Jeff on vacation we bring Drew to the table for discussions of the subtle art of people getting sliced in half, sequence breaking in Shadow Complex, Jim Raynor vs. the devil, Pandaren Brewmasters, the PS3 Slim, and, of course, Peter Molyneux's balls. With Jeff on vacation we bring Drew to the table for discussions of the subtle art of people getting sliced in half, sequence breaking in Shadow Complex, Jim Raynor vs. the devil, Pandaren Brewmasters, the PS3 Slim, and, of course, Peter Molyneux's balls. Giant Bomb no 8000 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 08-18-2009 https://www.giantbomb.com/podcasts/giant-bombcast-08-18-2009/1600-105/ Since we're not allowed into Germany for reasons we'd rather not discuss, we stay home and chat about Shadow Complex, the strategery of Brütal Legend's multiplayer, the Wolfenstein timeline, Brad's exciting QuakeCon trip, Limerick Island, and much more! Tue, 18 Aug 2009 18:10:55 PST 1600-105 Since we're not allowed into Germany for reasons we'd rather not discuss, we stay home and chat about Shadow Complex, the strategery of Brütal Legend's multiplayer, the Wolfenstein timeline, Brad's exciting QuakeCon trip, Limerick Island, and much more! Since we're not allowed into Germany for reasons we'd rather not discuss, we stay home and chat about Shadow Complex, the strategery of Brütal Legend's multiplayer, the Wolfenstein timeline, Brad's exciting QuakeCon trip, Limerick Island, and much more! Giant Bomb no 7189 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 08-11-2009 https://www.giantbomb.com/podcasts/giant-bombcast-08-11-2009/1600-104/ This week we welcome arcade enthusiast and friend of Giant Bomb Jared Rea to the table for conversation about EVO cliques, Korean rhythm games, Guitar Hero 5, Spielberg's Halo, 50 Cent in Modern Warfare 2, Michael Cera in everything, and more! Tue, 11 Aug 2009 16:56:56 PST 1600-104 This week we welcome arcade enthusiast and friend of Giant Bomb Jared Rea to the table for conversation about EVO cliques, Korean rhythm games, Guitar Hero 5, Spielberg's Halo, 50 Cent in Modern Warfare 2, Michael Cera in everything, and more! This week we welcome arcade enthusiast and friend of Giant Bomb Jared Rea to the table for conversation about EVO cliques, Korean rhythm games, Guitar Hero 5, Spielberg's Halo, 50 Cent in Modern Warfare 2, Michael Cera in everything, and more! Giant Bomb no 7895 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 08-04-2009 https://www.giantbomb.com/podcasts/giant-bombcast-08-04-2009/1600-103/ This week's Bombcast covers the life and death of The Matrix Online, the storied history of Sierra On-Line, the games that Gearbox is (and isn't) making, the psychology of holiday game releases, swords, and other pressing topics of the utmost importance! Tue, 04 Aug 2009 17:30:16 PST 1600-103 This week's Bombcast covers the life and death of The Matrix Online, the storied history of Sierra On-Line, the games that Gearbox is (and isn't) making, the psychology of holiday game releases, swords, and other pressing topics of the utmost importance! This week's Bombcast covers the life and death of The Matrix Online, the storied history of Sierra On-Line, the games that Gearbox is (and isn't) making, the psychology of holiday game releases, swords, and other pressing topics of the utmost importance! Giant Bomb no 8001 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07-28-2009 https://www.giantbomb.com/podcasts/giant-bombcast-07-28-2009/1600-102/ Brad returns from the glorious Carolinas for discussions of bo-rounds, 'Splosion Man, the correct pronunciation of Sidhe, King of Fighters XII, San Diego Comic-Con, Microsoft's Halo plans, candy bars, PAX 09, and other nonsense! Tue, 28 Jul 2009 19:35:52 PST 1600-102 Brad returns from the glorious Carolinas for discussions of bo-rounds, 'Splosion Man, the correct pronunciation of Sidhe, King of Fighters XII, San Diego Comic-Con, Microsoft's Halo plans, candy bars, PAX 09, and other nonsense! Brad returns from the glorious Carolinas for discussions of bo-rounds, 'Splosion Man, the correct pronunciation of Sidhe, King of Fighters XII, San Diego Comic-Con, Microsoft's Halo plans, candy bars, PAX 09, and other nonsense! Giant Bomb no 8017 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07-21-2009 https://www.giantbomb.com/podcasts/giant-bombcast-07-21-2009/1600-101/ We recover from Friday night's funcaholism in tonight's episode of Everybody Loves Bombcast with Wii Sports Resort, Evo 2009, the correct pronunciation of Karateka, toast guns, Shadow Complex, night vision goggles, Rock Band Network, and more! Tue, 21 Jul 2009 13:52:52 PST 1600-101 We recover from Friday night's funcaholism in tonight's episode of Everybody Loves Bombcast with Wii Sports Resort, Evo 2009, the correct pronunciation of Karateka, toast guns, Shadow Complex, night vision goggles, Rock Band Network, and more! We recover from Friday night's funcaholism in tonight's episode of Everybody Loves Bombcast with Wii Sports Resort, Evo 2009, the correct pronunciation of Karateka, toast guns, Shadow Complex, night vision goggles, Rock Band Network, and more! Giant Bomb no 7597 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07-14-2009 https://www.giantbomb.com/podcasts/giant-bombcast-07-14-2009/1600-100/ We cover the infinite beards of California Extreme, the wrong way to move into a new apartment, UFC vs. EA, and the glorious returns of Monkey Island, MechWarrior, and Command &amp; Conquer in this week's edition of the Giant Bombcast! Tue, 14 Jul 2009 17:55:34 PST 1600-100 We cover the infinite beards of California Extreme, the wrong way to move into a new apartment, UFC vs. EA, and the glorious returns of Monkey Island, MechWarrior, and Command &amp; Conquer in this week's edition of the Giant Bombcast! We cover the infinite beards of California Extreme, the wrong way to move into a new apartment, UFC vs. EA, and the glorious returns of Monkey Island, MechWarrior, and Command &amp; Conquer in this week's edition of the Giant Bombcast! Giant Bomb no 7666 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07-07-2009 https://www.giantbomb.com/podcasts/giant-bombcast-07-07-2009/1600-99/ A slow-ass news week leads to discussions of open-world fatigue, Brad's honorable ancestry, Tales of Monkey Island, 1 vs. 100, Asteroids: The Movie, a sequel to Super Mario Bros. 2, and air horns. So very, very many air horns. Tue, 07 Jul 2009 19:08:37 PST 1600-99 A slow-ass news week leads to discussions of open-world fatigue, Brad's honorable ancestry, Tales of Monkey Island, 1 vs. 100, Asteroids: The Movie, a sequel to Super Mario Bros. 2, and air horns. So very, very many air horns. A slow-ass news week leads to discussions of open-world fatigue, Brad's honorable ancestry, Tales of Monkey Island, 1 vs. 100, Asteroids: The Movie, a sequel to Super Mario Bros. 2, and air horns. So very, very many air horns. Giant Bomb no 7621 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 06-30-2009 https://www.giantbomb.com/podcasts/giant-bombcast-06-30-2009/1600-98/ What do Chris Cashman, Starcraft rap songs, Fallout/Doom crossovers, the fury of the BioWare doctors, different approaches to motion controls, and the future of Midway all have in common? Listen to this week's Giant Bombcast to find out! Tue, 30 Jun 2009 19:00:19 PST 1600-98 What do Chris Cashman, Starcraft rap songs, Fallout/Doom crossovers, the fury of the BioWare doctors, different approaches to motion controls, and the future of Midway all have in common? Listen to this week's Giant Bombcast to find out! What do Chris Cashman, Starcraft rap songs, Fallout/Doom crossovers, the fury of the BioWare doctors, different approaches to motion controls, and the future of Midway all have in common? Listen to this week's Giant Bombcast to find out! Giant Bomb no 7682 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 06-23-2009 https://www.giantbomb.com/podcasts/giant-bombcast-06-23-2009/1600-97/ We chop it up with Dave on the topics of Martian gorillas, necklaceness versus necklessness, Bobby Brown, modded Tiger Woods controllers, more Natal nonsense, Activision's grisly corporate ladder, among others. Caution: HOT! Tue, 23 Jun 2009 18:18:54 PST 1600-97 We chop it up with Dave on the topics of Martian gorillas, necklaceness versus necklessness, Bobby Brown, modded Tiger Woods controllers, more Natal nonsense, Activision's grisly corporate ladder, among others. Caution: HOT! We chop it up with Dave on the topics of Martian gorillas, necklaceness versus necklessness, Bobby Brown, modded Tiger Woods controllers, more Natal nonsense, Activision's grisly corporate ladder, among others. Caution: HOT! Giant Bomb no 6449 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 06-16-2009 https://www.giantbomb.com/podcasts/giant-bombcast-06-16-2009/1600-96/ Jeff has conflicted feelings towards Vince Vaughn, Vinny loses sleep to Trash Panic, Brad gets incensed at this week's DSiWare offerings, and Ryan recovers from too much weekend fun in this week's episode of your favorite in-flight shopping magazine. Tue, 16 Jun 2009 18:57:02 PST 1600-96 Jeff has conflicted feelings towards Vince Vaughn, Vinny loses sleep to Trash Panic, Brad gets incensed at this week's DSiWare offerings, and Ryan recovers from too much weekend fun in this week's episode of your favorite in-flight shopping magazine. Jeff has conflicted feelings towards Vince Vaughn, Vinny loses sleep to Trash Panic, Brad gets incensed at this week's DSiWare offerings, and Ryan recovers from too much weekend fun in this week's episode of your favorite in-flight shopping magazine. Giant Bomb no 7724 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 06-09-2009 https://www.giantbomb.com/podcasts/giant-bombcast-06-09-2009/1600-95/ We try to keep things brief as we collect our thoughts on E3 2009 and discuss Jack Tretton's affinity for steaks, stock E3 conversations, spider ants, gun scorpions, the power of sequels, and what we're playing now that the show's over. Tue, 09 Jun 2009 14:06:43 PST 1600-95 We try to keep things brief as we collect our thoughts on E3 2009 and discuss Jack Tretton's affinity for steaks, stock E3 conversations, spider ants, gun scorpions, the power of sequels, and what we're playing now that the show's over. We try to keep things brief as we collect our thoughts on E3 2009 and discuss Jack Tretton's affinity for steaks, stock E3 conversations, spider ants, gun scorpions, the power of sequels, and what we're playing now that the show's over. Giant Bomb no 4626 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast E3 2009 Day Three https://www.giantbomb.com/podcasts/giant-bombcast-e3-2009-day-three/1600-94/ We close out the show with special guests from Pandemic Studios and Mythic Entertainment. Thu, 04 Jun 2009 23:07:07 PST 1600-94 We close out the show with special guests from Pandemic Studios and Mythic Entertainment. We close out the show with special guests from Pandemic Studios and Mythic Entertainment. Giant Bomb no 7419 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast E3 2009 Day Two https://www.giantbomb.com/podcasts/giant-bombcast-e3-2009-day-two/1600-93/ We're not gonna lie: guests from Capcom, GRIN, Gamasutra, and Jellyvision make this hands-down the craziest Bombcast ever. Thu, 04 Jun 2009 08:01:16 PST 1600-93 We're not gonna lie: guests from Capcom, GRIN, Gamasutra, and Jellyvision make this hands-down the craziest Bombcast ever. We're not gonna lie: guests from Capcom, GRIN, Gamasutra, and Jellyvision make this hands-down the craziest Bombcast ever. Giant Bomb no 8320 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast E3 2009 Day One https://www.giantbomb.com/podcasts/giant-bombcast-e3-2009-day-one/1600-92/ We're joined by Obsidian's Matthew Rorie as we discuss the Nintendo and Sony press conferences, much of Activision's offerings, Mass Effect 2, Left 4 Dead 2, Supreme Commander 2, and more! Wed, 03 Jun 2009 00:55:59 PST 1600-92 We're joined by Obsidian's Matthew Rorie as we discuss the Nintendo and Sony press conferences, much of Activision's offerings, Mass Effect 2, Left 4 Dead 2, Supreme Commander 2, and more! We're joined by Obsidian's Matthew Rorie as we discuss the Nintendo and Sony press conferences, much of Activision's offerings, Mass Effect 2, Left 4 Dead 2, Supreme Commander 2, and more! Giant Bomb no 7064 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS MicroCast @Activision 06-02-2009 https://www.giantbomb.com/podcasts/microcast-activision-06-02-2009/1600-91/ Jeff and Ryan give a quick update from the Activision booth. Tue, 02 Jun 2009 15:01:56 PST 1600-91 Jeff and Ryan give a quick update from the Activision booth. Jeff and Ryan give a quick update from the Activision booth. Giant Bomb no 0 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS MicroCast 06-02-2009 https://www.giantbomb.com/podcasts/microcast-06-02-2009/1600-90/ Jeff and Ryan discuss what they think they know about Nintendo's upcoming press conference. Tue, 02 Jun 2009 08:10:37 PST 1600-90 Jeff and Ryan discuss what they think they know about Nintendo's upcoming press conference. Jeff and Ryan discuss what they think they know about Nintendo's upcoming press conference. Giant Bomb no 0 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast E3 2009 Day Zero https://www.giantbomb.com/podcasts/giant-bombcast-e3-2009-day-zero/1600-89/ We reflect on the Microsoft, Electronic Arts, and Ubisoft press conferences. Also, pizza! Tue, 02 Jun 2009 00:02:05 PST 1600-89 We reflect on the Microsoft, Electronic Arts, and Ubisoft press conferences. Also, pizza! We reflect on the Microsoft, Electronic Arts, and Ubisoft press conferences. Also, pizza! Giant Bomb no 5368 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Microcast 06-01-2009 AM https://www.giantbomb.com/podcasts/microcast-06-01-2009-am/1600-88/ Jeff and Ryan discuss what they think they know about Microsoft's upcoming press conference. Mon, 01 Jun 2009 08:25:17 PST 1600-88 Jeff and Ryan discuss what they think they know about Microsoft's upcoming press conference. Jeff and Ryan discuss what they think they know about Microsoft's upcoming press conference. Giant Bomb no 0 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 05-29-2009 https://www.giantbomb.com/podcasts/giant-bombcast-05-29-2009/1600-87/ We get ready for E3 with an overview of our show schedule, some announcement speculation, our most anticipated games, plus the usual Bombcast digressions and shenanigans. Fri, 29 May 2009 18:56:57 PST 1600-87 We get ready for E3 with an overview of our show schedule, some announcement speculation, our most anticipated games, plus the usual Bombcast digressions and shenanigans. We get ready for E3 with an overview of our show schedule, some announcement speculation, our most anticipated games, plus the usual Bombcast digressions and shenanigans. Giant Bomb no 8260 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 05-26-2009 https://www.giantbomb.com/podcasts/giant-bombcast-05-26-2009/1600-86/ We hint at Giant Bomb's plans for the big show and discuss the diminishing returns of teasing a teaser, how to punish rage-quitters, ICP's wrestling league, Bionic Commando truth and reconciliation, our appetite for Fallout 3 DLC, and much more! Tue, 26 May 2009 18:11:44 PST 1600-86 We hint at Giant Bomb's plans for the big show and discuss the diminishing returns of teasing a teaser, how to punish rage-quitters, ICP's wrestling league, Bionic Commando truth and reconciliation, our appetite for Fallout 3 DLC, and much more! We hint at Giant Bomb's plans for the big show and discuss the diminishing returns of teasing a teaser, how to punish rage-quitters, ICP's wrestling league, Bionic Commando truth and reconciliation, our appetite for Fallout 3 DLC, and much more! Giant Bomb no 8026 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 05-19-2009 https://www.giantbomb.com/podcasts/giant-bombcast-05-19-2009/1600-85/ We kick off this week's Bombcast with an all-natural sugar rush before crashing into discussions of 50 Cent's Dead Sea Scrolls, Mike Tyson DLC, Tatsunoko Vs. Capcom, Kojima's next, the latest 3D Realms drama, the end of Factor 5, and more! Tue, 19 May 2009 18:05:37 PST 1600-85 We kick off this week's Bombcast with an all-natural sugar rush before crashing into discussions of 50 Cent's Dead Sea Scrolls, Mike Tyson DLC, Tatsunoko Vs. Capcom, Kojima's next, the latest 3D Realms drama, the end of Factor 5, and more! We kick off this week's Bombcast with an all-natural sugar rush before crashing into discussions of 50 Cent's Dead Sea Scrolls, Mike Tyson DLC, Tatsunoko Vs. Capcom, Kojima's next, the latest 3D Realms drama, the end of Factor 5, and more! Giant Bomb no 7097 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 05-12-2009 https://www.giantbomb.com/podcasts/giant-bombcast-05-12-2009/1600-84/ This week we're joined by Treyarch community manager Josh Olin, who stops by to chat about the upcoming map pack for Call of Duty: World at War. We also discuss PopCap's rise to prominence, dog-monkey versus monkey-dog, Duke Nukem, and much more! Tue, 12 May 2009 18:58:13 PST 1600-84 This week we're joined by Treyarch community manager Josh Olin, who stops by to chat about the upcoming map pack for Call of Duty: World at War. We also discuss PopCap's rise to prominence, dog-monkey versus monkey-dog, Duke Nukem, and much more! This week we're joined by Treyarch community manager Josh Olin, who stops by to chat about the upcoming map pack for Call of Duty: World at War. We also discuss PopCap's rise to prominence, dog-monkey versus monkey-dog, Duke Nukem, and much more! Giant Bomb no 7784 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 05-05-2009 https://www.giantbomb.com/podcasts/giant-bombcast-05-05-2009/1600-83/ Giant Bomb designer Dave Snider sits in for Vinny for our special Cinco de Mayo episode as we discuss some upcoming site features, the next PSP, the lineage of terrible Ninja Turtles games, 50 Cent on the Moon, and much, much more! Tue, 05 May 2009 18:37:23 PST 1600-83 Giant Bomb designer Dave Snider sits in for Vinny for our special Cinco de Mayo episode as we discuss some upcoming site features, the next PSP, the lineage of terrible Ninja Turtles games, 50 Cent on the Moon, and much, much more! Giant Bomb designer Dave Snider sits in for Vinny for our special Cinco de Mayo episode as we discuss some upcoming site features, the next PSP, the lineage of terrible Ninja Turtles games, 50 Cent on the Moon, and much, much more! Giant Bomb no 7944 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 04-28-2009 https://www.giantbomb.com/podcasts/giant-bombcast-04-28-2009/1600-82/ Jeff returns from London just in time for a deluge of UK snacks and to talk about Bethesda's 2009 lineup, the importance of exclamation points, Scratch: The Ultimate DJ, Six Days in Fallujah, Marvel vs. Capcom 2, dream sandwiches, and more! Tue, 28 Apr 2009 19:47:50 PST 1600-82 Jeff returns from London just in time for a deluge of UK snacks and to talk about Bethesda's 2009 lineup, the importance of exclamation points, Scratch: The Ultimate DJ, Six Days in Fallujah, Marvel vs. Capcom 2, dream sandwiches, and more! Jeff returns from London just in time for a deluge of UK snacks and to talk about Bethesda's 2009 lineup, the importance of exclamation points, Scratch: The Ultimate DJ, Six Days in Fallujah, Marvel vs. Capcom 2, dream sandwiches, and more! Giant Bomb no 7789 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 04-21-2009 https://www.giantbomb.com/podcasts/giant-bombcast-04-21-2009/1600-81/ It's dinosaurs vs. grizzly bears vs. great white sharks vs. Pink Floyd's The Wall The RTS vs. HAGs vs. rotten eggs vs. Vin Diesel vs. John Madden vs. Weekend at Bernie's III vs. the FREAKING MOON on this week's edition of the Giant Bombcast! Tue, 21 Apr 2009 18:40:05 PST 1600-81 It's dinosaurs vs. grizzly bears vs. great white sharks vs. Pink Floyd's The Wall The RTS vs. HAGs vs. rotten eggs vs. Vin Diesel vs. John Madden vs. Weekend at Bernie's III vs. the FREAKING MOON on this week's edition of the Giant Bombcast! It's dinosaurs vs. grizzly bears vs. great white sharks vs. Pink Floyd's The Wall The RTS vs. HAGs vs. rotten eggs vs. Vin Diesel vs. John Madden vs. Weekend at Bernie's III vs. the FREAKING MOON on this week's edition of the Giant Bombcast! Giant Bomb no 7839 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 04-14-2009 https://www.giantbomb.com/podcasts/giant-bombcast-04-14-2009/1600-80/ The Bombcast maintains its status as the flyest video-game podcast around with frank discussions of skull-based vodka, drinks disguised as soy sauce, Bionic Commando, torture porn, Will Wright's Stupid Fun Club, week two of DSiWare, and much more. Tue, 14 Apr 2009 19:54:00 PST 1600-80 The Bombcast maintains its status as the flyest video-game podcast around with frank discussions of skull-based vodka, drinks disguised as soy sauce, Bionic Commando, torture porn, Will Wright's Stupid Fun Club, week two of DSiWare, and much more. The Bombcast maintains its status as the flyest video-game podcast around with frank discussions of skull-based vodka, drinks disguised as soy sauce, Bionic Commando, torture porn, Will Wright's Stupid Fun Club, week two of DSiWare, and much more. Giant Bomb no 7372 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast: Capcom Edition https://www.giantbomb.com/podcasts/giant-bombcast-capcom-edition/1600-78/ Adam Boyes and Chris Kramer from Capcom US come by to discuss downloadable games, working with Japan, the Capcom-Unity, and of course, Fox Hunt. Thu, 09 Apr 2009 16:53:20 PST 1600-78 Adam Boyes and Chris Kramer from Capcom US come by to discuss downloadable games, working with Japan, the Capcom-Unity, and of course, Fox Hunt. Adam Boyes and Chris Kramer from Capcom US come by to discuss downloadable games, working with Japan, the Capcom-Unity, and of course, Fox Hunt. Giant Bomb no 0 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 04-07-2009 https://www.giantbomb.com/podcasts/giant-bombcast-04-07-2009/1600-77/ With Brad out of the office, we invite gamecop Giancarlo Varanini to fill the fourth chair as we drink bird-nest-based beverages, recount Jeff and Vinny's nightmare weekend in Houston, appraise the initial DSiWare offerings, and more. Tue, 07 Apr 2009 18:47:51 PST 1600-77 With Brad out of the office, we invite gamecop Giancarlo Varanini to fill the fourth chair as we drink bird-nest-based beverages, recount Jeff and Vinny's nightmare weekend in Houston, appraise the initial DSiWare offerings, and more. With Brad out of the office, we invite gamecop Giancarlo Varanini to fill the fourth chair as we drink bird-nest-based beverages, recount Jeff and Vinny's nightmare weekend in Houston, appraise the initial DSiWare offerings, and more. Giant Bomb no 8359 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03-31-2009 https://www.giantbomb.com/podcasts/giant-bombcast-03-31-2009/1600-76/ Ryan and Vinny fight a losing battle against the GDC fever as we address Jeff's Punch-Out!!-induced inner turmoil, Brad's excitement over the ill-named League of Legends: Clash of Fates, cloth maps, Don King, suave bananas, and more! Tue, 31 Mar 2009 19:14:02 PST 1600-76 Ryan and Vinny fight a losing battle against the GDC fever as we address Jeff's Punch-Out!!-induced inner turmoil, Brad's excitement over the ill-named League of Legends: Clash of Fates, cloth maps, Don King, suave bananas, and more! Ryan and Vinny fight a losing battle against the GDC fever as we address Jeff's Punch-Out!!-induced inner turmoil, Brad's excitement over the ill-named League of Legends: Clash of Fates, cloth maps, Don King, suave bananas, and more! Giant Bomb no 8653 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast: BioWare Edition https://www.giantbomb.com/podcasts/giant-bombcast-bioware-edition/1600-75/ Ryan and Brad sit down with Ray Muzyka and Greg Zeschuk at GDC 09 to discuss both Dragon Age: Origins and BioWare's origins. Mon, 30 Mar 2009 09:49:25 PST 1600-75 Ryan and Brad sit down with Ray Muzyka and Greg Zeschuk at GDC 09 to discuss both Dragon Age: Origins and BioWare's origins. Ryan and Brad sit down with Ray Muzyka and Greg Zeschuk at GDC 09 to discuss both Dragon Age: Origins and BioWare's origins. Giant Bomb no 0 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast: GDC 09 Day Two https://www.giantbomb.com/podcasts/giant-bombcast-gdc-09-day-two/1600-74/ Day two sees Harmonix's own Alex Navarro, John Drake, and Sean Baptiste, Tigon Studios' Ian Stevens, and Pandemic's Drew Marlowe join the fray. Fri, 27 Mar 2009 01:18:50 PST 1600-74 Day two sees Harmonix's own Alex Navarro, John Drake, and Sean Baptiste, Tigon Studios' Ian Stevens, and Pandemic's Drew Marlowe join the fray. Day two sees Harmonix's own Alex Navarro, John Drake, and Sean Baptiste, Tigon Studios' Ian Stevens, and Pandemic's Drew Marlowe join the fray. Giant Bomb no 6153 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast: GDC 09 Day One https://www.giantbomb.com/podcasts/giant-bombcast-gdc-09-day-one/1600-73/ We discuss some of the highlights from our first day at GDC 09 with an all-star panel of game developers, including EALA's Amer Ajami and Greg Kasavin, Mythic Entertainment's Paul Barnett, 2K Boston's Joe Fielder, and Turn 10 Studios' Che Chou. Thu, 26 Mar 2009 01:18:29 PST 1600-73 We discuss some of the highlights from our first day at GDC 09 with an all-star panel of game developers, including EALA's Amer Ajami and Greg Kasavin, Mythic Entertainment's Paul Barnett, 2K Boston's Joe Fielder, and Turn 10 Studios' Che Chou. We discuss some of the highlights from our first day at GDC 09 with an all-star panel of game developers, including EALA's Amer Ajami and Greg Kasavin, Mythic Entertainment's Paul Barnett, 2K Boston's Joe Fielder, and Turn 10 Studios' Che Chou. Giant Bomb no 6935 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03-24-2009 https://www.giantbomb.com/podcasts/giant-bombcast-03-24-2009/1600-72/ It's a death march of weird accents and terrifying candy as we're joined by Ulf Andersson and Gunnar Johansson from GRIN. We also discuss OnLive, Max Payne 3, BioShock 2 subtitle shenanigans, and much more in this epic edition of the Giant Bombcast. Tue, 24 Mar 2009 17:43:02 PST 1600-72 It's a death march of weird accents and terrifying candy as we're joined by Ulf Andersson and Gunnar Johansson from GRIN. We also discuss OnLive, Max Payne 3, BioShock 2 subtitle shenanigans, and much more in this epic edition of the Giant Bombcast. It's a death march of weird accents and terrifying candy as we're joined by Ulf Andersson and Gunnar Johansson from GRIN. We also discuss OnLive, Max Payne 3, BioShock 2 subtitle shenanigans, and much more in this epic edition of the Giant Bombcast. Giant Bomb no 8465 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03-17-2009 https://www.giantbomb.com/podcasts/giant-bombcast-03-17-2009/1600-71/ The Bombcast gets frappadocious this week with discussions of MadWorld's racial insensitivity, the douche-reduced Army of Two sequel, Criterion's April Fools prank, plus an inordinate amount of GI Joe talk. Once a man! Tue, 17 Mar 2009 20:22:01 PST 1600-71 The Bombcast gets frappadocious this week with discussions of MadWorld's racial insensitivity, the douche-reduced Army of Two sequel, Criterion's April Fools prank, plus an inordinate amount of GI Joe talk. Once a man! The Bombcast gets frappadocious this week with discussions of MadWorld's racial insensitivity, the douche-reduced Army of Two sequel, Criterion's April Fools prank, plus an inordinate amount of GI Joe talk. Once a man! Giant Bomb no 7444 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03-10-2009 https://www.giantbomb.com/podcasts/giant-bombcast-03-10-2009/1600-70/ With Ryan back in the saddle, the Giant Bombcast returns from the brink with delicious Mexican vanilla soda, the quieter side of Sgt. Slaughter, extensive and unnecessary Ghostbusters references, the winners of our Noby Noby Boy contest, and much more! Tue, 10 Mar 2009 17:54:00 PST 1600-70 With Ryan back in the saddle, the Giant Bombcast returns from the brink with delicious Mexican vanilla soda, the quieter side of Sgt. Slaughter, extensive and unnecessary Ghostbusters references, the winners of our Noby Noby Boy contest, and much more! With Ryan back in the saddle, the Giant Bombcast returns from the brink with delicious Mexican vanilla soda, the quieter side of Sgt. Slaughter, extensive and unnecessary Ghostbusters references, the winners of our Noby Noby Boy contest, and much more! Giant Bomb no 7778 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast: Who You Gonna Call? Edition https://www.giantbomb.com/podcasts/giant-bombcast-who-you-gonna-call-edition/1600-69/ You're right, no human being would stack books like this. And the flowers are still standing! What about the Twinkie? Yes, have some. Dogs and cats, living together... mass hysteria! What did you do, Ray? I love this plan! I'm excited to be a part of it! Mon, 09 Mar 2009 16:02:48 PST 1600-69 You're right, no human being would stack books like this. And the flowers are still standing! What about the Twinkie? Yes, have some. Dogs and cats, living together... mass hysteria! What did you do, Ray? I love this plan! I'm excited to be a part of it! You're right, no human being would stack books like this. And the flowers are still standing! What about the Twinkie? Yes, have some. Dogs and cats, living together... mass hysteria! What did you do, Ray? I love this plan! I'm excited to be a part of it! Giant Bomb no 0 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03-03-2009 https://www.giantbomb.com/podcasts/giant-bombcast-03-03-2009/1600-68/ With Ryan out on vacation, we have no idea what we're doing this week. Seriously, I don't even know if what I'm writing here will show up anywhere. But in case it does, we're talking about space bugs, Halo Wars, Chun-Li: The Movie, Saskatoon, and more! Tue, 03 Mar 2009 20:41:51 PST 1600-68 With Ryan out on vacation, we have no idea what we're doing this week. Seriously, I don't even know if what I'm writing here will show up anywhere. But in case it does, we're talking about space bugs, Halo Wars, Chun-Li: The Movie, Saskatoon, and more! With Ryan out on vacation, we have no idea what we're doing this week. Seriously, I don't even know if what I'm writing here will show up anywhere. But in case it does, we're talking about space bugs, Halo Wars, Chun-Li: The Movie, Saskatoon, and more! Giant Bomb no 8153 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast: EVE Online Edition https://www.giantbomb.com/podcasts/giant-bombcast-eve-online-edition/1600-67/ Brad, Jeff, and Ryan sit down with Noah Ward, lead game designer for EVE Online, to discuss the upcoming expansion and just what makes this no-holds-barred space MMO tick. Thu, 26 Feb 2009 15:56:52 PST 1600-67 Brad, Jeff, and Ryan sit down with Noah Ward, lead game designer for EVE Online, to discuss the upcoming expansion and just what makes this no-holds-barred space MMO tick. Brad, Jeff, and Ryan sit down with Noah Ward, lead game designer for EVE Online, to discuss the upcoming expansion and just what makes this no-holds-barred space MMO tick. Giant Bomb no 0 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 02-24-2009 https://www.giantbomb.com/podcasts/giant-bombcast-02-24-2009/1600-66/ This week's Bombcast is citrus fresh with the unbridled insanity of Noby Noby Boy, 50 Cent's gangsterous return to video games, the relationship between Ubisoft, Canada, and cheese, NSFW Flash games, an exciting new Giant Bomb contest, and more! Tue, 24 Feb 2009 18:40:37 PST 1600-66 This week's Bombcast is citrus fresh with the unbridled insanity of Noby Noby Boy, 50 Cent's gangsterous return to video games, the relationship between Ubisoft, Canada, and cheese, NSFW Flash games, an exciting new Giant Bomb contest, and more! This week's Bombcast is citrus fresh with the unbridled insanity of Noby Noby Boy, 50 Cent's gangsterous return to video games, the relationship between Ubisoft, Canada, and cheese, NSFW Flash games, an exciting new Giant Bomb contest, and more! Giant Bomb no 7667 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 02-17-2009 https://www.giantbomb.com/podcasts/giant-bombcast-02-17-2009/1600-65/ We celebrate a year of podcasts by drinking bubble gum and discussing Street Fighter IV, Halo Wars, Fire Emblem: Shadow Dragon, Vinny's strong distaste for Flower, the comedy goldmine of the full frontal in The Lost and Damned, and more! Tue, 17 Feb 2009 19:01:41 PST 1600-65 We celebrate a year of podcasts by drinking bubble gum and discussing Street Fighter IV, Halo Wars, Fire Emblem: Shadow Dragon, Vinny's strong distaste for Flower, the comedy goldmine of the full frontal in The Lost and Damned, and more! We celebrate a year of podcasts by drinking bubble gum and discussing Street Fighter IV, Halo Wars, Fire Emblem: Shadow Dragon, Vinny's strong distaste for Flower, the comedy goldmine of the full frontal in The Lost and Damned, and more! Giant Bomb no 6459 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 02-10-2009 https://www.giantbomb.com/podcasts/giant-bombcast-02-10-2009/1600-64/ We get circuit-bent on Jolly Rancher soda and discuss the need for an achievements czar, the identity of Rico Suave, played-out headlines, bikini protocols on Coney Island, Vinny's imaginary Left 4 Dead mode, second-person shooters, and more! Tue, 10 Feb 2009 19:28:15 PST 1600-64 We get circuit-bent on Jolly Rancher soda and discuss the need for an achievements czar, the identity of Rico Suave, played-out headlines, bikini protocols on Coney Island, Vinny's imaginary Left 4 Dead mode, second-person shooters, and more! We get circuit-bent on Jolly Rancher soda and discuss the need for an achievements czar, the identity of Rico Suave, played-out headlines, bikini protocols on Coney Island, Vinny's imaginary Left 4 Dead mode, second-person shooters, and more! Giant Bomb no 7705 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 02-03-2009 https://www.giantbomb.com/podcasts/giant-bombcast-02-03-2009/1600-63/ The Bombcast avoids Olympic controversy with discussions of Killzone 2, Prince of Persia DLC, E3 2009, Need for Speed, Madden NFL 10, the next Jason Bourne game, Xbox 360 avatar perks, the Atari Jaguar, Resident Evil 5, and much more! Tue, 03 Feb 2009 22:09:40 PST 1600-63 The Bombcast avoids Olympic controversy with discussions of Killzone 2, Prince of Persia DLC, E3 2009, Need for Speed, Madden NFL 10, the next Jason Bourne game, Xbox 360 avatar perks, the Atari Jaguar, Resident Evil 5, and much more! The Bombcast avoids Olympic controversy with discussions of Killzone 2, Prince of Persia DLC, E3 2009, Need for Speed, Madden NFL 10, the next Jason Bourne game, Xbox 360 avatar perks, the Atari Jaguar, Resident Evil 5, and much more! Giant Bomb no 7449 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 01-27-2009 https://www.giantbomb.com/podcasts/giant-bombcast-01-27-2009/1600-62/ Enjoy the muffled sounds of madness as we discuss the emerging EAverse, Operation: Anchorage, inappropriate applications of fried chicken, appropriate applications of evil cat people, the Bernie Madoff of EVE Online, Street Fiver, and more! Tue, 27 Jan 2009 20:46:38 PST 1600-62 Enjoy the muffled sounds of madness as we discuss the emerging EAverse, Operation: Anchorage, inappropriate applications of fried chicken, appropriate applications of evil cat people, the Bernie Madoff of EVE Online, Street Fiver, and more! Enjoy the muffled sounds of madness as we discuss the emerging EAverse, Operation: Anchorage, inappropriate applications of fried chicken, appropriate applications of evil cat people, the Bernie Madoff of EVE Online, Street Fiver, and more! Giant Bomb no 7690 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 01-20-2009 https://www.giantbomb.com/podcasts/giant-bombcast-01-20-2009/1600-61/ We celebrate Inauguration Day with a UK drink taste-test, copious discussions of Street Fighter IV, Skate 2, Knothole Island, our collective frustration over the PS3, the cinematic influences of Metal Gear Solid 4, and more. Have fun at dinner! Tue, 20 Jan 2009 21:19:24 PST 1600-61 We celebrate Inauguration Day with a UK drink taste-test, copious discussions of Street Fighter IV, Skate 2, Knothole Island, our collective frustration over the PS3, the cinematic influences of Metal Gear Solid 4, and more. Have fun at dinner! We celebrate Inauguration Day with a UK drink taste-test, copious discussions of Street Fighter IV, Skate 2, Knothole Island, our collective frustration over the PS3, the cinematic influences of Metal Gear Solid 4, and more. Have fun at dinner! Giant Bomb no 8347 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 01-13-2009 https://www.giantbomb.com/podcasts/giant-bombcast-01-13-2009/1600-60/ We're joined by former EGM editor Giancarlo Varanini for discussions of the Windows 7 beta, the future of Tony Hawk, the escalating madness surrounding Bob's Game, Serena Altschul on PCP, McRib virginity, and more! Tue, 13 Jan 2009 23:04:24 PST 1600-60 We're joined by former EGM editor Giancarlo Varanini for discussions of the Windows 7 beta, the future of Tony Hawk, the escalating madness surrounding Bob's Game, Serena Altschul on PCP, McRib virginity, and more! We're joined by former EGM editor Giancarlo Varanini for discussions of the Windows 7 beta, the future of Tony Hawk, the escalating madness surrounding Bob's Game, Serena Altschul on PCP, McRib virginity, and more! Giant Bomb no 8202 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 01-06-2009 https://www.giantbomb.com/podcasts/giant-bombcast-01-06-2009/1600-59/ The Giant Bombcast returns for the 200Crime with mustaches, AustraliaBux, Dave Snider's fun facts about Washington, D.C., a talkbox, the awesome Crank 2: High Voltage trailer, Lego Rock Band, the Killzone 2 demo, and much more! Tue, 06 Jan 2009 19:50:45 PST 1600-59 The Giant Bombcast returns for the 200Crime with mustaches, AustraliaBux, Dave Snider's fun facts about Washington, D.C., a talkbox, the awesome Crank 2: High Voltage trailer, Lego Rock Band, the Killzone 2 demo, and much more! The Giant Bombcast returns for the 200Crime with mustaches, AustraliaBux, Dave Snider's fun facts about Washington, D.C., a talkbox, the awesome Crank 2: High Voltage trailer, Lego Rock Band, the Killzone 2 demo, and much more! Giant Bomb no 6485 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast: Game of the Year 2008 Edition https://www.giantbomb.com/podcasts/giant-bombcast-game-of-the-year-2008-edition/1600-58/ We let you inside our GOTY deliberation process as we debate the relative merits of Burnout Paradise, Grand Theft Auto IV, Metal Gear Solid 4, Gears of War 2, Banjo-Kazooie: Nuts and Bolts, Dead Space, Braid, Left 4 Dead, Fallout 3, and Fable II. Tue, 30 Dec 2008 12:09:14 PST 1600-58 We let you inside our GOTY deliberation process as we debate the relative merits of Burnout Paradise, Grand Theft Auto IV, Metal Gear Solid 4, Gears of War 2, Banjo-Kazooie: Nuts and Bolts, Dead Space, Braid, Left 4 Dead, Fallout 3, and Fable II. We let you inside our GOTY deliberation process as we debate the relative merits of Burnout Paradise, Grand Theft Auto IV, Metal Gear Solid 4, Gears of War 2, Banjo-Kazooie: Nuts and Bolts, Dead Space, Braid, Left 4 Dead, Fallout 3, and Fable II. Giant Bomb no 9745 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 12-23-2008 https://www.giantbomb.com/podcasts/giant-bombcast-12-23-2008/1600-57/ Our last proper podcast of 2008 includes our pleas to euthanize Sonic the Hedgehog, hot sandos, cyborg zombies, the last Christmas song, predictions for 2009, and more. Be sure to come back next week for our special Game of the Year podcast! Tue, 23 Dec 2008 21:19:13 PST 1600-57 Our last proper podcast of 2008 includes our pleas to euthanize Sonic the Hedgehog, hot sandos, cyborg zombies, the last Christmas song, predictions for 2009, and more. Be sure to come back next week for our special Game of the Year podcast! Our last proper podcast of 2008 includes our pleas to euthanize Sonic the Hedgehog, hot sandos, cyborg zombies, the last Christmas song, predictions for 2009, and more. Be sure to come back next week for our special Game of the Year podcast! Giant Bomb no 7339 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 12-16-2008 https://www.giantbomb.com/podcasts/giant-bombcast-12-16-2008/1600-56/ We share our thoughts on the Spike TV Video Game Awards, drink Dissidia potions, make fun of PlayStation Home, try to make sense of Noby Noby Boy, speculate on Niko Bellic's fate in The Lost and the Damned, and more! Tue, 16 Dec 2008 16:51:31 PST 1600-56 We share our thoughts on the Spike TV Video Game Awards, drink Dissidia potions, make fun of PlayStation Home, try to make sense of Noby Noby Boy, speculate on Niko Bellic's fate in The Lost and the Damned, and more! We share our thoughts on the Spike TV Video Game Awards, drink Dissidia potions, make fun of PlayStation Home, try to make sense of Noby Noby Boy, speculate on Niko Bellic's fate in The Lost and the Damned, and more! Giant Bomb no 7609 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 12-09-2008 https://www.giantbomb.com/podcasts/giant-bombcast-12-09-2008/1600-55/ Following some heinous technical difficulties, it's take two of this week's Giant Bombcast! With Jeff as our one-man house band, we discuss Prince of Persia, Square Enix and Eidos, turning a DSi into a talkbox, Crackdown 2, Michael Phelps, and more! Tue, 09 Dec 2008 22:42:52 PST 1600-55 Following some heinous technical difficulties, it's take two of this week's Giant Bombcast! With Jeff as our one-man house band, we discuss Prince of Persia, Square Enix and Eidos, turning a DSi into a talkbox, Crackdown 2, Michael Phelps, and more! Following some heinous technical difficulties, it's take two of this week's Giant Bombcast! With Jeff as our one-man house band, we discuss Prince of Persia, Square Enix and Eidos, turning a DSi into a talkbox, Crackdown 2, Michael Phelps, and more! Giant Bomb no 4440 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 12-02-2008 https://www.giantbomb.com/podcasts/giant-bombcast-12-02-2008/1600-54/ We recover from our tryptophan poisoning with discussions of the screechy announcer from You're In the Movies, Assassin's Creed 2, the future of Midway, Nathan Drake's chain wallet, the winner of our Gears of War 2 Zune contest, Anime Vice, and more! Tue, 02 Dec 2008 18:45:16 PST 1600-54 We recover from our tryptophan poisoning with discussions of the screechy announcer from You're In the Movies, Assassin's Creed 2, the future of Midway, Nathan Drake's chain wallet, the winner of our Gears of War 2 Zune contest, Anime Vice, and more! We recover from our tryptophan poisoning with discussions of the screechy announcer from You're In the Movies, Assassin's Creed 2, the future of Midway, Nathan Drake's chain wallet, the winner of our Gears of War 2 Zune contest, Anime Vice, and more! Giant Bomb no 7593 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 11-25-2008 https://www.giantbomb.com/podcasts/giant-bombcast-11-25-2008/1600-53/ Jeff sits down with Dave and Harmonix's Alex Navarro to discuss the rules of "F-U" Uno, the 2008 Video Game Report Card, Fallout 3 DLC, Dave's Zombies Ate My Neighbors nightmare, and... oh, right. Rock Band 2. Tue, 25 Nov 2008 17:37:20 PST 1600-53 Jeff sits down with Dave and Harmonix's Alex Navarro to discuss the rules of "F-U" Uno, the 2008 Video Game Report Card, Fallout 3 DLC, Dave's Zombies Ate My Neighbors nightmare, and... oh, right. Rock Band 2. Jeff sits down with Dave and Harmonix's Alex Navarro to discuss the rules of "F-U" Uno, the 2008 Video Game Report Card, Fallout 3 DLC, Dave's Zombies Ate My Neighbors nightmare, and... oh, right. Rock Band 2. Giant Bomb no 5098 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 11-18-2008 https://www.giantbomb.com/podcasts/giant-bombcast-11-18-2008/1600-52/ It's the video-game podcast that eats like a meal, where we discuss Left 4 Dead, Halo Wars, our Gears of War 2 Zune giveaway, the romantic relationship between dinosaurs and automobiles, Brad's dad, and more. And we do it all with robot voices! Tue, 18 Nov 2008 21:19:21 PST 1600-52 It's the video-game podcast that eats like a meal, where we discuss Left 4 Dead, Halo Wars, our Gears of War 2 Zune giveaway, the romantic relationship between dinosaurs and automobiles, Brad's dad, and more. And we do it all with robot voices! It's the video-game podcast that eats like a meal, where we discuss Left 4 Dead, Halo Wars, our Gears of War 2 Zune giveaway, the romantic relationship between dinosaurs and automobiles, Brad's dad, and more. And we do it all with robot voices! Giant Bomb no 7003 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 11-11-2008 https://www.giantbomb.com/podcasts/giant-bombcast-11-11-2008/1600-51/ This week's topics include Resistance 2, Mirror's Edge, other people's property in LittleBigPlanet, Fallout 3's cultural sensitivity, the used-game scourge, Infinity Ward's bolt-action beef, and more! Tue, 11 Nov 2008 21:46:30 PST 1600-51 This week's topics include Resistance 2, Mirror's Edge, other people's property in LittleBigPlanet, Fallout 3's cultural sensitivity, the used-game scourge, Infinity Ward's bolt-action beef, and more! This week's topics include Resistance 2, Mirror's Edge, other people's property in LittleBigPlanet, Fallout 3's cultural sensitivity, the used-game scourge, Infinity Ward's bolt-action beef, and more! Giant Bomb no 6727 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 11-04-2008 https://www.giantbomb.com/podcasts/giant-bombcast-11-04-2008/1600-50/ We shake off Halloween and do our best to avoid politics with in-depth discussions of Vinny's DJ ghosts, Brad's internet-savvy ant farm, the NXE, The Beatles, Marcus Fenix at home, impossible achievements, and more! Tue, 04 Nov 2008 21:34:41 PST 1600-50 We shake off Halloween and do our best to avoid politics with in-depth discussions of Vinny's DJ ghosts, Brad's internet-savvy ant farm, the NXE, The Beatles, Marcus Fenix at home, impossible achievements, and more! We shake off Halloween and do our best to avoid politics with in-depth discussions of Vinny's DJ ghosts, Brad's internet-savvy ant farm, the NXE, The Beatles, Marcus Fenix at home, impossible achievements, and more! Giant Bomb no 6965 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 10-28-2008 https://www.giantbomb.com/podcasts/giant-bombcast-10-28-2008/1600-49/ We get juiced up on goji berries to discuss the current tsunami of new releases, including Dead Space, Far Cry 2, Fallout 3, LittleBigPlanet, and Guitar Hero World Tour, as well as Mortal Kombat vs. DC Universe, John Carmack's rockets, and more. Tue, 28 Oct 2008 20:59:36 PST 1600-49 We get juiced up on goji berries to discuss the current tsunami of new releases, including Dead Space, Far Cry 2, Fallout 3, LittleBigPlanet, and Guitar Hero World Tour, as well as Mortal Kombat vs. DC Universe, John Carmack's rockets, and more. We get juiced up on goji berries to discuss the current tsunami of new releases, including Dead Space, Far Cry 2, Fallout 3, LittleBigPlanet, and Guitar Hero World Tour, as well as Mortal Kombat vs. DC Universe, John Carmack's rockets, and more. Giant Bomb no 8274 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombkast: Ed Boon Edition https://www.giantbomb.com/podcasts/giant-bombkast-ed-boon-edition/1600-48/ Jeff, Brad, and Ryan sit down with Mortal Kombat co-creator Ed Boon to discuss MK's place in the world of fighting games, the state of arcades, the potential for Mortal Kombat Vs. Street Fighter, and more. Fri, 24 Oct 2008 17:23:33 PST 1600-48 Jeff, Brad, and Ryan sit down with Mortal Kombat co-creator Ed Boon to discuss MK's place in the world of fighting games, the state of arcades, the potential for Mortal Kombat Vs. Street Fighter, and more. Jeff, Brad, and Ryan sit down with Mortal Kombat co-creator Ed Boon to discuss MK's place in the world of fighting games, the state of arcades, the potential for Mortal Kombat Vs. Street Fighter, and more. Giant Bomb no 0 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 10-21-2008 https://www.giantbomb.com/podcasts/giant-bombcast-10-21-2008/1600-47/ We return to the glorious US of A to discuss the current deluge of hot, hot games, including Fable II, SOCOM: Confrontation, Saints Row 2, LittleBigPlanet, and much more! Tue, 21 Oct 2008 19:15:49 PST 1600-47 We return to the glorious US of A to discuss the current deluge of hot, hot games, including Fable II, SOCOM: Confrontation, Saints Row 2, LittleBigPlanet, and much more! We return to the glorious US of A to discuss the current deluge of hot, hot games, including Fable II, SOCOM: Confrontation, Saints Row 2, LittleBigPlanet, and much more! Giant Bomb no 6507 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 10-12-2008 https://www.giantbomb.com/podcasts/giant-bombcast-10-12-2008/1600-46/ We wrap up our business in Tokyo with talk of cosplayers, Kingdom Hearts, more terrible Swedish candy, capsule toys, and more. Sun, 12 Oct 2008 19:46:20 PST 1600-46 We wrap up our business in Tokyo with talk of cosplayers, Kingdom Hearts, more terrible Swedish candy, capsule toys, and more. We wrap up our business in Tokyo with talk of cosplayers, Kingdom Hearts, more terrible Swedish candy, capsule toys, and more. Giant Bomb no 6453 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 10-10-2008 https://www.giantbomb.com/podcasts/giant-bombcast-10-10-2008/1600-45/ With the second day of the 2008 Tokyo Game Show behind us, we discuss Halo 3 Recon, White Knight Chronicles, Let's Tap, Yakuza 3, the current state of TGS and video-game trade shows in general, and much more. Fri, 10 Oct 2008 09:41:55 PST 1600-45 With the second day of the 2008 Tokyo Game Show behind us, we discuss Halo 3 Recon, White Knight Chronicles, Let's Tap, Yakuza 3, the current state of TGS and video-game trade shows in general, and much more. With the second day of the 2008 Tokyo Game Show behind us, we discuss Halo 3 Recon, White Knight Chronicles, Let's Tap, Yakuza 3, the current state of TGS and video-game trade shows in general, and much more. Giant Bomb no 5390 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 10-09-2008 https://www.giantbomb.com/podcasts/giant-bombcast-10-09-2008/1600-44/ Brad, Jeff, and Ryan wrap up the first day of the 2008 Tokyo Game Show with some of their personal highlights. Thu, 09 Oct 2008 07:43:38 PST 1600-44 Brad, Jeff, and Ryan wrap up the first day of the 2008 Tokyo Game Show with some of their personal highlights. Brad, Jeff, and Ryan wrap up the first day of the 2008 Tokyo Game Show with some of their personal highlights. Giant Bomb no 0 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 10-08-2008 https://www.giantbomb.com/podcasts/giant-bombcast-10-08-2008/1600-43/ Giant Bomb's J-pop ecstacy nightmare continues as the boys take a trip to Akihabara. Wed, 08 Oct 2008 14:54:44 PST 1600-43 Giant Bomb's J-pop ecstacy nightmare continues as the boys take a trip to Akihabara. Giant Bomb's J-pop ecstacy nightmare continues as the boys take a trip to Akihabara. Giant Bomb no 4912 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 10-07-2008 https://www.giantbomb.com/podcasts/giant-bombcast-10-07-2008/1600-42/ We're live from Tokyo in this very jet-lagged edition of the Giant Bombcast! Topics of discussion include Speed Racer, Street Fighter IV, beef bowls, Vodka Drunkinski, Marcus Fenix's face scars, and more! Wed, 08 Oct 2008 08:55:57 PST 1600-42 We're live from Tokyo in this very jet-lagged edition of the Giant Bombcast! Topics of discussion include Speed Racer, Street Fighter IV, beef bowls, Vodka Drunkinski, Marcus Fenix's face scars, and more! We're live from Tokyo in this very jet-lagged edition of the Giant Bombcast! Topics of discussion include Speed Racer, Street Fighter IV, beef bowls, Vodka Drunkinski, Marcus Fenix's face scars, and more! Giant Bomb no 4253 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast Red Alert 3 Edition https://www.giantbomb.com/podcasts/giant-bombcast-red-alert-3-edition/1600-41/ Jeff and Ryan are joined by EALA's Amer Ajami and Greg Kasavin in this bonus podcast to discuss some of the finer points of Command &amp; Conquer: Red Alert 3. Fri, 03 Oct 2008 17:52:27 PST 1600-41 Jeff and Ryan are joined by EALA's Amer Ajami and Greg Kasavin in this bonus podcast to discuss some of the finer points of Command &amp; Conquer: Red Alert 3. Jeff and Ryan are joined by EALA's Amer Ajami and Greg Kasavin in this bonus podcast to discuss some of the finer points of Command &amp; Conquer: Red Alert 3. Giant Bomb no 0 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 09-30-2008 https://www.giantbomb.com/podcasts/giant-bombcast-09-30-2008/1600-40/ Giant Bomb designer Dave Snider joins Ryan, Brad, and Vinny to discuss Warhammer key parties, making bootleg versions of Eye of the Tiger in Guitar Hero: World Tour, droopy pipes, Return to Castle Greyskull, and much more! Tue, 30 Sep 2008 22:17:12 PST 1600-40 Giant Bomb designer Dave Snider joins Ryan, Brad, and Vinny to discuss Warhammer key parties, making bootleg versions of Eye of the Tiger in Guitar Hero: World Tour, droopy pipes, Return to Castle Greyskull, and much more! Giant Bomb designer Dave Snider joins Ryan, Brad, and Vinny to discuss Warhammer key parties, making bootleg versions of Eye of the Tiger in Guitar Hero: World Tour, droopy pipes, Return to Castle Greyskull, and much more! Giant Bomb no 7330 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 09-23-2008 https://www.giantbomb.com/podcasts/giant-bombcast-09-23-2008/1600-39/ What do the first weekend of Warhammer Online, the Jenny McCarthy virus, Ice-T's MySpace page, The Sims: The Movie, Metal Gear Solid Existence, and Need for Speed: Burnout all have in common? Listen to this week's Bombcast to find out! Tue, 23 Sep 2008 20:56:36 PST 1600-39 What do the first weekend of Warhammer Online, the Jenny McCarthy virus, Ice-T's MySpace page, The Sims: The Movie, Metal Gear Solid Existence, and Need for Speed: Burnout all have in common? Listen to this week's Bombcast to find out! What do the first weekend of Warhammer Online, the Jenny McCarthy virus, Ice-T's MySpace page, The Sims: The Movie, Metal Gear Solid Existence, and Need for Speed: Burnout all have in common? Listen to this week's Bombcast to find out! Giant Bomb no 6871 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 09-16-2008 https://www.giantbomb.com/podcasts/giant-bombcast-09-16-2008/1600-38/ The Giant Bombcast celebrates this great country of ours with discussions of Fable II, The Force Unleashed, Rock Band 2, bees, strict NATs, Transformers tech specs, Hawaiian juice, and much more! Tue, 16 Sep 2008 21:42:26 PST 1600-38 The Giant Bombcast celebrates this great country of ours with discussions of Fable II, The Force Unleashed, Rock Band 2, bees, strict NATs, Transformers tech specs, Hawaiian juice, and much more! The Giant Bombcast celebrates this great country of ours with discussions of Fable II, The Force Unleashed, Rock Band 2, bees, strict NATs, Transformers tech specs, Hawaiian juice, and much more! Giant Bomb no 7451 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast Spore Edition https://www.giantbomb.com/podcasts/giant-bombcast-spore-edition/1600-37/ The Giant Bomb crew pontificates about Will Wright's intergalactic life simulator, Spore. Fri, 12 Sep 2008 20:42:24 PST 1600-37 The Giant Bomb crew pontificates about Will Wright's intergalactic life simulator, Spore. The Giant Bomb crew pontificates about Will Wright's intergalactic life simulator, Spore. Giant Bomb no 4147 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 09-09-2008 https://www.giantbomb.com/podcasts/giant-bombcast-09-09-2008/1600-36/ We celebrate the ninth anniversary of the Dreamcast and discuss Crysis Warhead, BioShock on the PS3, the musical mystery behind Killer Instinct 3, the rumored launch of the New Xbox Experience, the current state of PC piracy, and much more! Tue, 09 Sep 2008 22:24:41 PST 1600-36 We celebrate the ninth anniversary of the Dreamcast and discuss Crysis Warhead, BioShock on the PS3, the musical mystery behind Killer Instinct 3, the rumored launch of the New Xbox Experience, the current state of PC piracy, and much more! We celebrate the ninth anniversary of the Dreamcast and discuss Crysis Warhead, BioShock on the PS3, the musical mystery behind Killer Instinct 3, the rumored launch of the New Xbox Experience, the current state of PC piracy, and much more! Giant Bomb no 7674 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 09-02-2008 https://www.giantbomb.com/podcasts/giant-bombcast-09-02-2008/1600-35/ We get back to our regularly-scheduled podcast and discuss the candy-filled fun of Viva Piñata: Trouble in Paradise, vent about Mercenaries 2: World in Flames, speculate about Capcom's next fighting game revival, and more! Tue, 02 Sep 2008 22:47:47 PST 1600-35 We get back to our regularly-scheduled podcast and discuss the candy-filled fun of Viva Piñata: Trouble in Paradise, vent about Mercenaries 2: World in Flames, speculate about Capcom's next fighting game revival, and more! We get back to our regularly-scheduled podcast and discuss the candy-filled fun of Viva Piñata: Trouble in Paradise, vent about Mercenaries 2: World in Flames, speculate about Capcom's next fighting game revival, and more! Giant Bomb no 4599 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast PAX08 Edition https://www.giantbomb.com/podcasts/giant-bombcast-pax08-edition/1600-34/ We wrap up day two of the 2008 Penny Arcade Exposition with special guests Rich Gallup, Alex Navarro, and Matt Rorie, as well as an inordinate amount of cursing. Cover thine virgin ears! Sun, 31 Aug 2008 10:06:30 PST 1600-34 We wrap up day two of the 2008 Penny Arcade Exposition with special guests Rich Gallup, Alex Navarro, and Matt Rorie, as well as an inordinate amount of cursing. Cover thine virgin ears! We wrap up day two of the 2008 Penny Arcade Exposition with special guests Rich Gallup, Alex Navarro, and Matt Rorie, as well as an inordinate amount of cursing. Cover thine virgin ears! Giant Bomb no 4701 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 08-26-2008 https://www.giantbomb.com/podcasts/giant-bombcast-08-26-2008/1600-33/ This week's podcast includes Denis Dyack's sinister machinations, our absentee highlights from Leipzig, Ryan Payton's departure from Kojima Productions, the rumors about potential Halo 4 rumors, Brad's mysterious disappearance, and much more! Tue, 26 Aug 2008 19:46:26 PST 1600-33 This week's podcast includes Denis Dyack's sinister machinations, our absentee highlights from Leipzig, Ryan Payton's departure from Kojima Productions, the rumors about potential Halo 4 rumors, Brad's mysterious disappearance, and much more! This week's podcast includes Denis Dyack's sinister machinations, our absentee highlights from Leipzig, Ryan Payton's departure from Kojima Productions, the rumors about potential Halo 4 rumors, Brad's mysterious disappearance, and much more! Giant Bomb no 7633 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 08-19-2008 https://www.giantbomb.com/podcasts/giant-bombcast-08-19-2008/1600-32/ This week's topics include Too Human, the terrible parents behind professional Guitar Hero players, the current state of Alan Wake, why we're not at Leipzig, and more! Tue, 19 Aug 2008 19:36:05 PST 1600-32 This week's topics include Too Human, the terrible parents behind professional Guitar Hero players, the current state of Alan Wake, why we're not at Leipzig, and more! This week's topics include Too Human, the terrible parents behind professional Guitar Hero players, the current state of Alan Wake, why we're not at Leipzig, and more! Giant Bomb no 6221 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 08-12-2008 https://www.giantbomb.com/podcasts/giant-bombcast-08-12-2008/1600-31/ We discuss Bionic Commando: Rearmed, Blizzard’s diabolical pyramid scheme, goatees, Hitler, and much, much more! Tue, 12 Aug 2008 19:11:09 PST 1600-31 We discuss Bionic Commando: Rearmed, Blizzard’s diabolical pyramid scheme, goatees, Hitler, and much, much more! We discuss Bionic Commando: Rearmed, Blizzard’s diabolical pyramid scheme, goatees, Hitler, and much, much more! Giant Bomb no 7171 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 08-05-2008 https://www.giantbomb.com/podcasts/giant-bombcast-08-05-2008/1600-30/ We drink some hemp milk, hate on Soul Calibur IV’s giant fake boobs, and review the E3 Critics Awards. Tue, 05 Aug 2008 22:20:27 PST 1600-30 We drink some hemp milk, hate on Soul Calibur IV’s giant fake boobs, and review the E3 Critics Awards. We drink some hemp milk, hate on Soul Calibur IV’s giant fake boobs, and review the E3 Critics Awards. Giant Bomb no 7687 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07-29-2008 https://www.giantbomb.com/podcasts/giant-bombcast-07-29-2008/1600-29/ We get back to the business of talkin' 'bout games, with topics including the latest from Telltale, more Activision Blizzard merger drama, MK vs. DC at Comic-Con, Geometry Wars 2, the eagle-punching potential of a new Karateka, and more! Tue, 29 Jul 2008 19:25:14 PST 1600-29 We get back to the business of talkin' 'bout games, with topics including the latest from Telltale, more Activision Blizzard merger drama, MK vs. DC at Comic-Con, Geometry Wars 2, the eagle-punching potential of a new Karateka, and more! We get back to the business of talkin' 'bout games, with topics including the latest from Telltale, more Activision Blizzard merger drama, MK vs. DC at Comic-Con, Geometry Wars 2, the eagle-punching potential of a new Karateka, and more! Giant Bomb no 4337 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07-22-2008 https://www.giantbomb.com/podcasts/giant-bombcast-07-22-2008/1600-28/ Giant Bomb is go! With the user submissions piling up, the guys take a quick break to discuss the new site and answer some of your questions. Tue, 22 Jul 2008 17:54:47 PST 1600-28 Giant Bomb is go! With the user submissions piling up, the guys take a quick break to discuss the new site and answer some of your questions. Giant Bomb is go! With the user submissions piling up, the guys take a quick break to discuss the new site and answer some of your questions. Giant Bomb no 0 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07-17-2008: Electronic Three Edition https://www.giantbomb.com/podcasts/giant-bombcast-07-17-2008-electronic-three-edition/1600-27/ We close the books on E3 2008 with our thoughts on Red Alert 3, The Agency, Left 4 Dead, The Force Unleashed, Saint’s Row 2, and much more! Thu, 17 Jul 2008 23:36:00 PST 1600-27 We close the books on E3 2008 with our thoughts on Red Alert 3, The Agency, Left 4 Dead, The Force Unleashed, Saint’s Row 2, and much more! We close the books on E3 2008 with our thoughts on Red Alert 3, The Agency, Left 4 Dead, The Force Unleashed, Saint’s Row 2, and much more! Giant Bomb no 6713 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07-16-2008: Electronic Three Edition https://www.giantbomb.com/podcasts/giant-bombcast-07-16-2008-electronic-three-edition/1600-26/ With the second day of E3 under our belts, we share our thoughts on Rock Band 2, Prince of Persia, Wii Sports Resort, Alpha Protocol, Killzone 2, Soul Calibur IV, Borderlands, Mortal Kombat vs. DC Universe, The Who, and much, much more! Thu, 17 Jul 2008 10:05:00 PST 1600-26 With the second day of E3 under our belts, we share our thoughts on Rock Band 2, Prince of Persia, Wii Sports Resort, Alpha Protocol, Killzone 2, Soul Calibur IV, Borderlands, Mortal Kombat vs. DC Universe, The Who, and much, much more! With the second day of E3 under our belts, we share our thoughts on Rock Band 2, Prince of Persia, Wii Sports Resort, Alpha Protocol, Killzone 2, Soul Calibur IV, Borderlands, Mortal Kombat vs. DC Universe, The Who, and much, much more! Giant Bomb no 9001 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07-15-2008: Electronic Three Edition https://www.giantbomb.com/podcasts/giant-bombcast-07-15-2008-electronic-three-edition/1600-25/ After a seemingly endless day at Electronic Three, we discuss Gears of War 2, the Nintendo, Sony, and Activision press conferences, Dragon Age: Origins, upcoming games from Capcom and EA, Fallout 3, and much more! Wed, 16 Jul 2008 02:21:00 PST 1600-25 After a seemingly endless day at Electronic Three, we discuss Gears of War 2, the Nintendo, Sony, and Activision press conferences, Dragon Age: Origins, upcoming games from Capcom and EA, Fallout 3, and much more! After a seemingly endless day at Electronic Three, we discuss Gears of War 2, the Nintendo, Sony, and Activision press conferences, Dragon Age: Origins, upcoming games from Capcom and EA, Fallout 3, and much more! Giant Bomb no 6637 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07-14-2008: Electronic Three Edition https://www.giantbomb.com/podcasts/giant-bombcast-07-14-2008-electronic-three-edition/1600-24/ The Giant Bombcast joins forces with the Boss of Bosses for our first day wrap-up of E3 2008. Mon, 14 Jul 2008 22:12:00 PST 1600-24 The Giant Bombcast joins forces with the Boss of Bosses for our first day wrap-up of E3 2008. The Giant Bombcast joins forces with the Boss of Bosses for our first day wrap-up of E3 2008. Giant Bomb no 4662 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07-08-2008 https://www.giantbomb.com/podcasts/giant-bombcast-07-08-2008/1600-23/ This week’s Bombcast topics include comic books, The Force Unleashed, Unreal Tournament III, Sega Channel, everyone’s favorite raccoon shylock, piñata whacking, Donkeykong Man, Denis Dyack’s latest antics, Peter Molyneux’s Whammies, and more! Tue, 08 Jul 2008 20:26:00 PST 1600-23 This week’s Bombcast topics include comic books, The Force Unleashed, Unreal Tournament III, Sega Channel, everyone’s favorite raccoon shylock, piñata whacking, Donkeykong Man, Denis Dyack’s latest antics, Peter Molyneux’s Whammies, and more! This week’s Bombcast topics include comic books, The Force Unleashed, Unreal Tournament III, Sega Channel, everyone’s favorite raccoon shylock, piñata whacking, Donkeykong Man, Denis Dyack’s latest antics, Peter Molyneux’s Whammies, and more! Giant Bomb no 7220 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 07-01-2008 https://www.giantbomb.com/podcasts/giant-bombcast-07-01-2008/1600-19/ In this week’s edition the boys discuss Diablo III, their boggling obsession with J Allard, the war of words between Treyarch and Gearbox, the latest PS3 firmware update, Denis Dyack’s internet shenanigans, Fruit Stripe Gum, and much more! Tue, 01 Jul 2008 22:30:00 PST 1600-19 In this week’s edition the boys discuss Diablo III, their boggling obsession with J Allard, the war of words between Treyarch and Gearbox, the latest PS3 firmware update, Denis Dyack’s internet shenanigans, Fruit Stripe Gum, and much more! In this week’s edition the boys discuss Diablo III, their boggling obsession with J Allard, the war of words between Treyarch and Gearbox, the latest PS3 firmware update, Denis Dyack’s internet shenanigans, Fruit Stripe Gum, and much more! Giant Bomb no 6466 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 06-24-2008 https://www.giantbomb.com/podcasts/giant-bombcast-06-24-2008/1600-18/ With Vinny out of the office, Ryan, Jeff, and Brad discuss the six degrees of GuitarFreaks, the inevitable return of Razor Callahan, the truth about World of Lost Vikings, and the cure for a young child’s fear of paintings. Tue, 24 Jun 2008 20:18:00 PST 1600-18 With Vinny out of the office, Ryan, Jeff, and Brad discuss the six degrees of GuitarFreaks, the inevitable return of Razor Callahan, the truth about World of Lost Vikings, and the cure for a young child’s fear of paintings. With Vinny out of the office, Ryan, Jeff, and Brad discuss the six degrees of GuitarFreaks, the inevitable return of Razor Callahan, the truth about World of Lost Vikings, and the cure for a young child’s fear of paintings. Giant Bomb no 5327 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Spoiler Snakecast 06-19-2008 https://www.giantbomb.com/podcasts/giant-spoiler-snakecast-06-19-2008/1600-17/ The Bomb Squad does its best to spoil Metal Gear Solid 4: Guns of the Patriots in this special edition of the Giant Bombcast. Seriously, if you don’t want to hear MGS4 story details, TURN BACK NOW. HERE THERE BE MONSTERS. Thu, 19 Jun 2008 19:13:00 PST 1600-17 The Bomb Squad does its best to spoil Metal Gear Solid 4: Guns of the Patriots in this special edition of the Giant Bombcast. Seriously, if you don’t want to hear MGS4 story details, TURN BACK NOW. HERE THERE BE MONSTERS. The Bomb Squad does its best to spoil Metal Gear Solid 4: Guns of the Patriots in this special edition of the Giant Bombcast. Seriously, if you don’t want to hear MGS4 story details, TURN BACK NOW. HERE THERE BE MONSTERS. Giant Bomb no 3731 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 06-17-2008 https://www.giantbomb.com/podcasts/giant-bombcast-06-17-2008/1600-16/ The Bombcast crew talks up the latest Tecmo drama, the massive Intellisponse survey leaks, yelling at the Nintendo DS, west-coast basements, the semantics of Mega Man, and more. Tue, 17 Jun 2008 15:45:01 PST 1600-16 The Bombcast crew talks up the latest Tecmo drama, the massive Intellisponse survey leaks, yelling at the Nintendo DS, west-coast basements, the semantics of Mega Man, and more. The Bombcast crew talks up the latest Tecmo drama, the massive Intellisponse survey leaks, yelling at the Nintendo DS, west-coast basements, the semantics of Mega Man, and more. Giant Bomb no 5349 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 06-10-2008 https://www.giantbomb.com/podcasts/giant-bombcast-06-10-2008/1600-15/ This week we discuss Nolan Bushnell’s Boogie Nights, Call of Duty 5, Harder, Faster, More Challenging Portal, Levelord’s involvement in Duke Nukem Forever, Metal Gear Solid 4, and more! Tue, 10 Jun 2008 15:42:59 PST 1600-15 This week we discuss Nolan Bushnell’s Boogie Nights, Call of Duty 5, Harder, Faster, More Challenging Portal, Levelord’s involvement in Duke Nukem Forever, Metal Gear Solid 4, and more! This week we discuss Nolan Bushnell’s Boogie Nights, Call of Duty 5, Harder, Faster, More Challenging Portal, Levelord’s involvement in Duke Nukem Forever, Metal Gear Solid 4, and more! Giant Bomb no 5412 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 06-03-2008 https://www.giantbomb.com/podcasts/giant-bombcast-06-03-2008/1600-14/ The Giant Bombcast welcomes two new additions in this exciting episode, which includes discussion of disgusting Swedish treats, hands-on with Street Fighter IV, our begrudging excitement over Neopets, Itagaki’s dramatic departure from Tecmo, and more! Tue, 03 Jun 2008 15:42:15 PST 1600-14 The Giant Bombcast welcomes two new additions in this exciting episode, which includes discussion of disgusting Swedish treats, hands-on with Street Fighter IV, our begrudging excitement over Neopets, Itagaki’s dramatic departure from Tecmo, and more! The Giant Bombcast welcomes two new additions in this exciting episode, which includes discussion of disgusting Swedish treats, hands-on with Street Fighter IV, our begrudging excitement over Neopets, Itagaki’s dramatic departure from Tecmo, and more! Giant Bomb no 6901 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 05-27-2008 https://www.giantbomb.com/podcasts/giant-bombcast-05-27-2008/1600-13/ This week we discuss the latest Xbox Live Arcade drama, the high cost of pretending to rock out in Guitar Hero: World Tour, Prince of Persia casting news, the return of Oddworld, the continued ESA exodus, the future of Mega Man, and more! Tue, 27 May 2008 17:56:00 PST 1600-13 This week we discuss the latest Xbox Live Arcade drama, the high cost of pretending to rock out in Guitar Hero: World Tour, Prince of Persia casting news, the return of Oddworld, the continued ESA exodus, the future of Mega Man, and more! This week we discuss the latest Xbox Live Arcade drama, the high cost of pretending to rock out in Guitar Hero: World Tour, Prince of Persia casting news, the return of Oddworld, the continued ESA exodus, the future of Mega Man, and more! Giant Bomb no 4541 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 05-20-2008 https://www.giantbomb.com/podcasts/giant-bombcast-05-20-2008/1600-12/ We stay medicated in this four-player podcast as we discuss tattoo placement in Gears of War 2, a surprising musical omission in Haze, product placement in MGS4, the various uses of a rapier, Richard Pryor tapes, and much more! Tue, 20 May 2008 21:42:00 PST 1600-12 We stay medicated in this four-player podcast as we discuss tattoo placement in Gears of War 2, a surprising musical omission in Haze, product placement in MGS4, the various uses of a rapier, Richard Pryor tapes, and much more! We stay medicated in this four-player podcast as we discuss tattoo placement in Gears of War 2, a surprising musical omission in Haze, product placement in MGS4, the various uses of a rapier, Richard Pryor tapes, and much more! Giant Bomb no 7124 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 05-13-2008 https://www.giantbomb.com/podcasts/giant-bombcast-05-13-2008/1600-11/ We give ourselves heart murmurs with too many energy drinks as we discuss the nuts and bolts of Banjo-Kazooie, the mashup potential of Guitar Hero IV, Super Mario Bros. 4, Lego Pulp Fiction, the semantics of Hell, and more! Tue, 13 May 2008 15:40:24 PST 1600-11 We give ourselves heart murmurs with too many energy drinks as we discuss the nuts and bolts of Banjo-Kazooie, the mashup potential of Guitar Hero IV, Super Mario Bros. 4, Lego Pulp Fiction, the semantics of Hell, and more! We give ourselves heart murmurs with too many energy drinks as we discuss the nuts and bolts of Banjo-Kazooie, the mashup potential of Guitar Hero IV, Super Mario Bros. 4, Lego Pulp Fiction, the semantics of Hell, and more! Giant Bomb no 6239 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 05-06-2008 https://www.giantbomb.com/podcasts/giant-bombcast-05-06-2008/1600-10/ We hit the redline with the latest from Sony, a treatise on Card Sharks, free Rock Band songs, modular solutions for virtual modern living, the future of X-COM, Dr. Dre Kart Racing, and plenty of GTA4. That’s how you play the game! Tue, 06 May 2008 21:39:00 PST 1600-10 We hit the redline with the latest from Sony, a treatise on Card Sharks, free Rock Band songs, modular solutions for virtual modern living, the future of X-COM, Dr. Dre Kart Racing, and plenty of GTA4. That’s how you play the game! We hit the redline with the latest from Sony, a treatise on Card Sharks, free Rock Band songs, modular solutions for virtual modern living, the future of X-COM, Dr. Dre Kart Racing, and plenty of GTA4. That’s how you play the game! Giant Bomb no 6517 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 04-29-2008 https://www.giantbomb.com/podcasts/giant-bombcast-04-29-2008/1600-9/ Jeff and Ryan fight a losing battle against sleep depravation in this very special, very felonious, very short episode of the Giant Bombcast. Tue, 29 Apr 2008 20:05:00 PST 1600-9 Jeff and Ryan fight a losing battle against sleep depravation in this very special, very felonious, very short episode of the Giant Bombcast. Jeff and Ryan fight a losing battle against sleep depravation in this very special, very felonious, very short episode of the Giant Bombcast. Giant Bomb no 4020 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 04-22-2008 https://www.giantbomb.com/podcasts/giant-bombcast-04-22-2008/1600-8/ Jeff and Ryan are joined by a very special guest this week as we discuss MKVDC, the troubled Metal Gear Online beta, the multi-instrument future of Guitar Hero, the state of Games for Windows Live, and much more! Tue, 22 Apr 2008 22:31:00 PST 1600-8 Jeff and Ryan are joined by a very special guest this week as we discuss MKVDC, the troubled Metal Gear Online beta, the multi-instrument future of Guitar Hero, the state of Games for Windows Live, and much more! Jeff and Ryan are joined by a very special guest this week as we discuss MKVDC, the troubled Metal Gear Online beta, the multi-instrument future of Guitar Hero, the state of Games for Windows Live, and much more! Giant Bomb no 6080 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 04-15-2008 https://www.giantbomb.com/podcasts/giant-bombcast-04-15-2008/1600-7/ It’s Nintendo week on the Giant Bombcast as we discuss all the hot new games that were shown at last week’s media summit in San Francisco. We also discuss the return of Interplay, get angry at Wired and meddling marketers, and more! Tue, 15 Apr 2008 19:19:57 PST 1600-7 It’s Nintendo week on the Giant Bombcast as we discuss all the hot new games that were shown at last week’s media summit in San Francisco. We also discuss the return of Interplay, get angry at Wired and meddling marketers, and more! It’s Nintendo week on the Giant Bombcast as we discuss all the hot new games that were shown at last week’s media summit in San Francisco. We also discuss the return of Interplay, get angry at Wired and meddling marketers, and more! Giant Bomb no 5360 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 04-08-2008 https://www.giantbomb.com/podcasts/giant-bombcast-04-08-2008/1600-6/ This week we give you all we’ve got with discussions of the stuff that plants crave, Kazooie’s Funtime Party Assassins, Ikaruga, what the X in Tom Clancy’s H.A.W.X. stands for, and more. Tue, 08 Apr 2008 19:18:00 PST 1600-6 This week we give you all we’ve got with discussions of the stuff that plants crave, Kazooie’s Funtime Party Assassins, Ikaruga, what the X in Tom Clancy’s H.A.W.X. stands for, and more. This week we give you all we’ve got with discussions of the stuff that plants crave, Kazooie’s Funtime Party Assassins, Ikaruga, what the X in Tom Clancy’s H.A.W.X. stands for, and more. Giant Bomb no 6411 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 04-01-2008 https://www.giantbomb.com/podcasts/giant-bombcast-04-01-2008/1600-5/ Get on the yellow bus with Jeff and Ryan for another edition of the Giant Bombcast! This week we turn our eyes towards Cinnabon: The Drink, the end of superbike confusion, the problems with Liars’ Day, the off-road future of Burnout, and much more! Tue, 01 Apr 2008 17:39:00 PST 1600-5 Get on the yellow bus with Jeff and Ryan for another edition of the Giant Bombcast! This week we turn our eyes towards Cinnabon: The Drink, the end of superbike confusion, the problems with Liars’ Day, the off-road future of Burnout, and much more! Get on the yellow bus with Jeff and Ryan for another edition of the Giant Bombcast! This week we turn our eyes towards Cinnabon: The Drink, the end of superbike confusion, the problems with Liars’ Day, the off-road future of Burnout, and much more! Giant Bomb no 5140 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03-25-2008 https://www.giantbomb.com/podcasts/giant-bombcast-03-25-2008/1600-4/ It’s a veritable menagerie of idiots in this week’s Giant Bombcast as we’re joined by Alex Navarro for discussions about Grand Theft Auto IV: Greater Toronto Area, 50 Cent II: The Dollar, synthoids, the Harlem Globetrotters of pizza, and more! Tue, 25 Mar 2008 15:33:09 PST 1600-4 It’s a veritable menagerie of idiots in this week’s Giant Bombcast as we’re joined by Alex Navarro for discussions about Grand Theft Auto IV: Greater Toronto Area, 50 Cent II: The Dollar, synthoids, the Harlem Globetrotters of pizza, and more! It’s a veritable menagerie of idiots in this week’s Giant Bombcast as we’re joined by Alex Navarro for discussions about Grand Theft Auto IV: Greater Toronto Area, 50 Cent II: The Dollar, synthoids, the Harlem Globetrotters of pizza, and more! Giant Bomb no 4682 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03-18-2008 https://www.giantbomb.com/podcasts/giant-bombcast-03-18-2008/1600-3/ The Giant Bombcast continues its slow-motion explosion with Jeff and Ryan’s thoughts on Lost: Via Domus, Rainbow Six Vegas 2, an Ice Cube side-scroller, Guitar Hero: Beatles, Ed Boon, the flavor of Scottish girders, technofear, and more! Tue, 18 Mar 2008 19:47:00 PST 1600-3 The Giant Bombcast continues its slow-motion explosion with Jeff and Ryan’s thoughts on Lost: Via Domus, Rainbow Six Vegas 2, an Ice Cube side-scroller, Guitar Hero: Beatles, Ed Boon, the flavor of Scottish girders, technofear, and more! The Giant Bombcast continues its slow-motion explosion with Jeff and Ryan’s thoughts on Lost: Via Domus, Rainbow Six Vegas 2, an Ice Cube side-scroller, Guitar Hero: Beatles, Ed Boon, the flavor of Scottish girders, technofear, and more! Giant Bomb no 5607 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Giant Bombcast 03-11-2008 https://www.giantbomb.com/podcasts/giant-bombcast-03-11-2008/1600-2/ In our inaugural episode of the Giant Bombcast, Ryan and Jeff discuss delicious WoW-inspired energy drinks, the hidden depth in Super Smash Bros. Brawl, the brilliant filmography of Mark Dacascos, and much more. Tue, 11 Mar 2008 19:39:00 PST 1600-2 In our inaugural episode of the Giant Bombcast, Ryan and Jeff discuss delicious WoW-inspired energy drinks, the hidden depth in Super Smash Bros. Brawl, the brilliant filmography of Mark Dacascos, and much more. In our inaugural episode of the Giant Bombcast, Ryan and Jeff discuss delicious WoW-inspired energy drinks, the hidden depth in Super Smash Bros. Brawl, the brilliant filmography of Mark Dacascos, and much more. Giant Bomb no 6165 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Arrow Pointing Down Podcast 03-04-2008 https://www.giantbomb.com/podcasts/arrow-pointing-down-podcast-03-04-2008/1600-22/ As promised, the latest episode of the Arrow Pointing Down Podcast, featuring Internet celebrities Ryan Davis, Jeff Gerstmann, and Alex Navarro! Join us as we discuss the top news stories in the world of video games, new releases, and drinks! Wed, 05 Mar 2008 13:35:00 PST 1600-22 As promised, the latest episode of the Arrow Pointing Down Podcast, featuring Internet celebrities Ryan Davis, Jeff Gerstmann, and Alex Navarro! Join us as we discuss the top news stories in the world of video games, new releases, and drinks! As promised, the latest episode of the Arrow Pointing Down Podcast, featuring Internet celebrities Ryan Davis, Jeff Gerstmann, and Alex Navarro! Join us as we discuss the top news stories in the world of video games, new releases, and drinks! Giant Bomb no 6009 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Arrow Pointing Down Podcast 02-24-2008 https://www.giantbomb.com/podcasts/arrow-pointing-down-podcast-02-24-2008/1600-21/ Your new favorite podcast that is sometimes, tangentially about video games is back! This week we bask in the afterglow of GDC, guzzle horrible energy drinks, contemplate legal action against McDonald’s, and so very much more! Join us, won’t you? Mon, 25 Feb 2008 01:38:00 PST 1600-21 Your new favorite podcast that is sometimes, tangentially about video games is back! This week we bask in the afterglow of GDC, guzzle horrible energy drinks, contemplate legal action against McDonald’s, and so very much more! Join us, won’t you? Your new favorite podcast that is sometimes, tangentially about video games is back! This week we bask in the afterglow of GDC, guzzle horrible energy drinks, contemplate legal action against McDonald’s, and so very much more! Join us, won’t you? Giant Bomb no 4355 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS Arrow Pointing Down Podcast Beta https://www.giantbomb.com/podcasts/arrow-pointing-down-podcast-beta/1600-20/ Welcome, and thank you for participating in the soft launch of the Arrow Pointing Down Podcast! This week, Ryan and Jeff ramble pointlessly over Skype about Gatorade, HD-DVD, GDC, and more! Mon, 18 Feb 2008 01:54:00 PST 1600-20 Welcome, and thank you for participating in the soft launch of the Arrow Pointing Down Podcast! This week, Ryan and Jeff ramble pointlessly over Skype about Gatorade, HD-DVD, GDC, and more! Welcome, and thank you for participating in the soft launch of the Arrow Pointing Down Podcast! This week, Ryan and Jeff ramble pointlessly over Skype about Gatorade, HD-DVD, GDC, and more! Giant Bomb no 5283 GiantBomb, Giant Bomb, Jeff Gerstmann, Ryan Davis, video games, PS3, WiiU, Xbox 360, PC, PSP, DS ================================================ FILE: api/test/data/podcast-feed/making-obama ================================================ Making Obama https://www.wbez.org/shows/making-obama/71b8de57-b2be-4e03-8481-683258de3ec1 Former President Barack Obama — along with key advisers, mentors, and rivals — tells the story of his climb from Chicago to the national stage. Season One of Making told the story of how Oprah built a media empire. Now, the story of how Chicago shaped the country's first African-American president. en-US Copyright 2016 Chicago Public Media webmaster@chicagopublicmedia.org News Making Obama Logo https://api.wbez.org/v2/images/6eb13711-5af1-4845-90ed-9dcd9a8e8da8.jpg?width=1400&height=1400 1400 1400 Obama BONUS: The Decision https://www.wbez.org/shows/making-obama/obama-bonus-the-decision/f15250d1-fccb-44e4-b14e-368525b08bfc <p><span>Just two and a half years after his 2004 Democratic National Convention speech, Barack Obama announced he was running for president. </span><!--EndFragment--><br><br><br></p> Tue, 10 Apr 2018 05:01:00 GMT Chicago Public Media f15250d1-fccb-44e4-b14e-368525b08bfc 00:21:42 no Barack Obama, Making Obama Obama 6: Yes We Can! https://www.wbez.org/shows/making-obama/obama-6-yes-we-can/aed63eb2-c221-416a-96cd-497d956e65a1 <p><span>Barack Obama burst onto the national stage during his U.S. Senate run. Hear how ambition and luck propelled him to Washington. </span><!--EndFragment--><br><br><!--StartFragment--><a href="http://wbez.org/making">wbez.org/making</a><br></p> Thu, 15 Mar 2018 05:01:00 GMT Chicago Public Media aed63eb2-c221-416a-96cd-497d956e65a1 00:58:50 yes Barack Obama, Making Obama, Chicago Politics Obama 5: Up Or Out https://www.wbez.org/shows/making-obama/obama-5-up-or-out/f2378d3c-de46-4165-87f6-2a91a5ebecac <p>Former president Barack Obama has only lost one election in his life. It was in 2000, and that defeat set him on the course for his eventual U.S. Senate run. <i>Making Obama </i>is a production of listener-supported WBEZ Chicago. Support WBEZ and the future of podcasts like this at <a href="https://wbez.org/making" target="">https://wbez.org/making</a><!--EndFragment--><br><br><br></p> Thu, 08 Mar 2018 06:01:00 GMT Chicago Public Media f2378d3c-de46-4165-87f6-2a91a5ebecac 00:55:39 yes Barack Obama, Making Obama, Chicago Politics Obama 4: Wait Your Turn https://www.wbez.org/shows/making-obama/obama-4-wait-your-turn/34d62aec-cd06-49bc-86a6-4cdf33766055 <p>In 2000, Barack Obama ran for Congress against a Chicago political legend. It became a contest about race and identity.</p> Thu, 01 Mar 2018 06:01:00 GMT Chicago Public Media 34d62aec-cd06-49bc-86a6-4cdf33766055 00:56:15 yes Barack Obama, Making Obama Obama 3: You Don’t Say No To Barack https://www.wbez.org/shows/making-obama/obama-3-you-dont-say-no-to-barack/aeb3beab-f895-4843-80ef-d4ed89e325d2 <p><span></span>Former President Barack Obama won his first political seat in 1996. Hear what he had to learn, and the conflicts he faced, to get there.&nbsp;</p><p><a href="http://wbez.org/making" target="">wbez.org/making</a><br><br></p> Thu, 22 Feb 2018 00:30:00 GMT Chicago Public Media aeb3beab-f895-4843-80ef-d4ed89e325d2 00:56:46 yes Barack Obama, Making Obama, Chicago Politics, Harold Washington, Rahm Emanuel Obama 2: Chicago Politics Ain’t Beanbag https://www.wbez.org/shows/making-obama/obama-2-chicago-politics-aint-beanbag/92ffe0ce-cdfc-4650-baf7-3138b44d780a <p><span>When Barack Obama first came to Chicago, a political transformation was happening in the city. Hear how that change inspired him. </span><!--EndFragment--><br><br><br><br></p> Thu, 15 Feb 2018 06:01:00 GMT Chicago Public Media 92ffe0ce-cdfc-4650-baf7-3138b44d780a 00:42:26 yes Barack Obama, Making Obama, Harold Washington, David Axelrod, Jesse Jackson, Chicago Politics Obama 1: The Man In The Background https://www.wbez.org/shows/making-obama/obama-1-the-man-in-the-background/52566713-83d4-4875-8bb1-eba55937228e <p>Before he was the 44th President, Barack Obama worked as a community organizer on the South Side of Chicago. Hear how the city shaped his political ambitions.</p> Thu, 08 Feb 2018 06:01:00 GMT Chicago Public Media 52566713-83d4-4875-8bb1-eba55937228e 00:45:36 no Barack Obama, Making Obama, Chicago Politics Preview: Making Obama https://www.wbez.org/shows/making-obama/preview-making-obama/dcec62b6-bd93-4329-8b49-66888e941e3a <p>Former President Barack Obama — along with friends, mentors, and rivals — tells the story of his climb from Chicago to the national stage. <a href="https://itunes.apple.com/us/podcast/making-oprah/id1171160683?mt=2" target="">Subscribe now</a> and don’t miss the first episode on February 8.<br></p> Fri, 19 Jan 2018 14:00:00 GMT Chicago Public Media dcec62b6-bd93-4329-8b49-66888e941e3a 00:03:48 yes barack obama, oprah winfrey, making oprah, making obama, michelle obama, david axelrod, valerie jarrett Oprah BONUS: Making Donahue https://www.wbez.org/shows/making-obama/oprah-bonus-making-donahue/1c05b864-7d0f-48f4-9b7e-e0f42c418277 <p>In our final bonus installment, the <i>Making Oprah</i> production team revisits an extended interview with daytime talk show legend Phil Donahue. His pioneering show, <i>Donahue</i>, aired from 1967 to 1996 and laid the groundwork for Oprah’s program. It tackled heady, controversial issues - and landed frothy exclusives with A-list celebrities. Donahue also used his studio audience and callers in ways that were both innovative and intimate.&nbsp;</p><p>Join host Jenn White, producer Colin McNulty, and executive producer Joel Meyer as they listen back to one of their favorite non-Oprah interview from the dozens of interviews conducted for <i>Making Oprah</i>.&nbsp;</p> Fri, 30 Dec 2016 17:39:24 GMT Chicago Public Media 1c05b864-7d0f-48f4-9b7e-e0f42c418277 00:40:00 no Making Oprah, Phil Donahue Oprah BONUS: Oprah Gets Political https://www.wbez.org/shows/making-obama/oprah-bonus-oprah-gets-political/6dcc266a-e109-4981-8469-99032156ce5a <p>For more than 10 years after the launch of the Oprah Winfrey Show, Oprah deliberately avoided having politicians on her show, particularly during election seasons. In this bonus episode of Making Oprah, host Jenn White talks to Oprah about the role politics played - and didn’t play - in the history of the Oprah Winfrey show. <br><br></p> Fri, 23 Dec 2016 15:17:21 GMT Chicago Public Media 6dcc266a-e109-4981-8469-99032156ce5a 00:21:38 no Making Oprah, George W. Bush, Al Gore, Barack Obama, Sarah Palin, Michelle Obama, Donald Trump Oprah BONUS: Let's Talk About Oprah's Hair https://www.wbez.org/shows/making-obama/oprah-bonus-lets-talk-about-oprahs-hair/49f580a3-54c5-4685-b7f5-640f928b4aa1 <p>If you look at any image from the <i>Oprah Winfrey Show,</i> you can pretty much figure out what decade it’s from by looking at Oprah’s hairstyle.&nbsp;</p><p>In this short bonus episode, host Jenn White talks to Oprah’s longtime stylist Andre Walker about the high stakes of doing the hair of the most watched woman on television.</p> Fri, 16 Dec 2016 04:44:00 GMT Chicago Public Media 49f580a3-54c5-4685-b7f5-640f928b4aa1 00:13:41 no Making Oprah, Andre Walker, Natural Hair Oprah 3: YOU GET A CAR! https://www.wbez.org/shows/making-obama/oprah-3-you-get-a-car/a10ded30-5eac-49c9-bfaf-4db65df8e71a <p>In the show’s final decade, Oprah and her team staged massive spectacles of increasing grandiosity, from the infamous car giveaway to a 21,000-person flash mob that shut down part of Chicago.&nbsp;</p><p><span>“It had become increasingly more difficult to top what you’d done the year before,” Oprah told WBEZ’s Jenn White. “I mean, to the point where we literally sat in a room saying ‘What about outer space?’ ”&nbsp;</span></p><p><span>That’s what we look at now: Oprah living her life at the top, pushing the boundaries of what could be done with the world’s most powerful talk show, and why it all had to end after 25 years.</span></p><!--EndFragment--><p><br></p><p><br></p> Tue, 22 Nov 2016 06:05:00 GMT Chicago Public Media a10ded30-5eac-49c9-bfaf-4db65df8e71a 01:02:21 no Making Oprah, Oprah Winfrey Oprah 2: Skinheads And Scented Candles https://www.wbez.org/shows/making-obama/oprah-2-skinheads-and-scented-candles/56cc04d7-c516-4c3b-b72e-3f1dc797f140 <p>In the second episode of <i>Making Oprah</i>, we explore how <i>The Oprah Winfrey Show</i> elevated itself out of the heap of trash TV and into a show that intentionally embraced spirituality and positivity.&nbsp;</p><p>The early years of Oprah’s show often relied on sensational, tabloidy topics – cheating husbands, sexy clothes, and murderers. It was not yet the ‘Live Your Best Life’ Oprah we would come to know and love.&nbsp;</p><p>&nbsp;“It was during those shows where I just thought, ‘What are we doing?’ ” Oprah tells WBEZ’s Jenn White. “This is a platform that is speaking to people, and what are we saying?”&nbsp;</p><p>&nbsp;As the <i>Oprah Winfrey Show</i> reached maturity -- or at least, its college years -- the program conducted the on-air experiments that would allow this talk show to become something more than a talk show</p> Thu, 17 Nov 2016 11:04:00 GMT Chicago Public Media 56cc04d7-c516-4c3b-b72e-3f1dc797f140 01:00:30 yes Making Oprah, Oprah Winfrey Oprah 1: No Strategy, No Plan, No Formula https://www.wbez.org/shows/making-obama/oprah-1-no-strategy-no-plan-no-formula/4ae62e92-647c-42df-88f2-4c3cdb89e284 <p>It was 30 years ago this fall that Oprah Winfrey first said “hellooooo” to a national audience. By the show’s finale in 2011, it was aired in 145 countries and watched by more than 40 million viewers a week in the U.S. alone. Today’s daytime hosts like Ellen and Dr. Oz? They now average only about a tenth of that.</p> <p>If Oprah mentioned a book title, it became a best-seller. She landed the interviews that no one else could get. Her message of spirituality and empowerment influenced millions.</p> <p>With an hourlong daytime TV show, Oprah built a powerful brand. She made billions. And, as CNN, USA Today, Forbes and Time Magazine all proclaimed, she became the most powerful woman in America.</p> <p>In the first of a three-part podcast series, Oprah and former producers talk with WBEZ's Jenn White about the early, scrappy days of the program.&nbsp;<span style="font-family: inherit;">Phil Donahue reflects on Oprah's entry into the daytime talk landscape that he once dominated.&nbsp;</span><span style="font-family: inherit;">Plus, the podcast revisits milestones from the 1980s, like the show's national debut, and some mixed feelings over the show's highest-rated episode ever.</span></p> Thu, 10 Nov 2016 16:53:00 GMT Chicago Public Media 4ae62e92-647c-42df-88f2-4c3cdb89e284 00:57:33 no Making Oprah, Oprah Winfrey, Phil Donahue Oprah: Preview of Making Oprah https://www.wbez.org/shows/making-obama/oprah-preview-of-making-oprah/72032d42-c814-41a2-a1f3-df0d2471c996 <p><i><a href="https://www.wbez.org/series/making-oprah/db4fff18-4828-4589-b03f-8dd50a5adbbe" target="">Making Oprah: The Inside Story of a TV Revolution</a></i> is a public radio podcast -- about a daytime talk show. This fall marks 30 years since the national debut of <i><a href="http://www.oprah.com/app/the-oprah-winfrey-show.html" target="">The Oprah Winfrey Show</a></i>. Be the first to hear a sneak peek of WBEZ’s three-part series featuring interviews with Winfrey, her onetime ratings rival Phil Donahue, former producers and staffers, and TV executives.<br></p> Thu, 03 Nov 2016 18:04:21 GMT Chicago Public Media 72032d42-c814-41a2-a1f3-df0d2471c996 00:04:42 no Oprah, Oprah Winfrey, Phil Donahue, Dennis Swanson, The Oprah Winfrey Show, WLS, AM Chicago ================================================ FILE: api/test/data/podcast-feed/nancy ================================================ Nancyhttp://www.wnycstudios.org/shows/nancyBFFs Kathy Tu and Tobin Low are super queer, super fun and ready to take over your podcast feed. Join them for provocative stories and frank conversations about the LGBTQ experience today. Because everyone’s a little bit gay. WNYC Studios is the producer of other podcasts including Radiolab, Death, Sex & Money, 2 Dope Queens and many others.en-usSun, 03 Jun 2018 12:00:00 -0400600noWNYC StudiosHttp://www.nancypodcast.orghttps://media2.wnyc.org/i/raw/1/Nancy_WNYCStudios_1400a.pngNancyepisodic© WNYClgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversationsSociety & Culturelgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversationsBFFs Kathy Tu and Tobin Low are super queer, super fun and ready to take over your podcast feed. Join them for provocative stories and frank conversations about the LGBTQ experience today. Because everyone’s a little bit gay. WNYC Studios is the producBFFs Kathy Tu and Tobin Low are super queer, super fun and ready to take over your podcast feed. Join them for provocative stories and frank conversations about the LGBTQ experience today. Because everyone’s a little bit gay. WNYC Studios is the producer of other podcasts including Radiolab, Death, Sex & Money, 2 Dope Queens and many others.#43: Poor Unfortunate Souls http://www.wnycstudios.org/story/queer-villains/<p>Everybody loves a hero. But villains can be much more interesting. </p> <p>Meredith Talusan is the Executive Editor at <a href="https://www.them.us/" target="_blank">Them</a>. She wrote <a href="https://www.buzzfeed.com/meredithtalusan/25-years-of-transphobia-in-comedies?utm_term=.cf4vaa5MZ#.keNWaazqX">an essay about trans villains in film</a> for BuzzFeed.</p> <p><div class="user-embedded-video"><div id="videoplayer_idm140118588616784c3ee471f-ed46-4c7e-9948-cb82cbf3e786"><iframe width="620" height="349" src="https://www.youtube.com/embed/F6N426QCQ-Y?wmode=transparent&amp;autohide=1&amp;rel=0&amp;showinfo=0&amp;feature=oembed&amp;enablejsapi=1" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen="allowfullscreen" id="a-706861933833986567" class="youtube_video" mozallowfullscreen="mozallowfullscreen" webkitallowfullscreen="webkitallowfullscreen" data-original-url="https://www.youtube.com/watch?v=F6N426QCQ-Y"></iframe></div></div>  </p> <p>Dan Kois and Isaac Butler are co-authors of <em><a href="https://www.amazon.com/World-Only-Spins-Forward-America/dp/1635571766" target="_blank">The World Only Spins Forward</a></em>, an oral history of Angels in America. Andrea Bernstein is the co-host of <a href="https://www.wnycstudios.org/shows/trumpinc">Trump, Inc.</a>, a podcast about the Trump family business from WNYC Studios and Pro Publica. Stephen Spinella plays Roy Cohn in <a href="https://www.berkeleyrep.org/season/1718/12033.asp">the Berkeley Rep production of Angels in America</a>.</p> <div class="embedded-image" style="max-width: 800px;"><img class="mcePuppyImage" src="https://media.wnyc.org/i/800/533/l/80/1/AG1.jpg" alt=""> <div class="image-metadata"> <div class="image-caption">Stephen Spinella (Roy Cohn) in Berkeley Repertory Theatre’s production of Angels in America, Part One: Millennium Approaches.</div> <div class="image-credit">(Photo courtesy of Kevin Berne/Berkeley Repertory Theatre)</div> </div> </div> <p>Original music by Jeremy Bloom with additional music by Lee Rosevere (<a href="http://freemusicarchive.org/music/Lee_Rosevere/The_Big_Loop_-_FML_original_podcast_score/Lee_Rosevere_-_The_Big_Loop_-_FML_original_podcast_score_-_17_I_Was_Waiting_for_Him">"I Was Waiting for Him"</a> and <a href="http://freemusicarchive.org/music/Lee_Rosevere/Music_For_Yoga/08_-_Featherlight">"Featherlight"</a>).</p> <p><em>Support our work! Become a Nancy member today at <a href="https://pledge3.wnyc.org/donate/nancy-it/onestep/?utm_source=wnyc&amp;utm_medium=nancy-redirect&amp;utm_campaign=pledge&amp;utm_content=show-notes" target="_blank" title="Pledge">Nancypodcast.org/donate</a>.</em></p> Sun, 03 Jun 2018 12:00:00 -0400181001f5-53d8-4ddc-9148-fab5afbb0c01artsdisneyexplicitlgbtliferoy cohntranstrumpvillain#43: Poor Unfortunate Souls 26:53yesEverybody loves a hero. But villains can be much more interesting. 

Meredith Talusan is the Executive Editor at Them. She wrote an essay about trans villains in film for BuzzFeed.

Dan Kois and Isaac Butler are co-authors of The World Only Spins Forward, an oral history of Angels in America. Andrea Bernstein is the co-host of Trump, Inc., a podcast about the Trump family business from WNYC Studios and Pro Publica. Stephen Spinella plays Roy Cohn in the Berkeley Rep production of Angels in America.

Original music by Jeremy Bloom with additional music by Lee Rosevere ("I Was Waiting for Him" and "Featherlight").

Support our work! Become a Nancy member today at Nancypodcast.org/donate.

]]>
Poor Unfortunate SoulsEverybody loves a hero. But villains can be much more interesting. 

Meredith Talusan is the Executive Editor at Them. She wrote an essay about trans villains in film for BuzzFeed.

Dan Kois and Isaac Butler are co-authors of The World Only Spins Forward, an oral history of Angels in America. Andrea Bernstein is the co-host of Trump, Inc., a podcast about the Trump family business from WNYC Studios and Pro Publica. Stephen Spinella plays Roy Cohn in the Berkeley Rep production of Angels in America.

Original music by Jeremy Bloom with additional music by Lee Rosevere ("I Was Waiting for Him" and "Featherlight").

Support our work! Become a Nancy member today at Nancypodcast.org/donate.

]]>
full310WNYC Studios Everybody loves a hero. But villains can be much more interesting.  Meredith Talusan is the Executive Editor at Them. She wrote an essay about trans villains in film for BuzzFeed.    Dan Kois and Isaac Butler are co-authors of The World Only Spins ForwarWNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#42: We Can Be Friends http://www.wnycstudios.org/story/friendship-gaggle-update/<p>Nancy's <a href="https://www.wnycstudios.org/shows/nancy/friends">"How to Get a Gaggle"</a> project gave listeners four weeks of challenges toward making new friends. This week on the show, we check in on how it all went.</p> <p>You can still sign up for the <a href="https://www.wnycstudios.org/shows/nancy/friends">Gaggle project</a> - you'll get four weeks of coaching and challenges over email. Plus be sure to check out <a href="https://www.facebook.com/groups/nancypodcast/">our new Facebook group</a> for Nancy listeners. Special thanks this week to friendship guinea pig <a href="https://twitter.com/jrodriguez713">Joe Rodriguez</a> and WNYC engagement project extraordinaire <a href="https://twitter.com/ctrouper?lang=en">Charlotte Cooper</a>. The next <a href="https://www.queersoupnight.com/">Queer Soup Night</a> happens on June 10 in Brooklyn. </p> <p>Original music by Jeremy Bloom with additional music by James Pants (<a href="http://freemusicarchive.org/music/James_Pants/Bonus_Beat_Blast_2011/33_james_pants-bird">"Bird"</a>), Madame Rrose Selavy (<a href="http://freemusicarchive.org/music/Madame_Rrose_Selavy/Bossa_Punk/Madame_Rrose_Slavy_-_Bossa_Punk_-_13_Sujou_Meu_Nome">"Sojou Meu Nome"</a>), Mystery Mammal (<a href="http://freemusicarchive.org/music/Mystery_Mammal/Latent/Xanadont_1334">"Xanadont"</a>), Ondrosik (<a href="http://freemusicarchive.org/music/Ondrosik/Nostalgic__Procrastination/Ondrosik-05-love_is_over">"Love is Over"</a>), and Anamorphic Orchestra (<a href="https://anamorphicorchestra.bandcamp.com/track/machine-elves">"Machine Elves"</a>).</p> <p><em>Support our work! Become a Nancy member today at <a href="https://pledge3.wnyc.org/donate/nancy-it/onestep/?utm_source=wnyc&amp;utm_medium=nancy-redirect&amp;utm_campaign=pledge&amp;utm_content=show-notes" target="_blank" title="Pledge">Nancypodcast.org/donate</a>.</em></p> Sun, 27 May 2018 12:00:00 -040068bb3d08-c1fa-4202-bb0a-400162058745bisexualexplicitfriendshipgaylesbianlgbtlifestorytellingtrans#42: We Can Be Friends 26:21yesNancy's "How to Get a Gaggle" project gave listeners four weeks of challenges toward making new friends. This week on the show, we check in on how it all went.

You can still sign up for the Gaggle project - you'll get four weeks of coaching and challenges over email. Plus be sure to check out our new Facebook group for Nancy listeners. Special thanks this week to friendship guinea pig Joe Rodriguez and WNYC engagement project extraordinaire Charlotte Cooper. The next Queer Soup Night happens on June 10 in Brooklyn. 

Original music by Jeremy Bloom with additional music by James Pants ("Bird"), Madame Rrose Selavy ("Sojou Meu Nome"), Mystery Mammal ("Xanadont"), Ondrosik ("Love is Over"), and Anamorphic Orchestra ("Machine Elves").

Support our work! Become a Nancy member today at Nancypodcast.org/donate.

]]>
We Can Be FriendsNancy's "How to Get a Gaggle" project gave listeners four weeks of challenges toward making new friends. This week on the show, we check in on how it all went.

You can still sign up for the Gaggle project - you'll get four weeks of coaching and challenges over email. Plus be sure to check out our new Facebook group for Nancy listeners. Special thanks this week to friendship guinea pig Joe Rodriguez and WNYC engagement project extraordinaire Charlotte Cooper. The next Queer Soup Night happens on June 10 in Brooklyn. 

Original music by Jeremy Bloom with additional music by James Pants ("Bird"), Madame Rrose Selavy ("Sojou Meu Nome"), Mystery Mammal ("Xanadont"), Ondrosik ("Love is Over"), and Anamorphic Orchestra ("Machine Elves").

Support our work! Become a Nancy member today at Nancypodcast.org/donate.

]]>
full39WNYC Studios Nancy's "How to Get a Gaggle" project gave listeners four weeks of challenges toward making new friends. This week on the show, we check in on how it all went. You can still sign up for the Gaggle project - you'll get four weeks of coaching and challengeWNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#41: You're Not a 'Bad Gay' http://www.wnycstudios.org/story/nancy-advice-jp-brammer/<p><a href="https://twitter.com/jpbrammer" target="_blank">John Paul Brammer</a> wrote the column <a href="https://intomore.com/you/hola-papi/">"Hola Papi"</a> for <a href="https://intomore.com">Into</a>; he's now a staff writer at <a href="https://www.them.us">Them</a>. Want advice from Nancy? Email your question (ideally as a voice memo) to <a href="mailto:advice@nancypodcast.org">advice@nancypodcast.org</a>.</p> <p>Original music by Jeremy Bloom.</p> <p><em>Support our work! Become a Nancy member today at <a href="https://pledge3.wnyc.org/donate/nancy-it/onestep/?utm_source=wnyc&amp;utm_medium=nancy-redirect&amp;utm_campaign=pledge&amp;utm_content=show-notes" target="_blank" title="Pledge">Nancypodcast.org/donate</a>.</em></p> Sun, 20 May 2018 12:00:00 -04004da7d235-6e62-4ae7-b07a-9a04aaf530edadvicegaylgbtlifenancyrelationshipsstorytelling#41: You're Not a 'Bad Gay' 17:28John Paul Brammer wrote the column "Hola Papi" for Into; he's now a staff writer at Them. Want advice from Nancy? Email your question (ideally as a voice memo) to advice@nancypodcast.org.

Original music by Jeremy Bloom.

Support our work! Become a Nancy member today at Nancypodcast.org/donate.

]]>
You're Not a 'Bad Gay'John Paul Brammer wrote the column "Hola Papi" for Into; he's now a staff writer at Them. Want advice from Nancy? Email your question (ideally as a voice memo) to advice@nancypodcast.org.

Original music by Jeremy Bloom.

Support our work! Become a Nancy member today at Nancypodcast.org/donate.

]]>
full38WNYC Studiosno John Paul Brammer wrote the column "Hola Papi" for Into; he's now a staff writer at Them. Want advice from Nancy? Email your question (ideally as a voice memo) to advice@nancypodcast.org. Original music by Jeremy Bloom. Support our work! Become a Nancy mWNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#40: dilDOs and dilDON'Ts http://www.wnycstudios.org/story/queer-sex-toys/<p>Sex toys can be about more than just pleasure. For queer people, they're often a vital part of figuring yourself out.</p> <p><a href="https://twitter.com/gaybonez" target="_blank">Gabe Gonzalez</a> is a comedian and writer. <a href="http://buckangel.com/" target="_blank">Buck Angel</a> is a trans advocate and sex toy designer. <span>Special thanks to Hallie Lieberman, author of the book </span><a href="https://www.amazon.com/Buzz-Stimulating-History-Sex-Toy/dp/1681775433">Buzz: The Stimulating History of the Sex Toy</a><span>. </span></p> <p>Original music by Jeremy Bloom with additional music by James Pants (<a href="http://freemusicarchive.org/music/James_Pants/Bonus_Beat_Blast_2011/33_james_pants-bird">"Bird"</a>) and Kevin MacLeod (<a href="http://freemusicarchive.org/music/Kevin_MacLeod/Jazz_Sampler/Off_to_Osaka">"Off to Osaka"</a>).</p> <p><em>Support our work! Become a Nancy member today at <a href="https://pledge3.wnyc.org/donate/nancy-it/onestep/?utm_source=wnyc&amp;utm_medium=nancy-redirect&amp;utm_campaign=pledge&amp;utm_content=show-notes" target="_blank" title="Pledge">Nancypodcast.org/donate</a>.</em></p> Sun, 13 May 2018 12:00:00 -040017bca8fd-d7ed-4358-ada5-35a2574f67d7explicitgaylgbtlifesexsexualitystorytelling#40: dilDOs and dilDON'Ts 23:10yesSex toys can be about more than just pleasure. For queer people, they're often a vital part of figuring yourself out.

Gabe Gonzalez is a comedian and writer. Buck Angel is a trans advocate and sex toy designer. Special thanks to Hallie Lieberman, author of the book Buzz: The Stimulating History of the Sex Toy

Original music by Jeremy Bloom with additional music by James Pants ("Bird") and Kevin MacLeod ("Off to Osaka").

Support our work! Become a Nancy member today at Nancypodcast.org/donate.

]]>
dilDOs and dilDON'TsSex toys can be about more than just pleasure. For queer people, they're often a vital part of figuring yourself out.

Gabe Gonzalez is a comedian and writer. Buck Angel is a trans advocate and sex toy designer. Special thanks to Hallie Lieberman, author of the book Buzz: The Stimulating History of the Sex Toy

Original music by Jeremy Bloom with additional music by James Pants ("Bird") and Kevin MacLeod ("Off to Osaka").

Support our work! Become a Nancy member today at Nancypodcast.org/donate.

]]>
full37WNYC Studios Sex toys can be about more than just pleasure. For queer people, they're often a vital part of figuring yourself out. Gabe Gonzalez is a comedian and writer. Buck Angel is a trans advocate and sex toy designer. Special thanks to Hallie Lieberman, author WNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#39: The Rowan County Clerk http://www.wnycstudios.org/story/rowan-county-david-ermold-kim-davis/<p>Kim Davis denied <a href="https://twitter.com/dermold?lang=en">David Ermold</a> a marriage license three times. Now he's running to replace her.</p> <p>Original music by Jeremy Bloom with additional music by Andy Cohen (<a href="http://freemusicarchive.org/music/Andy_G_Cohen/MUL__DIV_1198/Andy_G_Cohen_-_MULDIV_-_02_-_Land_Legs">"Land of Legs"</a>), Nctrnm (<a href="http://freemusicarchive.org/music/Nctrnm/Blonde_-_Single/NctrnmBlonde">"Blonde"</a>), and Drake Stafford (<a href="http://freemusicarchive.org/music/Drake_Stafford/Drake_Stafford_-_Singles/Only_Love_-_Drake_Stafford">"Only Love"</a>). <a href="http://wmky.org/post/rowan-candidate-forum-audio">Democratic forum audio</a> via <a href="http://www.wivyradio.com/">WIVY</a> and <a href="http://wmky.org/">WMKY</a>.</p> <p><em>Support our work! Become a Nancy member today at <a href="https://pledge3.wnyc.org/donate/nancy-it/onestep/?utm_source=wnyc&amp;utm_medium=nancy-redirect&amp;utm_campaign=pledge&amp;utm_content=show-notes" target="_blank" title="Pledge">Nancypodcast.org/donate</a>.</em></p> Sun, 06 May 2018 12:00:00 -0400d74ff9a3-77de-429f-91a4-24196e446202gaygay marriagekim_davislgbtnational_newspoliticsstorytelling#39: The Rowan County Clerk 37:54Kim Davis denied David Ermold a marriage license three times. Now he's running to replace her.

Original music by Jeremy Bloom with additional music by Andy Cohen ("Land of Legs"), Nctrnm ("Blonde"), and Drake Stafford ("Only Love"). Democratic forum audio via WIVY and WMKY.

Support our work! Become a Nancy member today at Nancypodcast.org/donate.

]]>
The Rowan County ClerkKim Davis denied David Ermold a marriage license three times. Now he's running to replace her.

Original music by Jeremy Bloom with additional music by Andy Cohen ("Land of Legs"), Nctrnm ("Blonde"), and Drake Stafford ("Only Love"). Democratic forum audio via WIVY and WMKY.

Support our work! Become a Nancy member today at Nancypodcast.org/donate.

]]>
full36WNYC Studiosno Kim Davis denied David Ermold a marriage license three times. Now he's running to replace her. Original music by Jeremy Bloom with additional music by Andy Cohen ("Land of Legs"), Nctrnm ("Blonde"), and Drake Stafford ("Only Love"). Democratic forum audiWNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#38: Michelle Buteau Is Straight But We Love Her Anyway http://www.wnycstudios.org/story/late-night-whenever-michelle-buteau-matteo-lane-nico-tortorella/<p><a href="https://twitter.com/MichelleButeau">Michelle Buteau</a> is the host of <a href="https://www.wnycstudios.org/shows/latenight">Late Night Whenever</a>, the newest podcast from WNYC Studios. This episode features comedian <a href="https://www.matteolanecomedy.com/">Matteo Lane</a> and actor <a href="https://www.instagram.com/nicotortorella/?hl=en">Nico Tortorella</a>. Subscribe on <a href="https://itunes.apple.com/us/podcast/late-night-whenever/id1342857653?mt=2">Apple Podcasts</a> or wherever you listen to shows.</p> <p><div class="user-embedded-video"><div id="videoplayer_idm140340183021152a7428b9c-6ff7-44c3-a7d4-30a8b2e81e5f"><iframe width="620" height="349" src="https://www.youtube.com/embed/z89n5NCexw0?wmode=transparent&amp;autohide=1&amp;rel=0&amp;showinfo=0&amp;feature=oembed&amp;enablejsapi=1" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen="allowfullscreen" id="a6143465688722802379" class="youtube_video" mozallowfullscreen="mozallowfullscreen" webkitallowfullscreen="webkitallowfullscreen" data-original-url="https://www.youtube.com/watch?v=z89n5NCexw0"></iframe></div></div>  </p> <p> </p> Tue, 01 May 2018 12:00:00 -0400bd03b07e-cb47-4bc3-be78-aad98d7ccd5eartsbookscomedyexplicitgaygenderlgbtlifepoetrystorytelling#38: Michelle Buteau Is Straight But We Love Her Anyway 38:36yesMichelle Buteau is the host of Late Night Whenever, the newest podcast from WNYC Studios. This episode features comedian Matteo Lane and actor Nico Tortorella. Subscribe on Apple Podcasts or wherever you listen to shows.

]]>
Michelle Buteau Is Straight But We Love Her AnywayMichelle Buteau is the host of Late Night Whenever, the newest podcast from WNYC Studios. This episode features comedian Matteo Lane and actor Nico Tortorella. Subscribe on Apple Podcasts or wherever you listen to shows.

]]>
full35WNYC Studios Michelle Buteau is the host of Late Night Whenever, the newest podcast from WNYC Studios. This episode features comedian Matteo Lane and actor Nico Tortorella. Subscribe on Apple Podcasts or wherever you listen to shows.     WNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#37: Shamir Bailey Hates Your Favorite Shamir Song http://www.wnycstudios.org/story/shamir-interview/<p>Shamir Bailey is a queer, Philadelphia-based musician. His albums include <em>Ratchet</em>, <em>Hope</em>, <em>Revelations,</em> and <em>Resolution</em>.</p> <p>While he was in the studio, we had Shamir perform acoustic versions of his songs "Straight Boy" and "I Can't Breathe."</p> <p><a href="https://youtu.be/TnAXbie53jo">"Straight Boy"</a></p> <p><div class="user-embedded-video"><div id="videoplayer_idm14034018843920006a8d62f-cb98-4995-b001-2dd9c7046eb6"><iframe width="620" height="349" src="https://www.youtube.com/embed/TnAXbie53jo?wmode=transparent&amp;autohide=1&amp;rel=0&amp;showinfo=0&amp;feature=oembed&amp;enablejsapi=1" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen="allowfullscreen" id="a665127068164660272" class="youtube_video" mozallowfullscreen="mozallowfullscreen" webkitallowfullscreen="webkitallowfullscreen" data-original-url="https://youtu.be/TnAXbie53jo"></iframe></div></div>  </p> <p><a href="https://youtu.be/vS96xaTFZHI">"I Can't Breathe"</a></p> <p><div class="user-embedded-video"><div id="videoplayer_idm14034018255832069c52c2c-9495-4ffb-bab9-1d6aaa0b8aae"><iframe width="620" height="349" src="https://www.youtube.com/embed/vS96xaTFZHI?wmode=transparent&amp;autohide=1&amp;rel=0&amp;showinfo=0&amp;feature=oembed&amp;enablejsapi=1" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen="allowfullscreen" id="a2470033760298873976" class="youtube_video" mozallowfullscreen="mozallowfullscreen" webkitallowfullscreen="webkitallowfullscreen" data-original-url="https://youtu.be/vS96xaTFZHI"></iframe></div></div>  </p> <p>Video production by Kim Nowacki. Original music by Jeremy Bloom. </p> <p><em>Support our work! Become a Nancy member today at <a href="https://pledge3.wnyc.org/donate/nancy-it/onestep/?utm_source=wnyc&amp;utm_medium=nancy-redirect&amp;utm_campaign=pledge&amp;utm_content=show-notes" target="_blank" title="Pledge">Nancypodcast.org/donate</a>.</em></p> <div class="embedded-image" style="max-width: 800px;"><img class="mcePuppyImage" src="https://media.wnyc.org/i/800/600/l/80/1/shamirTK.jpg" alt=""> <div class="image-metadata"> <div class="image-caption">Shamir Bailey with Nancy hosts Kathy Tu and Tobin Low.</div> <div class="image-credit">(Matt Collette)</div> </div> </div> <p><em> </em></p> Sun, 29 Apr 2018 12:00:00 -0400a6b5c6a5-4e08-4009-a9d0-676c4b421500emotionalexplicitfunnygayin-studio_performancelgbtmusicqueer#37: Shamir Bailey Hates Your Favorite Shamir Song 18:38yesShamir Bailey is a queer, Philadelphia-based musician. His albums include RatchetHopeRevelations, and Resolution.

While he was in the studio, we had Shamir perform acoustic versions of his songs "Straight Boy" and "I Can't Breathe."

Video production by Kim Nowacki. Original music by Jeremy Bloom. 

Support our work! Become a Nancy member today at Nancypodcast.org/donate.

]]>
Shamir Bailey Hates Your Favorite Shamir SongShamir Bailey is a queer, Philadelphia-based musician. His albums include RatchetHopeRevelations, and Resolution.

While he was in the studio, we had Shamir perform acoustic versions of his songs "Straight Boy" and "I Can't Breathe."

Video production by Kim Nowacki. Original music by Jeremy Bloom. 

Support our work! Become a Nancy member today at Nancypodcast.org/donate.

]]>
full34WNYC Studios Shamir Bailey is a queer, Philadelphia-based musician. His albums include Ratchet, Hope, Revelations, and Resolution. While he was in the studio, we had Shamir perform acoustic versions of his songs "Straight Boy" and "I Can't Breathe." "Straight Boy"   WNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
Gaggle Update: We're Here to Make Friends http://www.wnycstudios.org/story/gaggle-friendship-update/<p>Our month-long <a href="https://www.wnycstudios.org/shows/nancy/friends">"How to Get a Gaggle"</a> project is just getting started! Today we're checking in on what participants are looking for and how they're doing.</p> <p>Share your own stories! Email a voice memo to <a href="mailto:nancypodcast@wnyc.org">nancypodcast@wnyc.org</a>, post on social media using the hashtag <a href="https://twitter.com/search?q=%23NancyGaggle&amp;src=typd">#NancyGaggle</a>, or join <a href="https://www.facebook.com/groups/nancypodcast/">our brand-new Facebook group</a>.</p> <p>And if you haven't signed up yet, <a href="https://www.wnycstudios.org/shows/nancy/friends">what are you waiting for?</a></p> <p><em>Support our work! Become a Nancy member today at <a href="https://pledge3.wnyc.org/donate/nancy-it/onestep/?utm_source=wnyc&amp;utm_medium=nancy-redirect&amp;utm_campaign=pledge&amp;utm_content=show-notes" target="_blank" title="Pledge">Nancypodcast.org/donate</a>.</em></p> Wed, 25 Apr 2018 12:00:00 -0400e33feb9d-17da-42b7-8c79-c56f2e164f21bisexualfriendshipgaylesbianlgbtliferelationshipsstorytellingGaggle Update: We're Here to Make Friends 3:59Our month-long "How to Get a Gaggle" project is just getting started! Today we're checking in on what participants are looking for and how they're doing.

Share your own stories! Email a voice memo to nancypodcast@wnyc.org, post on social media using the hashtag #NancyGaggle, or join our brand-new Facebook group.

And if you haven't signed up yet, what are you waiting for?

Support our work! Become a Nancy member today at Nancypodcast.org/donate.

]]>
Gaggle Update: We're Here to Make FriendsOur month-long "How to Get a Gaggle" project is just getting started! Today we're checking in on what participants are looking for and how they're doing.

Share your own stories! Email a voice memo to nancypodcast@wnyc.org, post on social media using the hashtag #NancyGaggle, or join our brand-new Facebook group.

And if you haven't signed up yet, what are you waiting for?

Support our work! Become a Nancy member today at Nancypodcast.org/donate.

]]>
full33WNYC Studiosno Our month-long "How to Get a Gaggle" project is just getting started! Today we're checking in on what participants are looking for and how they're doing. Share your own stories! Email a voice memo to nancypodcast@wnyc.org, post on social media using the WNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#36: Punks http://www.wnycstudios.org/story/punks/<p>Once upon a time, Kai Wright saw a movie called Punks. A romantic comedy about black gay men, it was like nothing he'd ever seen before. But then it disappeared.</p> <p><a href="https://twitter.com/kai_wright" target="_blank" title="Kai Wright">Kai Wright</a> is editor and host of WNYC’s Narrative Unit and a columnist for The Nation magazine. <a href="https://twitter.com/PatrikIanPolk" target="_blank" title="Patrik-Ian Polk">Patrik-Ian Polk</a> is the writer and director of Punks; he went on to create <a href="http://www.logotv.com/shows/noahs-arc/episode-guide" target="_blank" title="Noah's Arc">Noah's Arc</a>, <a href="https://www.imdb.com/title/tt2107835/" target="_blank" title="The Skinny">The Skinny</a>, and <a href="https://www.imdb.com/title/tt3181920/" target="_blank" title="Blackbird">Blackbird</a>, and is now a producer and writer for <a href="https://www.bet.com/shows/being-mary-jane.html" target="_blank" title="Being Mary Jane">Being Mary Jane</a>. He is currently producing and writing the upcoming Starz drama series, Pussy Valley.</p> <p>Want to see Punks? <a href="https://web.ovationtix.com/trs/pe.c/10280635/?sf87528431=1">Claim tickets now</a> for our one-night-only screening now, featuring a Q&amp;A with director Patrik-Ian Polk. You can also join Tobin and Kathy for <a href="https://web.ovationtix.com/trs/pe.c/10281123">a special pre-screening reception</a>.</p> <p>Special thanks to the <a href="https://one.usc.edu/" target="_blank" title="ONE National Gay &amp; Lesbian Archives">ONE National Gay &amp; Lesbian Archives</a><span> at USC.</span> Original music by Jeremy Bloom with additional music by Ultracat (<a href="http://freemusicarchive.org/music/UltraCat/Disco_High/ultracat_-_03_-_unexpected_little_happenings">"Little Happenings"</a>). Theme by Alex Overington.</p> <p><em>Support our work! Become a Nancy member today at <a href="https://pledge3.wnyc.org/donate/nancy-it/onestep/?utm_source=wnyc&amp;utm_medium=nancy-redirect&amp;utm_campaign=pledge&amp;utm_content=show-notes" target="_blank" title="Pledge">Nancypodcast.org/donate</a>.</em></p> Sun, 22 Apr 2018 12:00:00 -04006d3e9c61-d9ed-48ee-9f73-3516b0a6784eartsdocumentaryexplicitfilmgayinterviewlgbtlifemoviesstorytelling#36: Punks 23:26yesOnce upon a time, Kai Wright saw a movie called Punks. A romantic comedy about black gay men, it was like nothing he'd ever seen before. But then it disappeared.

Kai Wright is editor and host of WNYC’s Narrative Unit and a columnist for The Nation magazine. Patrik-Ian Polk is the writer and director of Punks; he went on to create Noah's ArcThe Skinny, and Blackbird, and is now a producer and writer for Being Mary Jane. He is currently producing and writing the upcoming Starz drama series, Pussy Valley.

Want to see Punks? Claim tickets now for our one-night-only screening now, featuring a Q&A with director Patrik-Ian Polk. You can also join Tobin and Kathy for a special pre-screening reception.

Special thanks to the ONE National Gay & Lesbian Archives at USC. Original music by Jeremy Bloom with additional music by Ultracat ("Little Happenings"). Theme by Alex Overington.

Support our work! Become a Nancy member today at Nancypodcast.org/donate.

]]>
PunksOnce upon a time, Kai Wright saw a movie called Punks. A romantic comedy about black gay men, it was like nothing he'd ever seen before. But then it disappeared.

Kai Wright is editor and host of WNYC’s Narrative Unit and a columnist for The Nation magazine. Patrik-Ian Polk is the writer and director of Punks; he went on to create Noah's ArcThe Skinny, and Blackbird, and is now a producer and writer for Being Mary Jane. He is currently producing and writing the upcoming Starz drama series, Pussy Valley.

Want to see Punks? Claim tickets now for our one-night-only screening now, featuring a Q&A with director Patrik-Ian Polk. You can also join Tobin and Kathy for a special pre-screening reception.

Special thanks to the ONE National Gay & Lesbian Archives at USC. Original music by Jeremy Bloom with additional music by Ultracat ("Little Happenings"). Theme by Alex Overington.

Support our work! Become a Nancy member today at Nancypodcast.org/donate.

]]>
full32WNYC Studios Once upon a time, Kai Wright saw a movie called Punks. A romantic comedy about black gay men, it was like nothing he'd ever seen before. But then it disappeared. Kai Wright is editor and host of WNYC’s Narrative Unit and a columnist for The Nation magaziWNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#35: A Gaggle for Me http://www.wnycstudios.org/story/gaggle-finding-queer-friends/<p>In our season three premiere, Nancy stages a friend-tervention for <a href="https://twitter.com/jrodriguez713">Joe Rodriguez</a>. Plus, we launch our new <a href="https://www.wnycstudios.org/shows/nancy/friends">How to Get a Gaggle</a> project!</p> <p><em><div class="user-embedded-video"><div id="videoplayer_idm1401186101617447dac9a07-b816-4e0a-aca8-3ebe3eb41108"><iframe width="620" height="349" src="https://www.youtube.com/embed/QEawcGIIRg0?wmode=transparent&amp;autohide=1&amp;rel=0&amp;showinfo=0&amp;feature=oembed&amp;enablejsapi=1" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen="allowfullscreen" id="a3453217560842604209" class="youtube_video" mozallowfullscreen="mozallowfullscreen" webkitallowfullscreen="webkitallowfullscreen" data-original-url="https://youtu.be/QEawcGIIRg0"></iframe></div></div>  </em></p> <p>Special thanks to <a href="http://www.imfran.com/">Fran Tirado</a> of the podcast <a href="https://food4thotpodcast.com/">Food 4 Thot</a>, Eric Sosa at <a href="http://www.cmoneverybody.com/">C'mon Everybody</a>, and Bill Clark and Libby Willis at <a href="https://www.memesdiner.com/">MeMe's Diner</a>. Our friendship project is coordinated by Charlotte Cooper with help from Ashley Lusk, Caroline English, Sahar Baharloo, Sarah Sandbach, Fiona Carswell, and many more of our colleagues at <a href="https://www.wnycstudios.org/">WNYC Studios</a>.</p> <div data-pym-src="https://apps.nypr.org/call-to-action/?brand=wnyc-studios&amp;headline=How%20to%20Get%20a%20Gaggle&amp;summary=Four%20weeks%20of%20advice%2C%20tips%2C%20and%20actual%2C%20practical%20steps%20you%20can%20take%20to%20make%20friends.%20&amp;callToAction=Sign%20Me%20Up&amp;url=https%3A%2F%2Fwnyc.typeform.com%2Fto%2FQ009AX">Loading...</div> <script type="text/javascript" src="https://pym.nprapps.org/pym.v1.min.js"></script> <p>Original music by Jeremy Bloom with additional music by Mystery Mammal (<a href="http://freemusicarchive.org/music/Mystery_Mammal/Latent/Youre_Up_There_1137">"You're Up There"</a>), Podington Bear (<a href="http://freemusicarchive.org/music/Podington_Bear/Soul/Gizmo">"Gizmo"</a>), and Creo (<a href="http://freemusicarchive.org/music/Creo/~/Memory_1520">"Memory"</a>). Theme by Alex Overington.</p> <p><em>Support our work! Become a Nancy member today at <a href="https://pledge3.wnyc.org/donate/nancy-it/onestep/?utm_source=wnyc&amp;utm_medium=nancy-redirect&amp;utm_campaign=pledge&amp;utm_content=show-notes" target="_blank" title="Pledge">Nancypodcast.org/donate</a>.</em></p> Sun, 15 Apr 2018 12:00:00 -040056d4468c-1e38-479d-af36-dce0daa36949brooklynexplicitfriendshipgaylesbianlgbtlifequeerstorytelling#35: A Gaggle for Me 37:16yesIn our season three premiere, Nancy stages a friend-tervention for Joe Rodriguez. Plus, we launch our new How to Get a Gaggle project!

Special thanks to Fran Tirado of the podcast Food 4 Thot, Eric Sosa at C'mon Everybody, and Bill Clark and Libby Willis at MeMe's Diner. Our friendship project is coordinated by Charlotte Cooper with help from Ashley Lusk, Caroline English, Sahar Baharloo, Sarah Sandbach, Fiona Carswell, and many more of our colleagues at WNYC Studios.

Original music by Jeremy Bloom with additional music by Mystery Mammal ("You're Up There"), Podington Bear ("Gizmo"), and Creo ("Memory"). Theme by Alex Overington.

Support our work! Become a Nancy member today at Nancypodcast.org/donate.

]]>
A Gaggle for MeIn our season three premiere, Nancy stages a friend-tervention for Joe Rodriguez. Plus, we launch our new How to Get a Gaggle project!

Special thanks to Fran Tirado of the podcast Food 4 Thot, Eric Sosa at C'mon Everybody, and Bill Clark and Libby Willis at MeMe's Diner. Our friendship project is coordinated by Charlotte Cooper with help from Ashley Lusk, Caroline English, Sahar Baharloo, Sarah Sandbach, Fiona Carswell, and many more of our colleagues at WNYC Studios.

Original music by Jeremy Bloom with additional music by Mystery Mammal ("You're Up There"), Podington Bear ("Gizmo"), and Creo ("Memory"). Theme by Alex Overington.

Support our work! Become a Nancy member today at Nancypodcast.org/donate.

]]>
full31WNYC Studios In our season three premiere, Nancy stages a friend-tervention for Joe Rodriguez. Plus, we launch our new How to Get a Gaggle project!    Special thanks to Fran Tirado of the podcast Food 4 Thot, Eric Sosa at C'mon Everybody, and Bill Clark and Libby WilWNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
Tobin. Kathy. Season Three! http://www.wnycstudios.org/story/season-three-trailer/<p>Nancy's back with a whole new season of stories and conversations about the queer experience today. All-new episodes starting Sunday, April 15.</p> Thu, 12 Apr 2018 12:00:00 -04007e63d832-fe16-46ae-a16b-e69971072007bisexualgaylesbianlgbtlifestorytellingtransgenderTobin. Kathy. Season Three! 3:50Nancy's back with a whole new season of stories and conversations about the queer experience today. All-new episodes starting Sunday, April 15.

]]>
Tobin. Kathy. Season Three.Nancy's back with a whole new season of stories and conversations about the queer experience today. All-new episodes starting Sunday, April 15.

]]>
trailer3WNYC Studiosno Nancy's back with a whole new season of stories and conversations about the queer experience today. All-new episodes starting Sunday, April 15. WNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#34: Return to Ring of Keys http://www.wnycstudios.org/story/nancy-podcast-ring-of-keys-2/<p>Sarah Lu's first glimpse at life as a queer adult came while visiting Maura Koutoujian's general store back when she was a kid. Years later, Sarah tracked Maura down.</p> <p>This bonus episode is the last in a series revisiting stories from our first two seasons. Episode scoring by Jeremy Bloom with additional music by Arne Bang Huseby (<a href="http://freemusicarchive.org/music/Arne_Bang_Huseby/~/Arne_Huseby_-__Stormy_Blues">“Stormy Blues”</a>), Jalen Warshowsky (<a href="http://freemusicarchive.org/music/Jalen_Warshawsky/Bonus_Beat_Blast_2011/31_jalen_warshawsky-dollar_theatre">“Dollar Theater”</a>), Josh Woodward (<a href="http://freemusicarchive.org/music/Josh_Woodward/Breadcrumbs/JoshWoodward-Breadcrumbs-NoVox-09-OnceTomorrow">“Once Tomorrow”</a>, <a href="http://freemusicarchive.org/music/Josh_Woodward/Breadcrumbs/JoshWoodward-Breadcrumbs-NoVox-07-GreySnow">“Grey Snow”</a>, and <a href="http://freemusicarchive.org/music/Josh_Woodward/Breadcrumbs/JoshWoodward-Breadcrumbs-NoVox-03-BorderBlaster">"Border Blaster"</a>), Anamorphic Orchestra (<a href="http://freemusicarchive.org/music/Anamorphic_Orchestra/Anamorphic_Orchestra/Taking_Dark_Matter_Lightly">“Taking Dark Matter Lightly”</a>), Joey Pecoraro (<a href="https://soundcloud.com/joeypecoraro/strong-vibes">“Strong Vibes”</a>), and Little Glass Men (<a href="http://freemusicarchive.org/music/Little_Glass_Men/Kelp_Grooves/Kelp_Grooves">“Kelp Grooves”</a>).</p> <p><span><em>Support our work! Become a Nancy member today at <a href="https://pledge3.wnyc.org/donate/nancy-it/onestep/?utm_source=wnyc&amp;utm_medium=nancy-redirect&amp;utm_campaign=pledge&amp;utm_content=show-notes" target="_blank" title="Pledge">Nancypodcast.org/donate</a>.</em></span></p> <p><span><em><div class="user-embedded-video"><div id="videoplayer_idm140118569509552cfd211f6-eff9-4824-bd30-aeddf4f6a0ef"><iframe width="620" height="349" src="https://www.youtube.com/embed/pMAuesRJm1E?wmode=transparent&amp;autohide=1&amp;rel=0&amp;showinfo=0&amp;feature=oembed&amp;enablejsapi=1" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen="allowfullscreen" id="a4837992213844809892" class="youtube_video" mozallowfullscreen="mozallowfullscreen" webkitallowfullscreen="webkitallowfullscreen" data-original-url="https://www.youtube.com/watch?v=pMAuesRJm1E"></iframe></div></div>  </em></span></p> Sun, 03 Dec 2017 12:00:00 -0500http://www.wnyc.org/story/nancy-podcast-ring-of-keys-2/chicagolesbianlgbtlifequeerstorytelling#34: Return to Ring of Keys 25:14Sarah Lu's first glimpse at life as a queer adult came while visiting Maura Koutoujian's general store back when she was a kid. Years later, Sarah tracked Maura down.

This bonus episode is the last in a series revisiting stories from our first two seasons. Episode scoring by Jeremy Bloom with additional music by Arne Bang Huseby (“Stormy Blues”), Jalen Warshowsky (“Dollar Theater”), Josh Woodward (“Once Tomorrow”“Grey Snow”, and "Border Blaster"), Anamorphic Orchestra (“Taking Dark Matter Lightly”), Joey Pecoraro (“Strong Vibes”), and Little Glass Men (“Kelp Grooves”).

Support our work! Become a Nancy member today at Nancypodcast.org/donate.

]]>
Return to Ring of KeysSarah Lu's first glimpse at life as a queer adult came while visiting Maura Koutoujian's general store back when she was a kid. Years later, Sarah tracked Maura down.

This bonus episode is the last in a series revisiting stories from our first two seasons. Episode scoring by Jeremy Bloom with additional music by Arne Bang Huseby (“Stormy Blues”), Jalen Warshowsky (“Dollar Theater”), Josh Woodward (“Once Tomorrow”“Grey Snow”, and "Border Blaster"), Anamorphic Orchestra (“Taking Dark Matter Lightly”), Joey Pecoraro (“Strong Vibes”), and Little Glass Men (“Kelp Grooves”).

Support our work! Become a Nancy member today at Nancypodcast.org/donate.

]]>
full217WNYC Studiosno Sarah Lu's first glimpse at life as a queer adult came while visiting Maura Koutoujian's general store back when she was a kid. Years later, Sarah tracked Maura down. This bonus episode is the last in a series revisiting stories from our first two seasonWNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#33: Kathy's Mom is Uncomfortable With All This http://www.wnycstudios.org/story/nancy-podcast-bonus-kathy-mom/<p>Kathy's mom didn't expect anyone would actually listen to her <a href="http://www.wnyc.org/story/nancy-podcast-episode-1-hello-hello">the first time Kathy recorded their conversation</a>. And she's still not particularly comfortable with all this gay stuff.</p> <p>This bonus episode is part of a series revisiting episodes from our first two seasons. Episode scoring by Jeremy Bloom with additional music by Benedek ("<a href="http://freemusicarchive.org/music/Benedek/Bonus_Beat_Blast_2011/10_benedek-cruzin">CRUZIN</a>").</p> <p> </p> <p> </p> Sun, 19 Nov 2017 12:00:00 -0500http://www.wnyc.org/story/nancy-podcast-bonus-kathy-mom/familylgbtlifestorytelling#33: Kathy's Mom is Uncomfortable With All This 23:57Kathy's mom didn't expect anyone would actually listen to her the first time Kathy recorded their conversation. And she's still not particularly comfortable with all this gay stuff.

This bonus episode is part of a series revisiting episodes from our first two seasons. Episode scoring by Jeremy Bloom with additional music by Benedek ("CRUZIN").

]]>
Kathy's Mom is Uncomfortable With All ThisKathy's mom didn't expect anyone would actually listen to her the first time Kathy recorded their conversation. And she's still not particularly comfortable with all this gay stuff.

This bonus episode is part of a series revisiting episodes from our first two seasons. Episode scoring by Jeremy Bloom with additional music by Benedek ("CRUZIN").

]]>
full216WNYC Studiosno Kathy's mom didn't expect anyone would actually listen to her the first time Kathy recorded their conversation. And she's still not particularly comfortable with all this gay stuff. This bonus episode is part of a series revisiting episodes from our firsWNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#32: Lena Waithe's Superpowers http://www.wnycstudios.org/story/nancy-podcast-bonus-lena-waithe/<p>We first spoke with Lena Waithe just ahead of Master of None's second season, which featured the groundbreaking episode "Thanksgiving." Kathy checked back in shortly after Lena won an Emmy for writing that episode.</p> <ul> <li><a href="https://twitter.com/lenawaithe?lang=en">Lena Waithe</a> is an Emmy-award winning writer and actress on <a href="https://www.netflix.com/title/80049714">Master of None</a>. Her new show, <a href="http://www.sho.com/the-chi">The Chi</a>, premieres Jan. 7, 2018 on Showtime.</li> <li>This episode was recorded in Los Angeles at <a href="https://www.werkitfestival.com">Werk It</a>, WNYC's women's podcast festival.</li> </ul> <p><div class="user-embedded-video"><div id="videoplayer_idm1401185841721443448558f-3a78-4a83-9a59-8aa1fdff62c3"><iframe width="620" height="349" src="https://www.youtube.com/embed/42_IRmENb8M?wmode=transparent&amp;autohide=1&amp;rel=0&amp;showinfo=0&amp;feature=oembed&amp;enablejsapi=1" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen="allowfullscreen" id="a4079288287776002931" class="youtube_video" mozallowfullscreen="mozallowfullscreen" webkitallowfullscreen="webkitallowfullscreen" data-original-url="https://www.youtube.com/watch?v=42_IRmENb8M"></iframe></div></div> </p> <p>This bonus episode is the first in a series revisiting episodes from our first two seasons. Episode scoring by Jeremy Bloom.</p> <p> </p> Sun, 12 Nov 2017 12:00:00 -0500http://www.wnyc.org/story/nancy-podcast-bonus-lena-waithe/comedyexplicitgaylesbianlgbtlifestorytellingtelevision#32: Lena Waithe's Superpowers 18:06yesWe first spoke with Lena Waithe just ahead of Master of None's second season, which featured the groundbreaking episode "Thanksgiving." Kathy checked back in shortly after Lena won an Emmy for writing that episode.

Lena Waithe is an Emmy-award winning writer and actress on Master of None. Her new show, The Chi, premieres Jan. 7, 2018 on Showtime.This episode was recorded in Los Angeles at Werk It, WNYC's women's podcast festival.

This bonus episode is the first in a series revisiting episodes from our first two seasons. Episode scoring by Jeremy Bloom.

]]>
Lena Waithe's SuperpowersWe first spoke with Lena Waithe just ahead of Master of None's second season, which featured the groundbreaking episode "Thanksgiving." Kathy checked back in shortly after Lena won an Emmy for writing that episode.

Lena Waithe is an Emmy-award winning writer and actress on Master of None. Her new show, The Chi, premieres Jan. 7, 2018 on Showtime.This episode was recorded in Los Angeles at Werk It, WNYC's women's podcast festival.

This bonus episode is the first in a series revisiting episodes from our first two seasons. Episode scoring by Jeremy Bloom.

]]>
full215WNYC Studios We first spoke with Lena Waithe just ahead of Master of None's second season, which featured the groundbreaking episode "Thanksgiving." Kathy checked back in shortly after Lena won an Emmy for writing that episode. Lena Waithe is an Emmy-award winning wrWNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#31: Out at Work http://www.wnycstudios.org/story/nancy-podcast-out-at-work/<p>Earlier this year we launched our Out at Work project, looking to explore the complicated stories that come with being queer on the job. We asked you to share your own experiences, and nearly 3,000 of you wrote in. Here's what we found:</p> <ul> <li>More than half of you — <strong>52 percent</strong> — said you are out at work.</li> <li><strong>Thirteen percent</strong> of you said you aren’t out at all.</li> <li>And about a third — <strong>35 percent</strong> — said you are <em>somewhat </em>out.</li> </ul> <p>That third group, the people who are somewhat out, shows just how squishy words like “in” and “out” can be. There are innumerable ways to be out at work, but looking across our survey data and responses, we narrowed in on six.</p> <div class="embedded-image"><img class="mcePuppyImage" src="https://media2.wnyc.org/i/800/200/l/80/1/Nancy_OutAtWork_WebHeaders_ProfessionallyQueer.png" alt=""><strong> </strong></div> <p><strong>My queerness is an essential part of my work.</strong></p> <blockquote> <p>“I work in an LGBT non-profit community center doing youth programming. Before that I worked at a college in their LGBT center as administrative assistance. All in all I have been a professional gay for almost 8 years. I used to say that people at the college would see me and see rainbows flying off of me as I walked around. I am out as out can be.” <span>— <em>K, Pennsylvania</em></span></p> </blockquote> <p><em>Listen to Dana's story:</em></p> <p><iframe frameborder="0" height="54" scrolling="no" src="https://www.wnyc.org/widgets/ondemand_player/nancy/#file=https://www.podtrac.com/pts/redirect.mp3/audio.wnyc.org/nancy_extra/nancy_extra102917_4complicated.mp3&amp;share=0" width="100%"></iframe></p> <div class="embedded-image"><img class="mcePuppyImage" src="https://media2.wnyc.org/i/800/200/l/80/1/Nancy_OutAtWork_WebHeaders_OutAndProud.png" alt=""><strong> </strong></div> <p><strong>I’m totally out about my identity at work.</strong> </p> <blockquote> <p><span>“I'm non-binary, so it required a public announcement to my team to make sure everyone understood. I use they/them pronouns and make sure any new hires know that… One coworker made a cake for the occasion and put my pronouns in the frosting. He said instead of 'cake day' it was 'cake they.' It tasted great too.” — <em>R, Rhode Island</em></span></p> </blockquote> <p><em>Listen to Brook's story:</em></p> <p><iframe frameborder="0" height="54" scrolling="no" src="https://www.wnyc.org/widgets/ondemand_player/nancy/#file=https://www.podtrac.com/pts/redirect.mp3/audio.wnyc.org/nancy_extra/nancy_extra102917_2outproud.mp3&amp;share=0" width="100%"></iframe></p> <div class="embedded-image"><img class="mcePuppyImage" src="https://media2.wnyc.org/i/800/200/l/80/1/Nancy_OutAtWork_WebHeaders_PeopleCanTell.png" alt=""><strong> </strong></div> <p><strong>I'm not explicitly out but I assume most people know.</strong></p> <blockquote> <p><span>"I'm a gay trans man. Testosterone never really affected my voice, or my curves. As soon as I open my mouth to speak or stand up -- I'm out. There's no option for me to be stealth. My body gives me away the moment I'm present… I *never* have the option of choosing when I'm out or not." — <em>S, California</em></span></p> </blockquote> <p><em>Listen to Alison's story:</em></p> <p><iframe frameborder="0" height="54" scrolling="no" src="https://www.wnyc.org/widgets/ondemand_player/nancy/#file=https://www.podtrac.com/pts/redirect.mp3/audio.wnyc.org/nancy_extra/nancy_extra102917_3peoplecantell.mp3&amp;share=0" width="100%"></iframe></p> <div class="embedded-image"><img class="mcePuppyImage" src="https://media2.wnyc.org/i/800/200/l/80/1/Nancy_OutAtWork_WebHeaders_ItsComplicated.png" alt=""><strong> </strong></div> <p><strong>I'm out about some things, but keep others to myself.</strong></p> <blockquote> <p>“I'm a graduate student working in a chemistry lab as part of my PhD. I'm out to all of my coworkers and fellow graduate students, but my adviser has expressed some very homophobic views. He has said to other members of our research group that he doesn't want to hire gays, because they will be "more interested in sex than in chemistry.” <span>— <em>Z, Texas</em></span></p> </blockquote> <p><iframe frameborder="0" height="54" scrolling="no" src="https://www.wnyc.org/widgets/ondemand_player/nancy/#file=https://www.podtrac.com/pts/redirect.mp3/audio.wnyc.org/nancy_extra/nancy_extra102917_4complicated.mp3&amp;share=0" width="100%"></iframe></p> <div class="embedded-image"><img class="mcePuppyImage" src="https://media2.wnyc.org/i/800/200/l/80/1/Nancy_OutAtWork_WebHeaders_ItsIrrelevant.png" alt=""><strong> </strong></div> <p><strong>My queerness has nothing to do with my job, so I don't share a thing.</strong></p> <blockquote> <p><span>"For me, it's not anyone else's business to know. People aren't entitled to any part of you and that's something that is given at your own discretion." — <em>L, California</em></span></p> </blockquote> <p><em>Listen to Jeremy's story:</em></p> <p><iframe frameborder="0" height="54" scrolling="no" src="https://www.wnyc.org/widgets/ondemand_player/nancy/#file=https://www.podtrac.com/pts/redirect.mp3/audio.wnyc.org/nancy_extra/nancy_extra102917_5cant.mp3&amp;share=0" width="100%"></iframe></p> <div class="embedded-image"><img class="mcePuppyImage" src="https://media2.wnyc.org/i/800/200/l/80/1/Nancy_OutAtWork_WebHeaders_ICant.png" alt=""><strong> </strong></div> <p><strong>Being out would threaten my job security or safety.</strong></p> <blockquote> <p>“I'm an architect. Typically I am out at work, but I tend to avoid discussing my sexuality at all on job sites. The machismo culture of construction sites is intimidating and I have to command respect when I'm there and can't afford a loss of respect from the site staff because of any imagined personal weakness. At my most recent job, on my fourth day of work I was pulled aside by my boss as we came back from our first work lunch where we talked about some of our personal lives and not just work issues. He told me that he was very excited to have me working there, but he cautioned me that I should never mention my husband again while I worked there because, while he 'was cool with it' the senior management was very conservative and might choose to fire me." — <em>S, Virginia</em></p> </blockquote> <p><em>Listen to Patrick's story:</em></p> <p><iframe frameborder="0" height="54" scrolling="no" src="https://www.wnyc.org/widgets/ondemand_player/nancy/#file=https://www.podtrac.com/pts/redirect.mp3/audio.wnyc.org/nancy_extra/nancy_extra102917_6irrelevant.mp3&amp;share=0" width="100%"></iframe></p> <hr> <h2>Inside this episode</h2> <ul> <li>Asa Sevelius is principal of the <a href="https://www.brookline.k12.ma.us/heath">Heath School</a> in Brookline, Mass.</li> <li>Clair Farley is the director of economic development at the <a href="http://www.sfcenter.org">San Francisco LGBT Center</a>; Mia Satya is an employment services specialist with the center's <a href="http://transemploymentprogram.org">Trans Employment Program</a>.</li> <li>Check out the <a href="http://www.wnyc.org/story/nancy-podcast-out-at-work/">results from our Out at Work survey</a>, plus a whole bunch of resources for navigating being queer on the job.</li> </ul> <p>Episode scoring by Jeremy Bloom with additional music by Drake Stafford (<a href="http://freemusicarchive.org/music/Drake_Stafford/Drake_Stafford_-_Singles/Matte_Black_-_Drake_Stafford">"Matte Black"</a>) and Evan Schaeffer (<a href="http://freemusicarchive.org/music/Evan_Schaeffer/Big_Splash/Evan_Schaeffer_-_09_-_Sisyphus">"Sisyphus"</a>). Special thanks to Mandy Naglich, Anna Burke, and Alison Morgenstern.</p> <hr> <h2>Listen to our other Out at Work stories<br><span></span></h2> <ul> <li><a href="http://www.wnyc.org/story/nancy-podcast-trans-military-ban">#16: Let's Talk About Trump's Trans Ban</a></li> <li><a href="http://www.wnyc.org/story/nancy-podcast-pentagon-pride">#19: The Pentagon's Secret Gaggle of Gays</a></li> <li><a href="http://www.wnyc.org/story/nancy-podcast-out-at-work-lgbt-employment/">#22: Does Your Boss Know You're Gay?</a></li> <li><a href="http://www.wnyc.org/story/nancy-podcast-chirlane-mccray">#24: Somewhat Out</a></li> </ul> <hr> <h2>Let's stay in touch!</h2> <p><a href="http://eepurl.com/cDwqqT" target="_blank" class="btn btn--pink btn--large">Sign up for our newsletter</a></p> <hr> <h2>Resources</h2> <p>You don't have to figure it all out on your own. Here are some of our favorite LGBT employment resources:</p> <p><strong>Finding a job:</strong></p> <ul> <li><a href="https://www.lambdalegal.org/know-your-rights/article/workplace-your-job-search">Your Job Search (Lambda Legal)</a></li> <li><a href="http://transcanwork.org/">Trans Can Work</a></li> </ul> <p><strong>Coming out at work:</strong></p> <ul> <li><a href="https://www.hrc.org/resources/coming-out-at-work">Coming Out at Work (Human Rights Campaign)</a></li> <li><a href="https://www.autostraddle.com/coming-out-at-work-59763/">Coming Out at Work: What a Way to Make a Living (Autostraddle)</a></li> </ul> <p><strong>Know your rights:</strong></p> <ul> <li><a href="https://www.eeoc.gov/eeoc/publications/brochure-gender_stereotyping.cfm">Preventing Employment Discrimination Against Lesbian, Gay, Bisexual or Transgender Workers (U.S. Equal Employment Opportunity Commission)</a></li> <li><a href="https://transgenderlawcenter.org/resources/employment/know-your-rights-transgender-employment-law">Transgender People at Work (Transgender Law Center)</a></li> <li><a href="https://www.lambdalegal.org/know-your-rights/article/workplace-hiv-discrimination">HIV Discrimination in the Workplace (Lambda Legal)</a></li> </ul> <p><strong>Employer resources:</strong></p> <ul> <li><a href="https://transgenderlawcenter.org/resources/employment/modelpolicy">Model Transgender Employment Policy (Transgender Law Center)</a></li> <li><a href="https://transgenderlawcenter.org/resources/employment/tips-for-working-with-transgender-coworkers">Tips for Working with Transgender Coworkers (Transgender Law Center)</a></li> <li><a href="https://www.lambdalegal.org/know-your-rights/article/workplace-for-employers">For Employers (Lambda Legal)</a></li> </ul> Sun, 29 Oct 2017 12:00:00 -0400http://www.wnyc.org/story/nancy-podcast-out-at-work/employmentgaylesbianlgbtlifepoliticstransgenderwork#31: Out at Work 30:44Nearly 3,000 of you told us about your experiences being queer on the job. And we learned it's rarely as simple as "in" or "out." Visit nancypodcast.org/workresults for results from our Out at Work survey, plus a whole bunch of resources for navigating being queer on the job.

Guests: Asa Sevelius is principal of the Heath School in Brookline, Mass. Clair Farley is the director of economic development at the San Francisco LGBT Center; Mia Satya is an employment services specialist with the center's Trans Employment Program.

Episode scoring by Jeremy Bloom with additional music by Drake Stafford ("Matte Black") and Evan Schaeffer ("Sisyphus"). Special thanks to Mandy Naglich, Anna Burke, and Alison Morgenstern.

]]>
Out at WorkNearly 3,000 of you told us about your experiences being queer on the job. And we learned it's rarely as simple as "in" or "out." Visit nancypodcast.org/workresults for results from our Out at Work survey, plus a whole bunch of resources for navigating being queer on the job.

Guests: Asa Sevelius is principal of the Heath School in Brookline, Mass. Clair Farley is the director of economic development at the San Francisco LGBT Center; Mia Satya is an employment services specialist with the center's Trans Employment Program.

Episode scoring by Jeremy Bloom with additional music by Drake Stafford ("Matte Black") and Evan Schaeffer ("Sisyphus"). Special thanks to Mandy Naglich, Anna Burke, and Alison Morgenstern.

]]>
full214WNYC Studiosno Earlier this year we launched our Out at Work project, looking to explore the complicated stories that come with being queer on the job. We asked you to share your own experiences, and nearly 3,000 of you wrote in. Here's what we found: More than half ofWNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#30: This Awful Side of Me http://www.wnycstudios.org/story/nancy-podcast-lewis-wallace/<p>You don't <em>accept</em> it or you don't <em>understand</em> it?</p> <ul> <li><span><a href="https://www.lewispants.com/"><span>Lewis Wallace</span></a></span> is a <a href="https://www.scalawagmagazine.org/">magazine editor</a> and radio producer in North Carolina.</li> <li><span><a href="https://twitter.com/liza_yeager?lang=en"><span>Liza Yeager</span></a></span> is a senior at Brown University, where she co-founded <a href="http://www.nowherethis.org/"><span>Now Here This</span></a>.</li> </ul> <div class="embedded-image"><img class="mcePuppyImage" src="https://media2.wnyc.org/i/640/443/l/80/1/sarahlewisgrandcanyon_QgVJJ1n.jpg" alt=""> <div class="image-metadata"> <div class="image-caption">A young Lewis Wallace with his grandparents, Mac and Sarah McCrory.</div> <div class="image-credit">(Courtesy of Lewis Wallace)</div> </div> </div> <div class="embedded-image"><img class="mcePuppyImage" src="https://media2.wnyc.org/i/800/600/l/80/1/sarahhospital.JPG" alt=""> <div class="image-metadata"> <div class="image-caption">Sarah Graydon McCrory is Lewis Wallace's grandmother. She lives in South Carolina.</div> <div class="image-credit">(Lewis Wallace)</div> </div> </div> <p>Episode scoring by Jeremy Bloom with additional music by Anamorphic Orchestra (<a href="http://freemusicarchive.org/search/?quicksearch=anamorphic+orchestra">"Signs of Life"</a>).</p> <p><em>Support our work! Become a Nancy member today at </em><a href="https://pledge3.wnyc.org/donate/nancy-it/onestep/?utm_source=wnyc&amp;utm_medium=nancy-redirect&amp;utm_campaign=pledge&amp;utm_content=show-notes"><span><em>Nancypodcast.org/donate</em></span></a><em>.</em></p> Sun, 22 Oct 2017 12:00:00 -0400http://www.wnyc.org/story/nancy-podcast-lewis-wallace/familylgbtmusicracereligion_faithstorytellingtransgender#30: This Awful Side of Me 25:45You don't accept it or you don't understand it?

Lewis Wallace is a magazine editor and radio producer in North Carolina. Liza Yeager is a senior at Brown University, where she co-founded Now Here This. Episode scoring by Jeremy Bloom with additional music by Anamorphic Orchestra ("Signs of Life").

Support our work! Become a Nancy member today at Nancypodcast.org/donate.

]]>
This Awful Side of MeYou don't accept it or you don't understand it?

Lewis Wallace is a magazine editor and radio producer in North Carolina. Liza Yeager is a senior at Brown University, where she co-founded Now Here This. Episode scoring by Jeremy Bloom with additional music by Anamorphic Orchestra ("Signs of Life").

Support our work! Become a Nancy member today at Nancypodcast.org/donate.

]]>
full213WNYC Studiosno You don't accept it or you don't understand it? Lewis Wallace is a magazine editor and radio producer in North Carolina. Liza Yeager is a senior at Brown University, where she co-founded Now Here This. A young Lewis Wallace with his grandparents, Mac andWNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#29: Absence Of http://www.wnycstudios.org/story/nancy-podcast-asexuality/<p>You don't know what you don't know.</p> <ul> <li><a href="https://twitter.com/jorcru?lang=en&amp;ref_src=twsrc%5Eappleosx%7Ctwcamp%5Esafari%7Ctwgr%5Esearch">Jordan Crucchiola</a> is an associate editor at Vulture, where this spring she wrote <a href="http://www.vulture.com/2017/03/riverdale-jughead-asexual-defense.html">"An Asexual's Defense of Jughead Kissing Betty on Riverdale."</a></li> <li>Ben Schwartz is a LARP writer at <a href="https://www.wayfinderexperience.com/staff-area/">the Wayfinder Experience</a>.</li> </ul> <p>Episode scoring by Jeremy Bloom with additional music by Drake Stafford (<a href="http://freemusicarchive.org/music/Drake_Stafford/Drake_Stafford_-_Singles/In_Heaven_-_Drake_Stafford">"In Heaven"</a>), Age of Escapism (<a href="http://freemusicarchive.org/music/Artofescapism/Promise_of_Time_Upbeat_Themes/Done_with_Disco">"Done With Disco"</a> and <a href="http://freemusicarchive.org/music/Artofescapism/Promise_of_Time_Upbeat_Themes/Stop_to_Start_Over">"Start Over"</a>), Kai Engel (<a href="http://freemusicarchive.org/music/Kai_Engel/Caeli/Kai_Engel_-_caeli_-_06_daedalus_1543">"Daedalus"</a> and <a href="http://freemusicarchive.org/music/Kai_Engel/The_Scope/Kai_Engel_-_The_Scope_-_08_Low_Horizon">"Low Horizon"</a>), and Ultra Cat (<a href="http://freemusicarchive.org/music/ultracat/disco_high/ultracat_-_01_-_disco_high">"Disco High"</a>).</p> <p><em>Support our work! Become a Nancy member today at <a href="https://pledge3.wnyc.org/donate/nancy-it/onestep/?utm_source=wnyc&amp;utm_medium=nancy-redirect&amp;utm_campaign=pledge&amp;utm_content=show-notes" target="_blank" title="Pledge">Nancypodcast.org/donate</a>.</em></p> Sun, 15 Oct 2017 12:00:00 -0400http://www.wnyc.org/story/nancy-podcast-asexuality/artsasexualitycomedyexplicitfirst-person_storylgbtlifesexualitystorytellingtelevision#29: Absence Of 28:58yesYou don't know what you don't know.

Jordan Crucchiola is an associate editor at Vulture, where this spring she wrote "An Asexual's Defense of Jughead Kissing Betty on Riverdale."

Ben Schwartz is a LARP writer at the Wayfinder Experience.

Episode scoring by Jeremy Bloom with additional music by Drake Stafford ("In Heaven"), Age of Escapism ("Done With Disco" and "Start Over"), Kai Engel ("Daedalus" and "Low Horizon"), and Ultra Cat ("Disco High").

Support our work! Become a Nancy member today at Nancypodcast.org/donate.

]]>
Absence OfYou don't know what you don't know.

Jordan Crucchiola is an associate editor at Vulture, where this spring she wrote "An Asexual's Defense of Jughead Kissing Betty on Riverdale."

Ben Schwartz is a LARP writer at the Wayfinder Experience.

Episode scoring by Jeremy Bloom with additional music by Drake Stafford ("In Heaven"), Age of Escapism ("Done With Disco" and "Start Over"), Kai Engel ("Daedalus" and "Low Horizon"), and Ultra Cat ("Disco High").

Support our work! Become a Nancy member today at Nancypodcast.org/donate.

]]>
full212WNYC Studios You don't know what you don't know. Jordan Crucchiola is an associate editor at Vulture, where this spring she wrote "An Asexual's Defense of Jughead Kissing Betty on Riverdale." Ben Schwartz is a LARP writer at the Wayfinder Experience. Episode scoring WNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#28: Tegan & Sara & Abby & Josh http://www.wnycstudios.org/story/nancy-podcast-tegan-sara/<p>Sibling relationships can be tricky.</p> <ul> <li><a href="http://teganandsara.com">Tegan &amp; Sara</a> are about to hit the road for <a href="http://teganandsara.com/shows/">"The Con X: Tour,"</a> which marks the 10th anniversary of their breakout album.</li> <li>Abby Holtzman is a radio producer working now at WAMU and NPR's <a href="http://biglisten.org">The Big Listen</a>. Her brother Josh is in his first year at Oberlin College. They only look like twins.</li> </ul> <div class="embedded-image"><img class="mcePuppyImage" src="https://media2.wnyc.org/i/720/1280/l/80/1/abbyjosh4.JPG" alt=""> <div class="image-metadata"> <div class="image-caption">Abby and Josh Holtzman are not twins.</div> <div class="image-credit">(Abby Holtzman)</div> </div> </div> <p>Episode scoring by Jeremy Bloom with additional music by Andy Cohen (<a href="http://freemusicarchive.org/music/Andy_G_Cohen/MUL__DIV_1198/Andy_G_Cohen_-_MULDIV_-_04_-_A_Perceptible_Shift">"A Perceptible Shift"</a>) and Juanitos (<a href="http://freemusicarchive.org/music/Juanitos/Soul_Africa/11_-_Mondo_Wack">"Mondo Wack"</a>).</p> <p><em>Support our work! Become a Nancy member today at <a href="https://pledge3.wnyc.org/donate/nancy-it/onestep/?utm_source=wnyc&amp;utm_medium=nancy-redirect&amp;utm_campaign=pledge&amp;utm_content=show-notes" target="_blank" title="Pledge">Nancypodcast.org/donate</a>.</em></p> Sun, 08 Oct 2017 12:00:00 -0400http://www.wnyc.org/story/nancy-podcast-tegan-sara/explicitlesbianlgbtmusicqueer#28: Tegan & Sara & Abby & Josh 17:52yesSibling relationships can be tricky.

Tegan & Sara are about to hit the road for "The Con X: Tour," which marks the 10th anniversary of their breakout album.

Abby Holtzman is a radio producer working now at WAMU and NPR's The Big Listen. Her brother Josh is in his first year at Oberlin College. They only look like twins.

Episode scoring by Jeremy Bloom with additional music by Andy Cohen ("A Perceptible Shift") and Juanitos ("Mondo Wack").

Support our work! Become a Nancy member today at Nancypodcast.org/donate.

]]>
Tegan & Sara & Abby & JoshSibling relationships can be tricky.

Tegan & Sara are about to hit the road for "The Con X: Tour," which marks the 10th anniversary of their breakout album.

Abby Holtzman is a radio producer working now at WAMU and NPR's The Big Listen. Her brother Josh is in his first year at Oberlin College. They only look like twins.

Episode scoring by Jeremy Bloom with additional music by Andy Cohen ("A Perceptible Shift") and Juanitos ("Mondo Wack").

Support our work! Become a Nancy member today at Nancypodcast.org/donate.

]]>
full211WNYC Studios Sibling relationships can be tricky. Tegan &amp; Sara are about to hit the road for "The Con X: Tour," which marks the 10th anniversary of their breakout album. Abby Holtzman is a radio producer working now at WAMU and NPR's The Big Listen. Her brother JWNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#27: Oliver Sipple http://www.wnycstudios.org/story/nancy-podcast-radiolab-oliver-sipple/<p>On Sept. 22, 1975, Oliver Sipple went for a walk. The rest is history.</p> <ul> <li><a href="http://www.radiolab.org/people/latif-nasser/">Latif Nasser</a> is the director of research at Radiolab.</li> <li><a href="http://www.wnyc.org/people/tracie-hunte/">Tracie Hunte</a> is a reporter at Radiolab.</li> </ul> <p><em>Support our work! Become a Nancy member today at <a href="https://pledge3.wnyc.org/donate/nancy-it/onestep/?utm_source=wnyc&amp;utm_medium=nancy-redirect&amp;utm_campaign=pledge&amp;utm_content=show-notes" target="_blank" title="Pledge">Nancypodcast.org/donate</a>.</em></p> Tue, 03 Oct 2017 12:00:00 -0400http://www.wnyc.org/story/nancy-podcast-radiolab-oliver-sipple/first_amendmentgaygerald_fordlifepresidentprivacyrights#27: Oliver Sipple 65:32On Sept. 22, 1975, Oliver Sipple went for a walk. The rest is history.

Latif Nasser is the director of research at Radiolab. Tracie Hunte is a reporter at Radiolab.

Support our work! Become a Nancy member today at Nancypodcast.org/donate.

]]>
Oliver SippleOn Sept. 22, 1975, Oliver Sipple went for a walk. The rest is history.

Latif Nasser is the director of research at Radiolab. Tracie Hunte is a reporter at Radiolab.

Support our work! Become a Nancy member today at Nancypodcast.org/donate.

]]>
full210WNYC Studiosno On Sept. 22, 1975, Oliver Sipple went for a walk. The rest is history. Latif Nasser is the director of research at Radiolab. Tracie Hunte is a reporter at Radiolab. Support our work! Become a Nancy member today at Nancypodcast.org/donate. WNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#26: Different in Two Ways http://www.wnycstudios.org/story/nancy-podcast-ryan-haddad/<p>Ryan Haddad is a writer and actor with a one-man show about hooking up, dating, and intimacy. He also has cerebral palsy. Please don't call him inspirational.</p> <ul> <li><a href="http://www.ryanjhaddad.com/">Ryan Haddad</a> is a New York-based writer and performer. His one-man show is called <a href="http://www.ryanjhaddad.com/hi-are-you-single/">"Hi, Are You Single?"</a></li> <li>This week's episode was recorded live at the <a href="http://nowhearthisfest.com/">Now Hear This</a> podcast festival.</li> </ul> <div class="embedded-image"><img class="mcePuppyImage" src="https://media2.wnyc.org/i/800/556/l/80/1/NHT_Day2_web-119.jpg" alt=""> <div class="image-metadata"> <div class="image-caption">Tobin and Kathy talk with Ryan Haddad at the Now Hear This podcast festival</div> <div class="image-credit">(<a href="http://www.nowhearthisfest.com/">Now Hear This</a>)</div> </div> </div> <p>Episode scoring by Jeremy Bloom with additional engineering by Matt Boynton. Additional music by Kevin MacLeod (<a href="http://freemusicarchive.org/music/Kevin_MacLeod/Blues_Sampler/Slow_Burn">"Slow Burn"</a>) and Anamorphic Orchestra (<a href="http://freemusicarchive.org/music/Anamorphic_Orchestra/Anamorphic_Orchestra/Radiant_Flux">"Radiant Flux"</a>). Special thanks to Chris Bannon, John DeLore, Chris Hartnett, and the entire Now Hear This team.</p> <p><em>Support our work! Become a Nancy member today at <a href="https://pledge3.wnyc.org/donate/nancy-it/onestep/?utm_source=wnyc&amp;utm_medium=nancy-redirect&amp;utm_campaign=pledge&amp;utm_content=show-notes" target="_blank" title="Pledge">Nancypodcast.org/donate</a>.</em></p> Sun, 01 Oct 2017 12:00:00 -0400http://www.wnyc.org/story/nancy-podcast-ryan-haddad/artscerebral_palsydisabilitiesdramaexplicitgaylgbtlivepodcastsexstorytellingtheater#26: Different in Two Ways 19:03yesRyan Haddad is a writer and actor with a one-man show about hooking up, dating, and intimacy. He also has cerebral palsy. Please don't call him inspirational.

Ryan Haddad  is a New York-based writer and performer. His one-man show is called "Hi, Are You Single?"

This week's episode was recorded live at the Now Hear This podcast festival.

Episode scoring by Jeremy Bloom with additional engineering by Matt Boynton. Additional music by Kevin MacLeod ("Slow Burn") and Anamorphic Orchestra ("Radiant Flux"). Special thanks to Chris Bannon, John DeLore, Chris Hartnett, and the entire Now Hear This team.

Support our work! Become a Nancy member today at Nancypodcast.org/donate.

]]>
Different in Two WaysRyan Haddad is a writer and actor with a one-man show about hooking up, dating, and intimacy. He also has cerebral palsy. Please don't call him inspirational.

Ryan Haddad  is a New York-based writer and performer. His one-man show is called "Hi, Are You Single?"

This week's episode was recorded live at the Now Hear This podcast festival.

Episode scoring by Jeremy Bloom with additional engineering by Matt Boynton. Additional music by Kevin MacLeod ("Slow Burn") and Anamorphic Orchestra ("Radiant Flux"). Special thanks to Chris Bannon, John DeLore, Chris Hartnett, and the entire Now Hear This team.

Support our work! Become a Nancy member today at Nancypodcast.org/donate.

]]>
full29WNYC Studios Ryan Haddad is a writer and actor with a one-man show about hooking up, dating, and intimacy. He also has cerebral palsy. Please don't call him inspirational. Ryan Haddad is a New York-based writer and performer. His one-man show is called "Hi, Are You SWNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#25: Will and Grace Are Back! (But Should They Be?) http://www.wnycstudios.org/story/nancy-podcast-will-and-grace-reboot/<p>The world's changed since the groundbreaking sitcom went off the air. Eleven years later, does Will &amp; Grace still have something to say?</p> <ul> <li><a href="https://twitter.com/e_alexjung">Alex Jung</a> is a staff writer at <a href="http://www.vulture.com/">Vulture</a>, where he covers entertainment and culture.</li> <li><a href="https://www.nbc.com/will-and-grace">New episodes</a> of Will &amp; Grace air Thursdays on NBC starting Sept. 28. You can watch episodes from the series' original run on <a href="https://www.hulu.com/will--grace-original">Hulu</a>.</li> </ul> <p>[Hello. Kathy sneaking onto the show page to say that DEBRA MESSING SHOULD BE THE ONE TO PLAY LUCILLE BALL IN AARON SORKIN'S BIOPIC. No shade to Cate Blanchett, she's very good. BUT DEBRA! #JUSTICEFORDEBRA]</p> <p><em>Support our work! Become a Nancy member today at <a href="https://pledge3.wnyc.org/donate/nancy-it/onestep/?utm_source=wnyc&amp;utm_medium=nancy-redirect&amp;utm_campaign=pledge&amp;utm_content=show-notes" target="_blank" title="Pledge">Nancypodcast.org/donate</a>.</em></p> <p><div class="user-embedded-video"><div id="videoplayer_idm14011859026238421f2ebaa-6581-4a49-b47c-e9e0bf728183"><iframe width="620" height="349" src="https://www.youtube.com/embed/tkGn3l8wdG4?wmode=transparent&amp;autohide=1&amp;rel=0&amp;showinfo=0&amp;feature=oembed&amp;enablejsapi=1" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen="allowfullscreen" id="a7977602121436774011" class="youtube_video" mozallowfullscreen="mozallowfullscreen" webkitallowfullscreen="webkitallowfullscreen" data-original-url="https://youtu.be/tkGn3l8wdG4"></iframe></div></div>  </p> Thu, 28 Sep 2017 12:00:00 -0400http://www.wnyc.org/story/nancy-podcast-will-and-grace-reboot/artscomedyexplicitgayinterviewlgbtnbcsitcomstelevisionwill_and_grace#25: Will and Grace Are Back! (But Should They Be?) 19:17yesThe world's changed since the groundbreaking sitcom went off the air. Eleven years later, does Will & Grace still have something to say?

Alex Jung is a staff writer at Vulture, where he covers entertainment and culture.

New episodes of Will & Grace air Thursdays on NBC starting Sept. 28. You can watch episodes from the series' original run on Hulu.

Support our work! Become a Nancy member today at Nancypodcast.org/donate.

]]>
Will and Grace Are Back! (But Should They Be?)The world's changed since the groundbreaking sitcom went off the air. Eleven years later, does Will & Grace still have something to say?

Alex Jung is a staff writer at Vulture, where he covers entertainment and culture.

New episodes of Will & Grace air Thursdays on NBC starting Sept. 28. You can watch episodes from the series' original run on Hulu.

Support our work! Become a Nancy member today at Nancypodcast.org/donate.

]]>
full28WNYC Studios The world's changed since the groundbreaking sitcom went off the air. Eleven years later, does Will &amp; Grace still have something to say? Alex Jung is a staff writer at Vulture, where he covers entertainment and culture. New episodes of Will &amp; GraWNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#24: Somewhat Out http://www.wnycstudios.org/story/nancy-podcast-chirlane-mccray/<p>It's easy to feel invisible.</p> <ul> <li>Chirlane McCray, New York City's first lady, spoke to us about the new <a href="http://www1.nyc.gov/office-of-the-mayor/unity-project.page">NYC Unity Project</a>. Her 1979 essay in <a href="http://www.essence.com/">Essence</a> is called <a href="https://www.scribd.com/doc/115665122/I-am-a-Lesbian-by-Chirlane-McCray-Essence-Magazine-September-1979">"I Am A Lesbian."</a></li> <li><a href="https://twitter.com/mr_bellis">Rich Bellis</a> is an associate editor at <a href="https://www.fastcompany.com/">Fast Company</a>, where he covers the intersection of LGBT issues, business, and leadership.</li> <li>Join our <a href="https://project.wnyc.org/nancy/out-at-work/">"Out at Work"</a> project by taking our quick survey.</li> </ul> <p>Episode scoring by Jeremy Bloom with additional mixing help from Matt Boynton.</p> <p><em>Support our work! Become a Nancy member today at <a href="https://pledge3.wnyc.org/donate/nancy-it/onestep/?utm_source=wnyc&amp;utm_medium=nancy-redirect&amp;utm_campaign=pledge&amp;utm_content=show-notes" target="_blank" title="Pledge">Nancypodcast.org/donate</a>.</em></p> Sun, 24 Sep 2017 12:00:00 -0400http://www.wnyc.org/story/nancy-podcast-chirlane-mccray/chirlane_mccrayemploymentgracie_mansionlgbtlgbt_youthlocal_wnycnew_york_citynewyorkcitywork#24: Somewhat Out 24:38Chirlane McCray, New York City's first lady, spoke to us about the new NYC Unity Project. Her 1979 essay in Essence is called "I Am A Lesbian." 

Rich Bellis is an associate editor at Fast Company, where he covers the intersection of LGBT issues, business, and leadership.

Join our "Out at Work" project by taking our quick survey.

Episode scoring by Jeremy Bloom with additional mixing help from Matt Boynton.

Support our work! Become a Nancy member today at Nancypodcast.org/donate.

]]>
Somewhat OutChirlane McCray, New York City's first lady, spoke to us about the new NYC Unity Project. Her 1979 essay in Essence is called "I Am A Lesbian." 

Rich Bellis is an associate editor at Fast Company, where he covers the intersection of LGBT issues, business, and leadership.

Join our "Out at Work" project by taking our quick survey.

Episode scoring by Jeremy Bloom with additional mixing help from Matt Boynton.

Support our work! Become a Nancy member today at Nancypodcast.org/donate.

]]>
full27WNYC Studiosno It's easy to feel invisible. Chirlane McCray, New York City's first lady, spoke to us about the new NYC Unity Project. Her 1979 essay in Essence is called "I Am A Lesbian." Rich Bellis is an associate editor at Fast Company, where he covers the intersectWNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#23: I See You, I Love You http://www.wnycstudios.org/story/nancy-podcast-gaby-dunn-allison-raskin-vivek-shraya/<p>If you don't see something, say something.</p> <ul> <li><a href="https://twitter.com/gabydunn">Gaby Dunn</a> and <a href="https://twitter.com/AllisonRaskin">Allison Raskin</a> produce a YouTube series called <a href="https://www.youtube.com/user/justbetweenusshow/">Just Between Us</a>. They have a new YA book called <a href="https://www.amazon.com/Hate-Everyone-But-You-Novel/dp/125012932X">"I Hate Everyone But You."</a></li> <li><a href="http://vivekshraya.com">Vivek Shraya</a> is the author of <a href="https://www.amazon.com/Boy-Bindi-Vivek-Shraya/dp/1551526689">"The Boy and the Bindi,"</a> a children's book illustrated by Rajni Perera. (Here's <a href="https://ccbc.education.wisc.edu/books/pcstats.asp">the research she cites</a> about diversity in books for kids.)</li> <li>Join our <a href="http://www.nancypodcast.org/work">"Out At Work"</a> project. <a href="https://wnyc.typeform.com/to/u2hVIf?browser_id=2aeeec5fe48dab53">Take our quick survey</a> to tell us about your experience being queer at work.</li> </ul> <p><em>Special thanks to Daniel Guillemette.</em></p> <div class="embedded-image"><img class="mcePuppyImage" src="https://media2.wnyc.org/i/800/581/l/80/1/bindi.jpg" alt=""> <div class="image-metadata"> <div class="image-caption">"The Boy and the Bindi" is a children's book by Vivek Shraya.</div> <div class="image-credit">(Illustration by Rajni Perera.)</div> </div> </div> <p><span>Support our work! Become a Nancy member today at </span><a href="https://pledge3.wnyc.org/donate/nancy-it/onestep/?utm_source=wnyc&amp;utm_medium=nancy-redirect&amp;utm_campaign=pledge&amp;utm_content=show-notes" target="_blank" title="Pledge">Nancypodcast.org/donate</a><span>.</span></p> Sun, 17 Sep 2017 12:00:00 -0400http://www.wnyc.org/story/nancy-podcast-gaby-dunn-allison-raskin-vivek-shraya/bisexualcanadachildren's literature [lc]comedycultureexplicitfriendshipgaylgbtlifequeertransgenderyoutube#23: I See You, I Love You 23:16yesIf you don't see something, say something.

Gaby Dunn and Allison Raskin produce a YouTube series called Just Between Us. They have a new YA book called "I Hate Everyone But You." Vivek Shraya is the author of "The Boy and the Bindi," a children's book illustrated by Rajni Perera. (Here's the research she cites about diversity in books for kids.)

Special thanks to Daniel Guillemette.

Join our "Out At Work" project. Take our quick survey to tell us about your experience being queer at work.

Support our work! Become a Nancy member today at Nancypodcast.org/donate.

]]>
I See You, I Love YouIf you don't see something, say something.

Gaby Dunn and Allison Raskin produce a YouTube series called Just Between Us. They have a new YA book called "I Hate Everyone But You." Vivek Shraya is the author of "The Boy and the Bindi," a children's book illustrated by Rajni Perera. (Here's the research she cites about diversity in books for kids.)

Special thanks to Daniel Guillemette.

Join our "Out At Work" project. Take our quick survey to tell us about your experience being queer at work.

Support our work! Become a Nancy member today at Nancypodcast.org/donate.

]]>
full26WNYC Studios If you don't see something, say something. Gaby Dunn and Allison Raskin produce a YouTube series called Just Between Us. They have a new YA book called "I Hate Everyone But You." Vivek Shraya is the author of "The Boy and the Bindi," a children's book ilWNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#22: Does Your Boss Know You're Gay? http://www.wnycstudios.org/story/nancy-podcast-out-at-work-lgbt-employment/<p>Twenty-eight states lack employment protections for LGBT people. And what federal protections do exist are under new attack.</p> <ul> <li>This episode is part of our <a href="http://www.nancypodcast.com/work">Out at Work</a> series. <a href="https://wnyc.typeform.com/to/u2hVIf?browser_id=2aeeec5fe48dab53">Take our quick survey</a> to tell us about your experience being queer at work.</li> <li>Find out what protections you have with <a href="https://www.lambdalegal.org/states-regions/in-your-state">this state-by-state guide</a> from Lambda Legal.</li> <li><a href="https://twitter.com/mjs_DC">Mark Joseph Stern</a> covers law and LGBTQ issues for Slate.</li> </ul> <blockquote class="twitter-video" data-lang="en"> <p dir="ltr" lang="en">We want to hear your experience—difficult, funny, embarrassing, surprising—about how you're out (or not) at work. <a href="https://t.co/g03CVLoCAm">https://t.co/g03CVLoCAm</a> <a href="https://t.co/l56De2d6am">pic.twitter.com/l56De2d6am</a></p> — Nancy Podcast (@NancyPodcast) <a href="https://twitter.com/NancyPodcast/status/905052909108215808">September 5, 2017</a></blockquote> <script src="http://platform.twitter.com/widgets.js"></script> <p>Episode scoring by Jeremy Bloom with additional music by Podington Bear (<a href="http://freemusicarchive.org/music/Podington_Bear/Uplifting/Lightfeet">"Lightfeet"</a>), Arne Bang Huseby (<a href="http://freemusicarchive.org/music/Arne_Bang_Huseby/~/Arne_Huseby_-__Stormy_Blues">"Stormy Blues"</a>), and Anamorphic Orchestra (<a href="http://freemusicarchive.org/music/Anamorphic_Orchestra/20170730112627958/Radiant_Flux">"Radiant Flux"</a>).</p> <p><span>Support our work. Become a Nancy member today at </span><a href="https://pledge3.wnyc.org/donate/nancy-it/onestep/?utm_source=wnyc&amp;utm_medium=nancy-redirect&amp;utm_campaign=pledge&amp;utm_content=show-notes" target="_blank" title="Pledge">Nancypodcast.org/donate</a><span>.</span></p> Sun, 10 Sep 2017 12:00:00 -0400http://www.wnyc.org/story/nancy-podcast-out-at-work-lgbt-employment/employmentexplicitgaylawlesbianlgbtlifenational_newsnewsstorytellingsupreme_courtwork#22: Does Your Boss Know You're Gay? 23:05yesTwenty-eight states lack employment protections for LGBT people. And what federal protections do exist are under new attack.

This episode is part of our Out at Work series. Take our quick survey to tell us about your experience being queer at work. Find out what protections you have with this state-by-state guide from Lambda Legal.

Mark Joseph Stern covers law and LGBTQ issues for Slate.

Episode scoring by Jeremy Bloom with additional music by Podington Bear ("Lightfeet"), Arne Bang Huseby ("Stormy Blues"), and Anamorphic Orchestra ("Radiant Flux").

Support our work. Become a Nancy member today at Nancypodcast.org/donate.

]]>
Does Your Boss Know You're GayTwenty-eight states lack employment protections for LGBT people. And what federal protections do exist are under new attack.

This episode is part of our Out at Work series. Take our quick survey to tell us about your experience being queer at work. Find out what protections you have with this state-by-state guide from Lambda Legal.

Mark Joseph Stern covers law and LGBTQ issues for Slate.

Episode scoring by Jeremy Bloom with additional music by Podington Bear ("Lightfeet"), Arne Bang Huseby ("Stormy Blues"), and Anamorphic Orchestra ("Radiant Flux").

Support our work. Become a Nancy member today at Nancypodcast.org/donate.

]]>
full25WNYC Studios Twenty-eight states lack employment protections for LGBT people. And what federal protections do exist are under new attack. This episode is part of our Out at Work series. Take our quick survey to tell us about your experience being queer at work. Find WNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#21: Multiple Lesbians in Any Scenario http://www.wnycstudios.org/story/nancy-podcast-l-word/<p>The L Word is a soap opera, and maybe not even a particularly good one at that. But it's also essential viewing for queer women.</p> <ul> <li><a href="https://www.cameronesposito.com/">Cameron Esposito</a> is an actor, comedian, and producer.</li> <li><a href="http://www.wnycstudios.org/twitter.com/onlysarahshahi">Sarah Shahi</a>, <a href="http://www.wnycstudios.org/twitter.com/Erincdu">Erin Daniels</a>, and <a href="http://www.wnycstudios.org/twitter.com/msmiakirshner">Mia Kirshner</a> played Carmen, Dana, and Jenny on The L Word. <a href="https://twitter.com/ilenechaiken?lang=en">Ilene Chaiken</a> was the show's co-creator and executive producer.</li> <li>Special thanks to Cassie Sercia and Autostraddle's Riese Bernard.</li> </ul> <p>Episode scoring by Jeremy Bloom with additional music by Kai Engel (<a href="http://freemusicarchive.org/music/Kai_Engel/The_Run/Kai_Engel_-_The_Run_-_01_Seeker">"Seeker"</a>) and Lawrence Grey (<a href="http://freemusicarchive.org/music/Lawrence_Grey/Bonus_Beat_Blast_2011/48_lawrence_grey-the_st_marks_shake">"The St Marks Shake"</a>).</p> <p><span>Support our work. Become a Nancy member today at </span><a href="https://pledge3.wnyc.org/donate/nancy-it/onestep/?utm_source=wnyc&amp;utm_medium=nancy-redirect&amp;utm_campaign=pledge&amp;utm_content=show-notes" target="_blank" title="Pledge">Nancypodcast.org/donate</a><span>. </span></p> <p><span><div class="user-embedded-video"><div id="videoplayer_idm140118590262384aecc5c30-b35b-464f-a01e-78b981f1495a"><iframe width="465" height="349" src="https://www.youtube.com/embed/dWcaOs8dgF0?wmode=transparent&amp;autohide=1&amp;rel=0&amp;showinfo=0&amp;feature=oembed&amp;enablejsapi=1" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen="allowfullscreen" id="a-4972909456002488612" class="youtube_video" mozallowfullscreen="mozallowfullscreen" webkitallowfullscreen="webkitallowfullscreen" data-original-url="https://youtu.be/dWcaOs8dgF0"></iframe></div></div> </span></p> Sun, 03 Sep 2017 12:00:00 -0400http://www.wnyc.org/story/nancy-podcast-l-word/cultureentertainmentexplicitlesbianlgbtqueerstorytellingtelevision#21: Multiple Lesbians in Any Scenario 19:27yesThe L Word is a soap opera, and maybe not even a particularly good one at that. But it's also essential viewing for queer women.

Cameron Esposito is an actor, comedian, and producer. Sarah ShahiErin Daniels, and Mia Kirshner played Carmen, Dana, and Jenny on The L Word. Ilene Chaiken was the show's co-creator and executive producer.Special thanks to Cassie Sercia and Autostraddle's Riese Bernard.

Episode scoring by Jeremy Bloom with additional music by Kai Engel ("Seeker") and Lawrence Grey ("The St Marks Shake").

Support our work. Become a Nancy member today at Nancypodcast.org/donate.

]]>
Multiple Lesbians in Any ScenarioThe L Word is a soap opera, and maybe not even a particularly good one at that. But it's also essential viewing for queer women.

Cameron Esposito is an actor, comedian, and producer. Sarah ShahiErin Daniels, and Mia Kirshner played Carmen, Dana, and Jenny on The L Word. Ilene Chaiken was the show's co-creator and executive producer.Special thanks to Cassie Sercia and Autostraddle's Riese Bernard.

Episode scoring by Jeremy Bloom with additional music by Kai Engel ("Seeker") and Lawrence Grey ("The St Marks Shake").

Support our work. Become a Nancy member today at Nancypodcast.org/donate.

]]>
full24WNYC Studios The L Word is a soap opera, and maybe not even a particularly good one at that. But it's also essential viewing for queer women. Cameron Esposito is an actor, comedian, and producer. Sarah Shahi, Erin Daniels, and Mia Kirshner played Carmen, Dana, and JeWNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#20: My Brother and Me http://www.wnycstudios.org/story/nancy-podcast-nore-davis-transgender-brother-patti-harrison/<p>Nore Davis tells jokes about his brother, Khalil, being transgender. But they've never really just sat down to talk about it. Plus: Patti Harrison responds to the president.</p> <ul> <li><a href="https://www.noredavis.com/">Nore Davis</a> is a comedian. You can listen to his albums <a href="https://open.spotify.com/album/37lXk4pMZZ6pTmNO9LHRL0">Home Game</a> and <a href="https://open.spotify.com/album/4h40cLT5VSd8Z32KdmRlzZ">Away Game</a> on Spotify. Khalil Davis runs a website promoting financial literacy within the transgender community called <a href="https://thetranscapitalist.com">The Trans Capitalist</a>.</li> <li><a href="https://www.pattiharrisonswebsite.website">Patti Harrison</a> is a comedian who made <a href="https://www.youtube.com/watch?v=RLTAcsewIQw">her network debut on The Tonight Show</a>, where she criticized Donald Trump's proposed ban on transgender people serving in the military.</li> </ul> <p><span><div class="user-embedded-video"><div id="videoplayer_idm140118572056064d79dafcf-df60-48e9-a7a0-8bc312d5a54c"><iframe width="620" height="349" src="https://www.youtube.com/embed/RLTAcsewIQw?wmode=transparent&amp;autohide=1&amp;rel=0&amp;showinfo=0&amp;feature=oembed&amp;enablejsapi=1" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen="allowfullscreen" id="a-8228905627495456320" class="youtube_video" mozallowfullscreen="mozallowfullscreen" webkitallowfullscreen="webkitallowfullscreen" data-original-url="https://www.youtube.com/watch?v=RLTAcsewIQw"></iframe></div></div></span></p> <p><span>Episode scoring by Jeremy Bloom and Isaac Jones. Additional music by Drake Stafford (<a href="http://freemusicarchive.org/music/Drake_Stafford/SUNDAY/CASETS_-_DRAKE_STAFFORD">"Casets"</a>), Benedek (<a href="http://freemusicarchive.org/music/Benedek/Bonus_Beat_Blast_2011/10_benedek-cruzin">"Cruzin"</a>), and Broke For Free (<a href="http://freemusicarchive.org/music/Broke_For_Free/Slam_Funk/Broke_For_Free_-_Slam_Funk_-_09_Drop_of_Water_In_the_Ocean">"Drop of Water in the Ocean"</a>).</span></p> <p><span>Support our work. Become a Nancy member today at </span><a href="https://pledge3.wnyc.org/donate/nancy-it/onestep/?utm_source=wnyc&amp;utm_medium=nancy-redirect&amp;utm_campaign=pledge&amp;utm_content=show-notes" target="_blank" title="Pledge">Nancypodcast.org/donate</a><span>.  </span></p> Sun, 27 Aug 2017 12:00:00 -0400http://www.wnyc.org/story/nancy-podcast-nore-davis-transgender-brother-patti-harrison/comedyexplicitstorytellingtransgendertransgender_ban#20: My Brother and Me 29:11yesNore Davis tells jokes about his brother, Khalil, being transgender. But they've never really just sat down to talk about it. Plus: Patti Harrison responds to the president.

Nore Davis is a comedian. You can listen to his albums Home Game and Away Game on Spotify. Khalil Davis runs a website promoting financial literacy within the transgender community called The Trans Capitalist.

Patti Harrison is a comedian who made her network debut on The Tonight Show, where she criticized Donald Trump's proposed ban on transgender people serving in the military.

Episode scoring by Jeremy Bloom and Isaac Jones. Additional music by Drake Stafford ("Casets"), Benedek ("Cruzin"), and Broke For Free ("Drop of Water in the Ocean").

Support our work. Become a Nancy member today at Nancypodcast.org/donate.  

]]>
My Brother and MeNore Davis tells jokes about his brother, Khalil, being transgender. But they've never really just sat down to talk about it. Plus: Patti Harrison responds to the president.

Nore Davis is a comedian. You can listen to his albums Home Game and Away Game on Spotify. Khalil Davis runs a website promoting financial literacy within the transgender community called The Trans Capitalist.

Patti Harrison is a comedian who made her network debut on The Tonight Show, where she criticized Donald Trump's proposed ban on transgender people serving in the military.

Episode scoring by Jeremy Bloom and Isaac Jones. Additional music by Drake Stafford ("Casets"), Benedek ("Cruzin"), and Broke For Free ("Drop of Water in the Ocean").

Support our work. Become a Nancy member today at Nancypodcast.org/donate.  

]]>
full23WNYC Studios Nore Davis tells jokes about his brother, Khalil, being transgender. But they've never really just sat down to talk about it. Plus: Patti Harrison responds to the president. Nore Davis is a comedian. You can listen to his albums Home Game and Away Game oWNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#19: The Pentagon's Secret Gaggle of Gays http://www.wnycstudios.org/story/nancy-podcast-pentagon-pride/<p>Even after "Don't Ask, Don't Tell" was repealed, the military wasn't an easy place to be out.</p> <ul> <li><a href="https://twitter.com/audreyqq">Audrey Quinn</a>, a WNYC health reporter, reported and produced this story.</li> <li>Special thanks to Alex Wagner, Tarak Shah, Todd Breasseale, and Sue Fulton.</li> <li>All season we'll be reporting stories about being out at work. Tell us yours at <a href="http://nancypodcast.org/work">nancypodcast.org/work</a>.</li> </ul> <p>Episode scoring by Jeremy Bloom and Isaac Jones with additional music by Andy G. Cohen (<a href="http://freemusicarchive.org/music/Andy_G_Cohen/MUL__DIV_1198/Andy_G_Cohen_-_MULDIV_-_04_-_A_Perceptible_Shift">"A Perceptible Shift"</a>), Kevin MacLeod (<a href="http://freemusicarchive.org/music/Kevin_MacLeod/Jazz_Sampler/Dances_and_Dames_1428">"Dances and Dames,"</a> <a href="http://freemusicarchive.org/music/Kevin_MacLeod/Jazz_Sampler/Faster_Does_It_1271">"Faster Does It,"</a> and <a href="http://freemusicarchive.org/music/Kevin_MacLeod/Jazz_Sampler/I_Knew_a_Guy">"I Knew a Guy"</a>), Anamorphic Orchestra (<a href="http://freemusicarchive.org/music/Anamorphic_Orchestra/20170730112627958/Creature_Comforts">"Creature Comforts"</a> and <a href="http://freemusicarchive.org/music/Anamorphic_Orchestra/20170730112627958/Taking_Dark_Matter_Lightly">"Taking Dark Matter Lightly"</a>), the U.S. Army Band (<a href="http://www.usarmyband.com/watch-listen/ceremonial-music-guide.html">"To The Color"</a>), and the U.S. Army Old Guard Fife &amp; Drum Corps (<a href="http://freemusicarchive.org/music/The_United_States_Army_Old_Guard_Fife_and_Drum_Corps/Celebrating_50_Years">"Soldier's Farewell"</a>).</p> <p>Support our work. Become a Nancy member today at <a href="https://pledge3.wnyc.org/donate/nancy-it/onestep/?utm_source=wnyc&amp;utm_medium=nancy-redirect&amp;utm_campaign=pledge&amp;utm_content=show-notes" target="_blank" title="Pledge">Nancypodcast.org/donate</a>.    </p> Tue, 22 Aug 2017 12:00:00 -0400http://www.wnyc.org/story/nancy-podcast-pentagon-pride/dont_ask_dont_tellexplicitlgbtmilitarynational_newspridestorytelling#19: The Pentagon's Secret Gaggle of Gays 23:19yesEven after "Don't Ask, Don't Tell" was repealed, the military wasn't an easy place to be out.

Audrey Quinn, a WNYC health reporter, reported and produced this story. Special thanks to Alex Wagner, Tarak Shah, Todd Breasseale, and Sue Fulton. All season we'll be reporting stories about being out at work. Tell us yours at nancypodcast.org/work.

Episode scoring by Jeremy Bloom and Isaac Jones with additional music by Andy G. Cohen ("A Perceptible Shift"), Kevin MacLeod ("Dances and Dames," "Faster Does It," and "I Knew a Guy"), Anamorphic Orchestra ("Creature Comforts" and "Taking Dark Matter Lightly"), the U.S. Army Band ("To The Color"), and the U.S. Army Old Guard Fife & Drum Corps ("Soldier's Farewell").

Support our work. Become a Nancy member today at Nancypodcast.org/donate.    

]]>
The Pentagon's Secret Gaggle of GaysEven after "Don't Ask, Don't Tell" was repealed, the military wasn't an easy place to be out.

Audrey Quinn, a WNYC health reporter, reported and produced this story. Special thanks to Alex Wagner, Tarak Shah, Todd Breasseale, and Sue Fulton. All season we'll be reporting stories about being out at work. Tell us yours at nancypodcast.org/work.

Episode scoring by Jeremy Bloom and Isaac Jones with additional music by Andy G. Cohen ("A Perceptible Shift"), Kevin MacLeod ("Dances and Dames," "Faster Does It," and "I Knew a Guy"), Anamorphic Orchestra ("Creature Comforts" and "Taking Dark Matter Lightly"), the U.S. Army Band ("To The Color"), and the U.S. Army Old Guard Fife & Drum Corps ("Soldier's Farewell").

Support our work. Become a Nancy member today at Nancypodcast.org/donate.    

]]>
full22WNYC Studios Even after "Don't Ask, Don't Tell" was repealed, the military wasn't an easy place to be out. Audrey Quinn, a WNYC health reporter, reported and produced this story. Special thanks to Alex Wagner, Tarak Shah, Todd Breasseale, and Sue Fulton. All season wWNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#18: The Swimsuit Issue http://www.wnycstudios.org/story/nancy-podcast-swimsuit-body/<p>Thanks for the invite, but Tobin's going to skip your pool party.</p> <ul> <li><a href="https://twitter.com/sabritree?lang=en">Sabri Ben-Achour</a> is a senior reporter for <a href="https://www.marketplace.org/">Marketplace</a>.</li> <li><a href="https://twitter.com/_jamestgreen">James T. Green</a> is a producer for <a href="https://gimletmedia.com/the-nod/">The Nod</a>.</li> <li><a href="https://www.beyourownbabe.com/">Babetown</a> hosts pop-up events for queer women.</li> </ul> <p>Episode scoring by Jeremy Bloom and Isaac Jones with additional music by Joey Pecoraro (<a href="https://soundcloud.com/joeypecoraro/sour-sweets">"Sour Sweets"</a>) and Gangi (<a href="http://freemusicarchive.org/music/Gangi/Bonus_Beat_Blast_2011/22_gangi-proton_beat">"Proton Beat"</a>).</p> <p>Support our work. Become a Nancy member today at <a href="https://pledge3.wnyc.org/donate/nancy-it/onestep/?utm_source=wnyc&amp;utm_medium=nancy-redirect&amp;utm_campaign=pledge&amp;utm_content=show-notes" target="_blank" title="Pledge">Nancypodcast.org/donate</a>.</p> <div class="embedded-image"><img class="mcePuppyImage" src="https://media2.wnyc.org/i/800/800/l/80/1/tobinjames2.jpeg" alt=""> <div class="image-metadata">Tobin and James recording at New York's Riis Beach.<br> <div class="image-credit">(Photo by Tobin Low.)</div> </div> </div> <p> </p> Sun, 20 Aug 2017 12:00:00 -0400http://www.wnyc.org/story/nancy-podcast-swimsuit-body/bodyexplicithealthlgbtstorytellingsummer#18: The Swimsuit Issue 25:54yesThanks for the invite, but Tobin's going to skip your pool party.

Sabri Ben-Achour is a senior reporter for MarketplaceJames T. Green is a producer for The NodBabetown hosts pop-up events for queer women.

Episode scoring by Jeremy Bloom and Isaac Jones with additional music by Joey Pecoraro ("Sour Sweets") and Gangi ("Proton Beat").

Support our work. Become a Nancy member today at Nancypodcast.org/donate.

]]>
The Swimsuit IssueThanks for the invite, but Tobin's going to skip your pool party.

Sabri Ben-Achour is a senior reporter for MarketplaceJames T. Green is a producer for The NodBabetown hosts pop-up events for queer women.

Episode scoring by Jeremy Bloom and Isaac Jones with additional music by Joey Pecoraro ("Sour Sweets") and Gangi ("Proton Beat").

Support our work. Become a Nancy member today at Nancypodcast.org/donate.

]]>
full21WNYC Studios Thanks for the invite, but Tobin's going to skip your pool party. Sabri Ben-Achour is a senior reporter for Marketplace. James T. Green is a producer for The Nod. Babetown hosts pop-up events for queer women. Episode scoring by Jeremy Bloom and Isaac JonWNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
Nancy's Back http://www.wnycstudios.org/story/nancy-podcast-season-2-trailer/<p>Your friendly neighborhood LGBTQ podcast is back for season 2. Kathy’s dating, Tobin’s at the beach, and just to make sure this trailer lands up high in the search results: What time is the solar eclipse? New episodes starting Sunday, Aug. 20!</p> Thu, 17 Aug 2017 12:00:00 -0400http://www.wnyc.org/story/nancy-podcast-season-2-trailer/explicitgaylesbianlgbtpodcastqueersolar_eclipsestorytellingNancy's Back 2:08yesYour friendly neighborhood LGBTQ podcast is back for season 2. Kathy’s dating, Tobin’s at the beach, and just to make sure this trailer lands up high in the search results: What time is the solar eclipse? New episodes starting Sunday, Aug. 20!

]]>
Nancy's BackYour friendly neighborhood LGBTQ podcast is back for season 2. Kathy’s dating, Tobin’s at the beach, and just to make sure this trailer lands up high in the search results: What time is the solar eclipse? New episodes starting Sunday, Aug. 20!

]]>
trailer2WNYC Studios Your friendly neighborhood LGBTQ podcast is back for season 2. Kathy’s dating, Tobin’s at the beach, and just to make sure this trailer lands up high in the search results: What time is the solar eclipse? New episodes starting Sunday, Aug. 20! WNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#17: RuPaul Wants Naked People and Big, Fat Asses http://www.wnycstudios.org/story/nancy-podcast-ru-paul-a-piece-of-work/<p>RuPaul navigates performance art with Broad City's Abbi Jacobson in the new WNYC Studios and MoMA podcast A Piece of Work.</p> <p><em>Nancy returns for season two in August. Subscribe to <a href="http://www.wnyc.org/shows/pieceofwork/">A Piece of Work</a> wherever you get your podcasts.</em></p> <p><em> Support our work. Become a Nancy member today at <a href="https://pledge3.wnyc.org/donate/nancy-it/onestep/?utm_source=wnyc&amp;utm_medium=nancy-redirect&amp;utm_campaign=pledge&amp;utm_content=show-notes" target="_blank" title="Pledge">Nancypodcast.org/donate</a>.    </em></p> <p> </p> <p> </p> Sun, 30 Jul 2017 12:00:00 -0400http://www.wnyc.org/story/nancy-podcast-ru-paul-a-piece-of-work/artsexplicitlgbtstorytelling#17: RuPaul Wants Naked People and Big, Fat Asses 29:05yesRuPaul navigates performance art with Broad City's Abbi Jacobson in the new WNYC Studios and MoMA podcast A Piece of Work.

Nancy returns for season two in August. Subscribe to A Piece of Work wherever you get your podcasts.

Support our work. Become a Nancy member today at Nancypodcast.org/donate.

]]>
RuPaul Wants Naked People and Big, Fat AssesRuPaul navigates performance art with Broad City's Abbi Jacobson in the new WNYC Studios and MoMA podcast A Piece of Work.

Nancy returns for season two in August. Subscribe to A Piece of Work wherever you get your podcasts.

Support our work. Become a Nancy member today at Nancypodcast.org/donate.

]]>
full117WNYC Studios RuPaul navigates performance art with Broad City's Abbi Jacobson in the new WNYC Studios and MoMA podcast A Piece of Work. Nancy returns for season two in August. Subscribe to A Piece of Work wherever you get your podcasts. Support our work. Become a NanWNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#16: Let's Talk About Trump's Trans Ban http://www.wnycstudios.org/story/nancy-podcast-trans-military-ban/<p>An estimated 15,000 trans people currently serve in the U.S. military. We spoke with <a href="https://www.buzzfeed.com/jessruliffson/what-it-feels-like-being-a-trans-person-serving-in-the-armed?utm_term=.prQ8GjVaOk#.cwRbpAvEl6">Jordan Blisk</a>, a former senior airman in the U.S. Air Force Reserves, about why he wanted to serve to begin with, and how it transformed his life for the better.</p> <p><em><a href="https://www.buzzfeed.com/jessruliffson/what-it-feels-like-being-a-trans-person-serving-in-the-armed?utm_term=.ppM6y9MQXL#.cd8VQokgj3">Here's BuzzFeed's comic about Jordan's experience being trans in the military.</a><br></em></p> <p><em><a href="http://nypublicradio.us5.list-manage1.com/subscribe?u=4109fdd323aaac7078eadaa8f&amp;id=40c06aed91" target="_blank" class="external-link">Sign up for our newsletter</a> and follow Nancy on <a href="https://www.facebook.com/nancypodcast/" target="_blank" class="external-link">Facebook</a> and <a href="https://twitter.com/nancypodcast" target="_blank" class="external-link">Twitter</a>. Nancy is a production of <a href="http://wnycstudios.wnyc.org/" target="_blank" class="external-link">WNYC Studios</a>.</em><em>  </em></p> Thu, 27 Jul 2017 12:00:00 -0400http://www.wnyc.org/story/nancy-podcast-trans-military-ban/lgbtmilitarynational_newstransgender#16: Let's Talk About Trump's Trans Ban 8:08An estimated 15,000 trans people currently serve in the U.S. military. We spoke with Jordan Blisk, a former senior airman in the U.S. Air Force Reserves, about why he wanted to serve to begin with, and how it transformed his life for the better.

Sign up for our newsletter and follow Nancy on Facebook and Twitter. Nancy is a production of WNYC Studios.

Support our work. Become a Nancy member today atNancypodcast.org/donate.    

]]>
Let's Talk About Trump's Trans BanAn estimated 15,000 trans people currently serve in the U.S. military. We spoke with Jordan Blisk, a former senior airman in the U.S. Air Force Reserves, about why he wanted to serve to begin with, and how it transformed his life for the better.

Sign up for our newsletter and follow Nancy on Facebook and Twitter. Nancy is a production of WNYC Studios.

Support our work. Become a Nancy member today atNancypodcast.org/donate.    

]]>
full116WNYC Studiosno An estimated 15,000 trans people currently serve in the U.S. military. We spoke with Jordan Blisk, a former senior airman in the U.S. Air Force Reserves, about why he wanted to serve to begin with, and how it transformed his life for the better. Here's BWNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#15: Q is Growing Up http://www.wnycstudios.org/story/nancy-podcast-transgender-child/<p>Q Daily is an 11-year-old trans boy. With puberty looming, he and his family have big decisions to make.</p> <p>Yasmeen Khan is a reporter covering education and youth for the WNYC Newsroom. Her stories were mixed by Wayne Shulmister.</p> <p><a href="http://nypublicradio.us5.list-manage1.com/subscribe?u=4109fdd323aaac7078eadaa8f&amp;id=40c06aed91" target="_blank" class="external-link">Sign up for our newsletter</a> and follow Nancy on <a href="https://www.facebook.com/nancypodcast/" target="_blank" class="external-link">Facebook</a> and <a href="https://twitter.com/nancypodcast" target="_blank" class="external-link">Twitter</a>. Nancy is a production of <a href="http://wnycstudios.wnyc.org/" target="_blank" class="external-link">WNYC Studios</a>.</p> <p><em>Support our work. Become a Nancy member today at <a href="https://pledge3.wnyc.org/donate/nancy-it/onestep/?utm_source=wnyc&amp;utm_medium=nancy-redirect&amp;utm_campaign=pledge&amp;utm_content=show-notes" target="_blank" title="Pledge">Nancypodcast.org/donate</a>.    </em></p> Sun, 16 Jul 2017 12:00:00 -0400http://www.wnyc.org/story/nancy-podcast-transgender-child/educationlgbtlocal_wnycnewstransgender#15: Q is Growing Up 16:48Q Daily is an 11-year-old trans boy. With puberty looming, he and his family have big decisions to make.

Yasmeen Khan is a reporter covering education and youth for the WNYC Newsroom. Her stories were mixed by Wayne Shulmister.

Sign up for our newsletter and follow Nancy on Facebook and Twitter. Nancy is a production of WNYC Studios.

Support our work. Become a Nancy member today at Nancypodcast.org/donate.    

]]>
Q is Growing UpQ Daily is an 11-year-old trans boy. With puberty looming, he and his family have big decisions to make.

Yasmeen Khan is a reporter covering education and youth for the WNYC Newsroom. Her stories were mixed by Wayne Shulmister.

Sign up for our newsletter and follow Nancy on Facebook and Twitter. Nancy is a production of WNYC Studios.

Support our work. Become a Nancy member today at Nancypodcast.org/donate.    

]]>
full115WNYC Studiosno Q Daily is an 11-year-old trans boy. With puberty looming, he and his family have big decisions to make. Yasmeen Khan is a reporter covering education and youth for the WNYC Newsroom. Her stories were mixed by Wayne Shulmister. Sign up for our newsletterWNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#14: Kathy Goes to Camp http://www.wnycstudios.org/story/nancy-podcast-kathy-goes-to-queer-camp/<p>Maybe don't overthink this one.</p> <ul> <li><a href="http://a-camp.org/">A-Camp</a> is an annual summer camp for queer women organized by the website <a href="https://autostraddle.com/">Autostraddle</a>.</li> </ul> <p>Episode scoring by Jeremy Bloom with guitar performance by Hannis Brown. <a href="http://nypublicradio.us5.list-manage1.com/subscribe?u=4109fdd323aaac7078eadaa8f&amp;id=40c06aed91" target="_blank" class="external-link">Sign up for our newsletter</a> and follow Nancy on <a href="https://www.facebook.com/nancypodcast/" target="_blank" class="external-link">Facebook</a> and <a href="https://twitter.com/nancypodcast" target="_blank" class="external-link">Twitter</a>. Nancy is a production of <a href="http://wnycstudios.wnyc.org/" target="_blank" class="external-link">WNYC Studios</a>.</p> <p><em> Support our work. Become a Nancy member today at <a href="https://pledge3.wnyc.org/donate/nancy-it/onestep/?utm_source=wnyc&amp;utm_medium=nancy-redirect&amp;utm_campaign=pledge&amp;utm_content=show-notes" target="_blank" title="Pledge">Nancypodcast.org/donate</a>.    </em></p> Sun, 25 Jun 2017 12:00:00 -0400http://www.wnyc.org/story/nancy-podcast-kathy-goes-to-queer-camp/campemotionalexplicitlgbtlifestorytellingsummer#14: Kathy Goes to Camp 26:10yesMaybe don't overthink this one.

— A-Camp is an annual summer camp for queer women organized by the website Autostraddle.

Episode scoring by Jeremy Bloom with guitar performance by Hannis Brown. Sign up for our newsletter and follow Nancy on Facebook and Twitter. Nancy is a production of WNYC Studios.

Support our work. Become a Nancy member today at Nancypodcast.org/donate.  

]]>
Kathy Goes to CampMaybe don't overthink this one.

— A-Camp is an annual summer camp for queer women organized by the website Autostraddle.

Episode scoring by Jeremy Bloom with guitar performance by Hannis Brown. Sign up for our newsletter and follow Nancy on Facebook and Twitter. Nancy is a production of WNYC Studios.

Support our work. Become a Nancy member today at Nancypodcast.org/donate.  

]]>
full114WNYC Studios Maybe don't overthink this one. A-Camp is an annual summer camp for queer women organized by the website Autostraddle. Episode scoring by Jeremy Bloom with guitar performance by Hannis Brown. Sign up for our newsletter and follow Nancy on Facebook and TwWNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#13: It's Really You http://www.wnycstudios.org/story/nancy-podcast-gavin-grimm-alaska-drag/<p>Sometimes when you speak up, the world answers. </p> <ul> <li>Gavin Grimm is a transgender rights activist suing his school district in federal court. <a href="https://broadly.vice.com/en_us/article/meet-trans-civil-rights-hero-gavin-grimmand-the-pastor-who-calls-him-a-girl">The Vice documentary excerpted in this episode</a> was reported by Diana Tourjee for Broadly. <a href="https://www.bankstreet.edu/school-children/">Bank Street School for Children</a> is a private progressive school in upper Manhattan.</li> <li><a href="http://alaskathunderfuck.com/">Alaska</a> is an LA-based drag queen and former winner of RuPaul's All Star Drag Race. Zoë Sobel is a radio producer in Unalaska, Alaska.</li> </ul> <p>Scoring by Jeremy Bloom with additional music by Jesse Spillane (<a href="http://freemusicarchive.org/music/Jesse_Spillane/Descent_of_the_Goober_Monster/Jesse_Spillane_-_Descent_of_the_Goober_Monster_-_01_Super_Bubbly">"Super Bubbly"</a>), 1000 Names (<a href="http://freemusicarchive.org/music/1000_Names_1770/Bonus_Beat_Blast_2011/02_1000_names-rio">"Rio"</a>), and Broke for Free (<a href="http://freemusicarchive.org/music/Broke_For_Free/Slam_Funk/Broke_For_Free_-_Slam_Funk_-_03_The_Great">"The Great"</a>). <a href="http://nypublicradio.us5.list-manage1.com/subscribe?u=4109fdd323aaac7078eadaa8f&amp;id=40c06aed91" target="_blank" class="external-link">Sign up for our newsletter</a> and follow Nancy on <a href="https://www.facebook.com/nancypodcast/" target="_blank" class="external-link">Facebook</a> and <a href="https://twitter.com/nancypodcast" target="_blank" class="external-link">Twitter</a>. Nancy is a production of <a href="http://wnycstudios.wnyc.org/" target="_blank" class="external-link">WNYC Studios</a>.</p> <p><em> Support our work. Become a Nancy member today at <a href="https://pledge3.wnyc.org/donate/nancy-it/onestep/?utm_source=wnyc&amp;utm_medium=nancy-redirect&amp;utm_campaign=pledge&amp;utm_content=show-notes" target="_blank" title="Pledge">Nancypodcast.org/donate</a>.</em></p> <div class="embedded-image"><img class="mcePuppyImage" src="https://media.wnyc.org/i/800/600/c/80/1/19238140_423787558005704_4286660895573682692_o.jpg" alt="" width="100%"> <div class="image-metadata"> <div class="image-caption"><span>(Zoë Sobel)</span></div> </div> </div> <div class="embedded-image"><img class="mcePuppyImage" src="https://media.wnyc.org/i/800/535/c/80/1/19250505_423652918019168_510197531469938277_o.jpg" alt="" width="100%"> <div class="image-metadata"> <div class="image-caption"><span>(Zoë Sobel)</span></div> </div> </div> <div class="embedded-image"><img class="mcePuppyImage" src="https://media.wnyc.org/i/800/535/c/80/1/19222862_423654598019000_2641827349111962174_o.jpg" alt="" width="100%"> <div class="image-metadata"> <div class="image-caption"><span>(Zoë Sobel)</span></div> </div> </div> <div class="embedded-image"><img class="mcePuppyImage" src="https://media.wnyc.org/i/800/535/c/80/1/19250535_423654601352333_3539071772095739574_o.jpg" alt="" width="100%"> <div class="image-metadata"> <div class="image-caption"><span>(Zoë Sobel)</span></div> </div> </div> Sun, 18 Jun 2017 12:00:00 -0400http://www.wnyc.org/story/nancy-podcast-gavin-grimm-alaska-drag/drageducationexplicitgavin_grimmlgbtsupreme_courttransgender#13: It's Really You 29:03yesSometimes when you speak up, the world answers.

— Gavin Grimm is a transgender rights activist suing his school district in federal court. The Vice documentary excerpted in this episode was reported by Diana Tourjee for Broadly. Bank Street School for Children is a private progressive school in upper Manhattan.

— Alaska is an LA-based drag queen and former winner of RuPaul's All Star Drag Race. Zoë Sobel is a radio producer in Unalaska, Alaska.

Scoring by Jeremy Bloom with additional music by Jesse Spillane ("Super Bubbly"), 1000 Names ("Rio"), and Broke for Free ("The Great"). Sign up for our newsletter and follow Nancy on Facebook and Twitter. Nancy is a production of WNYC Studios.

Support our work. Become a Nancy member today at Nancypodcast.org/donate.    

]]>
It's Really YouSometimes when you speak up, the world answers.

— Gavin Grimm is a transgender rights activist suing his school district in federal court. The Vice documentary excerpted in this episode was reported by Diana Tourjee for Broadly. Bank Street School for Children is a private progressive school in upper Manhattan.

— Alaska is an LA-based drag queen and former winner of RuPaul's All Star Drag Race. Zoë Sobel is a radio producer in Unalaska, Alaska.

Scoring by Jeremy Bloom with additional music by Jesse Spillane ("Super Bubbly"), 1000 Names ("Rio"), and Broke for Free ("The Great"). Sign up for our newsletter and follow Nancy on Facebook and Twitter. Nancy is a production of WNYC Studios.

Support our work. Become a Nancy member today at Nancypodcast.org/donate.    

]]>
full113WNYC Studios Sometimes when you speak up, the world answers.  Gavin Grimm is a transgender rights activist suing his school district in federal court. The Vice documentary excerpted in this episode was reported by Diana Tourjee for Broadly. Bank Street School for ChiWNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#12: Everything Changed http://www.wnycstudios.org/story/nancy-podcast-orlando-pulse/<p>The shooting at Pulse claimed 49 lives. Orlando hasn’t been the same since. </p> <p><a href="http://nypublicradio.us5.list-manage1.com/subscribe?u=4109fdd323aaac7078eadaa8f&amp;id=40c06aed91" target="_blank" class="external-link">Sign up for our newsletter</a> and follow Nancy on <a href="https://www.facebook.com/nancypodcast/" target="_blank" class="external-link">Facebook</a> and <a href="https://twitter.com/nancypodcast" target="_blank" class="external-link">Twitter</a>. Nancy is a production of <a href="http://wnycstudios.wnyc.org/" target="_blank" class="external-link">WNYC Studios</a>.</p> <p><em> Support our work. Become a Nancy member today at <a href="https://pledge3.wnyc.org/donate/nancy-it/onestep/?utm_source=wnyc&amp;utm_medium=nancy-redirect&amp;utm_campaign=pledge&amp;utm_content=show-notes" target="_blank" title="Pledge">Nancypodcast.org/donate</a>.    </em></p> Sun, 11 Jun 2017 12:00:00 -0400http://www.wnyc.org/story/nancy-podcast-orlando-pulse/emotionallgbtnational_newsnewsorlandopulse_massacrepulse_nightclubpulse_shootingsadstorytelling#12: Everything Changed 29:25The shooting at Pulse claimed 49 lives. Orlando hasn’t been the same since. 

Sign up for our newsletter and follow Nancy on Facebook and Twitter. Nancy is a production of WNYC Studios.

Support our work. Become a Nancy member today at Nancypodcast.org/donate.    

]]>
Everything ChangedThe shooting at Pulse claimed 49 lives. Orlando hasn’t been the same since. 

Sign up for our newsletter and follow Nancy on Facebook and Twitter. Nancy is a production of WNYC Studios.

Support our work. Become a Nancy member today at Nancypodcast.org/donate.    

]]>
full112WNYC Studiosno The shooting at Pulse claimed 49 lives. Orlando hasn’t been the same since.  Sign up for our newsletter and follow Nancy on Facebook and Twitter. Nancy is a production of WNYC Studios. Support our work. Become a Nancy member today at Nancypodcast.org/donWNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#11: You've Told Me This Before http://www.wnycstudios.org/story/nancy-podcast-asia-kate-dillon/<ul> <li>Asia Kate Dillon’s role on “Billions” helped them understand a non-binary gender identity.</li> <li>Tina Healy comes out as trans over and over again. Her daughter Jessica Walton's book is called "Introducing Teddy."</li> </ul> <p>Episode scoring by Jeremy Bloom with additional music by Little Glass Men (<a href="http://freemusicarchive.org/music/Little_Glass_Men/Spontaneous_Album_Sampler/Dream_Blaze">"Dream Blaze"</a>) and Kai Engel (<a href="http://freemusicarchive.org/music/Kai_Engel/Chapter_One__Cold/Kai_Engel_-_Chapter_One_-_Cold_-_04_Snowmen">"Snowmen"</a>). <a href="http://nypublicradio.us5.list-manage1.com/subscribe?u=4109fdd323aaac7078eadaa8f&amp;id=40c06aed91" target="_blank" class="external-link">Sign up for our newsletter</a> and follow Nancy on <a href="https://www.facebook.com/nancypodcast/" target="_blank" class="external-link">Facebook</a> and <a href="https://twitter.com/nancypodcast" target="_blank" class="external-link">Twitter</a>. Nancy is a production of <a href="http://wnycstudios.wnyc.org/" target="_blank" class="external-link">WNYC Studios</a>.</p> <p><em>Support our work. Become a Nancy member today at <a href="https://pledge3.wnyc.org/donate/nancy-it/onestep/?utm_source=wnyc&amp;utm_medium=nancy-redirect&amp;utm_campaign=pledge&amp;utm_content=show-notes" target="_blank" title="Pledge">Nancypodcast.org/donate</a>.</em></p> Sun, 04 Jun 2017 12:00:00 -0400http://www.wnyc.org/story/nancy-podcast-asia-kate-dillon/entertainmentexplicitgenderlgbtlifetransgender#11: You've Told Me This Before 29:31yes— Asia Kate Dillon’s role on “Billions” helped them understand a non-binary gender identity.

— Tina Healy comes out as trans over and over again. Her daughter Jessica Walton's book is called "Introducing Teddy."

Episode scoring by Jeremy Bloom with additional music by Little Glass Men ("Dream Blaze") and Kai Engel ("Snowmen"). Sign up for our newsletter and follow Nancy on Facebook and Twitter. Nancy is a production of WNYC Studios.

Support our work. Become a Nancy member today at Nancypodcast.org/donate.    

]]>
You're Told Me This Before— Asia Kate Dillon’s role on “Billions” helped them understand a non-binary gender identity.

— Tina Healy comes out as trans over and over again. Her daughter Jessica Walton's book is called "Introducing Teddy."

Episode scoring by Jeremy Bloom with additional music by Little Glass Men ("Dream Blaze") and Kai Engel ("Snowmen"). Sign up for our newsletter and follow Nancy on Facebook and Twitter. Nancy is a production of WNYC Studios.

Support our work. Become a Nancy member today at Nancypodcast.org/donate.    

]]>
full111WNYC Studios Asia Kate Dillon’s role on “Billions” helped them understand a non-binary gender identity. Tina Healy comes out as trans over and over again. Her daughter Jessica Walton's book is called "Introducing Teddy." Episode scoring by Jeremy Bloom with additionaWNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#10: Dear Nancy http://www.wnycstudios.org/story/nancy-podcast-mara-wilson-erin-mckeown/<p>We've got mail.</p> <ul> <li><a href="https://twitter.com/MaraWilson">Mara Wilson</a> is a former child actor and the author of "Where Am I Now?: True Stories of Girlhood and Accidental Fame." <a href="http://www.erinmckeown.com/">Erin McKeown</a> is a musician, writer and producer.</li> </ul> <p><a href="http://nypublicradio.us5.list-manage1.com/subscribe?u=4109fdd323aaac7078eadaa8f&amp;id=40c06aed91">Sign up for our newsletter</a> and follow Nancy on <a href="https://www.facebook.com/nancypodcast/" target="_blank" class="external-link">Facebook</a> and <a href="https://twitter.com/nancypodcast" target="_blank" class="external-link">Twitter</a>. Nancy is a production of <a href="http://wnycstudios.wnyc.org/" target="_blank" class="external-link">WNYC Studios</a>.</p> <p>Episode scoring by Jeremy Bloom with additional music by Anamorphic Orchestra (<a href="http://freemusicarchive.org/music/Anamorphic_Orchestra/Anamorphic_Orchestra/Creature_Comforts">"Creature Comforts"</a>), Benedek (<a href="http://freemusicarchive.org/music/Benedek/Bonus_Beat_Blast_2011/10_benedek-cruzin">"Cruzin"</a>), Josh Woodward (<a href="http://freemusicarchive.org/music/Josh_Woodward/Breadcrumbs/JoshWoodward-Breadcrumbs-NoVox-09-OnceTomorrow">"Once Tomorrow"</a>).</p> <p><em> Support our work. Become a Nancy member today at <a href="https://pledge3.wnyc.org/donate/nancy-it/onestep/?utm_source=wnyc&amp;utm_medium=nancy-redirect&amp;utm_campaign=pledge&amp;utm_content=show-notes" target="_blank" title="Pledge">Nancypodcast.org/donate</a>.    </em></p> Sun, 28 May 2017 12:00:00 -0400http://www.wnyc.org/story/nancy-podcast-mara-wilson-erin-mckeown/lgbtlifemusicsexuality#10: Dear Nancy 30:12We've got mail.

Mara Wilson is a former child actor and the author of "Where Am I Now?: True Stories of Girlhood and Accidental Fame." Erin McKeown is a musician, writer and producer.

Sign up for our newsletter and follow Nancy on Facebook and Twitter. Nancy is a production of WNYC Studios.

Episode scoring by Jeremy Bloom with additional music by Anamorphic Orchestra ("Creature Comforts"), Benedek ("Cruzin"), Josh Woodward ("Once Tomorrow").

Support our work. Become a Nancy member today at Nancypodcast.org/donate.    

]]>
Dear NancyWe've got mail.

Mara Wilson is a former child actor and the author of "Where Am I Now?: True Stories of Girlhood and Accidental Fame." Erin McKeown is a musician, writer and producer.

Sign up for our newsletter and follow Nancy on Facebook and Twitter. Nancy is a production of WNYC Studios.

Episode scoring by Jeremy Bloom with additional music by Anamorphic Orchestra ("Creature Comforts"), Benedek ("Cruzin"), Josh Woodward ("Once Tomorrow").

Support our work. Become a Nancy member today at Nancypodcast.org/donate.    

]]>
full110WNYC Studiosno We've got mail. Mara Wilson is a former child actor and the author of "Where Am I Now?: True Stories of Girlhood and Accidental Fame." Erin McKeown is a musician, writer and producer. Sign up for our newsletter and follow Nancy on Facebook and Twitter. NWNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#9: Thank You for Being a Friend http://www.wnycstudios.org/story/nancy-podcast-episode-9-golden-girls/<p>Traveled down the road and back again. Your heart is true, you’re a pal and a confidante. Join us for a trip to Florida, with special guests Rufus Wainwright, Saeed Jones and the ghost of Bea Arthur.</p> <ul> <li><a href="http://rufuswainwright.com/">Rufus Wainwright</a> is a musician.</li> <li><a href="https://www.buzzfeed.com/saeedjones">Saeed Jones</a> is a poet and the executive editor, culture for BuzzFeed.</li> <li><a href="https://samarabreger.com/">Samara Breger</a> and <a href="http://www.wnyc.org/people/kelsey-padgett/">Kelsey Padgett</a> are producers.</li> </ul> <p>Follow Nancy on <a href="https://www.facebook.com/nancypodcast/" target="_blank" class="external-link">Facebook</a> and <a href="https://twitter.com/nancypodcast" target="_blank" class="external-link">Twitter</a> and sign up for our newsletter at <a href="http://www.nancypodcast.org/" target="_blank" class="external-link">nancypodcast.org</a>. Nancy is a production of <a href="http://wnycstudios.wnyc.org/" target="_blank" class="external-link">WNYC Studios</a>.</p> <p>Episode scoring by Jeremy Bloom with additional music by Revolution Void ("<a href="http://freemusicarchive.org/music/Revolution_Void/The_Politics_of_Desire/revolution_void_-_04_-_tree_tenants" target="_blank">Tree Tenants</a>"), Kevin MacLoyd ("<a href="http://freemusicarchive.org/music/Kevin_MacLeod/Best_of_2014_1461/Monkeys_Spinning_Monkeys" target="_blank">Monkeys Spinning Monkeys</a>") and Fabian Measures (<a href="http://freemusicarchive.org/music/Broke_For_Free/Slam_Funk/Broke_For_Free_-_Slam_Funk_-_02_Calm_The_Fuck_Down">"Calm the Fuck Down"</a>).</p> <p><em> Support our work. Become a Nancy member today at <a href="https://pledge3.wnyc.org/donate/nancy-it/onestep/?utm_source=wnyc&amp;utm_medium=nancy-redirect&amp;utm_campaign=pledge&amp;utm_content=show-notes" target="_blank" title="Pledge">Nancypodcast.org/donate</a>.    </em></p> Sun, 21 May 2017 12:00:00 -0400http://www.wnyc.org/story/nancy-podcast-episode-9-golden-girls/explicitgaygay_and_lesbiangolden_girlslifestorytellingtelevisiontv#9: Thank You for Being a Friend 32:17yesTraveled down the road and back again. Your heart is true, you’re a pal and a confidante. Join us for a trip to Florida, with special guests Rufus Wainwright, Saeed Jones and the ghost of Bea Arthur.

— Rufus Wainwright is a musician.

— Saeed Jones is a poet and the executive editor, culture for BuzzFeed.

— Samara Breger and Kelsey Padgett are producers.

Follow Nancy on Facebook and Twitter and sign up for our newsletter at nancypodcast.org. Nancy is a production of WNYC Studios.

Episode scoring by Jeremy Bloom with additional music by Revolution Void ("Tree Tenants"), Kevin MacLoyd ("Monkeys Spinning Monkeys") and Fabian Measures ("Calm the Fuck Down").

Support our work. Become a Nancy member today at Nancypodcast.org/donate.    

]]>
Thank You For Being a FriendTraveled down the road and back again. Your heart is true, you’re a pal and a confidante. Join us for a trip to Florida, with special guests Rufus Wainwright, Saeed Jones and the ghost of Bea Arthur.

— Rufus Wainwright is a musician.

— Saeed Jones is a poet and the executive editor, culture for BuzzFeed.

— Samara Breger and Kelsey Padgett are producers.

Follow Nancy on Facebook and Twitter and sign up for our newsletter at nancypodcast.org. Nancy is a production of WNYC Studios.

Episode scoring by Jeremy Bloom with additional music by Revolution Void ("Tree Tenants"), Kevin MacLoyd ("Monkeys Spinning Monkeys") and Fabian Measures ("Calm the Fuck Down").

Support our work. Become a Nancy member today at Nancypodcast.org/donate.    

]]>
full19WNYC Studios Traveled down the road and back again. Your heart is true, you’re a pal and a confidante. Join us for a trip to Florida, with special guests Rufus Wainwright, Saeed Jones and the ghost of Bea Arthur. Rufus Wainwright is a musician. Saeed Jones is a poet WNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#8: The Coolest Lesbian Ever http://www.wnycstudios.org/story/nancy-podcast-episode-8-lena-waithe/<p>We talk to Lena Waithe, the scene-stealing BFF on Master of None.</p> <p><div class="user-embedded-video"><div id="videoplayer_idm140118586152048ca62d1ae-9d76-46c2-9b39-e864825a44b3"><iframe width="620" height="349" src="https://www.youtube.com/embed/tGE-Mw-Yjsk?wmode=transparent&amp;autohide=1&amp;rel=0&amp;showinfo=0&amp;feature=oembed&amp;enablejsapi=1" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen="allowfullscreen" id="a-7658703091927463735" class="youtube_video" mozallowfullscreen="mozallowfullscreen" webkitallowfullscreen="webkitallowfullscreen" data-original-url="https://www.youtube.com/watch?v=tGE-Mw-Yjsk"></iframe></div></div>  </p> <p><em>Follow Nancy on <a href="https://www.facebook.com/nancypodcast/" target="_blank" class="external-link">Facebook</a> and <a href="https://twitter.com/nancypodcast" target="_blank" class="external-link">Twitter</a> and sign up for our newsletter at <a href="http://www.nancypodcast.org/" target="_blank" class="external-link">nancypodcast.org</a>. Nancy is a production of <a href="http://wnycstudios.wnyc.org/" target="_blank" class="external-link">WNYC Studios</a>.</em></p> <p><em> Support our work. Become a Nancy member today at <a href="https://pledge3.wnyc.org/donate/nancy-it/onestep/?utm_source=wnyc&amp;utm_medium=nancy-redirect&amp;utm_campaign=pledge&amp;utm_content=show-notes" target="_blank" title="Pledge">Nancypodcast.org/donate</a>.    </em></p> Tue, 16 May 2017 12:00:00 -0400http://www.wnyc.org/story/nancy-podcast-episode-8-lena-waithe/artsexplicitlgbtstorytellingtelevision#8: The Coolest Lesbian Ever 13:38yesWe talk to Lena Waithe, the scene-stealing BFF on Master of None.

Follow Nancy on Facebook and Twitter and sign up for our newsletter at nancypodcast.org. Nancy is a production of WNYC Studios.

Support our work. Become a Nancy member today at Nancypodcast.org/donate.    

]]>
The Coolest Lesbian EverWe talk to Lena Waithe, the scene-stealing BFF on Master of None.

Follow Nancy on Facebook and Twitter and sign up for our newsletter at nancypodcast.org. Nancy is a production of WNYC Studios.

Support our work. Become a Nancy member today at Nancypodcast.org/donate.    

]]>
full18WNYC Studios We talk to Lena Waithe, the scene-stealing BFF on Master of None.   Follow Nancy on Facebook and Twitter and sign up for our newsletter at nancypodcast.org. Nancy is a production of WNYC Studios. Support our work. Become a Nancy member today at NancypodcWNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#7: Fear of Being Butch http://www.wnycstudios.org/story/nancy-podcast-episode-6-butch-hair/<p><span>There’s no shame in asking for a ‘90s boy band haircut.</span></p> <ul> <li>Production help from Cathy Wong, Tommy Bazarian, and Rachel Matlow. </li> <li>Khane Kutzwell's barber shop is <a href="http://www.camerareadykutz.com/">Camera Ready Kutz</a>. </li> <li>Thanks to the many people helped produce Kathy's story on being butch: Esther Godoy and Madelaine Imber from <a href="http://butchisnotadirtyword.com/">Butch Is Not A Dirty Word</a>, Rae Tutera from <a href="http://www.bindleandkeep.com/">Bindle &amp; Keep</a>, the women of the <a href="https://www.meetup.com/BFSCLA/">Butch-Femme Social Club of LA</a>, and everyone who talked to Kathy but didn’t make it into the final story: Lillian Faderman, BK Chan, and Aheri Stanford-Asiyo.</li> </ul> <p>Follow Nancy on <a href="https://www.facebook.com/nancypodcast/" target="_blank" class="external-link">Facebook</a> and <a href="https://twitter.com/nancypodcast" target="_blank" class="external-link">Twitter</a> and sign up for our newsletter at <a href="http://www.nancypodcast.org/" target="_blank" class="external-link">nancypodcast.org</a>. Nancy is a production of <a href="http://wnycstudios.wnyc.org/" target="_blank" class="external-link">WNYC Studios</a>. Episode scoring by Jeremy Bloom and Isaac Jones with additional music by Broke for Free (<a href="http://freemusicarchive.org/music/Broke_For_Free/Slam_Funk/Broke_For_Free_-_Slam_Funk_-_02_Calm_The_Fuck_Down">"Calm the Fuck Down"</a>) and James Pants (<a href="http://freemusicarchive.org/search/?sort=track_date_published&amp;d=1&amp;quicksearch=james+pants+bird">"Bird"</a>).</p> <p><em> Support our work. Become a Nancy member today at <a href="https://pledge3.wnyc.org/donate/nancy-it/onestep/?utm_source=wnyc&amp;utm_medium=nancy-redirect&amp;utm_campaign=pledge&amp;utm_content=show-notes" target="_blank" title="Pledge">Nancypodcast.org/donate</a>.    </em></p> Sun, 14 May 2017 12:00:00 -0400http://www.wnyc.org/story/nancy-podcast-episode-6-butch-hair/brooklynemotionalexplicitfunnyhair_cutlgbtlifestorytelling#7: Fear of Being Butch 23:57yesThere’s no shame in asking for a ‘90s boy band haircut.

— Production help from Cathy Wong, Tommy Bazarian, and Rachel Matlow. 

— Khane Kutzwell's barber shop is Camera Ready Kutz

— Thanks to the many people helped produce Kathy's story on being butch: Esther Godoy and Madelaine Imber from Butch Is Not A Dirty Word, Rae Tutera from Bindle & Keep, the women of the Butch-Femme Social Club of LA, and everyone who talked to Kathy but didn’t make it into the final story: Lillian Faderman, BK Chan, and Aheri Stanford-Asiyo.

Follow Nancy on Facebook and Twitter and sign up for our newsletter at nancypodcast.org. Nancy is a production of WNYC Studios. Episode scoring by Jeremy Bloom and Isaac Jones with additional music by Broke for Free ("Calm the Fuck Down") and James Pants ("Bird").

Support our work. Become a Nancy member today at Nancypodcast.org/donate.    

]]>
Fear of Being ButchThere’s no shame in asking for a ‘90s boy band haircut.

— Production help from Cathy Wong, Tommy Bazarian, and Rachel Matlow. 

— Khane Kutzwell's barber shop is Camera Ready Kutz

— Thanks to the many people helped produce Kathy's story on being butch: Esther Godoy and Madelaine Imber from Butch Is Not A Dirty Word, Rae Tutera from Bindle & Keep, the women of the Butch-Femme Social Club of LA, and everyone who talked to Kathy but didn’t make it into the final story: Lillian Faderman, BK Chan, and Aheri Stanford-Asiyo.

Follow Nancy on Facebook and Twitter and sign up for our newsletter at nancypodcast.org. Nancy is a production of WNYC Studios. Episode scoring by Jeremy Bloom and Isaac Jones with additional music by Broke for Free ("Calm the Fuck Down") and James Pants ("Bird").

Support our work. Become a Nancy member today at Nancypodcast.org/donate.    

]]>
full17WNYC Studios There’s no shame in asking for a ‘90s boy band haircut. Production help from Cathy Wong, Tommy Bazarian, and Rachel Matlow.  Khane Kutzwell's barber shop is Camera Ready Kutz.  Thanks to the many people helped produce Kathy's story on being butch: EstherWNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#6: Here's What It's Like http://www.wnycstudios.org/story/nancy-podcast-episode-6-hiv-generations/<p><span>David and Dominique have something in common.</span></p> <p>Special thanks to Krishna Stone at <a href="http://www.gmhc.org/">Gay Men's Health Crisis</a>, an HIV/AIDS prevention, care, and advocacy organization in New York. Episode scoring by Jeremy Bloom.</p> <p>Follow Nancy on <a href="https://www.facebook.com/nancypodcast/" target="_blank" class="external-link">Facebook</a> and <a href="https://twitter.com/nancypodcast" target="_blank" class="external-link">Twitter</a> and sign up for our newsletter at <a href="http://www.nancypodcast.org/" target="_blank" class="external-link">nancypodcast.org</a>. Nancy is a production of <a href="http://wnycstudios.wnyc.org/" target="_blank" class="external-link">WNYC Studios</a>.</p> <p><span><em> Support our work. Become a Nancy member today at <a href="https://pledge3.wnyc.org/donate/nancy-it/onestep/?utm_source=wnyc&amp;utm_medium=nancy-redirect&amp;utm_campaign=pledge&amp;utm_content=show-notes" target="_blank" title="Pledge">Nancypodcast.org/donate</a>.    </em></span></p> Sun, 07 May 2017 12:00:00 -0400http://www.wnyc.org/story/nancy-podcast-episode-6-hiv-generations/explicitfirst-person_storyhivhiv_aidsinterviewlifelong_formstorytelling#6: Here's What It's Like 27:31yesDavid and Dominique have something in common.

Special thanks to Krishna Stone at Gay Men's Health Crisis, an HIV/AIDS prevention, care, and advocacy organization in New York. Episode scoring by Jeremy Bloom.

Follow Nancy on Facebook and Twitter and sign up for our newsletter at nancypodcast.org. Nancy is a production of WNYC Studios.

Support our work. Become a Nancy member today at Nancypodcast.org/donate.    

]]>
Here's What It's LikeDavid and Dominique have something in common.

Special thanks to Krishna Stone at Gay Men's Health Crisis, an HIV/AIDS prevention, care, and advocacy organization in New York. Episode scoring by Jeremy Bloom.

Follow Nancy on Facebook and Twitter and sign up for our newsletter at nancypodcast.org. Nancy is a production of WNYC Studios.

Support our work. Become a Nancy member today at Nancypodcast.org/donate.    

]]>
full16WNYC Studios David and Dominique have something in common. Special thanks to Krishna Stone at Gay Men's Health Crisis, an HIV/AIDS prevention, care, and advocacy organization in New York. Episode scoring by Jeremy Bloom. Follow Nancy on Facebook and Twitter and sign WNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#5: There Are No Gay Wizards http://www.wnycstudios.org/story/nancy-podcast-episode-5-harry-potter-gay-dumbledore/<p>Albus Dumbledore isn't gay, no matter what J.K. Rowling says. But that doesn't mean the "Harry Potter" books aren't incredibly queer.</p> <ul> <li>Matt Collette is the producer of Nancy.</li> <li><a href="http://comedianpatbrown.com/">Pat Brown</a> is a New York-based comedian. Her album is called Sex Tape.</li> </ul> <p>Episode scoring by Jeremy Bloom and Isaac Jones. Additional music by Lawrence Grey (<a href="http://freemusicarchive.org/music/Lawrence_Grey/Bonus_Beat_Blast_2011/48_lawrence_grey-the_st_marks_shake">"The St. Marks Shake"</a>).</p> <p>Follow Nancy on <a href="https://www.facebook.com/nancypodcast/" target="_blank" class="external-link">Facebook</a> and <a href="https://twitter.com/nancypodcast" target="_blank" class="external-link">Twitter</a> and sign up for our newsletter at <a href="http://www.nancypodcast.org/" target="_blank" class="external-link">nancypodcast.org</a>. Nancy is a production of <a href="http://wnycstudios.wnyc.org/" target="_blank" class="external-link">WNYC Studios</a>.</p> <p><em><em> Support our work. Become a Nancy member today at <a href="https://pledge3.wnyc.org/donate/nancy-it/onestep/?utm_source=wnyc&amp;utm_medium=nancy-redirect&amp;utm_campaign=pledge&amp;utm_content=show-notes" target="_blank" title="Pledge">Nancypodcast.org/donate</a>.    </em></em></p> Sun, 30 Apr 2017 12:00:00 -0400http://www.wnyc.org/story/nancy-podcast-episode-5-harry-potter-gay-dumbledore/bookscomedyexplicitgay_and_lesbianharry_potterhealthlgbtliteraturesexuality#5: There Are No Gay Wizards 29:40yesAlbus Dumbledore isn't gay, no matter what J.K. Rowling says. But that doesn't mean the "Harry Potter" books aren't incredibly queer.

— Matt Collette is the producer of Nancy.

— Pat Brown is a New York-based comedian. Her album is called Sex Tape.

Episode scoring by Jeremy Bloom and Isaac Jones. Additional music by Lawrence Grey ("The St. Marks Shake").

Follow Nancy on Facebook and Twitter and sign up for our newsletter at nancypodcast.org. Nancy is a production of WNYC Studios.

Support our work. Become a Nancy member today at Nancypodcast.org/donate.    

]]>
There Are No Gay WizardsAlbus Dumbledore isn't gay, no matter what J.K. Rowling says. But that doesn't mean the "Harry Potter" books aren't incredibly queer.

— Matt Collette is the producer of Nancy.

— Pat Brown is a New York-based comedian. Her album is called Sex Tape.

Episode scoring by Jeremy Bloom and Isaac Jones. Additional music by Lawrence Grey ("The St. Marks Shake").

Follow Nancy on Facebook and Twitter and sign up for our newsletter at nancypodcast.org. Nancy is a production of WNYC Studios.

Support our work. Become a Nancy member today at Nancypodcast.org/donate.    

]]>
full15WNYC Studios Albus Dumbledore isn't gay, no matter what J.K. Rowling says. But that doesn't mean the "Harry Potter" books aren't incredibly queer. Matt Collette is the producer of Nancy. Pat Brown is a New York-based comedian. Her album is called Sex Tape. Episode scWNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#4: The Elephant in the Room http://www.wnycstudios.org/story/nancy-podcast-episode-4-gay-republicans/<p>Gay Republicans say they’ve got Trump on speed dial. Is he picking up the phone?</p> <ul> <li>This episode is a co-production with <a href="https://www.buzzfeed.com/news">BuzzFeed News</a>.</li> <li><a href="https://www.buzzfeed.com/dominicholden">Dominic Holden</a> is the site’s national LGBT reporter.</li> </ul> <p>Follow Nancy on <a href="https://www.facebook.com/nancypodcast/">Facebook</a> and <a href="https://twitter.com/nancypodcast">Twitter</a> and sign up for our newsletter at <a href="http://www.nancypodcast.org/">nancypodcast.org</a>. Nancy is a production of <a href="http://wnycstudios.wnyc.org/">WNYC Studios</a>. Additional music by Tate Peterson (<a href="http://freemusicarchive.org/music/Tate_Peterson/Blues_Guitar/Ragtime">"Ragtime"</a> and <a href="http://freemusicarchive.org/music/Tate_Peterson/Blues_Guitar/Mid_Day_Blues">"Mid Day Blues"</a>), UltraCat (<a href="http://freemusicarchive.org/music/ultracat/disco_high/ultracat_-_01_-_disco_high">"Disco High"</a>) and James Pants (<a href="http://freemusicarchive.org/music/james_pants/bonus_beat_blast_2011/34_james_pants-cha_cha_demo">"Cha Cha Demo"</a>).</p> <p><em> Support our work. Become a Nancy member today at <a href="https://pledge3.wnyc.org/donate/nancy-it/onestep/?utm_source=wnyc&amp;utm_medium=nancy-redirect&amp;utm_campaign=pledge&amp;utm_content=show-notes" target="_blank" title="Pledge">Nancypodcast.org/donate</a>.    </em></p> Sun, 23 Apr 2017 12:00:00 -0400http://www.wnyc.org/story/nancy-podcast-episode-4-gay-republicans/gaylgbtnewspoliticsstorytellingtransgender#4: The Elephant in the Room 35:06Gay Republicans say they’ve got Trump on speed dial. Is he picking up the phone?

— This episode is a co-production with BuzzFeed News.

— Dominic Holden is the site’s national LGBT reporter.

Follow Nancy on Facebook and Twitter and sign up for our newsletter at nancypodcast.org. Nancy is a production of WNYC Studios. Additional music by Tate Peterson ("Ragtime" and "Mid Day Blues"), UltraCat ("Disco High") and James Pants ("Cha Cha Demo").

Support our work. Become a Nancy member today at Nancypodcast.org/donate.    

]]>
The Elephant in the RoomGay Republicans say they’ve got Trump on speed dial. Is he picking up the phone?

— This episode is a co-production with BuzzFeed News.

— Dominic Holden is the site’s national LGBT reporter.

Follow Nancy on Facebook and Twitter and sign up for our newsletter at nancypodcast.org. Nancy is a production of WNYC Studios. Additional music by Tate Peterson ("Ragtime" and "Mid Day Blues"), UltraCat ("Disco High") and James Pants ("Cha Cha Demo").

Support our work. Become a Nancy member today at Nancypodcast.org/donate.    

]]>
full14WNYC Studiosno Gay Republicans say they’ve got Trump on speed dial. Is he picking up the phone? This episode is a co-production with BuzzFeed News. Dominic Holden is the site’s national LGBT reporter. Follow Nancy on Facebook and Twitter and sign up for our newsletter WNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#3: I Had No Idea http://www.wnycstudios.org/story/nancy-podcast-episode-3-i-had-no-idea/<p>We were in a relationship?</p> <ul> <li><a href="http://www.peteralexanderbresnan.com/">Peter Bresnan</a><a href="http://www.shakina.nyc/"> is a radio producer in New York.</a></li> <li><a href="http://www.shakina.nyc/">Shakina Nayfack</a> was accompanied by pianist and composer <a href="http://mtf.nyc/people/julianne-wick-davis/">Julianne Wick Davis</a>.</li> </ul> <p>Follow Nancy on <a href="https://www.facebook.com/nancypodcast/" target="_blank" class="external-link">Facebook</a> and <a href="https://twitter.com/nancypodcast" target="_blank" class="external-link">Twitter</a> and sign up for our newsletter at <a href="http://www.nancypodcast.org/" target="_blank" class="external-link">nancypodcast.org</a>. Nancy is a production of <a href="http://wnycstudios.wnyc.org/" target="_blank" class="external-link">WNYC Studios</a>.</p> <p>Episode scoring by Isaac Jones with additional music by U.S. Army Blues (<a href="http://freemusicarchive.org/music/US_Army_Blues/Live_At_Blues_Alley/0_-_09_-_The_US_Army_Blues_-_Barbara">"Barbara"</a>). </p> <p><div class="user-embedded-video"><div id="videoplayer_idm140118593004192a9ff5762-ef33-4367-9af3-cdb848e67836"><iframe width="620" height="349" src="https://www.youtube.com/embed/Lk43BYZClxQ?wmode=transparent&amp;autohide=1&amp;rel=0&amp;showinfo=0&amp;feature=oembed&amp;enablejsapi=1" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen="allowfullscreen" id="a-9206574620506434057" class="youtube_video" mozallowfullscreen="mozallowfullscreen" webkitallowfullscreen="webkitallowfullscreen" data-original-url="https://www.youtube.com/watch?v=Lk43BYZClxQ&amp;feature=youtu.be"></iframe></div></div>  </p> <p><em> Support our work. Become a Nancy member today at <a href="https://pledge3.wnyc.org/donate/nancy-it/onestep/?utm_source=wnyc&amp;utm_medium=nancy-redirect&amp;utm_campaign=pledge&amp;utm_content=show-notes" target="_blank" title="Pledge">Nancypodcast.org/donate</a>.    </em></p> Sun, 16 Apr 2017 12:00:00 -0400http://www.wnyc.org/story/nancy-podcast-episode-3-i-had-no-idea/explicitgaygay_and_lesbianlifelovemusicstorytellingtransgender#3: I Had No Idea 39:46yesWe were in a relationship?

— Peter Bresnan is a radio producer in New York.

— Shakina Nayfack was accompanied by pianist and composer Julianne Wick Davis.

Follow Nancy on Facebook and Twitter and sign up for our newsletter at nancypodcast.org. Nancy is a production of WNYC Studios.

Episode scoring by Isaac Jones with additional music by U.S. Army Blues ("Barbara"). 

Support our work. Become a Nancy member today at Nancypodcast.org/donate.    

]]>
I Had No IdeaWe were in a relationship?

— Peter Bresnan is a radio producer in New York.

— Shakina Nayfack was accompanied by pianist and composer Julianne Wick Davis.

Follow Nancy on Facebook and Twitter and sign up for our newsletter at nancypodcast.org. Nancy is a production of WNYC Studios.

Episode scoring by Isaac Jones with additional music by U.S. Army Blues ("Barbara"). 

Support our work. Become a Nancy member today at Nancypodcast.org/donate.    

]]>
full13WNYC Studios We were in a relationship? Peter Bresnan is a radio producer in New York. Shakina Nayfack was accompanied by pianist and composer Julianne Wick Davis. Follow Nancy on Facebook and Twitter and sign up for our newsletter at nancypodcast.org. Nancy is a proWNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#2: Like Two Ken Dolls Being Smashed Together http://www.wnycstudios.org/story/nancy-podcast-episode-2-like-two-ken-dolls-being-smashed-together/<p>When sex ed doesn't cover it, you've got to figure stuff out on your own.</p> <ul> <li>Tobin looks for "the first Asian top."</li> <li>Sarah Lu reconnects with a woman from her past.</li> </ul> <p>Follow Nancy on <a href="https://www.facebook.com/nancypodcast/">Facebook</a> and <a href="https://twitter.com/nancypodcast">Twitter</a> and sign up for our newsletter at <a href="http://www.nancypodcast.org/">nancypodcast.org</a>. Nancy is a production of <a href="http://wnycstudios.wnyc.org/">WNYC Studios</a>.</p> <p>Theme music by Alex Overington with scoring by Jeremy Bloom. Additional music by Arne Bang Huseby (<a href="http://freemusicarchive.org/music/Arne_Bang_Huseby/~/Arne_Huseby_-__Stormy_Blues">“Stormy Blues”</a>), Jalen Warshowsky (<a href="http://freemusicarchive.org/music/Jalen_Warshawsky/Bonus_Beat_Blast_2011/31_jalen_warshawsky-dollar_theatre">“Dollar Theater”</a>), Josh Woodward (<a href="http://freemusicarchive.org/music/Josh_Woodward/Breadcrumbs/JoshWoodward-Breadcrumbs-NoVox-09-OnceTomorrow">“Once Tomorrow”</a> and <a href="http://freemusicarchive.org/music/Josh_Woodward/Breadcrumbs/JoshWoodward-Breadcrumbs-NoVox-07-GreySnow">“Grey Snow”</a>), Anamorphic Orchestra (<a href="http://freemusicarchive.org/music/Anamorphic_Orchestra/Anamorphic_Orchestra/Taking_Dark_Matter_Lightly">“Taking Dark Matter Lightly”</a>), Joey Pecoraro (<a href="https://soundcloud.com/joeypecoraro/strong-vibes">“Strong Vibes”</a>), and Little Glass Men (<a href="http://freemusicarchive.org/music/Little_Glass_Men/Kelp_Grooves/Kelp_Grooves">“Kelp Grooves”</a>).</p> <p><em> Support our work. Become a Nancy member today at <a href="https://pledge3.wnyc.org/donate/nancy-it/onestep/?utm_source=wnyc&amp;utm_medium=nancy-redirect&amp;utm_campaign=pledge&amp;utm_content=show-notes" target="_blank" title="Pledge">Nancypodcast.org/donate</a>.    </em></p> Mon, 10 Apr 2017 12:00:00 -0400http://www.wnyc.org/story/nancy-podcast-episode-2-like-two-ken-dolls-being-smashed-together/arts_and_cultureexplicitgenderlgbtstorytellingtelevision#2: Like Two Ken Dolls Being Smashed Together 36:25yesWhen sex ed doesn't cover it, you've got to figure stuff out on your own.

— Tobin looks for "the first Asian top."

— Sarah Lu reconnects with a woman from her past.

Follow Nancy on Facebook and Twitter and sign up for our newsletter at nancypodcast.org. Nancy is a production of WNYC Studios.

Theme music by Alex Overington with scoring by Jeremy Bloom. Additional music by Arne Bang Huseby (“Stormy Blues”), Jalen Warshowsky (“Dollar Theater”), Josh Woodward (“Once Tomorrow” and “Grey Snow”), Anamorphic Orchestra (“Taking Dark Matter Lightly”), Joey Pecoraro (“Strong Vibes”), and Little Glass Men (“Kelp Grooves”).

Support our work. Become a Nancy member today at Nancypodcast.org/donate.    

]]>
Like Two Ken Dolls Being Smashed TogetherWhen sex ed doesn't cover it, you've got to figure stuff out on your own.

— Tobin looks for "the first Asian top."

— Sarah Lu reconnects with a woman from her past.

Follow Nancy on Facebook and Twitter and sign up for our newsletter at nancypodcast.org. Nancy is a production of WNYC Studios.

Theme music by Alex Overington with scoring by Jeremy Bloom. Additional music by Arne Bang Huseby (“Stormy Blues”), Jalen Warshowsky (“Dollar Theater”), Josh Woodward (“Once Tomorrow” and “Grey Snow”), Anamorphic Orchestra (“Taking Dark Matter Lightly”), Joey Pecoraro (“Strong Vibes”), and Little Glass Men (“Kelp Grooves”).

Support our work. Become a Nancy member today at Nancypodcast.org/donate.    

]]>
full12WNYC Studios When sex ed doesn't cover it, you've got to figure stuff out on your own. Tobin looks for "the first Asian top." Sarah Lu reconnects with a woman from her past. Follow Nancy on Facebook and Twitter and sign up for our newsletter at nancypodcast.org. NancWNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
#1: Hello, hello http://www.wnycstudios.org/story/nancy-podcast-episode-1-hello-hello/<p>Come out. Repeat. Record.</p> <ul> <li>Kathy has to come out to her mom over and over again. This time she wants to know her mom understands.</li> <li>Tobin's dad gets help from <a href="https://www.youtube.com/watch?v=i7gszAo2CXs">five fabulous friends</a>.</li> </ul> <p>Follow Nancy on <a href="https://www.facebook.com/nancypodcast/">Facebook</a> and <a href="https://twitter.com/nancypodcast">Twitter</a> and sign up for our newsletter at <a href="http://www.nancypodcast.org/">nancypodcast.org</a>. Nancy is a production of <a href="http://wnycstudios.wnyc.org/">WNYC Studios</a>.</p> <p>Theme music by Alex Overington. Scoring by Jeremy Bloom with additional music by Broke For Free (<a href="http://freemusicarchive.org/music/Broke_For_Free/Slam_Funk/Broke_For_Free_-_Slam_Funk_-_05_Hella">"Hella"</a> and <a href="http://freemusicarchive.org/music/Broke_For_Free/Petal/Broke_For_Free_-_Petal_-_09_Add_And">"Add And"</a>), UltraCat (<a href="http://freemusicarchive.org/music/UltraCat/Disco_High/ultracat_-_01_-_disco_high">"Disco High"</a>), Wake (<a href="http://freemusicarchive.org/music/Wake/Bonus_Beat_Blast_2011/71_wake-nick_beat">"Nick Beat"</a>), Little Glass Men (<a href="http://freemusicarchive.org/music/Little_Glass_Men/Kelp_Grooves/Kelp_Grooves">"Kelp Grooves"</a>), and Co.fee (<a href="http://freemusicarchive.org/music/Cofee/bonus_beat_blast_2011/13_co_fee-calabash">"Calabash"</a>).</p> <p>Support our work. Become a Nancy member today at <a href="https://pledge3.wnyc.org/donate/nancy-it/onestep/?utm_source=wnyc&amp;utm_medium=nancy-redirect&amp;utm_campaign=pledge&amp;utm_content=show-notes" target="_blank" title="Pledge">Nancypodcast.org/donate</a>.    </p> Sun, 09 Apr 2017 12:00:00 -0400http://www.wnyc.org/story/nancy-podcast-episode-1-hello-hello/arts_and_cultureconversationsexplicitfamilyfatherlifemotherparentingsexualitystoriesstorystorytellingtv#1: Hello, hello 29:27yesCome out. Repeat. Record.

— Kathy has come out to her mom over and over again. This time she wants to know her mom understands.

— Tobin's dad gets help from five fabulous friends.

Follow Nancy on Facebook and Twitter and sign up for our newsletter at nancypodcast.org. Nancy is a production of WNYC Studios.

Theme music by Alex Overington. Scoring by Jeremy Bloom with additional music by Broke For Free ("Hella" and "Add And"), UltraCat ("Disco High"), Wake ("Nick Beat"), Little Glass Men ("Kelp Grooves"), and Co.fee ("Calabash").

Support our work. Become a Nancy member today at Nancypodcast.org/donate.    

]]>
Hello, helloCome out. Repeat. Record.

— Kathy has come out to her mom over and over again. This time she wants to know her mom understands.

— Tobin's dad gets help from five fabulous friends.

Follow Nancy on Facebook and Twitter and sign up for our newsletter at nancypodcast.org. Nancy is a production of WNYC Studios.

Theme music by Alex Overington. Scoring by Jeremy Bloom with additional music by Broke For Free ("Hella" and "Add And"), UltraCat ("Disco High"), Wake ("Nick Beat"), Little Glass Men ("Kelp Grooves"), and Co.fee ("Calabash").

Support our work. Become a Nancy member today at Nancypodcast.org/donate.    

]]>
full11WNYC Studios Come out. Repeat. Record. Kathy has to come out to her mom over and over again. This time she wants to know her mom understands. Tobin's dad gets help from five fabulous friends. Follow Nancy on Facebook and Twitter and sign up for our newsletter at nancWNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
Nancy: It's a Podcast, Not a Person http://www.wnycstudios.org/story/nancy-trailer/<p>BFFs Kathy Tu and Tobin Low are super queer, super fun and ready to take over your podcast feed. Join them for provocative stories and frank conversations about the LGBTQ experience today. Coming out April 9.</p> <p><em>Follow Nancy on <a href="https://www.facebook.com/nancypodcast/">Facebook</a> and <a href="https://twitter.com/nancypodcast">Twitter</a> and sign up for our newsletter at <a href="http://www.nancypodcast.org/">nancypodcast.org</a>. Nancy is a production of <a href="http://wnycstudios.wnyc.org/">WNYC Studios</a>.</em></p> <p><em> Support our work. Become a Nancy member today at <a href="https://pledge3.wnyc.org/donate/nancy-it/onestep/?utm_source=wnyc&amp;utm_medium=nancy-redirect&amp;utm_campaign=pledge&amp;utm_content=show-notes" target="_blank" title="Pledge">Nancypodcast.org/donate</a>.    </em></p> Tue, 04 Apr 2017 12:00:00 -0400http://www.wnyc.org/story/nancy-trailer/arts_and_culturelgbtlifesexualitystorytellingNancy: It's a Podcast, Not a Person 2:46BFFs Kathy Tu and Tobin Low are super queer, super fun and ready to take over your podcast feed. Join them for provocative stories and frank conversations about the LGBTQ experience today. Coming out April 9.

Follow Nancy on Facebook and Twitter and sign up for our newsletter at nancypodcast.org. Nancy is a production of WNYC Studios.

Support our work. Become a Nancy member today at Nancypodcast.org/donate.    

]]>
Nancy: It's a Podcast, Not a PersonBFFs Kathy Tu and Tobin Low are super queer, super fun and ready to take over your podcast feed. Join them for provocative stories and frank conversations about the LGBTQ experience today. Coming out April 9.

Follow Nancy on Facebook and Twitter and sign up for our newsletter at nancypodcast.org. Nancy is a production of WNYC Studios.

Support our work. Become a Nancy member today at Nancypodcast.org/donate.    

]]>
trailer1WNYC Studiosno BFFs Kathy Tu and Tobin Low are super queer, super fun and ready to take over your podcast feed. Join them for provocative stories and frank conversations about the LGBTQ experience today. Coming out April 9. Follow Nancy on Facebook and Twitter and signWNYC Studioslgtbq,gay,lesbian,asian,politics,storytelling,homosexuality,conversations
© WNYCWNYC Studiosnonadult
================================================ FILE: api/test/data/podcast-feed/serial ================================================ Serial https://serialpodcast.org Serial is a podcast from the creators of This American Life, hosted by Sarah Koenig. Serial unfolds one story - a true story - over the course of a whole season. The show follows the plot and characters wherever they lead, through many surprising twists and turns. Sarah won't know what happens at the end of the story until she gets there, not long before you get there with her. Each week she'll bring you the latest chapter, so it's important to listen in, starting with Episode 1. New episodes are released on Thursday mornings. en Copyright 2018 Serial Podcast This American Life A podcast from the creators of This American Life rich@thislife.org S-Town Is Live http://feeds.serialpodcast.org/~r/serialpodcast/~3/Dx1_WiYrlg0/live Sarah Koenig, Ira Glass, and Brian Reed talk about our new show, S-Town. All 7 chapters are available now.<img src="http://feeds.feedburner.com/~r/serialpodcast/~4/Dx1_WiYrlg0" height="1" width="1" alt=""/> Tue, 28 Mar 2017 13:15:00 +0000 206 at http://serialpodcast.org This American Life 00:03:00 yes All 7 chapters are available now. Sarah Koenig, Ira Glass, and Brian Reed talk about our new show, S-Town. All 7 chapters are available now. https://serialpodcast.org/s-town/live Preview of S-Town, Our New Show http://feeds.serialpodcast.org/~r/serialpodcast/~3/yN5PlS1f8ng/s-town We have a new show! Here’s a sneak peek of S-Town, a new podcast from Serial and This American Life, hosted by Brian Reed. S-Town is the story of a man named John who despises his Alabama town and decides to do something about it. He asks Brian to investigate the son of a wealthy family who’s allegedly been bragging that he got away with murder. But when someone else ends up dead, the search for the truth leads to a nasty feud, a hunt for hidden treasure, and an unearthing of the mysteries of one man’s life. Coming March 28.<img src="http://feeds.feedburner.com/~r/serialpodcast/~4/yN5PlS1f8ng" height="1" width="1" alt=""/> Tue, 14 Mar 2017 14:00:00 +0000 205 at http://serialpodcast.org This American Life 00:04:00 yes Coming March 28 We have a new show! Here’s a sneak peek of S-Town, a new podcast from Serial and This American Life, hosted by Brian Reed. S-Town is the story of a man named John who despises his Alabama town and decides to do something about it. He asks Brian to investigate the son of a wealthy family who’s allegedly been bragging that he got away with murder. But when someone else ends up dead, the search for the truth leads to a nasty feud, a hunt for hidden treasure, and an unearthing of the mysteries of one man’s life. Coming March 28. https://serialpodcast.org/s-town S02 Episode 11: Present for Duty http://feeds.serialpodcast.org/~r/serialpodcast/~3/ER74kTeBpU4/present-for-duty The Season Two finale: What is Bowe’s fault, and what isn’t?<img src="http://feeds.feedburner.com/~r/serialpodcast/~4/ER74kTeBpU4" height="1" width="1" alt=""/> Thu, 31 Mar 2016 09:30:00 +0000 s02-e11 This American Life 1 01:06:00 yes The Season Two finale: What is Bowe’s fault, and what isn’t? The Season Two finale: What is Bowe’s fault, and what isn’t? https://serialpodcast.org/season-two/11/present-for-duty S02 Episode 10: Thorny Politics http://feeds.serialpodcast.org/~r/serialpodcast/~3/oHPb3mkRkX4/thorny-politics Are you hearing what I’m hearing?<img src="http://feeds.feedburner.com/~r/serialpodcast/~4/oHPb3mkRkX4" height="1" width="1" alt=""/> Thu, 17 Mar 2016 09:30:00 +0000 s02-e10 This American Life 1 00:52:00 yes Are you hearing what I’m hearing? Are you hearing what I’m hearing? https://serialpodcast.org/season-two/10/thorny-politics S02 Episode 09: Trade Secrets http://feeds.serialpodcast.org/~r/serialpodcast/~3/BvQ0mhztMCs/trade-secrets You don’t make peace with your friends. <img src="http://feeds.feedburner.com/~r/serialpodcast/~4/BvQ0mhztMCs" height="1" width="1" alt=""/> Thu, 03 Mar 2016 10:30:00 +0000 s02-e09 This American Life 1 00:49:00 yes You don’t make peace with your friends.  You don’t make peace with your friends.  https://serialpodcast.org/season-two/9/trade-secrets S02 Episode 08: Hindsight, Part 2 http://feeds.serialpodcast.org/~r/serialpodcast/~3/4G-PlKo8KQw/hindsight-part-2 Woulda, coulda, shoulda…<img src="http://feeds.feedburner.com/~r/serialpodcast/~4/4G-PlKo8KQw" height="1" width="1" alt=""/> Fri, 19 Feb 2016 10:30:00 +0000 s02-e08 This American Life 1 00:37:00 yes Woulda, coulda, shoulda… Woulda, coulda, shoulda… https://serialpodcast.org/season-two/8/hindsight-part-2 S02 Episode 07: Hindsight, Part 1 http://feeds.serialpodcast.org/~r/serialpodcast/~3/xFiGWl0XK1Y/hindsight-part-1 It makes sense if you’re Bowe Bergdahl.<img src="http://feeds.feedburner.com/~r/serialpodcast/~4/xFiGWl0XK1Y" height="1" width="1" alt=""/> Thu, 18 Feb 2016 10:30:00 +0000 s02-e07 This American Life 1 00:38:00 yes It makes sense if you’re Bowe Bergdahl. It makes sense if you’re Bowe Bergdahl. https://serialpodcast.org/season-two/7/hindsight-part-1 S01 Update: Day 03, Adnan Syed’s Hearing http://feeds.serialpodcast.org/~r/serialpodcast/~3/KRxuh5iVh_A/day-03 February 2016: Sarah Koenig ducks back into the Adnan Syed case for a few days. There’s a hearing in Baltimore—a court proceeding that’s been nearly sixteen years in the making. Syed’s attorney will introduce new evidence, and present a case for why his conviction should be overturned. Sarah and producer Dana Chivvis will discuss what happens, day by day.<img src="http://feeds.feedburner.com/~r/serialpodcast/~4/KRxuh5iVh_A" height="1" width="1" alt=""/> Sat, 06 Feb 2016 10:30:00 +0000 160 at http://serialpodcast.org This American Life 2 00:15:00 February 2016: Sarah Koenig ducks back into the Adnan Syed case for a few days. There’s a hearing in Baltimore—a court proceeding that’s been nearly sixteen years in the making. Syed’s attorney will introduce new evidence, and present a case for why... February 2016: Sarah Koenig ducks back into the Adnan Syed case for a few days. There’s a hearing in Baltimore—a court proceeding that’s been nearly sixteen years in the making. Syed’s attorney will introduce new evidence, and present a case for why his conviction should be overturned. Sarah and producer Dana Chivvis will discuss what happens, day by day. https://serialpodcast.org/season-one/adnan-syeds-hearing/day-03 S01 Update: Day 02, Adnan Syed’s Hearing http://feeds.serialpodcast.org/~r/serialpodcast/~3/X8PEKf-XJNI/day-02 February 2016: Sarah Koenig ducks back into the Adnan Syed case for a few days. There’s a hearing in Baltimore—a court proceeding that’s been nearly sixteen years in the making. Syed’s attorney will introduce new evidence, and present a case for why his conviction should be overturned. Sarah and producer Dana Chivvis will discuss what happens, day by day.<img src="http://feeds.feedburner.com/~r/serialpodcast/~4/X8PEKf-XJNI" height="1" width="1" alt=""/> Fri, 05 Feb 2016 07:45:00 +0000 159 at http://serialpodcast.org This American Life 2 00:15:00 February 2016: Sarah Koenig ducks back into the Adnan Syed case for a few days. There’s a hearing in Baltimore—a court proceeding that’s been nearly sixteen years in the making. Syed’s attorney will introduce new evidence, and present a case for why... February 2016: Sarah Koenig ducks back into the Adnan Syed case for a few days. There’s a hearing in Baltimore—a court proceeding that’s been nearly sixteen years in the making. Syed’s attorney will introduce new evidence, and present a case for why his conviction should be overturned. Sarah and producer Dana Chivvis will discuss what happens, day by day. https://serialpodcast.org/season-one/adnan-syeds-hearing/day-02 S02 Episode 06: 5 O'Clock Shadow http://feeds.serialpodcast.org/~r/serialpodcast/~3/5Z1fVnr1aqI/5-oclock-shadow Why did Bowe Bergdahl walk off? <img src="http://feeds.feedburner.com/~r/serialpodcast/~4/5Z1fVnr1aqI" height="1" width="1" alt=""/> Thu, 04 Feb 2016 10:30:00 +0000 s02-e06 This American Life 1 01:00:00 yes Why did Bowe Bergdahl walk off?  Why did Bowe Bergdahl walk off?  https://serialpodcast.org/season-two/6/5-oclock-shadow S01 Update: Day 01, Adnan Syed’s Hearing http://feeds.serialpodcast.org/~r/serialpodcast/~3/fqTTG98UTek/day-01 February 2016: Sarah Koenig ducks back into the Adnan Syed case for a few days. There’s a hearing in Baltimore—a court proceeding that’s been nearly sixteen years in the making. Syed’s attorney will introduce new evidence, and present a case for why his conviction should be overturned. Sarah and producer Dana Chivvis will discuss what happens, day by day.<img src="http://feeds.feedburner.com/~r/serialpodcast/~4/fqTTG98UTek" height="1" width="1" alt=""/> Thu, 04 Feb 2016 07:30:00 +0000 157 at http://serialpodcast.org This American Life 2 00:16:00 February 2016: Sarah Koenig ducks back into the Adnan Syed case for a few days. There’s a hearing in Baltimore—a court proceeding that’s been nearly sixteen years in the making. Syed’s attorney will introduce new evidence, and present a case for why... February 2016: Sarah Koenig ducks back into the Adnan Syed case for a few days. There’s a hearing in Baltimore—a court proceeding that’s been nearly sixteen years in the making. Syed’s attorney will introduce new evidence, and present a case for why his conviction should be overturned. Sarah and producer Dana Chivvis will discuss what happens, day by day. https://serialpodcast.org/season-one/adnan-syeds-hearing/day-01 S02 Episode 05: Meanwhile, in Tampa http://feeds.serialpodcast.org/~r/serialpodcast/~3/E1EQyPhXfSE/meanwhile-in-tampa CIA, FBI, YouTube, the Portland PD? There was no handbook for getting Bergdahl back.<img src="http://feeds.feedburner.com/~r/serialpodcast/~4/E1EQyPhXfSE" height="1" width="1" alt=""/> Thu, 21 Jan 2016 10:30:00 +0000 s02-e05 This American Life 1 00:54:00 yes CIA, FBI, YouTube, the Portland PD? There was no handbook for getting Bergdahl back. CIA, FBI, YouTube, the Portland PD? There was no handbook for getting Bergdahl back. https://serialpodcast.org/season-two/5/meanwhile-in-tampa S02 Episode 04: The Captors http://feeds.serialpodcast.org/~r/serialpodcast/~3/4DAtVjr4_SM/the-captors What's happening on the other side of the door?<img src="http://feeds.feedburner.com/~r/serialpodcast/~4/4DAtVjr4_SM" height="1" width="1" alt=""/> Thu, 07 Jan 2016 10:30:00 +0000 s02-e04 This American Life 1 00:46:00 yes What's happening on the other side of the door? What's happening on the other side of the door? https://serialpodcast.org/season-two/4/the-captors S02 Episode 03: Escaping http://feeds.serialpodcast.org/~r/serialpodcast/~3/RneNvVu4LMw/escaping Bergdahl’s first year in captivity starts with an escape and ends with an escape. In between, he learns necessary, twisted lessons of survival.<img src="http://feeds.feedburner.com/~r/serialpodcast/~4/RneNvVu4LMw" height="1" width="1" alt=""/> Thu, 24 Dec 2015 10:30:00 +0000 s02-e03 This American Life 1 00:55:00 yes Bergdahl’s first year in captivity starts with an escape and ends with an escape. In between, he learns necessary, twisted lessons of survival. Bergdahl’s first year in captivity starts with an escape and ends with an escape. In between, he learns necessary, twisted lessons of survival. https://serialpodcast.org/season-two/3/escaping S02 Episode 02: The Golden Chicken http://feeds.serialpodcast.org/~r/serialpodcast/~3/3mhZ_2w7q84/the-golden-chicken On the move with Bergdahl, the Taliban slip past the U.S. Army’s massive effort to find him. During those days and weeks, each side is asking, what is Bergdahl worth to us?<img src="http://feeds.feedburner.com/~r/serialpodcast/~4/3mhZ_2w7q84" height="1" width="1" alt=""/> Thu, 17 Dec 2015 10:30:00 +0000 s02-e02 This American Life 1 00:59:00 yes On the move with Bergdahl, the Taliban slip past the U.S. Army’s massive effort to find him. During those days and weeks, each side is asking, what is Bergdahl worth to us? On the move with Bergdahl, the Taliban slip past the U.S. Army’s massive effort to find him. During those days and weeks, each side is asking, what is Bergdahl worth to us? https://serialpodcast.org/season-two/2/the-golden-chicken S02 Episode 01: DUSTWUN http://feeds.serialpodcast.org/~r/serialpodcast/~3/Z98VP9-ki8s/dustwun In the middle of the night, Pfc. Bowe Bergdahl grabs a notebook, snacks, water, some cash. Then he quietly slips off a remote U.S. Army outpost in eastern Afghanistan and into the dark, open desert. About 20 minutes later, it occurs to him: he’s in over his head. <img src="http://feeds.feedburner.com/~r/serialpodcast/~4/Z98VP9-ki8s" height="1" width="1" alt=""/> Thu, 10 Dec 2015 11:00:00 +0000 s02-e01 This American Life 1 00:44:00 yes In the middle of the night, Pfc. Bowe Bergdahl grabs a notebook, snacks, water, some cash. Then he quietly slips off a remote U.S. Army outpost in eastern Afghanistan and into the dark, open desert. About 20 minutes later, it occurs to him: he’s in... In the middle of the night, Pfc. Bowe Bergdahl grabs a notebook, snacks, water, some cash. Then he quietly slips off a remote U.S. Army outpost in eastern Afghanistan and into the dark, open desert. About 20 minutes later, it occurs to him: he’s in over his head.  https://serialpodcast.org/season-two/1/dustwun S01 Episode 12: What We Know http://feeds.serialpodcast.org/~r/serialpodcast/~3/EN17Uu_zwto/what-we-know On January 13, 1999, Adnan Syed was a hurt and vengeful ex-boyfriend who carried out a premeditated murder. Or he was a bewildered bystander, framed for a crime he could never have committed. After 15 months of reporting, we take out everything we’ve got - interviews and documents and police reports - we shake it all out, and we see what sticks.<img src="http://feeds.feedburner.com/~r/serialpodcast/~4/EN17Uu_zwto" height="1" width="1" alt=""/> Thu, 18 Dec 2014 10:30:00 +0000 57 at http://serialpodcast.org This American Life 2 00:56:00 yes On January 13, 1999, Adnan Syed was a hurt and vengeful ex-boyfriend who carried out a premeditated murder. Or he was a bewildered bystander, framed for a crime he could never have committed. After 15 months of reporting, we take out everything we’ve... On January 13, 1999, Adnan Syed was a hurt and vengeful ex-boyfriend who carried out a premeditated murder. Or he was a bewildered bystander, framed for a crime he could never have committed. After 15 months of reporting, we take out everything we’ve got - interviews and documents and police reports - we shake it all out, and we see what sticks. https://serialpodcast.org/season-one/12/what-we-know S01 Episode 11: Rumors http://feeds.serialpodcast.org/~r/serialpodcast/~3/2jBxWKE77Oo/rumors Almost everyone describes the 17-year-old Adnan the same way: good kid, helpful at the mosque, respectful to his elders. But a couple of months ago, Sarah started getting phone calls from people who knew Adnan back then, and told her stories of a different kind of boy.<img src="http://feeds.feedburner.com/~r/serialpodcast/~4/2jBxWKE77Oo" height="1" width="1" alt=""/> Thu, 11 Dec 2014 10:30:00 +0000 56 at http://serialpodcast.org This American Life 2 00:41:00 yes Almost everyone describes the 17-year-old Adnan the same way: good kid, helpful at the mosque, respectful to his elders. But a couple of months ago, Sarah started getting phone calls from people who knew Adnan back then, and told her stories of a... Almost everyone describes the 17-year-old Adnan the same way: good kid, helpful at the mosque, respectful to his elders. But a couple of months ago, Sarah started getting phone calls from people who knew Adnan back then, and told her stories of a different kind of boy. https://serialpodcast.org/season-one/11/rumors S01 Episode 10: The Best Defense is a Good Defense http://feeds.serialpodcast.org/~r/serialpodcast/~3/kOEzjfdp42E/the-best-defense-is-a-good-defense Adnan’s trial lawyer was M. Cristina Gutierrez, a renowned defense attorney in Maryland – tough and savvy and smart. Other lawyers said she was exactly the kind of person you’d want defending you on a first-degree murder charge. But Adnan was convicted, and a year later, Gutierrez was disbarred. What happened? <img src="http://feeds.feedburner.com/~r/serialpodcast/~4/kOEzjfdp42E" height="1" width="1" alt=""/> Thu, 04 Dec 2014 10:30:00 +0000 54 at http://serialpodcast.org This American Life 2 00:54:00 yes Adnan’s trial lawyer was M. Cristina Gutierrez, a renowned defense attorney in Maryland – tough and savvy and smart. Other lawyers said she was exactly the kind of person you’d want defending you on a first-degree murder charge. But Adnan was convicted... Adnan’s trial lawyer was M. Cristina Gutierrez, a renowned defense attorney in Maryland – tough and savvy and smart. Other lawyers said she was exactly the kind of person you’d want defending you on a first-degree murder charge. But Adnan was convicted, and a year later, Gutierrez was disbarred. What happened?  https://serialpodcast.org/season-one/10/the-best-defense-is-a-good-defense S01 Episode 09: To Be Suspected http://feeds.serialpodcast.org/~r/serialpodcast/~3/8qJNC0l-S2A/to-be-suspected New information is coming in about what maybe didn’t happen on January 13, 1999.  And while Adnan’s memory of that day is foggy at best, he does remember what happened next: being questioned, being arrested and, a little more than a year later, being sentenced to life in prison.<img src="http://feeds.feedburner.com/~r/serialpodcast/~4/8qJNC0l-S2A" height="1" width="1" alt=""/> Thu, 20 Nov 2014 10:30:00 +0000 49 at http://serialpodcast.org This American Life 2 00:45:00 yes New information is coming in about what maybe didn’t happen on January 13, 1999.  And while Adnan’s memory of that day is foggy at best, he does remember what happened next: being questioned, being arrested and, a little more than a year later, being... New information is coming in about what maybe didn’t happen on January 13, 1999.  And while Adnan’s memory of that day is foggy at best, he does remember what happened next: being questioned, being arrested and, a little more than a year later, being sentenced to life in prison. https://serialpodcast.org/season-one/9/to-be-suspected S01 Episode 08: The Deal with Jay http://feeds.serialpodcast.org/~r/serialpodcast/~3/0jfvfEzHHlc/the-deal-with-jay The state’s case against Adnan Syed hinged on Jay’s credibility; he was their star witness and also, because of his changing statements to police, their chief liability. Naturally, Adnan’s lawyer tried hard to make Jay look untrustworthy at trial. So, how did the jurors make sense of Jay? For that matter, how did the cops make sense of Jay? How are we supposed to make sense of Jay?<img src="http://feeds.feedburner.com/~r/serialpodcast/~4/0jfvfEzHHlc" height="1" width="1" alt=""/> Thu, 13 Nov 2014 10:30:00 +0000 45 at http://serialpodcast.org This American Life 2 00:44:00 yes The state’s case against Adnan Syed hinged on Jay’s credibility; he was their star witness and also, because of his changing statements to police, their chief liability. Naturally, Adnan’s lawyer tried hard to make Jay look untrustworthy at trial. So,... The state’s case against Adnan Syed hinged on Jay’s credibility; he was their star witness and also, because of his changing statements to police, their chief liability. Naturally, Adnan’s lawyer tried hard to make Jay look untrustworthy at trial. So, how did the jurors make sense of Jay? For that matter, how did the cops make sense of Jay? How are we supposed to make sense of Jay? https://serialpodcast.org/season-one/8/the-deal-with-jay S01 Episode 07: The Opposite of the Prosecution http://feeds.serialpodcast.org/~r/serialpodcast/~3/C5cu4eB4EBk/the-opposite-of-the-prosecution Adnan told Sarah about a case in Virginia that had striking similarities to his own: one key witness, incriminating cell phone records, young people, drugs - and a defendant who has always maintained his innocence. Sarah called up one of the defense attorneys on that case to see if she could offer any insight into Adnan’s case, and got much more than she bargained for.<img src="http://feeds.feedburner.com/~r/serialpodcast/~4/C5cu4eB4EBk" height="1" width="1" alt=""/> Thu, 06 Nov 2014 10:30:00 +0000 42 at http://serialpodcast.org This American Life 2 00:33:00 yes Adnan told Sarah about a case in Virginia that had striking similarities to his own: one key witness, incriminating cell phone records, young people, drugs - and a defendant who has always maintained his innocence. Sarah called up one of the defense... Adnan told Sarah about a case in Virginia that had striking similarities to his own: one key witness, incriminating cell phone records, young people, drugs - and a defendant who has always maintained his innocence. Sarah called up one of the defense attorneys on that case to see if she could offer any insight into Adnan’s case, and got much more than she bargained for. https://serialpodcast.org/season-one/7/the-opposite-of-the-prosecution S01 Episode 06: The Case Against Adnan Syed http://feeds.serialpodcast.org/~r/serialpodcast/~3/luzKOc-1vaU/the-case-against-adnan-syed The physical evidence against Adnan Syed was scant - a few underwhelming fingerprints. So aside from cell records, what did the prosecutors bring to the jury, to shore up Jay's testimony? Sarah weighs all the other circumstantial evidence they had against Adnan, including curious behavior, a disconcerting note, and an unexplained mid-afternoon phone call.<img src="http://feeds.feedburner.com/~r/serialpodcast/~4/luzKOc-1vaU" height="1" width="1" alt=""/> Thu, 30 Oct 2014 09:30:00 +0000 34 at http://serialpodcast.org This American Life 2 00:44:00 yes The physical evidence against Adnan Syed was scant - a few underwhelming fingerprints. So aside from cell records, what did the prosecutors bring to the jury, to shore up Jay's testimony? Sarah weighs all the other circumstantial evidence they had... The physical evidence against Adnan Syed was scant - a few underwhelming fingerprints. So aside from cell records, what did the prosecutors bring to the jury, to shore up Jay's testimony? Sarah weighs all the other circumstantial evidence they had against Adnan, including curious behavior, a disconcerting note, and an unexplained mid-afternoon phone call. https://serialpodcast.org/season-one/6/the-case-against-adnan-syed S01 Episode 05: Route Talk http://feeds.serialpodcast.org/~r/serialpodcast/~3/_4nNtTjgZI4/route-talk Adnan once issued a challenge to Sarah. He told her to test the state’s timeline of the murder by driving from Woodlawn High School to Best Buy in 21 minutes. It can’t be done, he said. So Sarah and Dana take up the challenge, and raise him one: They try to recreate the entire route that Jay said he and Adnan took on January 13th, 1999.  <img src="http://feeds.feedburner.com/~r/serialpodcast/~4/_4nNtTjgZI4" height="1" width="1" alt=""/> Thu, 23 Oct 2014 09:30:00 +0000 31 at http://serialpodcast.org This American Life 2 00:43:00 yes Adnan once issued a challenge to Sarah. He told her to test the state’s timeline of the murder by driving from Woodlawn High School to Best Buy in 21 minutes. It can’t be done, he said. So Sarah and Dana take up the challenge, and raise him one: They... Adnan once issued a challenge to Sarah. He told her to test the state’s timeline of the murder by driving from Woodlawn High School to Best Buy in 21 minutes. It can’t be done, he said. So Sarah and Dana take up the challenge, and raise him one: They try to recreate the entire route that Jay said he and Adnan took on January 13th, 1999.   https://serialpodcast.org/season-one/5/route-talk S01 Episode 04: Inconsistencies http://feeds.serialpodcast.org/~r/serialpodcast/~3/Zwr-2iNgrXk/inconsistencies A few days after Hae’s body is found, the detectives get a lead that opens the case up for them. They find Jay at work late one night and bring him down to Homicide. At first, he insists he doesn’t know anything about the murder. But eventually he comes clean. He tells them what happened on January 13th. A few weeks later, he’s back at Homicide and his story has changed. In some ways, these changes are small and understandable. In other ways, they’re big and confounding.<img src="http://feeds.feedburner.com/~r/serialpodcast/~4/Zwr-2iNgrXk" height="1" width="1" alt=""/> Thu, 16 Oct 2014 09:30:00 +0000 28 at http://serialpodcast.org This American Life 2 00:34:00 yes A few days after Hae’s body is found, the detectives get a lead that opens the case up for them. They find Jay at work late one night and bring him down to Homicide. At first, he insists he doesn’t know anything about the murder. But eventually he... A few days after Hae’s body is found, the detectives get a lead that opens the case up for them. They find Jay at work late one night and bring him down to Homicide. At first, he insists he doesn’t know anything about the murder. But eventually he comes clean. He tells them what happened on January 13th. A few weeks later, he’s back at Homicide and his story has changed. In some ways, these changes are small and understandable. In other ways, they’re big and confounding. https://serialpodcast.org/season-one/4/inconsistencies S01 Episode 03: Leakin Park http://feeds.serialpodcast.org/~r/serialpodcast/~3/zsYOyC2Ljyw/leakin-park It’s February 9, 1999. Hae has been missing for three weeks. A man on his lunch break pulls off a road to pee, and stumbles on her body in a city forest. His odd recounting of the discovery makes Detectives Ritz and MacGillivary suspicious. For instance, why did he walk so far into the woods - 127 feet - to relieve himself? And that’s just the start. A look into the man’s past reveals some bizarre behavior.<img src="http://feeds.feedburner.com/~r/serialpodcast/~4/zsYOyC2Ljyw" height="1" width="1" alt=""/> Thu, 09 Oct 2014 10:00:00 +0000 21 at http://serialpodcast.org This American Life 2 00:28:00 yes It’s February 9, 1999. Hae has been missing for three weeks. A man on his lunch break pulls off a road to pee, and stumbles on her body in a city forest. His odd recounting of the discovery makes Detectives Ritz and MacGillivary suspicious. For... It’s February 9, 1999. Hae has been missing for three weeks. A man on his lunch break pulls off a road to pee, and stumbles on her body in a city forest. His odd recounting of the discovery makes Detectives Ritz and MacGillivary suspicious. For instance, why did he walk so far into the woods - 127 feet - to relieve himself? And that’s just the start. A look into the man’s past reveals some bizarre behavior. https://serialpodcast.org/season-one/3/leakin-park S01 Episode 02: The Breakup http://feeds.serialpodcast.org/~r/serialpodcast/~3/8S8WkuVAFY8/the-breakup Their relationship began like a storybook high-school romance: a prom date, love notes, sneaking off to be alone. But unlike other kids at school, they had to keep their dating secret, because their parents disapproved. Both of them, but especially Adnan, were under special pressure at home, and the stress of that spilled over into their relationship. Eventually Hae broke up with Adnan. And then, depending on who you ask, Adnan was either understandably sad and moping around, or full of rage and plotting to kill her.<img src="http://feeds.feedburner.com/~r/serialpodcast/~4/8S8WkuVAFY8" height="1" width="1" alt=""/> Fri, 03 Oct 2014 14:00:00 +0000 17 at http://serialpodcast.org This American Life 2 00:37:00 yes Their relationship began like a storybook high-school romance: a prom date, love notes, sneaking off to be alone. But unlike other kids at school, they had to keep their dating secret, because their parents disapproved. Both of them, but especially... Their relationship began like a storybook high-school romance: a prom date, love notes, sneaking off to be alone. But unlike other kids at school, they had to keep their dating secret, because their parents disapproved. Both of them, but especially Adnan, were under special pressure at home, and the stress of that spilled over into their relationship. Eventually Hae broke up with Adnan. And then, depending on who you ask, Adnan was either understandably sad and moping around, or full of rage and plotting to kill her. https://serialpodcast.org/season-one/2/the-breakup S01 Episode 01: The Alibi http://feeds.serialpodcast.org/~r/serialpodcast/~3/5ycPwkd6LAY/the-alibi It's Baltimore, 1999. Hae Min Lee, a popular high-school senior, disappears after school one day. Six weeks later detectives arrest her classmate and ex-boyfriend, Adnan Syed, for her murder. He says he's innocent - though he can't exactly remember what he was doing on that January afternoon. But someone can. A classmate at Woodlawn High School says she knows where Adnan was. The trouble is, she’s nowhere to be found.  <img src="http://feeds.feedburner.com/~r/serialpodcast/~4/5ycPwkd6LAY" height="1" width="1" alt=""/> Fri, 03 Oct 2014 13:45:00 +0000 2 at http://serialpodcast.org This American Life 2 00:54:00 yes It's Baltimore, 1999. Hae Min Lee, a popular high-school senior, disappears after school one day. Six weeks later detectives arrest her classmate and ex-boyfriend, Adnan Syed, for her murder. He says he's innocent - though he can't exactly remember... It's Baltimore, 1999. Hae Min Lee, a popular high-school senior, disappears after school one day. Six weeks later detectives arrest her classmate and ex-boyfriend, Adnan Syed, for her murder. He says he's innocent - though he can't exactly remember what he was doing on that January afternoon. But someone can. A classmate at Woodlawn High School says she knows where Adnan was. The trouble is, she’s nowhere to be found.   https://serialpodcast.org/season-one/1/the-alibi ================================================ FILE: api/test/data/podcast-feed/still-processing ================================================ Still Processing Step inside the confession booth of Wesley Morris and Jenna Wortham, two culture writers for The New York Times. They devour TV, movies, art, music and the internet to find the things that move them — to tears, awe and anger. Still Processing is where they try to understand the pleasures and pathologies of America in 2018.

]]>
stillprocessing@nytimes.com http://www.nytimes.com/podcasts/still-processing https://rss.art19.com/nyt-still-processing stillprocessing@nytimes.com The New York Times Step inside the confession booth of Wesley Morris and Jenna Wortham, two culture writers for The New York Times. They devour TV, movies, art, music and the internet to find the things that move them — to tears, awe and anger. Still Processing is where they try to understand the pleasures and pathologies of America in 2018.

]]>
en no episodic https://content.production.cdn.art19.com/images/44/f7/bb/b8/44f7bbb8-40ce-4a63-8ab8-9bc1cd71f4be/ba7aed20b307b76c2a8ba9a6473fd4c831179c6a24e20bf3179af4f11e06bc96968fca9edf17f4d55b5cae6ef3d97484f6b34b288426d42c5f59a515a8a37d67.jpeg http://www.nytimes.com/podcasts/still-processing Still Processing We Wouldn't Leave Kanye, But Should We? Almost one week after Kanye West released his eighth studio album, "Ye," we wonder what to do with artists who displease us. Going back to 2004, we take a closer look at Kanye, the artist, who questioned the role of higher education, called out former president George Bush after Hurricane Katrina on live television, and publicly grieved over the untimely death of his mother. We also examine Kanye, the problem, and try to understand how the same person who seemed to champion black solidarity in the early 2000s is now calling slavery a choice and aligning himself with President Trump. From "The College Dropout" to "808s & Heartbreak" to "Yeezus" to "Ye," we've kept listening to Kanye, but we ask ourselves: what will make us stop?


Discussed this week:

]]>
We Wouldn't Leave Kanye, But Should We? full Almost one week after Kanye West released his eighth studio album, "Ye," we wonder what to do with artists who displease us. Going back to 2004, we take a closer look at Kanye, the artist, who questioned the role of higher education, called out former president George Bush after Hurricane Katrina on live television, and publicly grieved over the untimely death of his mother. We also examine Kanye, the problem, and try to understand how the same person who seemed to champion black solidarity in the early 2000s is now calling slavery a choice and aligning himself with President Trump. From "The College Dropout" to "808s &amp; Heartbreak" to "Yeezus" to "Ye," we've kept listening to Kanye, but we ask ourselves: what will make us stop? Discussed this week:"Ivanka Trump, Samantha Bee, and the Strange Path of an Ancient Epithet" (Katy Waldman, The New Yorker, June 1, 2018)Rebecca Traister's tweets about Samantha Bee calling Ivanka Trump the C-word (2018)"Running Up That Hill" (Kate Bush, 1985) "The Man Who Ate Everything" (Jeffrey Steingarten, 1998)"Julián is a Mermaid" (Jessica Love, 2018)"O Superman" (Laurie Anderson, 1982)Kanye's comments about former president George Bush after Hurricane Katrina (MTV, 2005)"Ye" (Kanye West, 2018)"The Life of Pablo" (Kanye West, 2016)"Yeezus" (Kanye West, 2013)"My Beautiful Dark Twisted Fantasy" (Kanye West, 2010)"808s &amp; Heartbreak" (Kanye West, 2008)"Graduation" (Kanye West, 2007)"Late Registration" (Kanye West, 2005)"The College Dropout" (Kanye West, 2004) Almost one week after Kanye West released his eighth studio album, "Ye," we wonder what to do with artists who displease us. Going back to 2004, we take a closer look at Kanye, the artist, who questioned the role of higher education, called out former president George Bush after Hurricane Katrina on live television, and publicly grieved over the untimely death of his mother. We also examine Kanye, the problem, and try to understand how the same person who seemed to champion black solidarity in the early 2000s is now calling slavery a choice and aligning himself with President Trump. From "The College Dropout" to "808s & Heartbreak" to "Yeezus" to "Ye," we've kept listening to Kanye, but we ask ourselves: what will make us stop?


Discussed this week:

]]>
gid://art19-episode-locator/V0/1y9YF4IbF-EdSHjdBnpXSsBSlwy-sNbKSpusxT7De-Y Thu, 07 Jun 2018 10:00:00 -0000 no 00:51:39
We're Here For Your Anger, Jessica Walter When actor Jessica Walter said fellow co-star Jeffrey Tambor verbally harassed her on the set of "Arrested Development," the show’s lead, Jason Bateman, jumped to Tambor’s defense -- and we noticed. This week, we suss out what this interaction -- documented in sound -- shows us about the subtle and not-so-subtle ways that we're taught to minimize the experiences of women. We juxtapose Jessica Walter's quiet, composed anger with Asia Argento's seething indictment at Cannes, and interrogate the stakes that make women -- and other marginalized groups -- temper their rage. What would happen if our culture allowed these groups to more fully occupy their anger?

Plus, we talk about the cancellation of ABC's "Roseanne," because even though on some level justice has been done, we're still mad.  

Discussed this week: 


]]>
We're Here For Your Anger, Jessica Walter full When actor Jessica Walter said fellow co-star Jeffrey Tambor verbally harassed her on the set of "Arrested Development," the show’s lead, Jason Bateman, jumped to Tambor’s defense -- and we noticed. This week, we suss out what this interaction -- documented in sound -- shows us about the subtle and not-so-subtle ways that we're taught to minimize the experiences of women. We juxtapose Jessica Walter's quiet, composed anger with Asia Argento's seething indictment at Cannes, and interrogate the stakes that make women -- and other marginalized groups -- temper their rage. What would happen if our culture allowed these groups to more fully occupy their anger? Plus, we talk about the cancellation of ABC's "Roseanne," because even though on some level justice has been done, we're still mad.   Discussed this week: "'Reparations Happy Hour' Invites White People to Pay for Drinks" (Daniel Victor, The New York Times, 26 May 2018)"El Anillo" (Jennifer Lopez, 2018)"Shades of Blue" (Kelsey Lu, 2018)Agnes Varda and Cate Blanchett at Cannes 2018Asia Argento at Cannes 2018"'Arrested Development:' We Sat Down With the Cast. It Got Raw." (Sopan Deb, The New York Times, 23 May 2018) When actor Jessica Walter said fellow co-star Jeffrey Tambor verbally harassed her on the set of "Arrested Development," the show’s lead, Jason Bateman, jumped to Tambor’s defense -- and we noticed. This week, we suss out what this interaction -- documented in sound -- shows us about the subtle and not-so-subtle ways that we're taught to minimize the experiences of women. We juxtapose Jessica Walter's quiet, composed anger with Asia Argento's seething indictment at Cannes, and interrogate the stakes that make women -- and other marginalized groups -- temper their rage. What would happen if our culture allowed these groups to more fully occupy their anger?

Plus, we talk about the cancellation of ABC's "Roseanne," because even though on some level justice has been done, we're still mad.  

Discussed this week: 


]]>
gid://art19-episode-locator/V0/X4H9eg-WWH2NjEfjF1OWMby4nL3Yq-S79ag3UplGR1U Thu, 31 May 2018 10:00:00 -0000 no 00:57:57
We’re Queer - and Apparently So Is Everybody Else With Rita Ora, Janelle Monáe, Kehlani – and even fictional characters like Lando Calrissian – embracing bisexuality, pansexuality, queerness, and more, we wonder: what does it mean to publicly declare your sexual identity as something outside the gay/straight binary in 2018? And what did these declarations look like in the 80s and 90s, when we were growing up? We compare the sincere loneliness of R.E.M.'s "Losing My Religion" to the frustrating inauthenticity of Rita Ora's "Girls," and celebrate the thoughtful portrayal of the queer relationship featured in the new film, Disobedience. Plus, we break down what's wrong with sex scenes between women – with the hope that directors and cinematographers take note – because depictions of non-binary sexualities should reflect the humanity of the people who occupy them.

Discussed this week:

]]>
We’re Queer - and Apparently So Is Everybody Else full With Rita Ora, Janelle Monáe, Kehlani – and even fictional characters like Lando Calrissian – embracing bisexuality, pansexuality, queerness, and more, we wonder: what does it mean to publicly declare your sexual identity as something outside the gay/straight binary in 2018? And what did these declarations look like in the 80s and 90s, when we were growing up? We compare the sincere loneliness of R.E.M.'s "Losing My Religion" to the frustrating inauthenticity of Rita Ora's "Girls," and celebrate the thoughtful portrayal of the queer relationship featured in the new film, Disobedience. Plus, we break down what's wrong with sex scenes between women – with the hope that directors and cinematographers take note – because depictions of non-binary sexualities should reflect the humanity of the people who occupy them. Discussed this week:"The Hand That Robs the Cradle" (Ellen; Season 1, Episode 6; 1994) "Girls" (Rita Ora feat. Cardi B, Bebe Rexha, and Charlie XCX, 2018)"PYNK" (Janelle Monáe, 2018)"Curious" (Hayley Kiyoko, 2018)Kehlani's Tweets about her sexuality (2018)Kristen Stewart's SNL monologue (NBC, 2017)Disobedience (dir: Sebastián Lelio, Braven Films, 2017)"Losing My Religion" (R.E.M., 1991)Cruel Intentions (dir: Roger Kumble, Columbia Pictures, 1999)Blue is the Warmest Color (dir: Abdellatif Kechiche, Quat'sous Films, 2013) With Rita Ora, Janelle Monáe, Kehlani – and even fictional characters like Lando Calrissian – embracing bisexuality, pansexuality, queerness, and more, we wonder: what does it mean to publicly declare your sexual identity as something outside the gay/straight binary in 2018? And what did these declarations look like in the 80s and 90s, when we were growing up? We compare the sincere loneliness of R.E.M.'s "Losing My Religion" to the frustrating inauthenticity of Rita Ora's "Girls," and celebrate the thoughtful portrayal of the queer relationship featured in the new film, Disobedience. Plus, we break down what's wrong with sex scenes between women – with the hope that directors and cinematographers take note – because depictions of non-binary sexualities should reflect the humanity of the people who occupy them.

Discussed this week:

]]>
gid://art19-episode-locator/V0/bZ4T_mN93cCmTD8Z3NwTXhxBdNgbBB-UE4AKU2jBG6I Thu, 24 May 2018 10:00:00 -0000 no 00:46:05
We Unpack Black Male Privilege This week, shortly after multi-hyphenate artist Donald Glover blew up the internet with the video for his song "This is America," Wesley and guest host Rembert Browne (New York MagazineGrantland) explore Glover's career, and how he evolved from a likable comedian to a cultural provocateur and authority on blackness. We like Glover's brain and the music and TV he is making, but we also wonder about the speed with which he's been anointed a "genius." Who gets left out when we apply that label so liberally to men? What do women have to do to be considered geniuses? More specifically, why aren't we using that term for black women? And is there such a thing as black male privilege?

Jenna will be back next week.  

Discussed this week: 


]]>
We Unpack Black Male Privilege full This week, shortly after multi-hyphenate artist Donald Glover blew up the internet with the video for his song "This is America," Wesley and guest host Rembert Browne (New York Magazine, Grantland) explore Glover's career, and how he evolved from a likable comedian to a cultural provocateur and authority on blackness. We like Glover's brain and the music and TV he is making, but we also wonder about the speed with which he's been anointed a "genius." Who gets left out when we apply that label so liberally to men? What do women have to do to be considered geniuses? More specifically, why aren't we using that term for black women? And is there such a thing as black male privilege? Jenna will be back next week.   Discussed this week: Magic Mike XXL (Warner Bros., 2015)"I'm Not Black, I'm Kanye" (Ta-Nehisi Coates, The Atlantic)"This is America" (Childish Gambino)"That Hump" (Erykah Badu)"How I Got Over" (Aretha Franklin)"For a Black Artist to Win Album of the Year, They Have to Make an Album of the Decade" (Rembert Browne, Vulture)"Miss Independent" (Ne-Yo) This week, shortly after multi-hyphenate artist Donald Glover blew up the internet with the video for his song "This is America," Wesley and guest host Rembert Browne (New York MagazineGrantland) explore Glover's career, and how he evolved from a likable comedian to a cultural provocateur and authority on blackness. We like Glover's brain and the music and TV he is making, but we also wonder about the speed with which he's been anointed a "genius." Who gets left out when we apply that label so liberally to men? What do women have to do to be considered geniuses? More specifically, why aren't we using that term for black women? And is there such a thing as black male privilege?

Jenna will be back next week.  

Discussed this week: 


]]>
gid://art19-episode-locator/V0/OZb_oxE2Dxqk8mh4g_ABPTTd6b12IFe4VgVWtFju4vg Thu, 17 May 2018 10:00:00 -0000 no 00:48:48
We Watch Whiteness This week we're talking about white culture, and what it is trying to tell us about itself on TV, at the movies and in books. We're noticing that white people are anxious--consciously and unconsciously--about their place in the world, and it's fascinating to unpack. First, we look at the new season of Roseanne, a show that explicitly embraces its whiteness and thumbs its nose at anyone who would challenge that. Then, we talk about the hit horror movie A Quiet Place, which explores dystopia in a way that reveals submerged white fears of a brown invasion (we liked the craft of the movie a lot, but it’s got some problems it’s not aware of). We pose the question: what would a self-aware interrogation of being white look like?

Plus, we celebrate JaVale McGee's incomparable stank face, worry about Kanye's tweets (we recorded this episode before his most recent tweets in support of Trump, which we'll have to address another time), and bring you our very first nominee for Song of the Summer...!  

One last thing: we're bringing the show to Australia, and we'll be back with new episodes in a couple weeks. Till then, keep stuntin'! Keep shinin'!  


Discussed this week:

JaVale McGee (NBA player, Golden State Warriors)

"The Legacy of Childhood Trauma" (Junot Diaz, The New Yorker)

"I Like It" (Cardi B, Bad Bunny and J. Balvin) 

Kanye's recent tweets

Roseanne (ABC)

A Quiet Place (directed by John Krasinski)

White Trash: The 400-Year Untold History of Class in America (Nancy Isenberg, Penguin Books)

Hillbilly Elegy: A Memoir of a Family and Culture in Crisis (JD Vance, HarperCollins)

Evicted: Poverty and Profit in the American City (Matthew Desmond, Broadway Books)

Green (Sam Graham-Felsen, Random House)

]]>
We Watch Whiteness full This week we're talking about white culture, and what it is trying to tell us about itself on TV, at the movies and in books. We're noticing that white people are anxious--consciously and unconsciously--about their place in the world, and it's fascinating to unpack. First, we look at the new season of Roseanne, a show that explicitly embraces its whiteness and thumbs its nose at anyone who would challenge that. Then, we talk about the hit horror movie A Quiet Place, which explores dystopia in a way that reveals submerged white fears of a brown invasion (we liked the craft of the movie a lot, but it’s got some problems it’s not aware of). We pose the question: what would a self-aware interrogation of being white look like? Plus, we celebrate JaVale McGee's incomparable stank face, worry about Kanye's tweets (we recorded this episode before his most recent tweets in support of Trump, which we'll have to address another time), and bring you our very first nominee for Song of the Summer...!   One last thing: we're bringing the show to Australia, and we'll be back with new episodes in a couple weeks. Till then, keep stuntin'! Keep shinin'!   Discussed this week: JaVale McGee (NBA player, Golden State Warriors) "The Legacy of Childhood Trauma" (Junot Diaz, The New Yorker) "I Like It" (Cardi B, Bad Bunny and J. Balvin)  Kanye's recent tweets Roseanne (ABC) A Quiet Place (directed by John Krasinski) White Trash: The 400-Year Untold History of Class in America (Nancy Isenberg, Penguin Books) Hillbilly Elegy: A Memoir of a Family and Culture in Crisis (JD Vance, HarperCollins) Evicted: Poverty and Profit in the American City (Matthew Desmond, Broadway Books) Green (Sam Graham-Felsen, Random House) This week we're talking about white culture, and what it is trying to tell us about itself on TV, at the movies and in books. We're noticing that white people are anxious--consciously and unconsciously--about their place in the world, and it's fascinating to unpack. First, we look at the new season of Roseanne, a show that explicitly embraces its whiteness and thumbs its nose at anyone who would challenge that. Then, we talk about the hit horror movie A Quiet Place, which explores dystopia in a way that reveals submerged white fears of a brown invasion (we liked the craft of the movie a lot, but it’s got some problems it’s not aware of). We pose the question: what would a self-aware interrogation of being white look like?

Plus, we celebrate JaVale McGee's incomparable stank face, worry about Kanye's tweets (we recorded this episode before his most recent tweets in support of Trump, which we'll have to address another time), and bring you our very first nominee for Song of the Summer...!  

One last thing: we're bringing the show to Australia, and we'll be back with new episodes in a couple weeks. Till then, keep stuntin'! Keep shinin'!  


Discussed this week:

JaVale McGee (NBA player, Golden State Warriors)

"The Legacy of Childhood Trauma" (Junot Diaz, The New Yorker)

"I Like It" (Cardi B, Bad Bunny and J. Balvin) 

Kanye's recent tweets

Roseanne (ABC)

A Quiet Place (directed by John Krasinski)

White Trash: The 400-Year Untold History of Class in America (Nancy Isenberg, Penguin Books)

Hillbilly Elegy: A Memoir of a Family and Culture in Crisis (JD Vance, HarperCollins)

Evicted: Poverty and Profit in the American City (Matthew Desmond, Broadway Books)

Green (Sam Graham-Felsen, Random House)

]]>
gid://art19-episode-locator/V0/aNTUukIqdMPS2Bf9h3QPtstpnl9bosARkAaq3jZiziY Thu, 26 Apr 2018 08:00:00 -0000 no 01:01:51
We Talk BeyChella We were so blown away by Beyoncé’s performance at the Coachella music festival that we decided to scrap our previous plans and dedicate this week’s entire episode to it. We think her performance will go down in the annals of American pop music as one of the greatest live shows ever.


We close read some of our favorite moments, including her beautiful rendition of the black national anthem, “Lift Ev’ry Voice and Sing,” and how she turns the swag surf into a dance for royalty. And we talk about the ways Beyoncé continues to shape-shift and grow as an artist, reinterpreting her own musical catalogue and making it richer, more sonorous and more black. We think about the ways black American music has always been misappropriated, and the ingenious way Beyoncé is pushing against that history, making music so skillful it can’t ever be replicated.


Discussed This Week:


Kendrick Lamar Wins Pulitzer in ‘Big Moment for Hip-Hop’” (Joe Coscarelli, The New York Times)


]]>
We Talk BeyChella full We were so blown away by Beyoncé’s performance at the Coachella music festival that we decided to scrap our previous plans and dedicate this week’s entire episode to it. We think her performance will go down in the annals of American pop music as one of the greatest live shows ever. We close read some of our favorite moments, including her beautiful rendition of the black national anthem, “Lift Ev’ry Voice and Sing,” and how she turns the swag surf into a dance for royalty. And we talk about the ways Beyoncé continues to shape-shift and grow as an artist, reinterpreting her own musical catalogue and making it richer, more sonorous and more black. We think about the ways black American music has always been misappropriated, and the ingenious way Beyoncé is pushing against that history, making music so skillful it can’t ever be replicated. Discussed This Week: “Kendrick Lamar Wins Pulitzer in ‘Big Moment for Hip-Hop’” (Joe Coscarelli, The New York Times) We were so blown away by Beyoncé’s performance at the Coachella music festival that we decided to scrap our previous plans and dedicate this week’s entire episode to it. We think her performance will go down in the annals of American pop music as one of the greatest live shows ever.


We close read some of our favorite moments, including her beautiful rendition of the black national anthem, “Lift Ev’ry Voice and Sing,” and how she turns the swag surf into a dance for royalty. And we talk about the ways Beyoncé continues to shape-shift and grow as an artist, reinterpreting her own musical catalogue and making it richer, more sonorous and more black. We think about the ways black American music has always been misappropriated, and the ingenious way Beyoncé is pushing against that history, making music so skillful it can’t ever be replicated.


Discussed This Week:


Kendrick Lamar Wins Pulitzer in ‘Big Moment for Hip-Hop’” (Joe Coscarelli, The New York Times)


]]>
gid://art19-episode-locator/V0/05oAm85ypHv6iM-D1xMP4j07BSPJ_NT3iKyVnFCrywI Thu, 19 Apr 2018 08:00:00 -0000 no 01:00:39
We Get It On (With Ourselves) As a break from the onslaught of traumatic news, this week we're talking about what makes us feel good about ourselves. Really good. We start by exploring what has been lost with the recent closure of Craiglist's personal ads section: a unique place, so distinct from Tinder or Grindr or Bumble, where you could search honestly for your own sexiness. Then we share some our personal tips for maintaining and nurturing that feeling once you find it. Finally we jam out to some of our all-time favorite songs of seduction, from k.d. lang to Beyoncé to Cardi B, and explain why exactly they make us feel the way they do. And finally, here’s a link to all of our favorite jams to turn it up by yourself: Still Processing Presents: The Autoerotica Mix (Spotify).


Discussed This Week:


The Magicians (SyFy)


We need to talk about how Grindr is affecting gay men’s health” (Jack Turban, Vox)


“‘I Am Super Straight and I Prefer You be Too’: Constructions of Heterosexual Masculinity in Online Personal Ads for “Straight” Men Seeking Sex With Men” (Chelsea Reynolds, Sage Journals)


Missed Connections: Craigslist Drops Personal Ads Because of Sex Trafficking Bill” (Niraj Chokshi, The New York Times)


“A Field Guide to Getting Lost” (Rebecca Solnit, Penguin Books)


“Sexiness: Rituals, Revisions and Reconstructions” (Tamara Santibanez, Discipline Press)


Still Processing Presents: The Autoerotica Mix (Spotify)


]]>
We Get It On (With Ourselves) full As a break from the onslaught of traumatic news, this week we're talking about what makes us feel good about ourselves. Really good. We start by exploring what has been lost with the recent closure of Craiglist's personal ads section: a unique place, so distinct from Tinder or Grindr or Bumble, where you could search honestly for your own sexiness. Then we share some our personal tips for maintaining and nurturing that feeling once you find it. Finally we jam out to some of our all-time favorite songs of seduction, from k.d. lang to Beyoncé to Cardi B, and explain why exactly they make us feel the way they do. And finally, here’s a link to all of our favorite jams to turn it up by yourself: Still Processing Presents: The Autoerotica Mix (Spotify). Discussed This Week: The Magicians (SyFy) “We need to talk about how Grindr is affecting gay men’s health” (Jack Turban, Vox) “‘I Am Super Straight and I Prefer You be Too’: Constructions of Heterosexual Masculinity in Online Personal Ads for “Straight” Men Seeking Sex With Men” (Chelsea Reynolds, Sage Journals) “Missed Connections: Craigslist Drops Personal Ads Because of Sex Trafficking Bill” (Niraj Chokshi, The New York Times) “A Field Guide to Getting Lost” (Rebecca Solnit, Penguin Books) “Sexiness: Rituals, Revisions and Reconstructions” (Tamara Santibanez, Discipline Press) Still Processing Presents: The Autoerotica Mix (Spotify) As a break from the onslaught of traumatic news, this week we're talking about what makes us feel good about ourselves. Really good. We start by exploring what has been lost with the recent closure of Craiglist's personal ads section: a unique place, so distinct from Tinder or Grindr or Bumble, where you could search honestly for your own sexiness. Then we share some our personal tips for maintaining and nurturing that feeling once you find it. Finally we jam out to some of our all-time favorite songs of seduction, from k.d. lang to Beyoncé to Cardi B, and explain why exactly they make us feel the way they do. And finally, here’s a link to all of our favorite jams to turn it up by yourself: Still Processing Presents: The Autoerotica Mix (Spotify).


Discussed This Week:


The Magicians (SyFy)


We need to talk about how Grindr is affecting gay men’s health” (Jack Turban, Vox)


“‘I Am Super Straight and I Prefer You be Too’: Constructions of Heterosexual Masculinity in Online Personal Ads for “Straight” Men Seeking Sex With Men” (Chelsea Reynolds, Sage Journals)


Missed Connections: Craigslist Drops Personal Ads Because of Sex Trafficking Bill” (Niraj Chokshi, The New York Times)


“A Field Guide to Getting Lost” (Rebecca Solnit, Penguin Books)


“Sexiness: Rituals, Revisions and Reconstructions” (Tamara Santibanez, Discipline Press)


Still Processing Presents: The Autoerotica Mix (Spotify)


]]>
gid://art19-episode-locator/V0/nutmA9Dw66bI3nN9nqvLkQ4lG6KRqE6UAlHVn9U-9TI Thu, 12 Apr 2018 08:00:00 -0000 no 00:57:14
We Celebrate the REAL MLK Day This week, we commemorate the 50th anniversary of Martin Luther King Jr.’s death. While MLK’s birthday is celebrated on a national level, we spend time processing why his death holds a significant importance as well. We examine the months leading up to MLK Jr.’s death, including his iconic speech, “I’ve Been to the Mountaintop,” and discuss the ways in which his ideals shifted after his “I Had A Dream” speech.  MLK day is a celebration of King’s birthday, and we suggest that maybe what we should really be marking is the day of his assassination.

Discussed This Week:


“My Life with Martin Luther King Jr.” (Coretta Scott King, Henry Holt & Co.)


They Push. They Protest. And Many Activists, Privately, Suffer As A Result” (John Eligon, The New York Times)


Linda Brown, Symbol of Landmark Desegregation Case, Dies at 75” (Neil Genzlinger, The New York Times)



A Testament of Hope: The Essential Writings and Speeches of Martin Luther King Jr. (Martin Luther King Jr., HarperCollins Publishers)



]]>
We Celebrate the REAL MLK Day full This week, we commemorate the 50th anniversary of Martin Luther King Jr.’s death. While MLK’s birthday is celebrated on a national level, we spend time processing why his death holds a significant importance as well. We examine the months leading up to MLK Jr.’s death, including his iconic speech, “I’ve Been to the Mountaintop,” and discuss the ways in which his ideals shifted after his “I Had A Dream” speech.  MLK day is a celebration of King’s birthday, and we suggest that maybe what we should really be marking is the day of his assassination. Discussed This Week: “My Life with Martin Luther King Jr.” (Coretta Scott King, Henry Holt &amp; Co.) “They Push. They Protest. And Many Activists, Privately, Suffer As A Result” (John Eligon, The New York Times) “Linda Brown, Symbol of Landmark Desegregation Case, Dies at 75” (Neil Genzlinger, The New York Times) A Testament of Hope: The Essential Writings and Speeches of Martin Luther King Jr. (Martin Luther King Jr., HarperCollins Publishers) This week, we commemorate the 50th anniversary of Martin Luther King Jr.’s death. While MLK’s birthday is celebrated on a national level, we spend time processing why his death holds a significant importance as well. We examine the months leading up to MLK Jr.’s death, including his iconic speech, “I’ve Been to the Mountaintop,” and discuss the ways in which his ideals shifted after his “I Had A Dream” speech.  MLK day is a celebration of King’s birthday, and we suggest that maybe what we should really be marking is the day of his assassination.

Discussed This Week:


“My Life with Martin Luther King Jr.” (Coretta Scott King, Henry Holt & Co.)


They Push. They Protest. And Many Activists, Privately, Suffer As A Result” (John Eligon, The New York Times)


Linda Brown, Symbol of Landmark Desegregation Case, Dies at 75” (Neil Genzlinger, The New York Times)



A Testament of Hope: The Essential Writings and Speeches of Martin Luther King Jr. (Martin Luther King Jr., HarperCollins Publishers)



]]>
gid://art19-episode-locator/V0/gERGqreNYj0q4orm5YY8LnSffitX9tdAQneLzRLBLt0 Thu, 05 Apr 2018 08:00:00 -0000 no 00:45:38
We’re Maxed Out, You’re Maxed Out, Everybody Is Maxed Out This week we're talking about why we're stressed out, why the country is stressed out, and whether anxiety has become a permanent condition. We consider the role technology has played in driving us to this point, from push alerts — so many push alerts — to Twitter to the "algorithmic gaze." Then we come back to culture and focus on a few works that either encapsulate the chaos of 2018 or offer a possible path for moving ahead.

Discussed This Week:

Pony” (Genuwine)

The Middle” (Zedd, Maren Morris, Grey)

The Comfort in Stockpiling Dried Beans” (Tejal Rao, The New York Times Magazine)

The Man Who Knew Too Little” (Sam Dolnick, The New York Times)

Annihilation (Paramount Pictures)

Southern Reach Trilogy” (Jeff VanderMeer, Farrar, Straus and Giroux)

Ready Player One (Warner Bros. Pictures)

Downsizing (Paramount Pictures)

Angels in America (Tony Kushner)

Angels in America (miniseries; HBO)

]]>
We’re Maxed Out, You’re Maxed Out, Everybody Is Maxed Out full This week we're talking about why we're stressed out, why the country is stressed out, and whether anxiety has become a permanent condition. We consider the role technology has played in driving us to this point, from push alerts — so many push alerts — to Twitter to the "algorithmic gaze." Then we come back to culture and focus on a few works that either encapsulate the chaos of 2018 or offer a possible path for moving ahead. Discussed This Week: “Pony” (Genuwine) “The Middle” (Zedd, Maren Morris, Grey) “The Comfort in Stockpiling Dried Beans” (Tejal Rao, The New York Times Magazine) “The Man Who Knew Too Little” (Sam Dolnick, The New York Times) Annihilation (Paramount Pictures) “Southern Reach Trilogy” (Jeff VanderMeer, Farrar, Straus and Giroux) Ready Player One (Warner Bros. Pictures) Downsizing (Paramount Pictures) Angels in America (Tony Kushner) Angels in America (miniseries; HBO) This week we're talking about why we're stressed out, why the country is stressed out, and whether anxiety has become a permanent condition. We consider the role technology has played in driving us to this point, from push alerts — so many push alerts — to Twitter to the "algorithmic gaze." Then we come back to culture and focus on a few works that either encapsulate the chaos of 2018 or offer a possible path for moving ahead.

Discussed This Week:

Pony” (Genuwine)

The Middle” (Zedd, Maren Morris, Grey)

The Comfort in Stockpiling Dried Beans” (Tejal Rao, The New York Times Magazine)

The Man Who Knew Too Little” (Sam Dolnick, The New York Times)

Annihilation (Paramount Pictures)

Southern Reach Trilogy” (Jeff VanderMeer, Farrar, Straus and Giroux)

Ready Player One (Warner Bros. Pictures)

Downsizing (Paramount Pictures)

Angels in America (Tony Kushner)

Angels in America (miniseries; HBO)

]]>
gid://art19-episode-locator/V0/yTlo8zYHmTTudM9HLjfOdxKp0iCcxYPvi-KLhnQgUtE Thu, 29 Mar 2018 08:00:00 -0000 no 00:56:51
We Love Aunties This week we pay homage to aunties, in our own lives, in politics, and in pop culture. But first we have to define what an aunty is, so we play a little game called "Aunty or Nah-nty," naming aunty candidates from television shows and movies to refine our criteria for who is and isn't one. We examine the historical relevance of aunties, and think about portrayals of women who are not-quite-our mothers, fiercely independent and repositories for our secrets. Can the "aunty" label be a caricature, or is it strictly an honor? Have on-screen "aunties" changed the way we view childless women in our culture? And can white women be aunties?


Discussed This Week:


Mystic Pizza (The Samuel Goldwyn Company)


Snapchat Lost $800 Million After Rihanna Criticized Its Offensive Ad” (Emma Stefansky, Vanity Fair)


LGBTQ Brazillian Councilwoman Assainated” (Saurav Jung Thapa, HRC)


Bridging The Racial Divide in a Middle School Friendship” (Jonathan Miles, The New York Times)


Lionel Richie Wants to Teach You How to Be a Real ‘American Idol’” (Alex Pappademas, The New York Times)


Eve’s Bayou (Trimark Pictures)



]]>
We Love Aunties full This week we pay homage to aunties, in our own lives, in politics, and in pop culture. But first we have to define what an aunty is, so we play a little game called "Aunty or Nah-nty," naming aunty candidates from television shows and movies to refine our criteria for who is and isn't one. We examine the historical relevance of aunties, and think about portrayals of women who are not-quite-our mothers, fiercely independent and repositories for our secrets. Can the "aunty" label be a caricature, or is it strictly an honor? Have on-screen "aunties" changed the way we view childless women in our culture? And can white women be aunties? Discussed This Week: Mystic Pizza (The Samuel Goldwyn Company) “Snapchat Lost $800 Million After Rihanna Criticized Its Offensive Ad” (Emma Stefansky, Vanity Fair) “LGBTQ Brazillian Councilwoman Assainated” (Saurav Jung Thapa, HRC) “Bridging The Racial Divide in a Middle School Friendship” (Jonathan Miles, The New York Times) “Lionel Richie Wants to Teach You How to Be a Real ‘American Idol’” (Alex Pappademas, The New York Times) Eve’s Bayou (Trimark Pictures) This week we pay homage to aunties, in our own lives, in politics, and in pop culture. But first we have to define what an aunty is, so we play a little game called "Aunty or Nah-nty," naming aunty candidates from television shows and movies to refine our criteria for who is and isn't one. We examine the historical relevance of aunties, and think about portrayals of women who are not-quite-our mothers, fiercely independent and repositories for our secrets. Can the "aunty" label be a caricature, or is it strictly an honor? Have on-screen "aunties" changed the way we view childless women in our culture? And can white women be aunties?


Discussed This Week:


Mystic Pizza (The Samuel Goldwyn Company)


Snapchat Lost $800 Million After Rihanna Criticized Its Offensive Ad” (Emma Stefansky, Vanity Fair)


LGBTQ Brazillian Councilwoman Assainated” (Saurav Jung Thapa, HRC)


Bridging The Racial Divide in a Middle School Friendship” (Jonathan Miles, The New York Times)


Lionel Richie Wants to Teach You How to Be a Real ‘American Idol’” (Alex Pappademas, The New York Times)


Eve’s Bayou (Trimark Pictures)



]]>
gid://art19-episode-locator/V0/lo517HSS794tUgoemAmAqXYYCZdc7Lic1Qw1jYUf3bM Thu, 22 Mar 2018 08:00:00 -0000 no 00:46:43
We Don’t Love Everything Made By Black People and That’s OK? This week, we discuss "A Wrinkle in Time," Ava DuVernay's attempt to take the audience on a magical adventure with Meg Murray as she searches for her father through multiple universes. Our time traveling experience ... wasn’t as magical as we hoped. But this is good news. We explain why the film's shortcomings do not impact the upward trajectory of Ava DuVernay career or black filmmaking in general, but actually work to highlight the progress of black filmmakers and encourage black artists to take bigger risks. We dive deep into what it means to criticize black works of art and express what gets lost when we decide it’s beyond criticism.


Discussed this week:

O.J. Simpson described ‘blood and stuff’ in hypothetical scenario (Jean Casarez, CNN)

How to raise a Boy; I’m not sure what to think about what my dad tried to teach me. So what should I teach my sons?” (New York Magazine, Will Leitch)

Fathers and Sons and Privilege (The Brian Lehrer Show, WNYC Studios)

In My View” - Young Fathers

For Decades, Our Coverage Was Racist. To Rise Above Our Past, We Must Acknowledge It” (National Geographic, Susan Goldberg)

A Wrinkle in Time (Madeleine L’Engle, Farrar, Straus & Giroux, 1962)

A Wrinkle in Time (Walt Disney Studios)

Black Panther (Marvel Studios)

The Sounds, Space And Spirit of ‘Selma’: A Director’s Take” (NPR, Fresh Air)

Black Kids Don’t Want to Read About Harriet Tubman All the Time” (The New York Times, Denene Millner)

Lemonade (Beyonce, Parkwood Entertainment)

Mapping the Margins: Intersectionality, Identity Politics, and Violence against Women of Color (Kimberly Crenshaw, 1991)

Small Doses with Amanda Seales (Starburns Audio)

How To Get Away With Murder (ABC)

Scandal (ABC)

Mo’Nique Calls For Netflix Boycott Over Alleged Gender and Race Pay Disparity (Deadline, Dino-Ray Ramos)



]]>
We Don’t Love Everything Made By Black People and That’s OK? full This week, we discuss "A Wrinkle in Time," Ava DuVernay's attempt to take the audience on a magical adventure with Meg Murray as she searches for her father through multiple universes. Our time traveling experience ... wasn’t as magical as we hoped. But this is good news. We explain why the film's shortcomings do not impact the upward trajectory of Ava DuVernay career or black filmmaking in general, but actually work to highlight the progress of black filmmakers and encourage black artists to take bigger risks. We dive deep into what it means to criticize black works of art and express what gets lost when we decide it’s beyond criticism. Discussed this week: O.J. Simpson described ‘blood and stuff’ in hypothetical scenario (Jean Casarez, CNN) “How to raise a Boy; I’m not sure what to think about what my dad tried to teach me. So what should I teach my sons?” (New York Magazine, Will Leitch) Fathers and Sons and Privilege (The Brian Lehrer Show, WNYC Studios) “In My View” - Young Fathers “For Decades, Our Coverage Was Racist. To Rise Above Our Past, We Must Acknowledge It” (National Geographic, Susan Goldberg) A Wrinkle in Time (Madeleine L’Engle, Farrar, Straus &amp; Giroux, 1962) A Wrinkle in Time (Walt Disney Studios) Black Panther (Marvel Studios) “The Sounds, Space And Spirit of ‘Selma’: A Director’s Take” (NPR, Fresh Air) “Black Kids Don’t Want to Read About Harriet Tubman All the Time” (The New York Times, Denene Millner) Lemonade (Beyonce, Parkwood Entertainment) Mapping the Margins: Intersectionality, Identity Politics, and Violence against Women of Color (Kimberly Crenshaw, 1991) Small Doses with Amanda Seales (Starburns Audio) How To Get Away With Murder (ABC) Scandal (ABC) Mo’Nique Calls For Netflix Boycott Over Alleged Gender and Race Pay Disparity (Deadline, Dino-Ray Ramos) This week, we discuss "A Wrinkle in Time," Ava DuVernay's attempt to take the audience on a magical adventure with Meg Murray as she searches for her father through multiple universes. Our time traveling experience ... wasn’t as magical as we hoped. But this is good news. We explain why the film's shortcomings do not impact the upward trajectory of Ava DuVernay career or black filmmaking in general, but actually work to highlight the progress of black filmmakers and encourage black artists to take bigger risks. We dive deep into what it means to criticize black works of art and express what gets lost when we decide it’s beyond criticism.


Discussed this week:

O.J. Simpson described ‘blood and stuff’ in hypothetical scenario (Jean Casarez, CNN)

How to raise a Boy; I’m not sure what to think about what my dad tried to teach me. So what should I teach my sons?” (New York Magazine, Will Leitch)

Fathers and Sons and Privilege (The Brian Lehrer Show, WNYC Studios)

In My View” - Young Fathers

For Decades, Our Coverage Was Racist. To Rise Above Our Past, We Must Acknowledge It” (National Geographic, Susan Goldberg)

A Wrinkle in Time (Madeleine L’Engle, Farrar, Straus & Giroux, 1962)

A Wrinkle in Time (Walt Disney Studios)

Black Panther (Marvel Studios)

The Sounds, Space And Spirit of ‘Selma’: A Director’s Take” (NPR, Fresh Air)

Black Kids Don’t Want to Read About Harriet Tubman All the Time” (The New York Times, Denene Millner)

Lemonade (Beyonce, Parkwood Entertainment)

Mapping the Margins: Intersectionality, Identity Politics, and Violence against Women of Color (Kimberly Crenshaw, 1991)

Small Doses with Amanda Seales (Starburns Audio)

How To Get Away With Murder (ABC)

Scandal (ABC)

Mo’Nique Calls For Netflix Boycott Over Alleged Gender and Race Pay Disparity (Deadline, Dino-Ray Ramos)



]]>
gid://art19-episode-locator/V0/v-QIowX4BlaB4OmAXPM9XTOvreiaBRzaIBoOpLe1fPM Thu, 15 Mar 2018 08:00:00 -0000 no 01:01:55
We Paint the Town Obama We went to the National Portrait Gallery in Washington, D.C. to look at the recently installed portraits of Barack and Michelle Obama. The paintings--Barack's by Kehinde Wiley, Michelle's by Amy Sherald--prompted both rapture and controversy when they were unveiled in February, and we wanted to see them in person to try to evaluate our own responses. As we traveled through the gallery from George Washington to Obama, we discussed what portraits can tell us about presidential power. And then we lingered at Barack and Michelle's portraits, admiring their beauty, trying to decipher their meaning, and allowing ourselves to be deeply moved. Come linger with us. 


Discussed this week:


MoviePass launches a new division to acquire and distribute movies” (Lizzie Plaugic, The Verge)

Jordan Peele’s X-Ray Vision” (Wesley Morris, The New York Times)

Jordan Peele Dedicates Original Screenplay Oscar To Those ‘Who Raised My Voice’” (Dawn C. Chmielewski, Deadline)

What’s An Inclusion Rider? Here’s The Story Behind Frances McDormand’s Closing Words” (Colin Dwyer, NPR)

Tiffany Haddish and Maya Rudolph, 2019 Oscar Hosts?” (Sopan Deb, The New York Times)



]]>
We Paint the Town Obama full We went to the National Portrait Gallery in Washington, D.C. to look at the recently installed portraits of Barack and Michelle Obama. The paintings--Barack's by Kehinde Wiley, Michelle's by Amy Sherald--prompted both rapture and controversy when they were unveiled in February, and we wanted to see them in person to try to evaluate our own responses. As we traveled through the gallery from George Washington to Obama, we discussed what portraits can tell us about presidential power. And then we lingered at Barack and Michelle's portraits, admiring their beauty, trying to decipher their meaning, and allowing ourselves to be deeply moved. Come linger with us.  Discussed this week: “MoviePass launches a new division to acquire and distribute movies” (Lizzie Plaugic, The Verge) “Jordan Peele’s X-Ray Vision” (Wesley Morris, The New York Times) “Jordan Peele Dedicates Original Screenplay Oscar To Those ‘Who Raised My Voice’” (Dawn C. Chmielewski, Deadline) “What’s An Inclusion Rider? Here’s The Story Behind Frances McDormand’s Closing Words” (Colin Dwyer, NPR) “Tiffany Haddish and Maya Rudolph, 2019 Oscar Hosts?” (Sopan Deb, The New York Times) We went to the National Portrait Gallery in Washington, D.C. to look at the recently installed portraits of Barack and Michelle Obama. The paintings--Barack's by Kehinde Wiley, Michelle's by Amy Sherald--prompted both rapture and controversy when they were unveiled in February, and we wanted to see them in person to try to evaluate our own responses. As we traveled through the gallery from George Washington to Obama, we discussed what portraits can tell us about presidential power. And then we lingered at Barack and Michelle's portraits, admiring their beauty, trying to decipher their meaning, and allowing ourselves to be deeply moved. Come linger with us. 


Discussed this week:


MoviePass launches a new division to acquire and distribute movies” (Lizzie Plaugic, The Verge)

Jordan Peele’s X-Ray Vision” (Wesley Morris, The New York Times)

Jordan Peele Dedicates Original Screenplay Oscar To Those ‘Who Raised My Voice’” (Dawn C. Chmielewski, Deadline)

What’s An Inclusion Rider? Here’s The Story Behind Frances McDormand’s Closing Words” (Colin Dwyer, NPR)

Tiffany Haddish and Maya Rudolph, 2019 Oscar Hosts?” (Sopan Deb, The New York Times)



]]>
gid://art19-episode-locator/V0/VhYalVuJIbVGhdSfGeifBAmUv5xT67J3A6EPie6cm48 Thu, 08 Mar 2018 09:00:00 -0000 no 00:37:50
We Want To Know What Love Is This week, we examine four of the Best Picture Oscar-nominated films—“Call Me By Your Name”, “Get Out”, “Shape of Water”, and “Phantom Thread”—to ask whether we are entering a new phase of romance films. By diverging from conventional norms and stereotypes, these films have created on-screen relationships that are reminiscent of our own relationships. We then look to the history of romantic dramas and comedies to see how this new version of romance-on-screen came to be and what it potentially communicates about the way men and women are relating to one another.


Discussed this week:


Why the Trump administration's new SNAP proposal is hard to swallow” (Devra First, Boston Globe)

Janelle Monae - Make Me Feel

Maybe It’s You - The Friend Zone Podcast

The Shape of Water (Fox Searchlight Pictures)

Phantom Thread (Focus Features)

Get Out (Universal Pictures)

Call Me By Your Name (Sony Pictures Classics)

Luca Guadagnino Had a Good Reason for Not Showing the Sex Scene in ‘Call Me By Your Name’” (Jude Dry, Indiewire)

Gone With the Wind (Loew’s Inc.)

Beyond Borders (Paramount Pictures)

The English Patient (Miramax Films)

Blade Runner 2049 (Warner Bros. Pictures)

Ingrid Goes West (Neon)

Wonder Woman (Warner Bros. Pictures)

Thelma (SF Studios)

Leap Year (Universal Pictures)

Pillow Talk (Universal-International)

]]>
We Want To Know What Love Is full This week, we examine four of the Best Picture Oscar-nominated films—“Call Me By Your Name”, “Get Out”, “Shape of Water”, and “Phantom Thread”—to ask whether we are entering a new phase of romance films. By diverging from conventional norms and stereotypes, these films have created on-screen relationships that are reminiscent of our own relationships. We then look to the history of romantic dramas and comedies to see how this new version of romance-on-screen came to be and what it potentially communicates about the way men and women are relating to one another. Discussed this week: “Why the Trump administration's new SNAP proposal is hard to swallow” (Devra First, Boston Globe) Janelle Monae - Make Me Feel Maybe It’s You - The Friend Zone Podcast The Shape of Water (Fox Searchlight Pictures) Phantom Thread (Focus Features) Get Out (Universal Pictures) Call Me By Your Name (Sony Pictures Classics) “Luca Guadagnino Had a Good Reason for Not Showing the Sex Scene in ‘Call Me By Your Name’” (Jude Dry, Indiewire) Gone With the Wind (Loew’s Inc.) Beyond Borders (Paramount Pictures) The English Patient (Miramax Films) Blade Runner 2049 (Warner Bros. Pictures) Ingrid Goes West (Neon) Wonder Woman (Warner Bros. Pictures) Thelma (SF Studios) Leap Year (Universal Pictures) Pillow Talk (Universal-International) This week, we examine four of the Best Picture Oscar-nominated films—“Call Me By Your Name”, “Get Out”, “Shape of Water”, and “Phantom Thread”—to ask whether we are entering a new phase of romance films. By diverging from conventional norms and stereotypes, these films have created on-screen relationships that are reminiscent of our own relationships. We then look to the history of romantic dramas and comedies to see how this new version of romance-on-screen came to be and what it potentially communicates about the way men and women are relating to one another.


Discussed this week:


Why the Trump administration's new SNAP proposal is hard to swallow” (Devra First, Boston Globe)

Janelle Monae - Make Me Feel

Maybe It’s You - The Friend Zone Podcast

The Shape of Water (Fox Searchlight Pictures)

Phantom Thread (Focus Features)

Get Out (Universal Pictures)

Call Me By Your Name (Sony Pictures Classics)

Luca Guadagnino Had a Good Reason for Not Showing the Sex Scene in ‘Call Me By Your Name’” (Jude Dry, Indiewire)

Gone With the Wind (Loew’s Inc.)

Beyond Borders (Paramount Pictures)

The English Patient (Miramax Films)

Blade Runner 2049 (Warner Bros. Pictures)

Ingrid Goes West (Neon)

Wonder Woman (Warner Bros. Pictures)

Thelma (SF Studios)

Leap Year (Universal Pictures)

Pillow Talk (Universal-International)

]]>
gid://art19-episode-locator/V0/5EBtx1D_TGcRVY6ekuZdxhfKkmiJ2QGwIzMWSfekhZI Thu, 01 Mar 2018 09:00:00 -0000 no 00:48:10
We Take the 15:17 All the Way to Pyeongchang This week we're looking for a thread running through three seemingly disparate moments: the release of Clint Eastwood's new film "The 15:17 to Paris," the Olympics in South Korea, and the tragic death of 17 people at Marjory Stoneman Douglas High School in Parkland, Florida. We use these events to discuss how culture can act as a smokescreen for reality and a way to avoid our fears. Plus: Jenna defends her surprising position that spoilers are actually good.


Discussed this week:


Queer Eye (Netflix)

Alt.Latino (NPR)

“Emma González Leads a Student Outcry on Guns: ‘This is the Way I Have to Grieve’” (Julie Turkewitz, Matt Stevens and Jason M. Bailey, The New York Times)

Whole Lot of BS” Funkadelic (Maggot Brain, 1971)

"Fergie’s National Anthem Draws Criticism" (ESPN)

Letter of Recommendation: Spoilers” (Jenna Wortham, The New York Times Magazine)

“The Sixth Sense” (Hollywood Pictures)

“On the Evolution of Hollywood Films” (James Cutting, Cornell University, 2010)

“Pulp Fiction” (Miramax)

"The 15:17 to Paris" (Warner Bros. Pictures)

“American Sniper” (Warner Bros. Pictures)

“Sully” (Flashlight Films)

GOP Rep. Brian Mast on Florida School Shooting (Rachel Martin, NPR)

Andre Bauer on State of the Union (CNN)



]]>
We Take the 15:17 All the Way to Pyeongchang full This week we're looking for a thread running through three seemingly disparate moments: the release of Clint Eastwood's new film "The 15:17 to Paris," the Olympics in South Korea, and the tragic death of 17 people at Marjory Stoneman Douglas High School in Parkland, Florida. We use these events to discuss how culture can act as a smokescreen for reality and a way to avoid our fears. Plus: Jenna defends her surprising position that spoilers are actually good. Discussed this week: Queer Eye (Netflix) Alt.Latino (NPR) “Emma González Leads a Student Outcry on Guns: ‘This is the Way I Have to Grieve’” (Julie Turkewitz, Matt Stevens and Jason M. Bailey, The New York Times) “Whole Lot of BS” Funkadelic (Maggot Brain, 1971) "Fergie’s National Anthem Draws Criticism" (ESPN) “Letter of Recommendation: Spoilers” (Jenna Wortham, The New York Times Magazine) “The Sixth Sense” (Hollywood Pictures) “On the Evolution of Hollywood Films” (James Cutting, Cornell University, 2010) “Pulp Fiction” (Miramax) "The 15:17 to Paris" (Warner Bros. Pictures) “American Sniper” (Warner Bros. Pictures) “Sully” (Flashlight Films) GOP Rep. Brian Mast on Florida School Shooting (Rachel Martin, NPR) Andre Bauer on State of the Union (CNN) This week we're looking for a thread running through three seemingly disparate moments: the release of Clint Eastwood's new film "The 15:17 to Paris," the Olympics in South Korea, and the tragic death of 17 people at Marjory Stoneman Douglas High School in Parkland, Florida. We use these events to discuss how culture can act as a smokescreen for reality and a way to avoid our fears. Plus: Jenna defends her surprising position that spoilers are actually good.


Discussed this week:


Queer Eye (Netflix)

Alt.Latino (NPR)

“Emma González Leads a Student Outcry on Guns: ‘This is the Way I Have to Grieve’” (Julie Turkewitz, Matt Stevens and Jason M. Bailey, The New York Times)

Whole Lot of BS” Funkadelic (Maggot Brain, 1971)

"Fergie’s National Anthem Draws Criticism" (ESPN)

Letter of Recommendation: Spoilers” (Jenna Wortham, The New York Times Magazine)

“The Sixth Sense” (Hollywood Pictures)

“On the Evolution of Hollywood Films” (James Cutting, Cornell University, 2010)

“Pulp Fiction” (Miramax)

"The 15:17 to Paris" (Warner Bros. Pictures)

“American Sniper” (Warner Bros. Pictures)

“Sully” (Flashlight Films)

GOP Rep. Brian Mast on Florida School Shooting (Rachel Martin, NPR)

Andre Bauer on State of the Union (CNN)



]]>
gid://art19-episode-locator/V0/O7FBYjl3Rxo4VNB2KTDVBtfnQTFYZtcVf2GiDhxO978 Thu, 22 Feb 2018 09:00:00 -0000 no 00:40:44
We Sink Our Claws Into "Black Panther" with Ta-Nehisi Coates It's going to be one of the biggest opening weekends in movie history. But "Black Panther" is about so much more than the box office. This week we're putting Ryan Coogler's new film in the full context it deserves and demands, with a little help from our friend Ta-Nehisi Coates.

]]>
We Sink Our Claws Into "Black Panther" with Ta-Nehisi Coates full It's going to be one of the biggest opening weekends in movie history. But "Black Panther" is about so much more than the box office. This week we're putting Ryan Coogler's new film in the full context it deserves and demands, with a little help from our friend Ta-Nehisi Coates. It's going to be one of the biggest opening weekends in movie history. But "Black Panther" is about so much more than the box office. This week we're putting Ryan Coogler's new film in the full context it deserves and demands, with a little help from our friend Ta-Nehisi Coates.

]]>
gid://art19-episode-locator/V0/P_CcA5mHXZksSfwSYh828V6INkcjTLEjJPCCAKM4A1I Fri, 16 Feb 2018 09:00:00 -0000 no 00:56:57
We'll See You Tomorrow There's no episode of Still Processing today, but Wesley and Jenna are cooking up something special — a whole show on "Black Panther" with special guest Ta-Nehisi Coates. Check your feed Friday morning!

]]>
We'll See You Tomorrow bonus There's no episode of Still Processing today, but Wesley and Jenna are cooking up something special — a whole show on "Black Panther" with special guest Ta-Nehisi Coates. Check your feed Friday morning! There's no episode of Still Processing today, but Wesley and Jenna are cooking up something special — a whole show on "Black Panther" with special guest Ta-Nehisi Coates. Check your feed Friday morning!

]]>
gid://art19-episode-locator/V0/I9BSmClVnhdt_3BAHcl2TZMqRJGXb7NuK_4iKjkgktU Thu, 15 Feb 2018 14:47:20 -0000 no 00:01:02
We Don't Know Where We Are This week, we take the Oscar-nominated film "Three Billboards Outside of Ebbing, Missouri" as a starting point for a discussion about a new sense of placelessness in film and TV. Over the last year, we've been seeing stories set in ambiguous spaces--the limbo between heaven and hell, distorted models of our world, towns that look like no place we recognize as American. We talk about "The Good Place," "Westworld," "Downsizing," and the Sunken Place from "Get Out" to try and figure out how we lost a sense of where we are. Then we look to shows like "Atlanta" and "The Chi" to think about how we might find our way back.


Discussed This Week:

“Three Billboards Outside Ebbing, Missouri” (Fox Searchlight Pictures)

“Grownish” (Freeform)

“Riverdale” (The CW)

Hot Topic "Riverdale" Merchandise

“Dennis Edwards, Former Temptations Lead Singer, Dies at 74” (Daniel E. Slotnik, The New York Times)

"Don’t Look Any Further" (Dennis Edwards)

"'Three Billboards’ Production Designer Inbal Weinberg on Martin McDonagh’s Unique Approach To Screen Language" (Matt Grobar, Deadline)

“The Good Place” (NBC)

“Stranger Things” (Netflix)

“Coco” (Pixar)

“Black Mirror” (Netflix)

“Get Out” (Universal Pictures)

“Dunkirk” (Warner Bros.)

“Downsizing” (Paramount Pictures)

“Westworld” (HBO)

"Instravel - A Photogenic Mass Tourism Experience" (Oliver KMIA, Vimeo)

“Singin’ in the Rain” (MGM)

“Queen Sugar” (OWN)

“Atlanta” (FX Networks)

“Insecure” (HBO)

“Black-ish” (ABC)

“The Chi” (Showtime)

“Moonlight” (A24)

“Black Panther” (Marvel Studios)

"Space and Place: The Perspective of Experience" (Yi-Fu Tuan, 1977)

"Place and Placelessness" (Edward Relph, 1976)

Super Bowl LII Commercials

“Ram Trucks Commercial with Martin Luther King Jr. Sermon is Criticized” (Sapna Maheshwari, The New York Times)

2018 Kia Stinger - Steven Tyler Big Game Ad - Feel Something Again

Blacture Super Bowl Ad

Amazon Alexa Loses Her Voice - Super Bowl LII Commercial

]]>
We Don't Know Where We Are full This week, we take the Oscar-nominated film "Three Billboards Outside of Ebbing, Missouri" as a starting point for a discussion about a new sense of placelessness in film and TV. Over the last year, we've been seeing stories set in ambiguous spaces--the limbo between heaven and hell, distorted models of our world, towns that look like no place we recognize as American. We talk about "The Good Place," "Westworld," "Downsizing," and the Sunken Place from "Get Out" to try and figure out how we lost a sense of where we are. Then we look to shows like "Atlanta" and "The Chi" to think about how we might find our way back. Discussed This Week: “Three Billboards Outside Ebbing, Missouri” (Fox Searchlight Pictures) “Grownish” (Freeform) “Riverdale” (The CW) Hot Topic "Riverdale" Merchandise “Dennis Edwards, Former Temptations Lead Singer, Dies at 74” (Daniel E. Slotnik, The New York Times) "Don’t Look Any Further" (Dennis Edwards) "'Three Billboards’ Production Designer Inbal Weinberg on Martin McDonagh’s Unique Approach To Screen Language" (Matt Grobar, Deadline) “The Good Place” (NBC) “Stranger Things” (Netflix) “Coco” (Pixar) “Black Mirror” (Netflix) “Get Out” (Universal Pictures) “Dunkirk” (Warner Bros.) “Downsizing” (Paramount Pictures) “Westworld” (HBO) "Instravel - A Photogenic Mass Tourism Experience" (Oliver KMIA, Vimeo) “Singin’ in the Rain” (MGM) “Queen Sugar” (OWN) “Atlanta” (FX Networks) “Insecure” (HBO) “Black-ish” (ABC) “The Chi” (Showtime) “Moonlight” (A24) “Black Panther” (Marvel Studios) "Space and Place: The Perspective of Experience" (Yi-Fu Tuan, 1977) "Place and Placelessness" (Edward Relph, 1976) Super Bowl LII Commercials “Ram Trucks Commercial with Martin Luther King Jr. Sermon is Criticized” (Sapna Maheshwari, The New York Times) 2018 Kia Stinger - Steven Tyler Big Game Ad - Feel Something Again Blacture Super Bowl Ad Amazon Alexa Loses Her Voice - Super Bowl LII Commercial This week, we take the Oscar-nominated film "Three Billboards Outside of Ebbing, Missouri" as a starting point for a discussion about a new sense of placelessness in film and TV. Over the last year, we've been seeing stories set in ambiguous spaces--the limbo between heaven and hell, distorted models of our world, towns that look like no place we recognize as American. We talk about "The Good Place," "Westworld," "Downsizing," and the Sunken Place from "Get Out" to try and figure out how we lost a sense of where we are. Then we look to shows like "Atlanta" and "The Chi" to think about how we might find our way back.


Discussed This Week:

“Three Billboards Outside Ebbing, Missouri” (Fox Searchlight Pictures)

“Grownish” (Freeform)

“Riverdale” (The CW)

Hot Topic "Riverdale" Merchandise

“Dennis Edwards, Former Temptations Lead Singer, Dies at 74” (Daniel E. Slotnik, The New York Times)

"Don’t Look Any Further" (Dennis Edwards)

"'Three Billboards’ Production Designer Inbal Weinberg on Martin McDonagh’s Unique Approach To Screen Language" (Matt Grobar, Deadline)

“The Good Place” (NBC)

“Stranger Things” (Netflix)

“Coco” (Pixar)

“Black Mirror” (Netflix)

“Get Out” (Universal Pictures)

“Dunkirk” (Warner Bros.)

“Downsizing” (Paramount Pictures)

“Westworld” (HBO)

"Instravel - A Photogenic Mass Tourism Experience" (Oliver KMIA, Vimeo)

“Singin’ in the Rain” (MGM)

“Queen Sugar” (OWN)

“Atlanta” (FX Networks)

“Insecure” (HBO)

“Black-ish” (ABC)

“The Chi” (Showtime)

“Moonlight” (A24)

“Black Panther” (Marvel Studios)

"Space and Place: The Perspective of Experience" (Yi-Fu Tuan, 1977)

"Place and Placelessness" (Edward Relph, 1976)

Super Bowl LII Commercials

“Ram Trucks Commercial with Martin Luther King Jr. Sermon is Criticized” (Sapna Maheshwari, The New York Times)

2018 Kia Stinger - Steven Tyler Big Game Ad - Feel Something Again

Blacture Super Bowl Ad

Amazon Alexa Loses Her Voice - Super Bowl LII Commercial

]]>
gid://art19-episode-locator/V0/xtQl5UK1CRqKsUr62ta-w32WNYtbWK-E-qmjL6-CAWY Thu, 08 Feb 2018 09:00:00 -0000 no 00:38:10
We're Still Here For Janet This week, in light of Justin Timberlake’s upcoming Super Bowl performance, we revisit his infamous 2004 “wardrobe malfunction” halftime show with Janet Jackson. We dissect the public reaction to “nipplegate,” why Janet (and not Justin) took the fall, and how the controversy changed the course of both artists’ careers. We consider Justin’s new musical direction in the context his history of appropriating other cultures. And we offer Janet the forgiveness she deserves, realizing that her sexual experimentation led to some of our favorite moments in music history.


Discussed This Week:


“Is ‘RuPaul’s Drag Race’ the Most Radical Show on TV?” (Jenna Wortham, The New York Times)

Evidentiary Bodies (Barbara Hammer at the Leslie-Lohman Museum)

“The Lunar Eclipse and Super Blue Moon Are Here. Watch it Before Work.” (Nicholas St. Fleur, The New York Times)

“The Color of Kink” (Ariane Cruz, 2016)

“How Jesse Williams Stole BET Awards with Speech on Racism” (Katie Rogers, The New York Times)

Man of the Woods (Justin Timberlake)

History of Rap (Jimmy Fallon and Justin Timberlake, “The Tonight Show Starring Jimmy Fallon”)

Janet Jackson (in Tyler Perry’s “Why Did I Get Married”)



]]>
We're Still Here For Janet full This week, in light of Justin Timberlake’s upcoming Super Bowl performance, we revisit his infamous 2004 “wardrobe malfunction” halftime show with Janet Jackson. We dissect the public reaction to “nipplegate,” why Janet (and not Justin) took the fall, and how the controversy changed the course of both artists’ careers. We consider Justin’s new musical direction in the context his history of appropriating other cultures. And we offer Janet the forgiveness she deserves, realizing that her sexual experimentation led to some of our favorite moments in music history. Discussed This Week: “Is ‘RuPaul’s Drag Race’ the Most Radical Show on TV?” (Jenna Wortham, The New York Times) Evidentiary Bodies (Barbara Hammer at the Leslie-Lohman Museum) “The Lunar Eclipse and Super Blue Moon Are Here. Watch it Before Work.” (Nicholas St. Fleur, The New York Times) “The Color of Kink” (Ariane Cruz, 2016) “How Jesse Williams Stole BET Awards with Speech on Racism” (Katie Rogers, The New York Times) Man of the Woods (Justin Timberlake) History of Rap (Jimmy Fallon and Justin Timberlake, “The Tonight Show Starring Jimmy Fallon”) Janet Jackson (in Tyler Perry’s “Why Did I Get Married”) This week, in light of Justin Timberlake’s upcoming Super Bowl performance, we revisit his infamous 2004 “wardrobe malfunction” halftime show with Janet Jackson. We dissect the public reaction to “nipplegate,” why Janet (and not Justin) took the fall, and how the controversy changed the course of both artists’ careers. We consider Justin’s new musical direction in the context his history of appropriating other cultures. And we offer Janet the forgiveness she deserves, realizing that her sexual experimentation led to some of our favorite moments in music history.


Discussed This Week:


“Is ‘RuPaul’s Drag Race’ the Most Radical Show on TV?” (Jenna Wortham, The New York Times)

Evidentiary Bodies (Barbara Hammer at the Leslie-Lohman Museum)

“The Lunar Eclipse and Super Blue Moon Are Here. Watch it Before Work.” (Nicholas St. Fleur, The New York Times)

“The Color of Kink” (Ariane Cruz, 2016)

“How Jesse Williams Stole BET Awards with Speech on Racism” (Katie Rogers, The New York Times)

Man of the Woods (Justin Timberlake)

History of Rap (Jimmy Fallon and Justin Timberlake, “The Tonight Show Starring Jimmy Fallon”)

Janet Jackson (in Tyler Perry’s “Why Did I Get Married”)



]]>
gid://art19-episode-locator/V0/LW0BXMJv38FjuilkjUo85Ms7XgkYPwyhGoaiwQHfB2c Thu, 01 Feb 2018 09:00:00 -0000 no 00:58:05
We Have a Right To Be Mad This week, we examine the outrage that is expressing itself in all corners of the culture. In the process, we found unexpected connections between events and ideas that might seem unrelated: Ed Sheeran being left out of all the major Grammy categories as a (possible) way to avoid controversy, the heated debate over an account of a bad date with Aziz Ansari, the testimony at the sentencing of Dr. Larry Nassar from hundreds of gymnasts who had been sexually abused, and year two of the women's march. We're thinking about why women's anger is feared, and what it means to dole out punishment against men. Whose anger counts, what kind of anger is healthy, and is there solidarity to be found in anger? Our conversation took us to places we didn't know we'd go--including becoming enraged ourselves.


Discussed This Week:

“Dolores O’Riordan, Lead Singer of the Cranberries, Dies at 46” (Christine Hauser, The New York Times)

“2018 Oscar Nominations” (Brooks Barnes, The New York Times)

“2018 Grammy Nominations” (The New York Times)

“Electric Dreams” (Amazon)

“How Ed Sheeran Made ‘Shape of You’ The Years Biggest Track” (John Pereles, The New York Times)

“The Grammy Awards Voting Process” (Recording Academy)

“I went on a date with Aziz Ansari. It turned into the worst night of my life.” (Katie Way, Babe.net)

“Modern Romance” (Aziz Ansari, 2015)

“I Used to Insist I Didn’t Get Angry. Not Anymore.” (Leslie Jamison, The New York Times Magazine)

“Banfield slams Ansari accuser in open letter” (CNN)

“One After Another, Athletes Face Larry Nassar and Recount Sexual Abuse” (Scott Cacciola and Christine Hauser, The New York Times)

]]>
We Have a Right To Be Mad full This week, we examine the outrage that is expressing itself in all corners of the culture. In the process, we found unexpected connections between events and ideas that might seem unrelated: Ed Sheeran being left out of all the major Grammy categories as a (possible) way to avoid controversy, the heated debate over an account of a bad date with Aziz Ansari, the testimony at the sentencing of Dr. Larry Nassar from hundreds of gymnasts who had been sexually abused, and year two of the women's march. We're thinking about why women's anger is feared, and what it means to dole out punishment against men. Whose anger counts, what kind of anger is healthy, and is there solidarity to be found in anger? Our conversation took us to places we didn't know we'd go--including becoming enraged ourselves. Discussed This Week: “Dolores O’Riordan, Lead Singer of the Cranberries, Dies at 46” (Christine Hauser, The New York Times) “2018 Oscar Nominations” (Brooks Barnes, The New York Times) “2018 Grammy Nominations” (The New York Times) “Electric Dreams” (Amazon) “How Ed Sheeran Made ‘Shape of You’ The Years Biggest Track” (John Pereles, The New York Times) “The Grammy Awards Voting Process” (Recording Academy) “I went on a date with Aziz Ansari. It turned into the worst night of my life.” (Katie Way, Babe.net) “Modern Romance” (Aziz Ansari, 2015) “I Used to Insist I Didn’t Get Angry. Not Anymore.” (Leslie Jamison, The New York Times Magazine) “Banfield slams Ansari accuser in open letter” (CNN) “One After Another, Athletes Face Larry Nassar and Recount Sexual Abuse” (Scott Cacciola and Christine Hauser, The New York Times) This week, we examine the outrage that is expressing itself in all corners of the culture. In the process, we found unexpected connections between events and ideas that might seem unrelated: Ed Sheeran being left out of all the major Grammy categories as a (possible) way to avoid controversy, the heated debate over an account of a bad date with Aziz Ansari, the testimony at the sentencing of Dr. Larry Nassar from hundreds of gymnasts who had been sexually abused, and year two of the women's march. We're thinking about why women's anger is feared, and what it means to dole out punishment against men. Whose anger counts, what kind of anger is healthy, and is there solidarity to be found in anger? Our conversation took us to places we didn't know we'd go--including becoming enraged ourselves.


Discussed This Week:

“Dolores O’Riordan, Lead Singer of the Cranberries, Dies at 46” (Christine Hauser, The New York Times)

“2018 Oscar Nominations” (Brooks Barnes, The New York Times)

“2018 Grammy Nominations” (The New York Times)

“Electric Dreams” (Amazon)

“How Ed Sheeran Made ‘Shape of You’ The Years Biggest Track” (John Pereles, The New York Times)

“The Grammy Awards Voting Process” (Recording Academy)

“I went on a date with Aziz Ansari. It turned into the worst night of my life.” (Katie Way, Babe.net)

“Modern Romance” (Aziz Ansari, 2015)

“I Used to Insist I Didn’t Get Angry. Not Anymore.” (Leslie Jamison, The New York Times Magazine)

“Banfield slams Ansari accuser in open letter” (CNN)

“One After Another, Athletes Face Larry Nassar and Recount Sexual Abuse” (Scott Cacciola and Christine Hauser, The New York Times)

]]>
gid://art19-episode-locator/V0/QOFT31pW8Dyi5J77woeBnyItOk87pvCNr4dpKS4TJ5w Thu, 25 Jan 2018 09:00:00 -0000 no 00:47:53
We Have a Theory About Oprah The wait is finally over - we’re back for Season 3! This week, we look at the movie “Proud Mary” starring Taraji P. Henson as a jumping off point for the cultural moment that black women are having right now in pop culture. We run through a brief history of black women in movies and television and consider those who built the foundation for this moment. From Hattie McDaniel to Dorothy Dandridge to Whoopi Goldberg to Halle Berry, we consider what all of this means for how we discuss Oprah’s (possible) presidential run.


Discussed This Week:


“She’s Gotta Have It” (Netflix)


“The Case for the Subway" (Jonathan Mahler, New York Times Magazine)


Black Women Voters of Alabama


“Picturing Us: African American Identity in Photography” (Deb Willis)


Diahann Carroll (in "Julia")


Pam Grier (in "Coffy")


Oprah’s SNL Cold Open


“The Spector of Oprah Winfrey: Critical Black Female Spectorship“ (Terisha L. Stanley, 2007)



]]>
We Have a Theory About Oprah full The wait is finally over - we’re back for Season 3! This week, we look at the movie “Proud Mary” starring Taraji P. Henson as a jumping off point for the cultural moment that black women are having right now in pop culture. We run through a brief history of black women in movies and television and consider those who built the foundation for this moment. From Hattie McDaniel to Dorothy Dandridge to Whoopi Goldberg to Halle Berry, we consider what all of this means for how we discuss Oprah’s (possible) presidential run. Discussed This Week: “She’s Gotta Have It” (Netflix) “The Case for the Subway" (Jonathan Mahler, New York Times Magazine) Black Women Voters of Alabama “Picturing Us: African American Identity in Photography” (Deb Willis) Diahann Carroll (in "Julia") Pam Grier (in "Coffy") Oprah’s SNL Cold Open “The Spector of Oprah Winfrey: Critical Black Female Spectorship“ (Terisha L. Stanley, 2007) The wait is finally over - we’re back for Season 3! This week, we look at the movie “Proud Mary” starring Taraji P. Henson as a jumping off point for the cultural moment that black women are having right now in pop culture. We run through a brief history of black women in movies and television and consider those who built the foundation for this moment. From Hattie McDaniel to Dorothy Dandridge to Whoopi Goldberg to Halle Berry, we consider what all of this means for how we discuss Oprah’s (possible) presidential run.


Discussed This Week:


“She’s Gotta Have It” (Netflix)


“The Case for the Subway" (Jonathan Mahler, New York Times Magazine)


Black Women Voters of Alabama


“Picturing Us: African American Identity in Photography” (Deb Willis)


Diahann Carroll (in "Julia")


Pam Grier (in "Coffy")


Oprah’s SNL Cold Open


“The Spector of Oprah Winfrey: Critical Black Female Spectorship“ (Terisha L. Stanley, 2007)



]]>
gid://art19-episode-locator/V0/UE9s18txCVrbgUerPgYVXpvlPNfKT5poxCBxhL9bI50 Thu, 18 Jan 2018 09:00:00 -0000 no 00:46:49
We Back! (On Thursday) The wait is (almost) over: Jenna and Wesley will be back with a new season of "Still Processing" starting Thursday, Jan. 18th. It’s O.K. to cry, even if you’re wearing glitter.

]]>
We Back! (On Thursday) trailer The wait is (almost) over: Jenna and Wesley will be back with a new season of "Still Processing" starting Thursday, Jan. 18th. It’s O.K. to cry, even if you’re wearing glitter. The wait is (almost) over: Jenna and Wesley will be back with a new season of "Still Processing" starting Thursday, Jan. 18th. It’s O.K. to cry, even if you’re wearing glitter.

]]>
gid://art19-episode-locator/V0/XQyCQpy0ynjRQdcBxD177QfWsAkfhSN9vM4-n-dtMUY Tue, 16 Jan 2018 23:18:48 -0000 no 00:01:48
We Are Tired of Sexual Harassment (and Sequels) | Season Finale It’s our season finale! We’ve spent our second season keeping a critical eye on the unreality of America and dissecting the systems of power that uphold the status quo. Last week, a series of news articles reported that Harvey Weinstein, one of the most powerful movie producers in Hollywood, has been accused of sexually harrassing women for decades. Twitter is ablaze with other women and men sharing their own stories of sexual misconduct at the hands of the powerful, spawning conversations about power and fame, privilege and punishment. The aftermath has raised questions about the commonality of harassment — and has forced us to confront our own complacency. We were compelled to talk about the cultural petri dish that allows assault and abuse to perpetuate and about what might be changing, socially and technologically, that is encouraging survivors to come forward. We also discuss the recently released “Blade Runner 2049” which somehow felt lacking, as if science fiction can’t keep up with the reality of the moment we’re living through. And before we sign off for a few months, we relive some of our favorite moments from this season. Thank you for listening, and we’ll talk to you soon!

]]>
We Are Tired of Sexual Harassment (and Sequels) | Season Finale full It’s our season finale! We’ve spent our second season keeping a critical eye on the unreality of America and dissecting the systems of power that uphold the status quo. Last week, a series of news articles reported that Harvey Weinstein, one of the most powerful movie producers in Hollywood, has been accused of sexually harrassing women for decades. Twitter is ablaze with other women and men sharing their own stories of sexual misconduct at the hands of the powerful, spawning conversations about power and fame, privilege and punishment. The aftermath has raised questions about the commonality of harassment — and has forced us to confront our own complacency. We were compelled to talk about the cultural petri dish that allows assault and abuse to perpetuate and about what might be changing, socially and technologically, that is encouraging survivors to come forward. We also discuss the recently released “Blade Runner 2049” which somehow felt lacking, as if science fiction can’t keep up with the reality of the moment we’re living through. And before we sign off for a few months, we relive some of our favorite moments from this season. Thank you for listening, and we’ll talk to you soon! It’s our season finale! We’ve spent our second season keeping a critical eye on the unreality of America and dissecting the systems of power that uphold the status quo. Last week, a series of news articles reported that Harvey Weinstein, one of the most powerful movie producers in Hollywood, has been accused of sexually harrassing women for decades. Twitter is ablaze with other women and men sharing their own stories of sexual misconduct at the hands of the powerful, spawning conversations about power and fame, privilege and punishment. The aftermath has raised questions about the commonality of harassment — and has forced us to confront our own complacency. We were compelled to talk about the cultural petri dish that allows assault and abuse to perpetuate and about what might be changing, socially and technologically, that is encouraging survivors to come forward. We also discuss the recently released “Blade Runner 2049” which somehow felt lacking, as if science fiction can’t keep up with the reality of the moment we’re living through. And before we sign off for a few months, we relive some of our favorite moments from this season. Thank you for listening, and we’ll talk to you soon!

]]>
gid://art19-episode-locator/V0/8xlOSmDI44zLyec2SJNH2ZvN1RlbTsH86rtUGqnHBIQ Thu, 12 Oct 2017 08:30:00 -0000 no 00:40:35
We Get Biracial For months, the two of us have been trying to figure out a way to have a conversation about the experience of being biracial. This week we just go for it. First, we talk about the cultural and historical suspicion America still has of black-white interracial romantic relationships. It gives us an excuse to revisit the reason ‘‘Get Out’’ has been one of the year’s major movies: It articulates the previously inarticulable about race. Then we consider the offspring of interracial coupling — whether the possibility of occupying two identities (or more) is a choice, a luxury or a delusion; and what fears, doubts or envy nonbiracial black Americans might feel about biracial black Americans. We drop in on Spike Lee’s ‘‘School Daze’’ and the sitcom ‘‘Black-ish.’’ We consider our feelings about Rashida Jones, Drake and Vin Diesel. We unpack the writings of Zadie Smith and Barack Obama. And we kind of have to ask: Aren’t we all a little bit mixed?

]]>
We Get Biracial full For months, the two of us have been trying to figure out a way to have a conversation about the experience of being biracial. This week we just go for it. First, we talk about the cultural and historical suspicion America still has of black-white interracial romantic relationships. It gives us an excuse to revisit the reason ‘‘Get Out’’ has been one of the year’s major movies: It articulates the previously inarticulable about race. Then we consider the offspring of interracial coupling — whether the possibility of occupying two identities (or more) is a choice, a luxury or a delusion; and what fears, doubts or envy nonbiracial black Americans might feel about biracial black Americans. We drop in on Spike Lee’s ‘‘School Daze’’ and the sitcom ‘‘Black-ish.’’ We consider our feelings about Rashida Jones, Drake and Vin Diesel. We unpack the writings of Zadie Smith and Barack Obama. And we kind of have to ask: Aren’t we all a little bit mixed? For months, the two of us have been trying to figure out a way to have a conversation about the experience of being biracial. This week we just go for it. First, we talk about the cultural and historical suspicion America still has of black-white interracial romantic relationships. It gives us an excuse to revisit the reason ‘‘Get Out’’ has been one of the year’s major movies: It articulates the previously inarticulable about race. Then we consider the offspring of interracial coupling — whether the possibility of occupying two identities (or more) is a choice, a luxury or a delusion; and what fears, doubts or envy nonbiracial black Americans might feel about biracial black Americans. We drop in on Spike Lee’s ‘‘School Daze’’ and the sitcom ‘‘Black-ish.’’ We consider our feelings about Rashida Jones, Drake and Vin Diesel. We unpack the writings of Zadie Smith and Barack Obama. And we kind of have to ask: Aren’t we all a little bit mixed?

]]>
gid://art19-episode-locator/V0/OBzmLOL1XAPzGwXljNtEp4B4t7_2t-3EVUdnWOJx5tM Thu, 05 Oct 2017 08:45:00 -0000 no 00:52:38
We Take a Knee Another day, another rant from Donald Trump. This time, the president took aim at Colin Kaepernick, the former San Francisco 49ers quarterback who spent the majority of last season sitting or kneeling during the national anthem to draw attention to police brutality and racial injustice. Trump’s remarks — that the owners of football teams should fire anyone who followed suit — prompted a nationwide demonstration the following Sunday from players and team owners who knelt or linked arms. We talk about the language used by the president and his supporters and their expectations of black entertainers and athletes. We also investigate the history of the national anthem. What all did Francis Scott Key really invoke in the “Star-Spangled Banner”? Oh, and we also manage to work in a reference to “Get Out.” All kinds of people, including Stevie Wonder and celebrity chef Carla Hall, are joining the #TakeAKnee movement. Will it retain its integrity as it evolves away from Kaepernick?

]]>
We Take a Knee full Another day, another rant from Donald Trump. This time, the president took aim at Colin Kaepernick, the former San Francisco 49ers quarterback who spent the majority of last season sitting or kneeling during the national anthem to draw attention to police brutality and racial injustice. Trump’s remarks — that the owners of football teams should fire anyone who followed suit — prompted a nationwide demonstration the following Sunday from players and team owners who knelt or linked arms. We talk about the language used by the president and his supporters and their expectations of black entertainers and athletes. We also investigate the history of the national anthem. What all did Francis Scott Key really invoke in the “Star-Spangled Banner”? Oh, and we also manage to work in a reference to “Get Out.” All kinds of people, including Stevie Wonder and celebrity chef Carla Hall, are joining the #TakeAKnee movement. Will it retain its integrity as it evolves away from Kaepernick? Another day, another rant from Donald Trump. This time, the president took aim at Colin Kaepernick, the former San Francisco 49ers quarterback who spent the majority of last season sitting or kneeling during the national anthem to draw attention to police brutality and racial injustice. Trump’s remarks — that the owners of football teams should fire anyone who followed suit — prompted a nationwide demonstration the following Sunday from players and team owners who knelt or linked arms. We talk about the language used by the president and his supporters and their expectations of black entertainers and athletes. We also investigate the history of the national anthem. What all did Francis Scott Key really invoke in the “Star-Spangled Banner”? Oh, and we also manage to work in a reference to “Get Out.” All kinds of people, including Stevie Wonder and celebrity chef Carla Hall, are joining the #TakeAKnee movement. Will it retain its integrity as it evolves away from Kaepernick?

]]>
gid://art19-episode-locator/V0/qZXqY_0neaQSkvn4S1twenaJIIsYIDib5yZRCXCWJCw Thu, 28 Sep 2017 08:00:00 -0000 no 00:34:13
We Assess the Outrage over "Bodega" and Mother! Last week, a Silicon Valley startup called Bodega instigated an internet meltdown after a Fast Company profile made the company’s intentions clear. “Eventually, centralized shopping locations won’t be necessary, because there will be 100,000 Bodegas spread out, with one always 100 feet away from you,” said Paul McDonald, a co-founder, who used to work at Google. The outrage made moral sense. “Bodega” is name that’s asking for trouble, especially with people who frequent them. The outrage is also easy. Where’s the upset over the effect other, bigger companies – like Amazon, whose latest major acquisition, Whole Foods, has slashed prices – might actually have on bodegas? Being mad at Amazon is harder when it’s mixed up in so much of your life. We discuss the dilemma.

We also get into the horror at the movies (“It,” “Mother!”) and on TV (“American Horror Story: Cult”), and how it meets up with our times in surprising and hilarious ways — especially Darren Aronofsky’s “Mother!” with Jennifer Lawerence and Javier Bardem. It’s a mess and a half. But it’s a really fun mess.

]]>
We Assess the Outrage over "Bodega" and Mother! full Last week, a Silicon Valley startup called Bodega instigated an internet meltdown after a Fast Company profile made the company’s intentions clear. “Eventually, centralized shopping locations won’t be necessary, because there will be 100,000 Bodegas spread out, with one always 100 feet away from you,” said Paul McDonald, a co-founder, who used to work at Google. The outrage made moral sense. “Bodega” is name that’s asking for trouble, especially with people who frequent them. The outrage is also easy. Where’s the upset over the effect other, bigger companies – like Amazon, whose latest major acquisition, Whole Foods, has slashed prices – might actually have on bodegas? Being mad at Amazon is harder when it’s mixed up in so much of your life. We discuss the dilemma. We also get into the horror at the movies (“It,” “Mother!”) and on TV (“American Horror Story: Cult”), and how it meets up with our times in surprising and hilarious ways — especially Darren Aronofsky’s “Mother!” with Jennifer Lawerence and Javier Bardem. It’s a mess and a half. But it’s a really fun mess. Last week, a Silicon Valley startup called Bodega instigated an internet meltdown after a Fast Company profile made the company’s intentions clear. “Eventually, centralized shopping locations won’t be necessary, because there will be 100,000 Bodegas spread out, with one always 100 feet away from you,” said Paul McDonald, a co-founder, who used to work at Google. The outrage made moral sense. “Bodega” is name that’s asking for trouble, especially with people who frequent them. The outrage is also easy. Where’s the upset over the effect other, bigger companies – like Amazon, whose latest major acquisition, Whole Foods, has slashed prices – might actually have on bodegas? Being mad at Amazon is harder when it’s mixed up in so much of your life. We discuss the dilemma.

We also get into the horror at the movies (“It,” “Mother!”) and on TV (“American Horror Story: Cult”), and how it meets up with our times in surprising and hilarious ways — especially Darren Aronofsky’s “Mother!” with Jennifer Lawerence and Javier Bardem. It’s a mess and a half. But it’s a really fun mess.

]]>
gid://art19-episode-locator/V0/RqyByTw0eCz1hYvD4Wq9xcM4A_8auUwXUIvVz8usXx0 Thu, 21 Sep 2017 08:00:00 -0000 no 00:42:00
We Bow Down to Rihanna and Venus Last week, we witnessed two extraordinary events: Venus Williams playing some of the best tennis in the last decade of her career (she lost in the U.S. Open, but with grace and style), and the rollout of Rihanna's new cosmetics line, Fenty Beauty, which was splashier than the launch of the new iPhone X. We learned something unexpected from both. Venus showed us what it means to lose, and yet somehow remain undefeated, and the Rihanna event gave us insight into the economy of social media “influencers” who are radically changing—and possibly democratizing—the beauty and fashion industries.




]]>
We Bow Down to Rihanna and Venus full Last week, we witnessed two extraordinary events: Venus Williams playing some of the best tennis in the last decade of her career (she lost in the U.S. Open, but with grace and style), and the rollout of Rihanna's new cosmetics line, Fenty Beauty, which was splashier than the launch of the new iPhone X. We learned something unexpected from both. Venus showed us what it means to lose, and yet somehow remain undefeated, and the Rihanna event gave us insight into the economy of social media “influencers” who are radically changing—and possibly democratizing—the beauty and fashion industries. Last week, we witnessed two extraordinary events: Venus Williams playing some of the best tennis in the last decade of her career (she lost in the U.S. Open, but with grace and style), and the rollout of Rihanna's new cosmetics line, Fenty Beauty, which was splashier than the launch of the new iPhone X. We learned something unexpected from both. Venus showed us what it means to lose, and yet somehow remain undefeated, and the Rihanna event gave us insight into the economy of social media “influencers” who are radically changing—and possibly democratizing—the beauty and fashion industries.




]]>
gid://art19-episode-locator/V0/p7C7J0uHgHdFzUzRza31u-UoNnWJKl-9dPL_b3oPjps Thu, 14 Sep 2017 08:55:00 -0000 no 00:40:39
We Debate NPR’s Greatest Albums by Women Last month, NPR published a list of the 150 greatest albums by women. The list was debated. It was discussed. There were alternative lists of 150 additional albums not on the NPR list. But quibbling with the particulars misses an important concern about what it means to argue for a women-only canon. This week we discuss why it takes an all-women team at NPR to celebrate women musicians, and why women are glaringly missing from lists determined by both genders. We also revisit the song of the summer, a phenomenon that is ruled by male artists — but perhaps not according to us.

]]>
We Debate NPR’s Greatest Albums by Women full Last month, NPR published a list of the 150 greatest albums by women. The list was debated. It was discussed. There were alternative lists of 150 additional albums not on the NPR list. But quibbling with the particulars misses an important concern about what it means to argue for a women-only canon. This week we discuss why it takes an all-women team at NPR to celebrate women musicians, and why women are glaringly missing from lists determined by both genders. We also revisit the song of the summer, a phenomenon that is ruled by male artists — but perhaps not according to us. Last month, NPR published a list of the 150 greatest albums by women. The list was debated. It was discussed. There were alternative lists of 150 additional albums not on the NPR list. But quibbling with the particulars misses an important concern about what it means to argue for a women-only canon. This week we discuss why it takes an all-women team at NPR to celebrate women musicians, and why women are glaringly missing from lists determined by both genders. We also revisit the song of the summer, a phenomenon that is ruled by male artists — but perhaps not according to us.

]]>
gid://art19-episode-locator/V0/xLiZOEnqJEu-JQpRDFCC68mrvj8byZbK4givn_CY7xo Thu, 07 Sep 2017 08:55:00 -0000 no 00:40:18
We Have a Chappelle Show This summer, Dave Chappelle returned to the stage for an ambitious, monthlong residency at Radio City Music Hall in New York. We saw the show independently, on separate nights. What we witnessed inspired us to dedicate an entire episode to the legacy of Chappelle’s comedy as he works to re-establish his place in American culture. But much has shifted in the decade since Chappelle, through his much-loved TV show, “Chappelle’s Show,” brilliantly explored how black people are represented and misrepresented: Nowadays, he’s no longer interested in speaking on behalf of anyone else. We consider his past to consider where he might be headed and whether we still need comedians — and comedy, for that matter — to help us make sense of the present.

]]>
We Have a Chappelle Show full This summer, Dave Chappelle returned to the stage for an ambitious, monthlong residency at Radio City Music Hall in New York. We saw the show independently, on separate nights. What we witnessed inspired us to dedicate an entire episode to the legacy of Chappelle’s comedy as he works to re-establish his place in American culture. But much has shifted in the decade since Chappelle, through his much-loved TV show, “Chappelle’s Show,” brilliantly explored how black people are represented and misrepresented: Nowadays, he’s no longer interested in speaking on behalf of anyone else. We consider his past to consider where he might be headed and whether we still need comedians — and comedy, for that matter — to help us make sense of the present. This summer, Dave Chappelle returned to the stage for an ambitious, monthlong residency at Radio City Music Hall in New York. We saw the show independently, on separate nights. What we witnessed inspired us to dedicate an entire episode to the legacy of Chappelle’s comedy as he works to re-establish his place in American culture. But much has shifted in the decade since Chappelle, through his much-loved TV show, “Chappelle’s Show,” brilliantly explored how black people are represented and misrepresented: Nowadays, he’s no longer interested in speaking on behalf of anyone else. We consider his past to consider where he might be headed and whether we still need comedians — and comedy, for that matter — to help us make sense of the present.

]]>
gid://art19-episode-locator/V0/k57dmUjhGng_Wu0FWXgScfaywlYUedDxIHcWyYOttgg Thu, 31 Aug 2017 08:58:00 -0000 no 00:56:31
We Care For Ourselves and Others in Trump’s America The events of the last few weeks have shown us that we are fully living in Trump's America, with a president who is slow to condemn the actions of white supremacists. The realization has been exhausting. This week, we take a step back to think about what the political moment is doing to our emotional and physical states. We discuss our routines of self-care — and investigate the origins of the phrase, and why it feels overused and even a little cliche. We also talk to Dr. Matthew Steinfeld, an assistant professor of psychiatry at the Yale University School of Medicine about our ailing country and get a few ideas for how to remedy ourselves, and perhaps each other.

]]>
We Care For Ourselves and Others in Trump’s America full The events of the last few weeks have shown us that we are fully living in Trump's America, with a president who is slow to condemn the actions of white supremacists. The realization has been exhausting. This week, we take a step back to think about what the political moment is doing to our emotional and physical states. We discuss our routines of self-care — and investigate the origins of the phrase, and why it feels overused and even a little cliche. We also talk to Dr. Matthew Steinfeld, an assistant professor of psychiatry at the Yale University School of Medicine about our ailing country and get a few ideas for how to remedy ourselves, and perhaps each other. The events of the last few weeks have shown us that we are fully living in Trump's America, with a president who is slow to condemn the actions of white supremacists. The realization has been exhausting. This week, we take a step back to think about what the political moment is doing to our emotional and physical states. We discuss our routines of self-care — and investigate the origins of the phrase, and why it feels overused and even a little cliche. We also talk to Dr. Matthew Steinfeld, an assistant professor of psychiatry at the Yale University School of Medicine about our ailing country and get a few ideas for how to remedy ourselves, and perhaps each other.

]]>
gid://art19-episode-locator/V0/nXJRovvgdHpMBPMqX6IUhgHyWjsc6bhAIHaHR-1IuNk Thu, 24 Aug 2017 12:53:53 -0000 no 00:48:05
We Grieve Charlottesville What happened in Charlottesville, Va., over the weekend was the largest public melee during a presidential administration that includes men with white nationalist ties. Three people were killed, dozens of people were injured and the country was thrown into a state of anguish and shock. The show was on vacation, but we came back early to do a special episode about Charlottesville. We talk about why the violence there isn’t surprising, what it means to remove totems of the American Confederacy and what a verbal apology from President Trump is really worth.

]]>
We Grieve Charlottesville full What happened in Charlottesville, Va., over the weekend was the largest public melee during a presidential administration that includes men with white nationalist ties. Three people were killed, dozens of people were injured and the country was thrown into a state of anguish and shock. The show was on vacation, but we came back early to do a special episode about Charlottesville. We talk about why the violence there isn’t surprising, what it means to remove totems of the American Confederacy and what a verbal apology from President Trump is really worth. What happened in Charlottesville, Va., over the weekend was the largest public melee during a presidential administration that includes men with white nationalist ties. Three people were killed, dozens of people were injured and the country was thrown into a state of anguish and shock. The show was on vacation, but we came back early to do a special episode about Charlottesville. We talk about why the violence there isn’t surprising, what it means to remove totems of the American Confederacy and what a verbal apology from President Trump is really worth.

]]>
gid://art19-episode-locator/V0/91sdPfOjO-6tzpMMUaCE9UZzhlOQ1tM1jl9PAbQwyq8 Tue, 15 Aug 2017 20:48:25 -0000 https://www.nytimes.com/2017/08/15/podcasts/still-processing-anguish-and-anger-over-charlottesville.html no 00:29:10
We Discuss: Who Owns Stories About Blackness? It’s been a summer of outrage over the question of who can tell stories about black history and black pain. We reckon with this question by examining Kathryn Bigelow’s film "Detroit," Dana Schutz's painting “Open Casket” and the recently announced new project from the "Game of Thrones" showrunners, an HBO drama called "Confederate." Without promising any answers, we also ask: Do stories about the American black experience belong to all Americans? Are there any criteria by which white creators can successfully make work about blackness?  

]]>
We Discuss: Who Owns Stories About Blackness? full It’s been a summer of outrage over the question of who can tell stories about black history and black pain. We reckon with this question by examining Kathryn Bigelow’s film "Detroit," Dana Schutz's painting “Open Casket” and the recently announced new project from the "Game of Thrones" showrunners, an HBO drama called "Confederate." Without promising any answers, we also ask: Do stories about the American black experience belong to all Americans? Are there any criteria by which white creators can successfully make work about blackness?   It’s been a summer of outrage over the question of who can tell stories about black history and black pain. We reckon with this question by examining Kathryn Bigelow’s film "Detroit," Dana Schutz's painting “Open Casket” and the recently announced new project from the "Game of Thrones" showrunners, an HBO drama called "Confederate." Without promising any answers, we also ask: Do stories about the American black experience belong to all Americans? Are there any criteria by which white creators can successfully make work about blackness?  

]]>
gid://art19-episode-locator/V0/p2PWL082EK9xwo0a-boq1bRWlv-y6eFOFRRGDgwZ-mk Thu, 03 Aug 2017 09:55:00 -0000 https://www.nytimes.com/2017/08/03/podcasts/confederate-detroit-and-who-owns-stories-about-blackness.html no 00:47:55
We’re Freaking Out About O.J. and Girls Trip The country was barely on the other side of a period of deep thought about the cultural meaning of O.J. Simpson, and then last week we found out that O.J. will be a free man this October. We explore the vexing empathy that racism toward him inspires in us. Second, we can’t believe how much fun we had watching "Girls Trip"! Comedies starring black women – in which they aren’t the butt of the joke – are virtually non-existent. We cheer the movie for giving us four fun, sexual black women without also denying their humanness.

]]>
We’re Freaking Out About O.J. and Girls Trip full The country was barely on the other side of a period of deep thought about the cultural meaning of O.J. Simpson, and then last week we found out that O.J. will be a free man this October. We explore the vexing empathy that racism toward him inspires in us. Second, we can’t believe how much fun we had watching "Girls Trip"! Comedies starring black women – in which they aren’t the butt of the joke – are virtually non-existent. We cheer the movie for giving us four fun, sexual black women without also denying their humanness. The country was barely on the other side of a period of deep thought about the cultural meaning of O.J. Simpson, and then last week we found out that O.J. will be a free man this October. We explore the vexing empathy that racism toward him inspires in us. Second, we can’t believe how much fun we had watching "Girls Trip"! Comedies starring black women – in which they aren’t the butt of the joke – are virtually non-existent. We cheer the movie for giving us four fun, sexual black women without also denying their humanness.

]]>
gid://art19-episode-locator/V0/2YawSXjGy8VeBwQ4B6QuThBWLGRHJzEhKZobXRvtN8s Thu, 27 Jul 2017 09:58:00 -0000 https://www.nytimes.com/2017/07/27/podcasts/reveling-in-the-unapologetic-blackness-of-girls-trip.html no 00:39:19
We Pick Science Fiction for Mitch McConnell 2017 feels sort of like the End Times, and we’re leaning into science fiction TV shows and movies to imagine the outcome of our current political and geological climate. If science fiction functions as a cautionary tale, offering lessons in morality and asking us to consider our relationship with technology, what should our country’s leaders be watching? We discuss “War for the Planet of the Apes,” in which highly intelligent apes and plague-riddled humans battle for control of the Earth. Then, we serve up a list of sci-fi homework for ourselves and our elected officials.

]]>
We Pick Science Fiction for Mitch McConnell full 2017 feels sort of like the End Times, and we’re leaning into science fiction TV shows and movies to imagine the outcome of our current political and geological climate. If science fiction functions as a cautionary tale, offering lessons in morality and asking us to consider our relationship with technology, what should our country’s leaders be watching? We discuss “War for the Planet of the Apes,” in which highly intelligent apes and plague-riddled humans battle for control of the Earth. Then, we serve up a list of sci-fi homework for ourselves and our elected officials. 2017 feels sort of like the End Times, and we’re leaning into science fiction TV shows and movies to imagine the outcome of our current political and geological climate. If science fiction functions as a cautionary tale, offering lessons in morality and asking us to consider our relationship with technology, what should our country’s leaders be watching? We discuss “War for the Planet of the Apes,” in which highly intelligent apes and plague-riddled humans battle for control of the Earth. Then, we serve up a list of sci-fi homework for ourselves and our elected officials.

]]>
gid://art19-episode-locator/V0/7QLgKAEkn873a2Cmw9PxeSwULvTm0M_2dkiX1PkxNT8 Thu, 20 Jul 2017 09:58:00 -0000 https://www.nytimes.com/2017/07/20/podcasts/a-dose-of-science-fiction-for-our-elected-officials.html no 00:36:11
We Get Bodied Talking Jay-Z and Beyoncé “4:44” is Jay-Z’s first album since Beyoncé turned their marital trouble into a masterpiece called "Lemonade." On “4:44,” Jay-Z expresses regret for his infidelity and ruminates on the socioeconomic state of black America. The album is knotty and contradictory, especially when compared with the psychological clarity of "Lemonade." We spend the episode unpacking “4:44” as a work unto itself, and also in the context of “Lemonade.” We also discuss why the survival and performance of Jay-Z and Beyoncé’s marriage means so much to the culture and to us.

]]>
We Get Bodied Talking Jay-Z and Beyoncé full “4:44” is Jay-Z’s first album since Beyoncé turned their marital trouble into a masterpiece called "Lemonade." On “4:44,” Jay-Z expresses regret for his infidelity and ruminates on the socioeconomic state of black America. The album is knotty and contradictory, especially when compared with the psychological clarity of "Lemonade." We spend the episode unpacking “4:44” as a work unto itself, and also in the context of “Lemonade.” We also discuss why the survival and performance of Jay-Z and Beyoncé’s marriage means so much to the culture and to us. “4:44” is Jay-Z’s first album since Beyoncé turned their marital trouble into a masterpiece called "Lemonade." On “4:44,” Jay-Z expresses regret for his infidelity and ruminates on the socioeconomic state of black America. The album is knotty and contradictory, especially when compared with the psychological clarity of "Lemonade." We spend the episode unpacking “4:44” as a work unto itself, and also in the context of “Lemonade.” We also discuss why the survival and performance of Jay-Z and Beyoncé’s marriage means so much to the culture and to us.

]]>
gid://art19-episode-locator/V0/Sej13RZ3yDQ7hDmQdYPIjtANuq0bwMINSRjP9Lk3mbU Thu, 13 Jul 2017 08:44:00 -0000 https://www.nytimes.com/2017/07/13/podcasts/the-revelations-of-jay-z-and-beyonce.html no 00:52:25
We Seek “Authentic” BBQ It’s barbecue season! But let’s be clear: We aren’t talking about throwing burgers and veggies on a grill. We’re talking about the rich culinary tradition of slow-cooking meat over a dirt pit, a cuisine cultivated by enslaved Africans in the American South. We both live in Brooklyn, where barbecue is gentrifying as quickly as our neighborhoods. To talk through our feelings, we invited two Southern food experts on the show: John Thomas Edge Jr., the author of “The Potlikker Papers,” and Nicole Taylor, a chef and the author of “The Up South Cookbook.” They help us remember the central role that African-Americans played (and continue to play) in establishing one of our country’s most signature styles of eating. Then we venture to a Carolina-style pit in the middle of Bushwick. It's a truly American tale.

]]>
We Seek “Authentic” BBQ full It’s barbecue season! But let’s be clear: We aren’t talking about throwing burgers and veggies on a grill. We’re talking about the rich culinary tradition of slow-cooking meat over a dirt pit, a cuisine cultivated by enslaved Africans in the American South. We both live in Brooklyn, where barbecue is gentrifying as quickly as our neighborhoods. To talk through our feelings, we invited two Southern food experts on the show: John Thomas Edge Jr., the author of “The Potlikker Papers,” and Nicole Taylor, a chef and the author of “The Up South Cookbook.” They help us remember the central role that African-Americans played (and continue to play) in establishing one of our country’s most signature styles of eating. Then we venture to a Carolina-style pit in the middle of Bushwick. It's a truly American tale. It’s barbecue season! But let’s be clear: We aren’t talking about throwing burgers and veggies on a grill. We’re talking about the rich culinary tradition of slow-cooking meat over a dirt pit, a cuisine cultivated by enslaved Africans in the American South. We both live in Brooklyn, where barbecue is gentrifying as quickly as our neighborhoods. To talk through our feelings, we invited two Southern food experts on the show: John Thomas Edge Jr., the author of “The Potlikker Papers,” and Nicole Taylor, a chef and the author of “The Up South Cookbook.” They help us remember the central role that African-Americans played (and continue to play) in establishing one of our country’s most signature styles of eating. Then we venture to a Carolina-style pit in the middle of Bushwick. It's a truly American tale.

]]>
gid://art19-episode-locator/V0/rIyj53v3z3OrTNFUxvZ4mQOj5AbNhIX-vGKPl-FFFEE Thu, 06 Jul 2017 09:58:00 -0000 https://www.nytimes.com/2017/07/06/podcasts/who-has-the-right-to-make-barbecue.html no 00:42:46
We Revive Tupac and Side-Eye Sofia Coppola What responsibility does a movie have to the details of history? In Sofia Coppola’s new film, “The Beguiled,” a remake of Don Siegel’s 1971 psychological thriller set in the American South during the Civil War, she omits a key character from the original film: a slave woman named Hallie. Is Coppola’s omission a correction of history or an act of artistic cowardice? Speaking of history and responsibility: We take a look at “All Eyez on Me,” which tells the story of the brief but remarkable life of Tupac Shakur. At a time when the safety of black men’s lives seems dubious, is there significance in people’s refusing to accept that Tupac is truly dead?

]]>
We Revive Tupac and Side-Eye Sofia Coppola full What responsibility does a movie have to the details of history? In Sofia Coppola’s new film, “The Beguiled,” a remake of Don Siegel’s 1971 psychological thriller set in the American South during the Civil War, she omits a key character from the original film: a slave woman named Hallie. Is Coppola’s omission a correction of history or an act of artistic cowardice? Speaking of history and responsibility: We take a look at “All Eyez on Me,” which tells the story of the brief but remarkable life of Tupac Shakur. At a time when the safety of black men’s lives seems dubious, is there significance in people’s refusing to accept that Tupac is truly dead? What responsibility does a movie have to the details of history? In Sofia Coppola’s new film, “The Beguiled,” a remake of Don Siegel’s 1971 psychological thriller set in the American South during the Civil War, she omits a key character from the original film: a slave woman named Hallie. Is Coppola’s omission a correction of history or an act of artistic cowardice? Speaking of history and responsibility: We take a look at “All Eyez on Me,” which tells the story of the brief but remarkable life of Tupac Shakur. At a time when the safety of black men’s lives seems dubious, is there significance in people’s refusing to accept that Tupac is truly dead?

]]>
gid://art19-episode-locator/V0/EewuwdlIORLvtUppQOUvZNaPTvCfpncw-FcLJTqiHbg Thu, 29 Jun 2017 09:58:00 -0000 https://www.nytimes.com/2017/06/29/podcasts/historys-crucial-role-in-the-films-all-eyez-on-me-and-the-beguiled.html no 00:40:59
We Celebrate Gay Pride — The Highs and Lows We Celebrate Gay Pride — The Highs and Lows full June is Gay Pride month: four weekends of parades, pageantry, and partying, all over the country. But now, a year after the Pulse nightclub shooting, people are asking whether Pride celebrations are sufficiently black, political and confrontational. We talk about the joy we feel during Pride, while also recognizing the limits of the parade and the gay rights movement in general. We also reckon with the racism in gay life, and where that leaves the two of us. gid://art19-episode-locator/V0/O5_71BHEUbL072ebrO5W4WL1y0bCd2qz7_Oi4mxY8nM Thu, 22 Jun 2017 10:00:00 -0000 no 00:47:33 We Said, He Said, She Said We Said, He Said, She Said full In a live-stream to promote her new album, “Witness,” Katy Perry put on an elaborate performance, giving a series of confessional interviews about her cultural missteps. We analyze all the reasons this was an experiment gone terribly wrong. We then turn to a much more sinister attempt by a celebrity to reshape his image by performing for the public: Bill Cosby pretending he is Cliff Huxtable at his trial for the sexual assault of Andrea Constand. The cross-examining of Constand strangely reminded us of Jim Comey’s testimony before Congress, leading us to a discussion of the different ways these two victims — one male and powerful, one female and powerless — were received in the culture. gid://art19-episode-locator/V0/Wzalmo8Sd9Ufa4jbYMju57UEFIh5MMyO5_5e_-cgBHM Thu, 15 Jun 2017 09:58:00 -0000 https://www.nytimes.com/2017/06/15/podcasts/katy-perrys-witness-experiment-gone-wrong-and-understanding-how-our-culture-treats-victims.html no 00:36:22 We Watch 'Wonder Woman' and Do a Taxonomy of the Summer Jam We Watch 'Wonder Woman' and Do a Taxonomy of the Summer Jam full Summer is here, and so are the superhero movies and hit pop songs that define the season. We discuss the politics of “Wonder Woman,” the first female-fronted and female-directed superhero blockbuster. We also search for the definitive summer jam of 2017 and try to define what makes a great summer song along the way. gid://art19-episode-locator/V0/YA4Yu70p89rM2CgB0y0JqM23kcFd7Gww7TTlHGgupcc Thu, 08 Jun 2017 09:58:00 -0000 https://www.nytimes.com/2017/06/08/podcasts/debating-wonder-woman-and-summer-jams.html no 00:44:26 We Love the Beach, We Hate the Beach We Love the Beach, We Hate the Beach full Last week, the Baywatch franchise returned — this time on the big screen — with Dwayne “The Rock” Johnson and Zac Efron leading a cast of tan, muscled lifeguards. But the film isn’t just a goofy romp; it presents the beach as a place of danger that needs to be patrolled, raising questions about who beaches are for. Jenna spends as much time at the beach as she can, while Wesley has always resisted going. As they try to untangle why that is, they discuss the history of American beaches and American beach movies, and the beach as a place of infinite possibility and mystery, as bearing the traces of racial segregation and as being one of the most liberating environments in the world. gid://art19-episode-locator/V0/nSnq5l2A_8cDUC_PiDXR19EbbMNn3Hvevwy80F7TTTQ Thu, 01 Jun 2017 09:58:00 -0000 https://www.nytimes.com/2017/06/01/podcasts/at-the-movies-the-beach-is-the-ultimate-freedom-and-in-life.html no 00:34:21 We're Going Black(er) AKA Dear Woke People We're Going Black(er) AKA Dear Woke People full In the last 30 years, blackness has migrated from the margins of American popular culture to its center. Right now, a bounty of television, movies, and music engages with the question of how people signal to each other that they’re down with blackness. And it isn't just white people doing the signaling. It's black people too, albeit in a different way. We’ll dig into Netflix’s new show “Dear White People,” and television and film from the 1980s and 1990s and try to understand: what does it mean to perform blackness? gid://art19-episode-locator/V0/hZZUkrepu8dHw3XA3JDHaUoNdSSrvvTXS81wJ5U7XCI Thu, 25 May 2017 09:58:00 -0000 https://www.nytimes.com/2017/05/25/podcasts/being-black-in-the-age-of-wokeness.html no 00:52:29 We Watch Trump TV with Emily Nussbaum We Watch Trump TV with Emily Nussbaum full Donald Trump has changed the way we watch TV, whether it’s the reality show within the White House, or the scripted dramas we can’t help but compare to our political situation. New Yorker television critic Emily Nussbaum joins us to analyze what Trump's persona in "The Apprentice" might tell us about how he wields power as president, and to talk about how living in Trump’s America changes the way we watch political television, including shows like "The Leftovers" and "The Handmaid’s Tale." gid://art19-episode-locator/V0/0Vcub_S5mJVDUvNaIxvNKvHfpU64PIdCAnFg8lDTVe8 Thu, 18 May 2017 09:58:00 -0000 https://www.nytimes.com/2017/05/18/podcasts/what-tv-should-we-watch-in-the-trump-era-emily-nussbaum-has-some-ideas.html no President Donald Trump,Emily Nussbaum,television 00:38:34 We Will Always Love You, Whitney Houston We Will Always Love You, Whitney Houston full It has been five years since Whitney Houston died. She was one of the biggest pop stars of her time and a glorious singer — but we don’t properly remember her for that. Instead, she is considered a tragic figure who sacrificed herself to drugs and her marriage. This week, we felt a reappraisal of Houston was in order. It’s a chance to argue that the music is much more important than any of the scandal. So we listen to some of her best recordings and live performances. And yes, we walk through the bad years, but only to remind ourselves of who we actually lost: the greatest singer of the rock ’n’ roll era. gid://art19-episode-locator/V0/nCHbtAHGCaQxCnTKfH6jyRBw1ZTi4lC8jiMidN5OndY Thu, 11 May 2017 10:00:00 -0000 no 00:51:48 We Feud About “Feud” We Feud About “Feud” full The ruthlessness of Silicon Valley companies like Uber is out of control, but why do we expect more from the tech industry than from corporations like McDonalds or Exxon Mobil? We also discuss the bloody rivalry between the big-screen queens Joan Crawford and Bette Davis, as depicted in Ryan Murphy’s FX drama “Feud,” and whether the show defies stereotypes or perpetuates them. gid://art19-episode-locator/V0/6RCP_uqxl7clIi17pyFFHWbEzcZpZqhvIdRvlTyNFmk Thu, 04 May 2017 10:00:00 -0000 https://www.nytimes.com/2017/05/04/magazine/from-uber-to-feud-how-ruthlessness-rules-the-day.html no 00:42:14 We Relive the Oscars with Barry Jenkins We Relive the Oscars with Barry Jenkins full A conversation with the director of "Moonlight" about his cinematic style, his forthcoming adaptation of Colson Whitehead’s "Underground Railroad," his love of science fiction and, yes, that crazy night at the Academy Awards. gid://art19-episode-locator/V0/ZKAsKXCGRkQ64mdiXDy5RtBA_WmREQOiaWXazvgCqLg Thu, 27 Apr 2017 10:01:42 -0000 https://www.nytimes.com/2017/04/27/magazine/barry-jenkins-on-life-post-oscars.html no 00:47:10 We Listen to Kendrick Lamar & Talk to Valerie Jarrett We Listen to Kendrick Lamar & Talk to Valerie Jarrett full We discuss Kendrick Lamar’s new album, “DAMN.,” and listen closely to “XXX,” one of our favorite tracks. Is his latest project a breakup with America, or with an older version of himself? Then we speak to Valerie Jarrett, a former White House adviser, about what she and the Obamas have in store. gid://art19-episode-locator/V0/jKUPLmmRedaC-XBuzl_hdnvEQ6D2ev8X41Pc62E9ZSg Thu, 20 Apr 2017 10:25:15 -0000 https://www.nytimes.com/2017/04/20/podcasts/kendrick-lamars-legacy-and-a-conversation-with-valerie-jarrett.html no 00:40:05 We Go To S-Town We Go To S-Town full We’re back! And we’re picking up right where we left off: thinking about “Get Out.” Jordan Peele’s instant classic is the lens through which we’re seeing everything these days, from the hit podcast “S-Town” to that Kendall Jenner Pepsi ad the internet will never let us forget. We've got a grand theory about how it all connects. gid://art19-episode-locator/V0/ElPp6FKBNViylrv2t0XhDsUiwmurhwCiVNbQna1u3Mc Thu, 13 Apr 2017 10:45:00 -0000 https://www.nytimes.com/2017/04/13/podcasts/get-out-s-town-and-what-to-do-with-our-racial-past.html no 00:40:55 Season Finale with Jordan Peele | Episode 26 Season Finale with Jordan Peele | Episode 26 full We’re not over what happened at the Oscars on Sunday. You probably aren’t either. But we’re ready to move onto next year’s Oscars, where we fully expect to see “Get Out,” currently the No. 1 movie in America. We talk to its writer and director, Jordan Peele, about carving out space in the horror genre, how to deal with your liberal white friends and what it’s like to ask an actor to play a racist. Then, before the show takes month-long hiatus, we meditate on what we’ve learned doing Still Processing. gid://art19-episode-locator/V0/n34JS7iXW55NojgnXTMcCtjnS924uiGwv0MnPFjWiTQ Thu, 02 Mar 2017 11:59:48 -0000 https://www.nytimes.com/2017/03/02/podcasts/jordan-peele-get-out-oscars.html no 00:42:49 Oscars Preview with A.O. Scott | Episode 25 Oscars Preview with A.O. Scott | Episode 25 full “La La Land” is probably going to win a lot of Oscars on Sunday. Perhaps even for best picture. But it’s O.K. Truly. We are joined by A. O. Scott, a chief film critic for The New York Times, to discuss our predictions and preferences for the Academy Awards. Since it’s the last week of Black History Month, we talk about a few of our favorite moments from the past week. And we play another round of Did They Vote for Trump? This time it’s the “Roseanne” edition. gid://art19-episode-locator/V0/LSLMetbZzOyQczt2vk-2nZYV2qGiUbGkaqgK2r-MHY4 Thu, 23 Feb 2017 10:56:23 -0000 no 00:56:29 Beyoncé to Baldwin and Back Again | Episode 24 Beyoncé to Baldwin and Back Again | Episode 24 full It’s been five days, and we’re still trying to make sense of Beyoncé’s loss at the Grammys. It’s been 50 years, and we’re still learning from James Baldwin. The new Baldwin documentary “I Am Not Your Negro” touched both of us, and this week we interview its director Raoul Peck about why the Oscar-nominated film is so invigorating in this moment. Then we bring on our pal and New York Times food reporter Tejal Rao to talk about something we all need these days: comfort food. To take our survey, please visit nytimes.com/SPsurvey. gid://art19-episode-locator/V0/WSiT14zf13EqbQ7nh9RngowHzt7k7B-sLp8T0BU9tTQ Thu, 16 Feb 2017 11:15:00 -0000 http://www.nytimes.com/2017/02/16/podcasts/the-tragically-chronic-relevance-of-james-baldwin.html no 00:34:16 The Women of “Girls” | Episode 23 The Women of “Girls” | Episode 23 full HBO’s “Girls” begins its final season this Sunday, and we discuss the show’s legacy before Jenna sits down for a live conversation with Lena Dunham, Allison Williams, Zosia Mamet and Jemima Kirke. They talk about the show’s early lack of diversity, why “Silicon Valley” gets off easy and what it’s like to have the public completely conflate a person and the character she plays. Plus: We debate whether deleting your Uber account actually has an impact and play a new game called “Did This Person Vote for Trump?” gid://art19-episode-locator/V0/KMFRL_fDu_VbIv3DFUfIJ5wOpayjGX4aUA-7EFFW9Rw Thu, 09 Feb 2017 14:12:33 -0000 https://www.nytimes.com/2017/02/09/podcasts/the-women-of-girls-and-protest-whack-a-mole.html no 00:41:37 ‘You Only Leave Home When Home Won’t Let You Stay’ | Episode 22 ‘You Only Leave Home When Home Won’t Let You Stay’ | Episode 22 full We speak to three friends: Habab, a Muslim woman born in Sudan who was nearly detained after landing home at Dulles International Airport in Virginia this weekend; Rukmini Callimachi, our colleague who covers terrorism for The Times and immigrated to America at the age of 10; and Armida Lizarraga, a Peruvian who gives a history lesson on her country’s slide from democracy to dictatorship under Alberto Fujimori. Plus: our tips for how best to take a break this week. gid://art19-episode-locator/V0/MjtMoYinYSYpMR5NaZvYQHcwEqCRQWJHy0BHopLEJvI Thu, 02 Feb 2017 11:00:00 -0000 http://www.nytimes.com/2017/02/02/podcasts/three-paths-to-america.html no 00:59:56 Wesley and Jenna’s Existential Fears | Episode 21 Wesley and Jenna’s Existential Fears | Episode 21 full It’s 50 degrees in New York in January, 2016 was the warmest year ever— and the words “climate change” no longer exist on whitehouse.gov. Time for a call to self-proclaimed climate hawk Eric Holthaus, co-host of the podcast “Our Warm Regards,” to give us some context about what this moment means for the planet. Next we talk about “Split,” the No. 1 movie in America, and the twist in M. Night Shyamalan’s career. Finally, Jenna tells Wesley whether or not Alexa is the future. gid://art19-episode-locator/V0/2GaMBfYGPDZIpI1jzrjVVzd55RSCP8m9EDbEAY5U-mw Thu, 26 Jan 2017 11:36:37 -0000 https://www.nytimes.com/2017/01/26/podcasts/our-existential-climate-fears.html no 00:45:05 Show Me the (Read) Receipts! | Episode 20 Show Me the (Read) Receipts! | Episode 20 full We start by debating one of the great questions of our time: should you or should you not use read receipts on your text messages? Jenna feels strongly one way, Wesley the exact opposite. So we call our pal Juliet Litman, managing editor of The Ringer, for a third opinion. Next, we consider the significance of shows like “The OA” and “Search Party” and what they mean for how young people are depicted on screen in 2017. Finally, Wesley takes a breath and says goodbye to President Obama. gid://art19-episode-locator/V0/tulIs_hKTdL6R58lJQO5G7gVQqaodvTmSOQwLM-km-g Thu, 19 Jan 2017 11:39:25 -0000 https://www.nytimes.com/2017/01/19/podcasts/the-problem-with-binge-tv.html no 00:46:50 Batman vs. Joker | Episode 19 Batman vs. Joker | Episode 19 full We take a deep breath after President Obama’s farewell speech and talk about his future as the ultimate black dad. Next we call up our friend and New York Times media columnist Jim Rutenberg to help us make sense of the latest on Donald Trump’s relationship with Russia, “fake news” and the media’s role in reporting it all. To top it off, we revisit highlights from the Golden Globes, share our thoughts on “Hidden Figures” — not “Hidden Fences” — and consider the lasting impact of Meryl Streep’s speech. gid://art19-episode-locator/V0/UVGkHjj-1UHLbbHrc-Bxt-c_bhlVZ05aa577LikFLts Thu, 12 Jan 2017 11:40:00 -0000 http://www.nytimes.com/2017/01/12/podcasts/on-movies-trump-putin-golden-globes-meryl-streep.html no 00:44:52 ‘The Perfect Movie for Our Time’ | Episode 18 ‘The Perfect Movie for Our Time’ | Episode 18 full We’re kicking off 2017 with a movie speed round to prepare for this weekend’s Golden Globes. We talk through our feelings about “La La Land,” “Fences” and a couple of the other films we saw over the holidays that made us laugh, cry — and sometimes cringe. Plus: Wesley serenades Mariah Carey after her New Year’s Eve debacle and we offer some cultural intentions for 2017. gid://art19-episode-locator/V0/FJAC5r4Mo5H2FBSLGmvZNf4n-KK6EeWOTwkYApW11bo Thu, 05 Jan 2017 11:47:10 -0000 https://www.nytimes.com/2017/01/05/podcasts/four-movies-you-should-know-about-before-the-golden-globes.html no 00:46:17 The Kanye-thon | Episode 17 The Kanye-thon | Episode 17 full This week we devote the entire episode to one question: What is happening with Kanye West? gid://art19-episode-locator/V0/dsUFLsUFSCqDf04gLAs4alIkunvFJgjUVfWUleJzFRQ Thu, 29 Dec 2016 14:36:57 -0000 https://www.nytimes.com/2016/12/29/podcasts/we-need-to-talk-about-kanye.html no 00:42:43 The Lives They Lived | Episode 16 The Lives They Lived | Episode 16 full This week, it’s our turn to take a look back on 2016 and share our picks for the most cultural moments that will stick with us. But before we do that, Ilena Silverman, an editor at The New York Times Magazine, joins us to talk about the people remembered in the magazine’s annual last issue of the year, “The Lives They Lived.” We also give one last listener some DIY gift advice. gid://art19-episode-locator/V0/4K7LtlLNHijlFgKN4AuzjW5v2ludE3oyAENzZBHdTEk Thu, 22 Dec 2016 11:47:57 -0000 https://www.nytimes.com/2016/12/22/podcasts/its-our-turn-to-make-a-best-of-2016-list.html no 00:59:28 Best of 2016 with Bill Simmons, Heben Nigatu, Tracy Clayton and Ezra Edelman | Episode 15 Best of 2016 with Bill Simmons, Heben Nigatu, Tracy Clayton and Ezra Edelman | Episode 15 full This week on the show we're talking to some of our favorite people on Earth about the culture from 2016 — the movies, the music, the moments — that will stick with them. We've got Bill Simmons, CEO of the Ringer; Ezra Edelman, director of "OJ: Made in America"; and Heben Nigatu and Tracy Clayton, the hosts of BuzzFeed's "Another Round." Plus, we answer a voicemail from a very special listener. gid://art19-episode-locator/V0/aD7sarQpr89MO-h2513Cbw08rJtzIwIiURSz8pgHDZQ Thu, 15 Dec 2016 11:41:33 -0000 https://www.nytimes.com/2016/12/15/podcasts/unforgettable-cultural-moments-from-2016.html no 01:06:19 Beyoncé vs. Adele? No Contest | Episode 14 Beyoncé vs. Adele? No Contest | Episode 14 full Good news: Jenna’s back! And in the wake of this week’s Grammy nominations, she’s here to say that no matter how desperate the internet may be for a Beyoncé and Adele rivalry, it’s just not a competition. Next, New York Times tech reporter Mike Isaac helps explain what Facebook’s attempt to enter China means for the service and our lives. Finally, we help a listener solve a holiday gift dilemma. gid://art19-episode-locator/V0/XJeSObdbPKvAs-6e94xnTfNYnN2-8TOk12e_bS-uKaQ Thu, 08 Dec 2016 11:50:54 -0000 https://www.nytimes.com/2016/12/08/podcasts/big-social-and-facebooks-moral-core.html no 00:40:29 Obama’s Last Cultural Statement | Episode 13 Obama’s Last Cultural Statement | Episode 13 full Jenna is off road-tripping across Southern Africa, so this week Wesley reunites with Alex Pappademas, his old co-host on Grantland’s podcast “Do You Like Prince Movies?” Wesley explains why he found President Obama’s final Medal of Freedom Ceremony to be the most emotional cultural moment of the year, then he and Alex imagine the people who will be honored by President Trump. One artist they hope won't be on the list: the Weeknd, who after some debate Wesley and Alex decide is a phony. gid://art19-episode-locator/V0/CYcvlXUGJE4V2OfhTAwUHvu4-fA2NayHqh8ZidPQzF8 Thu, 01 Dec 2016 12:48:07 -0000 http://www.nytimes.com/2016/12/01/podcasts/the-noahs-ark-of-awards.html no 00:32:40 The Brilliance of Kerry James Marshall | Episode 12 The Brilliance of Kerry James Marshall | Episode 12 full Join our field trip to The Met Breuer, the Metropolitan Museum’s new space in New York dedicated to contemporary art, where we give you an audio tour of the painter Kerry James Marshall’s astonishing retrospective. We also have picks for movies to see this weekend. “Almost Christmas” is a film for the whole family; “The Handmaiden” is more of a solo midnight show. gid://art19-episode-locator/V0/mH-1U5Av79OmBv4PgPsJywq-Yi2blj1QwLp6Y5bv3zg Thu, 24 Nov 2016 11:40:05 -0000 http://www.nytimes.com/2016/11/24/podcasts/what-to-do-when-the-turkeys-done.html no 00:30:13 How to Survive Thanksgiving | Episode 11 How to Survive Thanksgiving | Episode 11 full To nourish your souls this week, we’re serving up some serious comfort food live from the kitchen of the New York Times food editor Sam Sifton. Sam literally wrote the book on Thanksgiving, and he walks us through how to make the perfect gravy, his tips for carving the turkey and his most important rules for the meal. And because this year’s Thanksgiving is going to be different for many families, we talk about how to navigate postelection tensions and practice radical acceptance. Plus: the case for replacing turkey with fried chicken and Jenna’s tips for traveling. gid://art19-episode-locator/V0/owHEAm9aPe8mvcS_CtnSgqIlbNrb803GP4ptkNm91LM Thu, 17 Nov 2016 11:14:00 -0000 http://www.nytimes.com/2016/11/17/podcasts/tips-for-shoring-up-a-fragile-thanksgiving.html no 00:30:23 The Reckoning | Episode 10 The Reckoning | Episode 10 full Through tears, and with the help of our oracle Margo Jefferson, we begin to process the election of Donald J. Trump. gid://art19-episode-locator/V0/Vtn8EfqXAiOnkuhWIpGQMZNMQ38nT5UmHmwgptrxGsY Thu, 10 Nov 2016 04:26:49 -0000 http://www.nytimes.com/2016/11/10/podcasts/our-oracle-helps-us-process-a-trump-presidency.html no 00:48:11 Dancing in the Moonlight | Episode 9 Dancing in the Moonlight | Episode 9 full To combat the stresses of an election we want to end and the onset of winter, we’re offering a whole episode dedicated to things that make us feel good. We talk to the Times film critic A.O. Scott about “Moonlight,” a movie everyone agrees is perfect. We celebrate “A Seat at the Table,” Solange’s lusciously spare new album, in which she comes into her own as an artist. And we end with a few tips from Jenna on how to survive not only the next week but maybe the rest of your life. gid://art19-episode-locator/V0/9uFriM6FVIJIqg9Ya2qpdoiDhJceaDCXjVIFw3z3jl4 Thu, 03 Nov 2016 10:13:37 -0000 http://www.nytimes.com/2016/11/03/podcasts/the-striking-humanity-of-moonlight.html no 00:46:06 Nudity Clause | Episode 8 Nudity Clause | Episode 8 full This week we’re talking about penises. Specifically, penises on the big screen. There are more and more of them, but the penises deemed safe enough to see tend to be white ones. We talk about the role of black penises and black sexuality in popular culture. Plus, Jenna puts Barack Obama’s digital legacy in perspective, and then our boss, Jake Silverstein, joins us to discuss the one thing we never got from the president. gid://art19-episode-locator/V0/KV8cATmaiHhbLtr9mId9Enrd1kAWih7eVR2pjiQ3X4U Thu, 27 Oct 2016 10:19:50 -0000 http://www.nytimes.com/2016/10/27/podcasts/black-sexuality.html no 00:45:31 Peak Black TV | Episode 7 Peak Black TV | Episode 7 full This week, we devote an entire episode to our favorite (and not so favorite) shows on TV, touching on “Queen Sugar,” “Westworld,” “Insecure,” “Empire,” and more. We give out superlatives, delve into the brilliance of Donald Glover’s “Atlanta,” and attempt to answer the question: Have we reached peak black TV? gid://art19-episode-locator/V0/XWoIoBsJ9kEAdyPh4U2vzOxVMfHnleL56AtPJmDolpc Thu, 20 Oct 2016 10:11:34 -0000 http://www.nytimes.com/2016/10/20/podcasts/the-best-new-tv-series-to-take-a-chance-on.html no 00:41:16 America, What You Doin’ Gurl? | Episode 6 America, What You Doin’ Gurl? | Episode 6 full This week we’ve got some questions. What show could possibly hold your attention for 24 straight hours? (Wesley found it.) Should you still feel obligated to see “Birth of a Nation,” even though Nate Parker is Nate Parker? (You most certainly should not.) And how differently would this country work with a woman in the White House? (Susan Dominus, who’s covering gender and the election for the New York Times Magazine, joins us to answer that one.) Plus: we answer a question from the last debate. gid://art19-episode-locator/V0/bQuCiXmeTb62QVIrG8qcigYp5MVz2APcJccm3vTStvQ Thu, 13 Oct 2016 10:31:11 -0000 http://www.nytimes.com/2016/10/13/podcasts/youre-off-the-hook-to-see-the-birth-of-a-nation.html no 00:43:37 A Journey to the 'Blacksonian' | Episode 5 A Journey to the 'Blacksonian' | Episode 5 full This week our entire episode comes to you from inside the Smithsonian’s brand-new National Museum of African American History and Culture in Washington. We talked to children. We talked to curators. We sat together in the Oprah Winfrey Theater and it felt like church, and together we tried to understand the first museum that has tried to understand us. gid://art19-episode-locator/V0/ucf4zU9WAP_rfGNAByJ23a0yLgbz_lllfrTiuNHgeEc Thu, 06 Oct 2016 10:18:04 -0000 http://www.nytimes.com/2016/10/06/podcasts/our-journey-to-the-blacksonian.html no 00:54:44 Maintaining Higher Ground | Episode 4 Maintaining Higher Ground | Episode 4 full This week we catch up with Katja Blichfeld and Ben Sinclair, the husband-and-wife team behind “High Maintenance,” HBO’s new show (which was just renewed for a second season) about a weed dealer in New York. It's billed as a stoner comedy, but the show is actually about the vulnerability of life in the city, and we swap stories about the moments we've felt most alive in New York. Then, in honor of “The Magnificent Seven” topping the weekend box office, our beloved colleague Nikole Hannah-Jones joins to break down her all-time favorite Denzel Washington performances. Wesley has a list too. gid://art19-episode-locator/V0/coOcINGbDu7cdhugVeXibJpG1BWTl25na6MOq6ZcRFA Thu, 29 Sep 2016 09:51:52 -0000 http://www.nytimes.com/2016/09/29/podcasts/our-top-five-denzels.html no 00:31:58 RuPaul: 'Identity Is a Hoax, People!' | Episode 3 RuPaul: 'Identity Is a Hoax, People!' | Episode 3 full While we are discussing the Emmys, which Jenna barely wanted to watch, something amazing happens: a call from somebody who actually has an Emmy! Yup, it’s RuPaul. He talks about both the importance of his Emmy-winning show, “RuPaul’s Drag Race,” and its non-importance, which, according to him, is its actual importance: “Identity is a hoax, people!” Then it’s on to a conversation about “Bridget Jones’s Baby” and “Snowden,” two films with nothing in common — well, except in Wesley's experience of them. Ultimately, the week’s news — police shootings, political insults, and, yes, superstar divorce — proves too much for us. So we escape to Bryant Park, where Jenna gives Wesley some advice for how to detox. gid://art19-episode-locator/V0/9SKT6qTGWgBfVXW1z7mW9uiXmkd7wabt6CInDcQL7wU Thu, 22 Sep 2016 10:45:52 -0000 http://www.nytimes.com/2016/09/22/podcasts/ru-paul-still-processing.html no 00:35:13 ‘You Can’t Code Your Way Out of Racism’ | Episode 2 ‘You Can’t Code Your Way Out of Racism’ | Episode 2 full This week, Wesley and Jenna meet for breakfast to talk through their conflicting feelings about the new film “When the Bough Breaks,” the No. 2 film in America — she loved it, he not so much. They also decode the inherent racism of the sharing economy and bring in dance writer Shanti Crawford to review the moves we watched during the U.S. Open. gid://art19-episode-locator/V0/Rm78kgfuYVJtXekY3y6x9_ZSSy9dhEykr1Bw7pLkews Thu, 15 Sep 2016 10:02:07 -0000 http://www.nytimes.com/2016/09/15/podcasts/you-cant-code-your-way-out-of-racism.html no 00:33:00 First Date | Episode 1 First Date | Episode 1 full In this inaugural episode, Wesley and Jenna work through their feelings about America's reaction to Colin Kaepernick and Leslie Jones, take a romantic stroll through Central Park, and talk to Tika Sumpter of "Southside With You" about the art of the first date. gid://art19-episode-locator/V0/6WvM-ICla_UF04boDwbW4JdRFgezbn6TTazo7rn8M4M Thu, 08 Sep 2016 07:24:56 -0000 http://www.nytimes.com/2016/09/08/podcasts/still-processing-wesley-morris-jenna-wortham.html no 00:32:44 Introducing Still Processing Introducing Still Processing full The first episode of Still Processing will drop on Thursday, Sept. 8, and Wesley and Jenna will be back every Thursday after that. Here’s a quick taste of what’s to come. gid://art19-episode-locator/V0/-4ZTnNFlqU0W7OSJ0wMhuFMmXFxaW0eZLx3F7jKV3o8 Tue, 06 Sep 2016 12:45:53 -0000 no 00:01:56
================================================ FILE: api/test/data/podcast-feed/thehabitat ================================================ The Habitat https://www.gimletmedia.com/the-habitat en On a remote mountain in Hawaii, there's a fake planet Mars. Six volunteers are secluded in an imitation Mars habitat where they will work as imitation astronauts for one very real year. The goal: to help NASA understand what life might be like on the red planet—and plan for the day when the dress rehearsals are over, and we blast off for real. Host Lynn Levy has been chronicling this experiment from the moment the crew set foot in their habitat, communicating with them through audio diaries that detail their discoveries, their frustrations, and their evolving and devolving relationships with each other. From those diaries, Gimlet Media has crafted an addictive serialized documentary: the true story of a fake planet. http://static.megaphone.fm/podcasts/806b466c-ef0c-11e6-b531-afa5d3e8b9e3/image/uploads_2F1522339695064-fiy1a2pf3tb-64aa58ac9b5bcdcf9e3145121e2a85eb_2FTheHabitat-final-cover.png The Habitat https://www.gimletmedia.com/the-habitat yes serial The true story of a fake planet. From Gimlet Media, hosted by Lynn Levy. Gimlet On a remote mountain in Hawaii, there's a fake planet Mars. Six volunteers are secluded in an imitation Mars habitat where they will work as imitation astronauts for one very real year. The goal: to help NASA understand what life might be like on the red planet—and plan for the day when the dress rehearsals are over, and we blast off for real. Host Lynn Levy has been chronicling this experiment from the moment the crew set foot in their habitat, communicating with them through audio diaries that detail their discoveries, their frustrations, and their evolving and devolving relationships with each other. From those diaries, Gimlet Media has crafted an addictive serialized documentary: the true story of a fake planet. Gimlet admin@gimletmedia.com Bonus: This Is Not My First Rodeo What's it going to take to actually get us to Mars? Plus, what to do once you’ve listened to every episode of <em>The Habitat</em>.<br><br><em>The Habitat</em> is a production of Gimlet Media. It’s produced by Lynn Levy, Peter Bresnan, and Megan Tan. Our editors are Alex Blumberg, Jorge Just, Caitlin Kenney, and Blythe Terrell. Music and sound design by Haley Shaw. Mixing by Catherine Anderson. Music supervision by Matthew Boll. Our credits music in this episode is performed by Sammy Miller and the Congregation, and written by David Bowie.<br><br>Find the NASA audio archive here: <a href="https://archive.org/details/nasaaudiocollection">https://archive.org/details/nasaaudiocollection</a>.<br><br>To find a list of our sponsors and show-related promo codes, go to <a href="http://gimlet.media/OurAdvertisers">gimlet.media/OurAdvertisers</a>. Tue, 08 May 2018 01:43:00 -0000 Gimlet bonus 1 What's it going to take to actually get us to Mars? Plus, what to do once you’ve listened to every episode of The Habitat. The Habitat
.

The Habitat is a production of Gimlet Media. It’s produced by Lynn Levy, Peter Bresnan, and Megan Tan. Our editors are Alex Blumberg, Jorge Just, Caitlin Kenney, and Blythe Terrell. Music and sound design by Haley Shaw. Mixing by Catherine Anderson. Music supervision by Matthew Boll. Our credits music in this episode is performed by Sammy Miller and the Congregation, and written by David Bowie.

Find the NASA audio archive here: https://archive.org/details/nasaaudiocollection.

To find a list of our sponsors and show-related promo codes, go to gimlet.media/OurAdvertisers.]]> 2122 yes Episode 7: And Now I Can See Everything The crew comes back to Earth. <br><br><em>The Habitat</em> is a production of Gimlet Media. It’s produced by Lynn Levy, Peter Bresnan, and Megan Tan. Our editors are Alex Blumberg, Jorge Just, Caitlin Kenney, and Blythe Terrell. Additional reporting in this episode by Eric Eddings. Music, sound design, and mixing by Haley Shaw. With help from Bobby Lord. Music supervision by Matthew Boll. Our credits music in this episode is performed by The Weather Station, and written by David Bowie. Our fact checker is Michelle Harris. Thanks to The University of Hawaii at Manoa, thanks to Tristan’s family, Carmel’s family and Lynn's family. Thanks to Dave Ruder. And a very special thanks to the HI-SEAS crew: Andrzej, Christiane, Cyprien, Carmel, Shey, and Tristan. <br><br>You can listen to the official soundtrack for The Habitat on <a href="https://thehabitat.bandcamp.com/">Bandcamp</a> (www.thehabitat.bandcamp.com) or <a href="https://soundcloud.com/gimletmedia/sets/the-habitat-soundtrack">Soundcloud</a> (www.soundcloud.com/gimletmedia/sets/the-habitat-soundtrack). <br><br>To find a list of our sponsors and show-related promo codes, go to <a href="http://gimlet.media/OurAdvertisers">gimlet.media/OurAdvertisers</a>.<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> Wed, 18 Apr 2018 13:00:00 -0000 Gimlet full 1 7 The crew comes back to Earth.
The Habitat is a production of Gimlet Media. It’s produced by Lynn Levy, Peter Bresnan, and Megan Tan. Our editors are Alex Blumberg, Jorge Just, Caitlin Kenney, and Blythe Terrell. Additional reporting in this episode by Eric Eddings. Music, sound design, and mixing by Haley Shaw. With help from Bobby Lord. Music supervision by Matthew Boll. Our credits music in this episode is performed by The Weather Station, and written by David Bowie. Our fact checker is Michelle Harris. Thanks to The University of Hawaii at Manoa, thanks to Tristan’s family, Carmel’s family and Lynn's family. Thanks to Dave Ruder. And a very special thanks to the HI-SEAS crew: Andrzej, Christiane, Cyprien, Carmel, Shey, and Tristan.

You can listen to the official soundtrack for The Habitat on Bandcamp (www.thehabitat.bandcamp.com) or Soundcloud (www.soundcloud.com/gimletmedia/sets/the-habitat-soundtrack).

To find a list of our sponsors and show-related promo codes, go to gimlet.media/OurAdvertisers.
















]]>
2035 yes
Episode 6: I Feel Like A Million Dollars The crew opens the hatch. <br><br><em>The Habitat</em> is a production of Gimlet Media. It’s produced by Lynn Levy, Peter Bresnan, and Megan Tan. Our editors are Alex Blumberg, Jorge Just, Caitlin Kenney, and Blythe Terrell. Music, sound design, and mixing by Haley Shaw. Music supervision by Matthew Boll. Our credits music in this episode is performed by Pavo Pavo, and written by David Bowie. Our fact checker is Michelle Harris. Thanks to Kaitlin Roberts for her help. And a very special thanks to the HI-SEAS crew: Andrzej, Christiane, Cyprien, Carmel, Shey, and Tristan. <br><br>To find a list of our sponsors and show-related promo codes, go to <a href="http://gimlet.media/OurAdvertisers">gimlet.media/OurAdvertisers</a>.<br><br><br><br><br><br><br><br><br><br><br><br><br><br> Wed, 18 Apr 2018 12:00:00 -0000 Gimlet full 1 6 The crew opens the hatch.
The Habitat is a production of Gimlet Media. It’s produced by Lynn Levy, Peter Bresnan, and Megan Tan. Our editors are Alex Blumberg, Jorge Just, Caitlin Kenney, and Blythe Terrell. Music, sound design, and mixing by Haley Shaw. Music supervision by Matthew Boll. Our credits music in this episode is performed by Pavo Pavo, and written by David Bowie. Our fact checker is Michelle Harris. Thanks to Kaitlin Roberts for her help. And a very special thanks to the HI-SEAS crew: Andrzej, Christiane, Cyprien, Carmel, Shey, and Tristan.

To find a list of our sponsors and show-related promo codes, go to gimlet.media/OurAdvertisers.













]]>
1832 yes
Episode 5: Tortilla! The crew gets pissed. <br><br><em>The Habitat</em> is a production of Gimlet Media. It’s produced by Lynn Levy, Peter Bresnan, and Megan Tan. Our editors are Alex Blumberg, Jorge Just, Caitlin Kenney, and Blythe Terrell. Additional reporting in this episode by Eric Eddings. Music, sound design, and mixing by Haley Shaw. Additional music by Alexander Overington. Music supervision by Matthew Boll. Our credits music in this episode is performed by Alba and the Mighty Lions<strong>, </strong>and written by David Bowie. Our fact checker is Michelle Harris. Thanks to Eric Mennel for all his help. And a very special thanks to the HI-SEAS crew: Andrzej, Christiane, Cyprien, Carmel, Shey, and Tristan. <br><br>To find a list of our sponsors and show-related promo codes, go to <a href="http://gimlet.media/OurAdvertisers">gimlet.media/OurAdvertisers</a>.<br><br><br><br><br><br><br><br><br><br><br> Wed, 18 Apr 2018 11:00:00 -0000 Gimlet full 1 5 The crew gets pissed.
The Habitat is a production of Gimlet Media. It’s produced by Lynn Levy, Peter Bresnan, and Megan Tan. Our editors are Alex Blumberg, Jorge Just, Caitlin Kenney, and Blythe Terrell. Additional reporting in this episode by Eric Eddings. Music, sound design, and mixing by Haley Shaw. Additional music by Alexander Overington. Music supervision by Matthew Boll. Our credits music in this episode is performed by Alba and the Mighty Lions, and written by David Bowie. Our fact checker is Michelle Harris. Thanks to Eric Mennel for all his help. And a very special thanks to the HI-SEAS crew: Andrzej, Christiane, Cyprien, Carmel, Shey, and Tristan.

To find a list of our sponsors and show-related promo codes, go to gimlet.media/OurAdvertisers.










]]>
1907 yes
Episode 4: She Likes to Camp Alone in the Finnish Winter The crew feels all warm and fuzzy. <br><br><em>The Habitat</em> is a production of Gimlet Media. It’s produced by Lynn Levy, Peter Bresnan, and Megan Tan. Our editors are Alex Blumberg, Jorge Just, Caitlin Kenney, and Blythe Terrell. Additional reporting in this episode by Eric Eddings. Music, sound design, and mixing by Haley Shaw. Music supervision by Matthew Boll. Doo-wop vocals by Nico Osborne and Sean Zuni Green. Our credits music in this episode is performed by Cyprien Verseux, and written by David Bowie. Our fact checker is Michelle Harris. Thanks to Eric Mennel for all his help. And a very special thanks to the HI-SEAS crew: Andrzej, Christiane, Cyprien, Carmel, Shey, and Tristan. <br><br>To find a list of our sponsors and show-related promo codes, go to <a href="http://gimlet.media/OurAdvertisers">gimlet.media/OurAdvertisers</a>. Wed, 18 Apr 2018 10:00:00 -0000 Gimlet full 1 4 The crew feels all warm and fuzzy.
The Habitat is a production of Gimlet Media. It’s produced by Lynn Levy, Peter Bresnan, and Megan Tan. Our editors are Alex Blumberg, Jorge Just, Caitlin Kenney, and Blythe Terrell. Additional reporting in this episode by Eric Eddings. Music, sound design, and mixing by Haley Shaw. Music supervision by Matthew Boll. Doo-wop vocals by Nico Osborne and Sean Zuni Green. Our credits music in this episode is performed by Cyprien Verseux, and written by David Bowie. Our fact checker is Michelle Harris. Thanks to Eric Mennel for all his help. And a very special thanks to the HI-SEAS crew: Andrzej, Christiane, Cyprien, Carmel, Shey, and Tristan.

To find a list of our sponsors and show-related promo codes, go to gimlet.media/OurAdvertisers.]]>
1836 yes
Episode 3: Why Are We Like This? The crew gets bad news. <br><br><em>The Habitat</em> is a production of Gimlet Media. It’s produced by Lynn Levy, Peter Bresnan, and Megan Tan. Our editors are Alex Blumberg, Jorge Just, Caitlin Kenney, and Blythe Terrell. Music, sound design, and mixing by Haley Shaw. Music supervision by Matthew Boll. Our credits music in this episode is performed by Reps, and written by David Bowie. Our fact checker is Michelle Harris. Special thanks to Jasmine Romero for sorting through hours and hours of boring astronaut tape to find the very MOST boring astronaut tape. And a very special thanks to the HI-SEAS crew: Andrzej, Christiane, Cyprien, Carmel, Shey, and Tristan. <br><br>To find a list of our sponsors and show-related promo codes, go to <a href="http://gimlet.media/OurAdvertisers">gimlet.media/OurAdvertisers</a>. Wed, 18 Apr 2018 09:00:00 -0000 Gimlet full 1 3 The crew gets bad news.
The Habitat is a production of Gimlet Media. It’s produced by Lynn Levy, Peter Bresnan, and Megan Tan. Our editors are Alex Blumberg, Jorge Just, Caitlin Kenney, and Blythe Terrell. Music, sound design, and mixing by Haley Shaw. Music supervision by Matthew Boll. Our credits music in this episode is performed by Reps, and written by David Bowie. Our fact checker is Michelle Harris. Special thanks to Jasmine Romero for sorting through hours and hours of boring astronaut tape to find the very MOST boring astronaut tape. And a very special thanks to the HI-SEAS crew: Andrzej, Christiane, Cyprien, Carmel, Shey, and Tristan.

To find a list of our sponsors and show-related promo codes, go to gimlet.media/OurAdvertisers.]]>
1715 yes
Episode 2: Every Day Goes By Faster and Faster The crew explores their new home. <br><br><em>The Habitat </em>is a production of Gimlet Media. It’s produced by Lynn Levy, Peter Bresnan, and Megan Tan. Our editors are Alex Blumberg, Jorge Just, Caitlin Kenney, and Blythe Terrell. Music, sound design, and mixing by Haley Shaw. Music supervision by Matthew Boll. Additional music by Charlie Palmieri. Our credits music in this episode is performed by Serengeti, and written by David Bowie. Our fact checker is Michelle Harris. Special thanks to Peter Bresnan for his extensive research on the history of space pooping. And a very special thanks to the HI-SEAS crew: Andrzej, Christiane, Cyprien, Carmel, Shey, and Tristan. <br><br>To find a list of our sponsors and show-related promo codes, go to <a href="http://gimlet.media/OurAdvertisers">gimlet.media/OurAdvertisers</a>. Wed, 18 Apr 2018 08:00:00 -0000 Gimlet full 1 2 The crew explores their new home.
The Habitat is a production of Gimlet Media. It’s produced by Lynn Levy, Peter Bresnan, and Megan Tan. Our editors are Alex Blumberg, Jorge Just, Caitlin Kenney, and Blythe Terrell. Music, sound design, and mixing by Haley Shaw. Music supervision by Matthew Boll. Additional music by Charlie Palmieri. Our credits music in this episode is performed by Serengeti, and written by David Bowie. Our fact checker is Michelle Harris. Special thanks to Peter Bresnan for his extensive research on the history of space pooping. And a very special thanks to the HI-SEAS crew: Andrzej, Christiane, Cyprien, Carmel, Shey, and Tristan.

To find a list of our sponsors and show-related promo codes, go to gimlet.media/OurAdvertisers.]]>
1771 yes
Episode 1: This Is the Way Up The crew leaves Earth behind. <br><br><em>The Habitat </em>is a production of Gimlet Media. It’s produced by Lynn Levy, Peter Bresnan, and Megan Tan. Our editors are Alex Blumberg, Jorge Just, Caitlin Kenney, and Blythe Terrell. Music, sound design, and mixing by Haley Shaw. Music supervision by Matthew Boll. Additional music in this episode by Bobby Lord and Elliot Cole. Our credits music in this episode is performed by Ellen O, and written by David Bowie. Our fact checker is Michelle Harris. Special thanks to Kaitlin Roberts, Alexander Overington, and to Neil Scheibelhut. And a very special thanks to the HI-SEAS crew: Andrzej, Christiane, Cyprien, Carmel, Shey, and Tristan. <br><br>To find a list of our sponsors and show-related promo codes, go to <a href="http://gimlet.media/OurAdvertisers">gimlet.media/OurAdvertisers</a>.<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> Wed, 18 Apr 2018 07:00:00 -0000 Gimlet full 1 1 The crew leaves Earth behind.
The Habitat is a production of Gimlet Media. It’s produced by Lynn Levy, Peter Bresnan, and Megan Tan. Our editors are Alex Blumberg, Jorge Just, Caitlin Kenney, and Blythe Terrell. Music, sound design, and mixing by Haley Shaw. Music supervision by Matthew Boll. Additional music in this episode by Bobby Lord and Elliot Cole. Our credits music in this episode is performed by Ellen O, and written by David Bowie. Our fact checker is Michelle Harris. Special thanks to Kaitlin Roberts, Alexander Overington, and to Neil Scheibelhut. And a very special thanks to the HI-SEAS crew: Andrzej, Christiane, Cyprien, Carmel, Shey, and Tristan.

To find a list of our sponsors and show-related promo codes, go to gimlet.media/OurAdvertisers.

















]]>
1726 yes
Trailer The true story of a fake planet. Listen to the entire series starting on Wednesday, April 18th.&nbsp; Tue, 17 Apr 2018 15:39:12 -0000 Gimlet trailer The true story of a fake planet. Listen to the entire series starting on Wednesday, April 18th. 257 no Introducing Three New Gimlet Shows <strong>New series premiering this April: </strong><br>Sandra (April 18)&nbsp;<br>The Habitat (April 18)&nbsp;<br>We Came to Win (April 25) Fri, 06 Apr 2018 13:38:05 -0000 Gimlet trailer New series premiering this April New series premiering this April:

Sandra (April 18) 
The Habitat (April 18) 
We Came to Win (April 25)]]> 156 no ================================================ FILE: api/test/data/test.xml ================================================ Subscriptions ================================================ FILE: api/test/fixtures/aliases.json ================================================ [ { "Alias": [ { "_id": "5b0c9a44d81f3f2db2ab7bc1", "podcast": "5b0c971526dc3db38136bb9c", "rss": null, "user": "5b0f306d8e147f10f16aceaf", "alias": "Blog BBC", "updatedAt": "2018-05-29T00:09:40.956Z", "createdAt": "2018-05-29T00:09:40.956Z", "__v": 0 }, { "_id": "5b0ca07c09f00031008cc730", "podcast": "5b0ae44926dc3db381bb62fa", "rss": null, "user": "5b0f306d8e147f10f16aceaf", "alias": "My CNN", "updatedAt": "2018-05-29T00:36:12.971Z", "createdAt": "2018-05-29T00:36:12.971Z", "__v": 0 }, { "_id": "5b0cae2c09f00031008cc86e", "rss": "5b0c978c26dc3db38137fca2", "podcast": null, "alias": "Mine", "user": "5b0f306d8e147f10f16aceaf", "updatedAt": "2018-05-29T01:34:36.958Z", "createdAt": "2018-05-29T01:34:36.958Z", "__v": 0 } ] } ] ================================================ FILE: api/test/fixtures/articles.json ================================================ [ { "RSS": [ { "_id": "5ae0c71a0e7cbc4ee14a8c81", "title": "RSS feed #11", "feedUrl": "http://feedproxy.google.com/~r/behance/vorr/~3/gKsDLKs86j8/Bolsters-A-Reciprocal-Digital-Platform-for-All-Age" }, { "_id": "5adb6ba6b30a726c02b02a0a", "images": { "featured": "", "banner": "", "favicon": "", "og": "" }, "description": "The Xcode Book", "categories": "RSS", "featured": false, "public": true, "valid": true, "likes": 0, "summary": "", "interest": "", "isParsing": false, "feedUrl": "http://xcodebook.com/feed", "lastScraped": "2018-05-31T19:06:56.408Z", "publicationDate": "2018-04-21T16:50:59.805Z", "title": "The Xcode Book", "url": "http://xcodebook.com", "updatedAt": "2018-05-31T19:06:56.410Z", "createdAt": "2018-04-21T16:49:42.428Z", "__v": 0, "language": "eng" }, { "_id": "5b0ad0baf6f89574a6388879", "images": { "featured": "", "banner": "", "favicon": "", "og": "" }, "description": "Dorkly: Comics", "categories": "RSS", "featured": false, "public": true, "valid": true, "likes": 0, "summary": "", "interest": "", "isParsing": false, "language": "eng", "feedUrl": "http://dorkly.com/comics/rss/", "lastScraped": "2018-05-31T18:56:03.064Z", "publicationDate": "2018-05-27T15:37:30.011Z", "title": "Dorkly: Comics", "url": "http://dorkly.com/comics", "updatedAt": "2018-05-31T18:56:03.065Z", "createdAt": "2018-05-27T15:37:30.017Z", "__v": 0 }, { "_id": "5b0ad0baf6f89574a638887d", "images": { "featured": "", "banner": "", "favicon": "", "og": "" }, "description": "BILDblog", "categories": "RSS", "featured": false, "public": true, "valid": true, "likes": 0, "summary": "", "interest": "", "isParsing": false, "language": "deu", "feedUrl": "http://feeds.feedburner.com/bildblog/", "lastScraped": "2018-05-31T19:07:36.443Z", "publicationDate": "2018-05-27T15:37:30.024Z", "title": "BILDblog", "url": "http://bildblog.de", "updatedAt": "2018-05-31T19:07:36.443Z", "createdAt": "2018-05-27T15:37:30.032Z", "__v": 0 } ] }, { "Article": [ { "url": "http://feedproxy.google.com/~r/behance/vorr/~3/gKsDLKs86j8/Bolsters-A-Reciprocal-Digital-Platform-for-All-Age", "title": "First", "rss": "5ae0c71a0e7cbc4ee14a8c81", "fingerprint": "test:0" }, { "_id": "5b0ad37226dc3db38194e5eb", "rss": "5b0ad0baf6f89574a6388879", "fingerprint": "test:1", "url": "http://dorkly.com/post/86517/what-if-deadpool-was-in-avengers-infinity-war", "__v": 0, "commentUrl": null, "content": "

\"undefined\"


\"undefined\"


\"undefined\"


\"undefined\"


\"undefined\"

\n



\nFollow Justin on Twitter and Facebook



", "createdAt": "2018-05-27T15:48:59.230Z", "description": "Follow Justin on Twitter and Facebook", "images": { "featured": "", "banner": "", "favicon": "", "og": "http://1.media.dorkly.cvcdn.com/44/64/fd010b185a4610d2a9914b42af6a4de6.jpeg" }, "publicationDate": "2018-05-25T13:00:00.000Z", "title": "What If Deadpool Was In Avengers: Infinity War", "updatedAt": "2018-05-30T06:52:15.685Z", "enclosures": [] }, { "_id": "5b0ad37226dc3db38194e613", "fingerprint": "test:2", "rss": "5b0ad0baf6f89574a6388879", "url": "http://dorkly.com/post/86533/pokemon-sun-playthrough-episode-91", "__v": 0, "commentUrl": null, "content": "

\"undefined\"



\n

< PREVIOUS COMIC    NEXT COMIC >

\n

ARCHIVE

\n





", "createdAt": "2018-05-27T15:48:59.230Z", "description": "< PREVIOUS COMIC    NEXT COMIC >\nARCHIVE", "images": { "featured": "", "banner": "", "favicon": "", "og": "http://0.media.dorkly.cvcdn.com/84/29/d628811360cb1533bc62f9399f4a6813.jpeg" }, "publicationDate": null, "title": "Pokemon Sun Playthrough - Episode 91", "updatedAt": "2018-05-30T19:40:26.635Z", "enclosures": [] }, { "_id": "5b0ad37226dc3db38194e614", "rss": "5b0ad0baf6f89574a6388879", "url": "http://dorkly.com/post/86477/star-wars-comics-funny", "__v": 0, "commentUrl": null, "fingerprint": "test:33", "content": "1. If Darth Vader Won Against Luke\n

\"undefined\"

\n
2. Star Trek vs. Star Wars\n

\"star

\n\n
3. The Fandom Menace\n

\"george

\n\n
4. The Empire Strikes Back vs. The Last Jedi\n

\"undefined\"

\n

\"undefined\"

\n

\"undefined\"

\n

\"undefined\"

\n

\"undefined\"

\n

\"undefined\"

\n

\n\n
5. If The Star Wars Universe Had The Internet\n

\"undefined\"

\n

\"undefined\"

\n

\"undefined\"

\n

\"undefined\"

\n

\"undefined\"  

\n

\n\n6. Darth Vader's Biggest Regret\n

\"Darth

\n\n
7. The Problem With Obi-Wan's Force Ghost\n

\"star

\n\n
8. Why Star Wars Villains Should Have a Personal Assistant\n

\"star

\n

\"star

\n

\"star

\n

\n

\"star

\n

\"star

\n

\"star

\n\n
9. Watching New Star Wars Movies: Then VS Now\n

\"undefined\"

\n\n
10. Why The Dark Side Is Way Better\n

\"undefined\"


\"undefined\"


\"undefined\"

\"undefined\"

\"undefined\"

\"undefined\"

\n

\n
11. The Truth Behind Luke & Leia Skywalker Being Separated At Birth\n

\"undefined\"

\n\n
12. Why Kylo Ren Shouldn't Look Into Vader's Past\n

\"the

\n

\"the

\n

 

\n

\"the

\n

 

\n

\"the

\n

 

\n

\"the

\n

 

\n

\"the

\n

 


", "createdAt": "2018-05-27T15:48:59.230Z", "description": "1. If Darth Vader Won Against Luke\n\n2. Star Trek vs. Star Wars\n\n\n3. The Fandom Menace\n\n\n4. The Empire Strikes Back vs. The Last Jedi\n\n\n\n\n\n\n\n\n5. If The Star Wars Universe Had The Internet\n\n\n\n\n  \n\n\n6. Darth Vader's Biggest Regret\n\n\n7. The Problem With Obi-Wan's Force Ghost\n\n\n8. Why", "images": { "featured": "", "banner": "", "favicon": "", "og": "http://1.media.dorkly.cvcdn.com/65/86/99adaec8d75c9fb488e37fe66121c7a9.jpeg" }, "publicationDate": "2018-05-25T09:00:00.000Z", "title": "12 Star Wars Comics That Will Give You a Good Feeling About This", "updatedAt": "2018-05-30T06:52:15.903Z", "enclosures": [] }, { "_id": "5b0ad37226dc3db38194e620", "rss": "5b0ad0baf6f89574a6388879", "fingerprint": "test:3", "url": "http://dorkly.com/post/86493/pokemon-sun-playthrough-episode-90", "__v": 0, "commentUrl": null, "content": "

\"Pokemon\"undefined\"


\n

< PREVIOUS COMIC    NEXT COMIC >

\n

ARCHIVE


\n

", "createdAt": "2018-05-27T15:48:59.230Z", "description": "< PREVIOUS COMIC    NEXT COMIC >\nARCHIVE", "images": {}, "publicationDate": "2018-05-17T13:15:00.000Z", "title": "Pokemon Sun Playthrough - Episode 90", "updatedAt": "2018-05-29T19:49:22.315Z", "enclosures": [] }, { "_id": "5b0ad37226dc3db38194e62b", "fingerprint": "test:4", "rss": "5b0ad0baf6f89574a6388879", "url": "http://dorkly.com/post/86336/how-every-game-of-fortnite-goes", "__v": 0, "commentUrl": null, "content": "

\"How

", "createdAt": "2018-05-27T15:48:59.230Z", "description": "", "images": { "featured": "", "banner": "", "favicon": "", "og": "http://0.media.dorkly.cvcdn.com/77/21/1664c50eb83b77f024603fe3e8c1313b.jpg" }, "publicationDate": "2018-05-11T13:00:00.000Z", "title": "How Every Game of Fortnite Goes", "updatedAt": "2018-05-30T06:52:17.180Z", "enclosures": [] }, { "_id": "5b0ad37226dc3db38194e62f", "rss": "5b0ad0baf6f89574a6388879", "fingerprint": "test:5", "url": "http://dorkly.com/post/86468/avengers-infinity-war-characters-are-everyone-in-your-highschool", "__v": 0, "commentUrl": null, "content": "

\"undefined\"\"undefined\"\"undefined\"


\nFollow Justin on Twitter and Facebook



", "createdAt": "2018-05-27T15:48:59.230Z", "description": "Follow Justin on Twitter and Facebook", "images": { "featured": "", "banner": "", "favicon": "", "og": "http://0.media.dorkly.cvcdn.com/55/26/2f51d05bcdf45316960872e39a8f3fb5.jpeg" }, "publicationDate": "2018-05-15T13:15:00.000Z", "title": "Avengers: Infinity War Characters Are Everyone In Your Highschool", "updatedAt": "2018-05-30T06:52:17.678Z", "enclosures": [] }, { "_id": "5b0ad37226dc3db38194e63d", "rss": "5b0ad0baf6f89574a6388879", "fingerprint": "test:6", "url": "http://dorkly.com/post/86378/why-fictional-worlds-will-always-seem-more-appealing-than-reality", "__v": 0, "commentUrl": null, "content": "

\"Why

\n




\nFollow Justin on Twitter and Facebook


\n

", "createdAt": "2018-05-27T15:48:59.230Z", "description": "Follow Justin on Twitter and Facebook", "images": { "featured": "", "banner": "", "favicon": "", "og": "http://2.media.dorkly.cvcdn.com/12/56/29fbe54ecba9fc1a573970d5f56c1ce3.jpg" }, "publicationDate": "2018-05-08T13:15:00.000Z", "title": "Why Fictional Worlds Will Always Seem More Appealing Than Reality", "updatedAt": "2018-05-30T06:52:17.648Z", "enclosures": [] }, { "_id": "5b0ad37226dc3db38194e640", "rss": "5b0ad0baf6f89574a6388879", "fingerprint": "test:7", "url": "http://dorkly.com/post/86418/4-questions-i-still-have-about-avengers-infinity-war", "__v": 0, "commentUrl": null, "content": "

\"4

\n
\n



\"undefined\"

\n
\n



\"undefined\"

\n
\n



\"undefined\"

\n



\nFollow Justin on Twitter and Facebook

Follow Tristan on Twitter



", "createdAt": "2018-05-27T15:48:59.230Z", "description": "Follow Justin on Twitter and FacebookFollow Tristan on Twitter", "images": { "featured": "", "banner": "", "favicon": "", "og": "http://0.media.dorkly.cvcdn.com/33/85/696c3670f74001ae9d9f16542804d180.jpg" }, "publicationDate": "2018-05-04T13:15:00.000Z", "title": "4 Questions I Still Have About Avengers: Infinity War", "updatedAt": "2018-05-30T06:52:17.927Z", "enclosures": [] }, { "_id": "5b0ad37226dc3db38194e69a", "rss": "5b0ad0baf6f89574a638887d", "fingerprint": "test:8", "url": "http://feedproxy.google.com/~r/bildblog/~3/sUeojXz2BCk", "__v": 0, "commentUrl": null, "content": "1. „TV Movie“ erfindet Exklusiv-Interview mit „Tatort“-Stars (dwdl.de, Thomas Lückerath) Die aktuelle „TV Movie“ wirbt mit einem „Exklusiv-Interview“ mit den „Tatort“-Kommissaren Jan Josef Liefers und Axel Prahl, doch einiges spricht dafür, dass das Gespräch nie stattgefunden hat: Das „Interview“ besteht aus bekannten Textschnipseln und auch die Agentur der beiden Schauspieler weiß von keinem Gespräch. „DWDL“ […]", "createdAt": "2018-05-27T15:49:00.285Z", "description": "1. „TV Movie“ erfindet Exklusiv-Interview mit „Tatort“-Stars\n(dwdl.de, Thomas Lückerath)\nDie aktuelle „TV Movie“ wirbt mit einem „Exklusiv-Interview“ mit den „Tatort“-Kommissaren Jan Josef Liefers und Axel Prahl, doch einiges spricht dafür, dass das Gespräch nie stattgefunden hat", "images": {}, "publicationDate": "2018-05-25T06:54:35.000Z", "title": "Exklusives Fake-Interview, Macht und Deutungshoheit, Heidis Abgründe", "updatedAt": "2018-05-29T19:49:22.315Z", "enclosures": [] }, { "_id": "5b0c680026dc3db381af5478", "rss": "5adb6ba6b30a726c02b02a0a", "fingerprint": "test:9", "url": "http://xcodebook.com/pdf-file/engineering-research-paper-example.pdf", "__v": 0, "commentUrl": null, "content": "Dcument Of Engineering Research Paper Example", "createdAt": "2018-05-28T20:35:11.747Z", "description": "Dcument Of Engineering Research Paper Example", "enclosures": null, "images": {}, "publicationDate": "2018-05-28T20:35:08.000Z", "title": "Engineering Research Paper Example", "updatedAt": "2018-05-29T19:58:41.563Z" }, { "_id": "5b0c680026dc3db381af5479", "rss": "5adb6ba6b30a726c02b02a0a", "fingerprint": "test:10", "url": "http://xcodebook.com/pdf-file/r-cookbook-paul-teetor.pdf", "__v": 0, "commentUrl": null, "content": "Dcument Of R Cookbook Paul Teetor", "createdAt": "2018-05-28T20:35:11.746Z", "description": "Dcument Of R Cookbook Paul Teetor", "enclosures": null, "images": {}, "publicationDate": "2018-05-28T20:35:08.000Z", "title": "R Cookbook Paul Teetor", "updatedAt": "2018-05-29T19:58:41.563Z" } ] } ] ================================================ FILE: api/test/fixtures/featured.json ================================================ [{ "RSS": [ { "featured": true, "title" : "Featured RSS feed #1", "feedUrl" : "http://google.com" }, { "featured": true, "title" : "Featured RSS feed #2", "feedUrl" : "http://bing.com" }, { "featured": false, "title" : "Interest RSS #3", "feedUrl" : "http://bbb.com", "interest": "VC" } ], "Podcast": [ { "featured": true, "title" : "Featured Podcast #1", "feedUrl" : "http://google.com" }, { "featured": true, "title" : "Featured Podcast #2", "feedUrl" : "http://bing.com" }, { "featured": false, "title" : "Interest Podcast #1", "feedUrl" : "http://aaa.com", "interest": "VR" } ] }] ================================================ FILE: api/test/fixtures/folders.json ================================================ [ { "Folder": [ { "_id": "5bbb10d3ec7e1d8e1c5b6705", "user": "5b0f306d8e147f10f16aceaf", "name": "Cool Folder", "podcast": [ "5afb7fedfe7430d35996d66e" ], "rss": [ "5b0ad0baf6f89574a638887a" ], "updatedAt": "2018-05-29T00:09:40.956Z", "createdAt": "2018-05-29T00:09:40.956Z" }, { "_id": "5b9b7dcedb7bb3077f9c8c6a", "user": "5b0f306d8e147f10f16aceaf", "name": "another Folder", "podcast": [], "rss": [ "5b0ad0baf6f89574a638887b" ], "updatedAt": "2018-05-29T00:36:12.971Z", "createdAt": "2018-05-29T00:36:12.971Z" }, { "_id": "5b9b7dcedb7bb3077f9c8c6b", "user": "5b0f306d8e147f10f16ac9c8", "name": "another Folder by another user", "podcast": [], "rss": [], "updatedAt": "2018-06-29T00:36:12.971Z", "createdAt": "2018-06-29T00:36:12.971Z" } ] } ] ================================================ FILE: api/test/fixtures/follows.json ================================================ [ { "Follow": [ { "_id":"5ad68877383ed22fb766e913", "podcast":"5afb7fedfe7430d35996d66e", "user":"5b0f306d8e147f10f16aceaf", "updatedAt":"2018-04-17T23:51:19.634Z", "createdAt":"2018-04-17T23:51:19.634Z", "__v":0 }, { "_id":"5ad68877383ed22fb766e912", "podcast":"5afb7f68fe7430d35996cc62", "user":"5b0f306d8e147f10f16aceaf", "updatedAt":"2018-04-17T23:51:19.620Z", "createdAt":"2018-04-17T23:51:19.620Z", "__v":0 } ], "RSS": [ { "_id": "6b0ad0baf6f89574a638887a", "images": { "featured": "", "banner": "", "favicon": "", "og": "" }, "description": "Follow test fake feed", "categories": "RSS", "featured": false, "public": true, "valid": true, "likes": 0, "summary": "", "interest": "", "isParsing": true, "language": "eng", "feedUrl": "http://dorkly.com/comics/rss?a=bcd", "lastScraped": "2018-06-01T17:52:10.655Z", "publicationDate": "2018-05-27T15:37:30.011Z", "title": "Dorkly: Comics", "url": "http://dorkly.com/comics", "updatedAt": "2018-06-01T18:07:31.230Z", "createdAt": "2018-05-27T15:37:30.017Z", "__v": 0 } ], "Podcast": [ { "_id": "6afb7fedfe7430d35996d66e", "feedUrl": "http://mbmbam.libsyn.com/rss?hello=world", "__v": 0, "categories": "podcast", "createdAt": "2018-05-16T00:48:45.264Z", "description": "Free advice, from three of the world's most qualified experts.", "featured": false, "images": { "favicon": null, "og": "http://static.libsyn.com/p/assets/6/d/7/d/6d7d36d6929db515/MBMBAM_Update.jpg" }, "lastScraped": "2018-06-01T21:39:47.827Z", "title": "My Brother, My Brother And Me", "updatedAt": "2018-06-01T21:39:47.827Z", "url": "http://mbmbam.com", "valid": true, "isParsing": false, "language": "eng" } ] } ] ================================================ FILE: api/test/fixtures/initial-data.json ================================================ [ { "User": [ { "_id": "5b0f306d8e147f10f16aceaf", "preferences": { "notifications": { "daily": false, "weekly": true, "follows": true } }, "bio": "", "url": "", "twitter": "", "background": 1, "recoveryCode": "", "active": true, "admin": false, "interests": [ "UI/UX", "Startups & VC", "Programming", "News", "Machine Learning & AI", "Gaming", "VR", "Lifehacks", "Marketing" ], "email": "valid@email.com", "name": "Valid Name", "username": "valid", "password": "valid_password" }, { "_id": "5b0f306d8e147f10f16ac9c8", "preferences": { "notifications": { "daily": false, "weekly": true, "follows": true } }, "bio": "", "url": "", "twitter": "", "background": 1, "recoveryCode": "", "active": true, "admin": false, "interests": [ "UI/UX", "Startups & VC", "Programming", "News", "Machine Learning & AI", "Gaming", "VR", "Lifehacks", "Marketing" ], "email": "valid2@email.com", "name": "Valid Name", "username": "valid2", "password": "valid_password" } ], "RSS": [ { "_id": "5b0ad0baf6f89574a638887a", "images": { "featured": "", "banner": "", "favicon": "", "og": "" }, "description": "Dorkly: Comics", "categories": "RSS", "featured": false, "public": true, "valid": true, "likes": 0, "summary": "", "interest": "", "isParsing": true, "language": "eng", "feedUrl": "http://dorkly.com/comics/rss", "lastScraped": "2018-06-01T17:52:10.655Z", "publicationDate": "2018-05-27T15:37:30.011Z", "title": "Dorkly: Comics", "url": "http://dorkly.com/comics", "updatedAt": "2018-06-01T18:07:31.230Z", "createdAt": "2018-05-27T15:37:30.017Z", "guidStability": "STABLE", "__v": 0 }, { "_id": "5b0ad0baf6f89574a638887b", "images": { "featured": "", "banner": "", "favicon": "", "og": "" }, "description": "Dorkly: Comics", "categories": "RSS", "featured": true, "public": true, "valid": true, "likes": 0, "summary": "", "interest": "", "isParsing": true, "language": "eng", "feedUrl": "http://dorkly.com/comics/rss/original", "lastScraped": "2018-06-01T17:52:10.655Z", "publicationDate": "2018-05-27T15:37:30.011Z", "title": "Dorkly: Comics", "url": "http://dorkly.com/comics/original", "updatedAt": "2018-06-01T18:07:31.230Z", "createdAt": "2018-05-27T15:37:30.017Z", "guidStability": "STABLE", "__v": 0 }, { "_id": "5b0ad0baf6f89574a638887e", "images": { "featured": "", "banner": "", "favicon": "", "og": "" }, "description": "BILDblog", "categories": "RSS", "featured": false, "public": true, "valid": true, "likes": 0, "summary": "", "interest": "", "isParsing": true, "language": "deu", "feedUrl": "http://feeds.feedburner.com/bildblog", "lastScraped": "2018-06-01T17:51:18.032Z", "publicationDate": "2018-05-27T15:37:30.024Z", "title": "BILDblog", "url": "http://bildblog.de", "updatedAt": "2018-06-01T18:06:31.392Z", "createdAt": "2018-05-27T15:37:30.032Z", "guidStability": "STABLE", "__v": 0 } ], "Podcast": [ { "_id": "5afb7fedfe7430d35996d66e", "feedUrl": "http://mbmbam.libsyn.com/rss", "__v": 0, "categories": "podcast", "createdAt": "2018-05-16T00:48:45.264Z", "description": "Free advice, from three of the world's most qualified experts.", "featured": false, "images": { "favicon": null, "og": "http://static.libsyn.com/p/assets/6/d/7/d/6d7d36d6929db515/MBMBAM_Update.jpg" }, "lastScraped": "2018-06-01T21:39:47.827Z", "title": "My Brother, My Brother And Me", "updatedAt": "2018-06-01T21:39:47.827Z", "url": "http://mbmbam.com", "valid": true, "isParsing": false, "guidStability": "STABLE", "language": "eng" }, { "_id": "5afb7f68fe7430d35996cc62", "feedUrl": "http://openargs.libsyn.com/", "__v": 0, "categories": "podcast", "createdAt": "2018-05-16T00:46:32.760Z", "description": "Every episode, legal expert Andrew and comic relief Thomas will tackle a popular legal topic and give you all the tools you need to understand the issue and win every argument you have on Facebook, with your Uncle Frank, or wherever someone is wrong on the Internet. It's law. It's politics. It's fun. We don't tell you what to think, we just set up the Opening Arguments.", "featured": false, "images": { "favicon": "http://openargs.com/favicon.ico", "og": "http://static.libsyn.com/p/assets/7/4/2/3/742385e9b736f6aa/Open_Args_Logo.jpg" }, "lastScraped": "2018-06-01T21:55:47.788Z", "title": "Opening Arguments", "updatedAt": "2018-06-01T21:55:47.789Z", "url": "http://openargs.com", "valid": true, "language": "eng", "guidStability": "STABLE", "isParsing": false } ], "Article": [ { "_id": "5b0ad37226dc3db38194e5ec", "rss": "5b0ad0baf6f89574a638887a", "guid": "test:11", "url": "http://dorkly.com/post/86517/what-if-deadpool-was-in-avengers-infinity-war", "__v": 0, "commentUrl": null, "content": "

\"undefined\"


\"undefined\"


\"undefined\"


\"undefined\"


\"undefined\"

\n



\nFollow Justin on Twitter and Facebook



", "createdAt": "2018-05-27T15:48:59.230Z", "description": "Follow Justin on Twitter and Facebook", "images": { "featured": "", "banner": "", "favicon": "", "og": "http://1.media.dorkly.cvcdn.com/44/64/fd010b185a4610d2a9914b42af6a4de6.jpeg" }, "publicationDate": "2018-05-25T13:00:00.000Z", "title": "What If Deadpool Was In Avengers: Infinity War", "updatedAt": "2018-05-30T06:52:15.685Z", "enclosures": [] }, { "_id": "5b0ad37226dc3db38194e5ed", "rss": "5b0ad0baf6f89574a638887a", "guid": "test:12", "url": "http://dorkly.com/post/86517/what-if-deadpool-was-in-avengers-infinity-war2/", "__v": 0, "commentUrl": null, "content": "

\"undefined\"


\"undefined\"


\"undefined\"


\"undefined\"


\"undefined\"

\n



\nFollow Justin on Twitter and Facebook



", "createdAt": "2018-05-27T15:48:59.230Z", "description": "Follow Justin on Twitter and Facebook 2", "images": { "featured": "", "banner": "", "favicon": "", "og": "http://1.media.dorkly.cvcdn.com/44/64/fd010b185a4610d2a9914b42af6a4de6.jpeg" }, "publicationDate": "2018-05-25T13:00:00.000Z", "title": "What If Deadpool Was In Avengers: Infinity War", "updatedAt": "2018-05-30T06:52:15.685Z", "enclosures": [] }, { "_id": "5b0ad37226dc3db38194e69b", "rss": "5b0ad0baf6f89574a638887e", "guid": "test:13", "url": "http://feedproxy.google.com/~r/bildblog/~3/sUeojXz2BCk", "__v": 0, "commentUrl": null, "content": "1. „TV Movie“ erfindet Exklusiv-Interview mit „Tatort“-Stars (dwdl.de, Thomas Lückerath) Die aktuelle „TV Movie“ wirbt mit einem „Exklusiv-Interview“ mit den „Tatort“-Kommissaren Jan Josef Liefers und Axel Prahl, doch einiges spricht dafür, dass das Gespräch nie stattgefunden hat: Das „Interview“ besteht aus bekannten Textschnipseln und auch die Agentur der beiden Schauspieler weiß von keinem Gespräch. „DWDL“ […]", "createdAt": "2018-05-27T15:49:00.285Z", "description": "1. „TV Movie“ erfindet Exklusiv-Interview mit „Tatort“-Stars\n(dwdl.de, Thomas Lückerath)\nDie aktuelle „TV Movie“ wirbt mit einem „Exklusiv-Interview“ mit den „Tatort“-Kommissaren Jan Josef Liefers und Axel Prahl, doch einiges spricht dafür, dass das Gespräch nie stattgefunden hat", "images": {}, "publicationDate": "2018-05-25T06:54:35.000Z", "title": "Exklusives Fake-Interview, Macht und Deutungshoheit, Heidis Abgründe", "updatedAt": "2018-05-29T19:49:22.315Z", "enclosures": [] } ], "Follow": [ { "rss": "5b0ad0baf6f89574a638887a", "user": "5b0f306d8e147f10f16aceaf" }, { "rss": "5b0ad0baf6f89574a638887b", "user": "5b0f306d8e147f10f16aceaf" } ], "Pin": [ { "article": "5b0ad37226dc3db38194e5ed", "user": "5b0f306d8e147f10f16aceaf" } ], "Episode": [ { "_id": "5b0ad37026dc3db38194e286", "podcast": "5afb7fedfe7430d35996d66e", "guid": "test:1", "url": "http://mbmbam.libsyn.com/mbmbam-398-rest-in-reeses-pieces", "__v": 0, "createdAt": "2018-05-27T15:49:00.021Z", "description": "We've got all the big news from the big basketball games that have been going on in the big tournament. Who's gonna take home that sweet trophy? More importantly: Which coach has the best, most powerful name? (Hint: It's our coach. Our coach has the most powerful name.) Suggested", "duration": "3546", "enclosure": "http://traffic.libsyn.com/mbmbam/MyBrotherMyBrotherandMe398.mp3?dest-id=18443", "images": { "featured": "", "banner": "", "favicon": "", "og": "http://static.libsyn.com/p/assets/d/5/f/5/d5f598a244fd67d2/MBMBAM_Update.jpg" }, "link": "http://mbmbam.libsyn.com/mbmbam-398-rest-in-reeses-pieces", "publicationDate": "2018-03-19T17:12:49.000Z", "title": "MBMBaM 398: Rest in Reese's Pieces", "updatedAt": "2018-05-28T19:28:08.323Z" }, { "_id": "5b0ad37626dc3db38194fa73", "podcast": "5afb7f68fe7430d35996cc62", "guid": "test:2", "url": "http://openargs.com/?p=45", "__v": 0, "createdAt": "2018-05-27T15:49:03.509Z", "description": "In Episodes 7 and 8, we discussed a recent decision by a federal court in Missouri dismissing a lawsuit brought by the Satanic Temple challenging certain Missouri laws that arguably restrict abortion rights.  In this episode, we take a step back and look at the right to abortion", "duration": "2650", "enclosure": "http://dts.podtrac.com/redirect.mp3/http://media.blubrry.com/openargs/traffic.libsyn.com/openargs/09_Episode_9.mp3?dest-id=455562", "images": { "featured": "", "banner": "", "favicon": "", "og": "http://static.libsyn.com/p/assets/7/3/b/5/73b5bfccfd8e95c6/Open_Args_Logo.jpg" }, "link": "http://openargs.com/?p=45", "publicationDate": "2016-08-31T04:22:28.000Z", "title": "OA9: Abortion, Roe v. Wade, and the Constitution, Part 1", "updatedAt": "2018-05-28T19:28:02.367Z" } ] } ] ================================================ FILE: api/test/fixtures/liked-shares.json ================================================ [{ "RSS": [ { "_id" : "5b0ad37626dc3db38194fa84", "featured": true, "title" : "RSS feed #1", "feedUrl" : "http://google.com" }, { "_id" : "5b0ad37626dc3db38194fa85", "featured": true, "title" : "RSS feed #2", "feedUrl" : "http://bing.com" } ], "Podcast": [ { "_id" : "5b0ad37626dc3db38194fa86", "featured": true, "title" : "Podcast #1", "feedUrl" : "http://google.com" }, { "_id" : "5b0ad37626dc3db38194fa87", "featured": true, "title" : "Podcast #2", "feedUrl" : "http://bing.com" } ] }, { "Article": [ { "_id" : "5b0ad37626dc3db38194fa85", "rss" : "5b0ad37626dc3db38194fa84", "title": "RSS feed article #1", "url" : "http://google.com/1", "fingerprint": "test:20" }, { "_id" : "5b0ad37626dc3db38194fa90", "rss" : "5b0ad37626dc3db38194fa84", "title": "RSS feed article #2", "url" : "http://google.com/2", "fingerprint": "test:21" } ], "Episode": [ { "_id" : "5b0ad37626dc3db38194fa87", "podcast": "5b0ad37626dc3db38194fa86", "title" : "Podcast episode #1", "url" : "http://google.com", "fingerprint": "test:23" } ] }] ================================================ FILE: api/test/fixtures/listens.json ================================================ [{ "Listen": [ { "_id": "5a17edea0021e932c92d8cce", "user": "5b0f306d8e147f10f16aceaf", "episode": "5b0ad37026dc3db38194e286", "duration": 0 }, { "_id": "5b17edea0021e932c92d8bbe", "user": "5b0f306d8e147f10f16aceaf", "episode": "5b0ad37626dc3db38194fa73", "duration": 10 } ], "User": [ { "_id": "5b0f306d8e147f10f16aceb0", "email": "valid+test@email.com", "name": "Valid Name", "username": "validplus", "password": "valid_password" } ] }] ================================================ FILE: api/test/fixtures/merge-data.json ================================================ [{ "User": [{ "_id": "5b0f306d8e147f10f16aceaf", "preferences": { "notifications": { "daily": false, "weekly": true, "follows": true } }, "bio": "", "url": "", "twitter": "", "background": 1, "recoveryCode": "", "active": true, "admin": false, "interests": [ "UI/UX", "Startups & VC", "Programming", "News", "Machine Learning & AI", "Gaming", "VR", "Lifehacks", "Marketing" ], "email": "valid@email.com", "name": "Valid Name", "username": "valid", "password": "valid_password" }, { "_id": "5b0f306d8e147f10f16aceb0", "preferences": { "notifications": { "daily": false, "weekly": true, "follows": true } }, "bio": "", "url": "", "twitter": "", "background": 1, "recoveryCode": "", "active": true, "admin": false, "interests": [ "UI/UX", "Startups & VC", "Programming", "News", "Machine Learning & AI", "Gaming", "VR", "Lifehacks", "Marketing" ], "email": "valid+1@email.com", "name": "Valid Name", "username": "valid1", "password": "valid_password" }, { "_id": "5b0f306d8e147f10f16aceb1", "preferences": { "notifications": { "daily": false, "weekly": true, "follows": true } }, "bio": "", "url": "", "twitter": "", "background": 1, "recoveryCode": "", "active": true, "admin": false, "interests": [ "UI/UX", "Startups & VC", "Programming", "News", "Machine Learning & AI", "Gaming", "VR", "Lifehacks", "Marketing" ], "email": "valid+2@email.com", "name": "Valid Name", "username": "valid2", "password": "valid_password" }] }, { "RSS": [{ "_id": "5b0ad0baf6f89574f638880a", "images": { "featured": "", "banner": "", "favicon": "", "og": "" }, "description": "Dorkly: Comics", "categories": "RSS", "featured": true, "public": true, "valid": true, "likes": 0, "summary": "", "interest": "", "isParsing": true, "language": "eng", "feedUrl": "http://dorkly.com/comics/rss/original", "lastScraped": "2018-06-01T17:52:10.655Z", "publicationDate": "2018-05-27T15:37:30.011Z", "title": "Dorkly: Comics", "url": "http://dorkly.com/comics/original", "updatedAt": "2018-06-01T18:07:31.230Z", "createdAt": "2018-05-27T15:37:30.017Z", "__v": 0 }, { "_id": "5b0ad0baf6f89574f638880b", "images": { "featured": "", "banner": "", "favicon": "", "og": "" }, "description": "Dorkly: Comics", "categories": "RSS", "featured": true, "public": true, "valid": true, "likes": 0, "summary": "", "interest": "", "isParsing": true, "language": "eng", "feedUrl": "https://dorkly.com/comics/rss/original", "lastScraped": "2018-06-01T17:52:10.655Z", "publicationDate": "2018-05-27T15:37:30.011Z", "title": "Dorkly: Comics", "url": "http://dorkly.com/comics/original", "updatedAt": "2018-06-01T18:07:31.230Z", "createdAt": "2018-05-27T15:37:30.017Z", "__v": 0 }] }, { "Article": [{ "_id": "5b0ad37226dc3db38194e5ec", "rss": "5b0ad0baf6f89574f638880a", "guid": "test:11", "url": "http://dorkly.com/post/86517/what-if-deadpool-was-in-avengers-infinity-war", "title": "What If Deadpool Was In Avengers: Infinity War" }, { "_id": "5b0ad37226dc3db38194e5ed", "rss": "5b0ad0baf6f89574f638880a", "guid": "test:12", "url": "http://dorkly.com/post/86517/what-if-deadpool-was-in-avengers-infinity-war2/", "title": "What If Deadpool Was In Avengers: Infinity War" }, { "_id": "5b0ad37226dc3db38194e5ee", "rss": "5b0ad0baf6f89574f638880b", "guid": "test:11", "url": "http://dorkly.com/post/86517/what-if-deadpool-was-in-avengers-infinity-war/", "title": "What If Deadpool Was In Avengers: Infinity War" }, { "_id": "5b0ad37226dc3db38194e5ef", "rss": "5b0ad0baf6f89574f638880b", "guid": "test:12", "url": "http://dorkly.com/post/86517/what-if-deadpool-was-in-avengers-infinity-war2/", "title": "What If Deadpool Was In Avengers: Infinity War" }, { "_id": "5b0ad37226dc3db38194e5d0", "rss": "5b0ad0baf6f89574f638880b", "guid": "test:13", "url": "https://dorkly.com/post/86517/what-if-deadpool-was-in-avengers-infinity-war/", "title": "What If Deadpool Was In Avengers: Infinity War" }] }, { "Pin": [{ "_id": "5b0ad37226dc3db38194e600", "article": "5b0ad37226dc3db38194e5ec", "user": "5b0f306d8e147f10f16aceaf" }, { "_id": "5b0ad37226dc3db38194e601", "article": "5b0ad37226dc3db38194e5ed", "user": "5b0f306d8e147f10f16aceaf" }, { "_id": "5b0ad37226dc3db38194e602", "article": "5b0ad37226dc3db38194e5ec", "user": "5b0f306d8e147f10f16aceb0" }, { "_id": "5b0ad37226dc3db38194e603", "article": "5b0ad37226dc3db38194e5ee", "user": "5b0f306d8e147f10f16aceb0" }, { "_id": "5b0ad37226dc3db38194e604", "article": "5b0ad37226dc3db38194e5d0", "user": "5b0f306d8e147f10f16aceb1" }], "Follow": [{ "_id": "5b0ad37226dc3db38194e700", "rss": "5b0ad0baf6f89574f638880b", "user": "5b0f306d8e147f10f16aceaf" }, { "_id": "5b0ad37226dc3db38194e701", "rss": "5b0ad0baf6f89574f638880a", "user": "5b0f306d8e147f10f16aceb0" }, { "_id": "5b0ad37226dc3db38194e702", "rss": "5b0ad0baf6f89574f638880b", "user": "5b0f306d8e147f10f16aceb0" }, { "_id": "5b0ad37226dc3db38194e703", "rss": "5b0ad0baf6f89574f638880a", "user": "5b0f306d8e147f10f16aceb1" }, { "_id": "5b0ad37226dc3db38194e704", "rss": "5b0ad0baf6f89574f638880b", "user": "5b0f306d8e147f10f16aceb1" }] }] ================================================ FILE: api/test/fixtures/notes.json ================================================ [ { "Note": [ { "_id": "5bca58f5e4313757120cabc5", "user": "5b0f306d8e147f10f16aceaf", "article": "5b0ad37226dc3db38194e5ec", "start": 111, "end": 333, "text": "Some notes and comments", "updatedAt": "2018-05-29T00:09:40.956Z", "createdAt": "2018-05-29T00:09:40.956Z" }, { "_id": "5bca58f5e4313757120c881c", "user": "5b0f306d8e147f10f16aceaf", "article": "5b0ad37226dc3db38194e5ec", "text": "Some notes and comments", "start": 444, "end": 555, "updatedAt": "2018-05-29T00:09:40.956Z", "createdAt": "2018-05-29T00:09:40.956Z" }, { "_id": "5bcaf8d8dfae8e9279b71c6c", "user": "5b0f306d8e147f10f16aceaf", "episode": "5b0ad37626dc3db38194fa73", "text": "", "start": 666, "end": 777, "updatedAt": "2018-05-29T00:36:12.971Z", "createdAt": "2018-05-29T00:36:12.971Z" }, { "_id": "5bcb6aa57b42899b9941c770", "user": "5b0f306d8e147f10f16ac9c8", "episode": "5b0ad37626dc3db38194fa73", "text": "Some notes and comments", "start": 888, "end": 999, "updatedAt": "2018-06-29T00:36:12.971Z", "createdAt": "2018-06-29T00:36:12.971Z" } ] } ] ================================================ FILE: api/test/fixtures/opml.json ================================================ [{ "RSS": [ { "_id": "5acfe3928125f655c1004f45", "title" : "OPML CNN", "feedUrl" : "http://rss.cnn.com/rss/cnn_topstories.rss", "url": "https://cnn.com/" } ], "Podcast": [ { "_id": "5acfd99ec393652e812cd569", "title" : "OPML LayoutFM", "feedUrl" : "http://layout.fm/rss", "url": "https://layout.fm/" } ], "Follow": [ {"rss":"5acfe3928125f655c1004f45","user":"5b0f306d8e147f10f16aceaf"}, {"podcast":"5acfd99ec393652e812cd569","user":"5b0f306d8e147f10f16aceaf"} ] }] ================================================ FILE: api/test/fixtures/pins.json ================================================ [ { "Pin": [ { "_id": "5b0c9a44d81f3f2db2ab7bc1", "episode": "5b0c971526dc3db38136bb9c", "user": "5b0f306d8e147f10f16aceaf", "updatedAt": "2018-05-29T00:09:40.956Z", "createdAt": "2018-05-29T00:09:40.956Z", "__v": 0 }, { "_id": "5b0ca07c09f00031008cc730", "article": "5b0ae44926dc3db381bb62fa", "user": "5b0f306d8e147f10f16aceaf", "updatedAt": "2018-05-29T00:36:12.971Z", "createdAt": "2018-05-29T00:36:12.971Z", "__v": 0 }, { "_id": "5b0cae2c09f00031008cc86e", "episode": "5b0c978c26dc3db38137fca2", "user": "5b0f306d8e147f10f16aceaf", "updatedAt": "2018-05-29T01:34:36.958Z", "createdAt": "2018-05-29T01:34:36.958Z", "__v": 0 } ] } ] ================================================ FILE: api/test/fixtures/playlists.json ================================================ [{ "Playlist": [ { "user": "5b0f306d8e147f10f16aceaf", "name": "Cool playlist", "episodes": [ "5b0ad37026dc3db38194e286", "5b0ad37626dc3db38194fa73" ] } ], "User": [ { "_id" : "4342306d8e147f10f16aceaf", "email" : "logged_in_user@email.com", "name" : "Valid Name", "username": "validusername", "password": "valid_password" } ] }] ================================================ FILE: api/test/fixtures/tags.json ================================================ [ { "Tag": [ { "_id": "5bca58f5e4313757120c8810", "user": "5b0f306d8e147f10f16aceaf", "name": "BOB", "article": [ "5b0ad37226dc3db38194e5ec" ], "episode": [ "5b0ad37026dc3db38194e286" ], "updatedAt": "2018-05-29T00:09:40.956Z", "createdAt": "2018-05-29T00:09:40.956Z" }, { "_id": "5bcaf8d8dfae8e9279b71c6c", "user": "5b0f306d8e147f10f16aceaf", "name": "Coffee", "article": [ "5b0ad37226dc3db38194e5ed", "5b0ad37226dc3db38194e69b" ], "episode": [ "5b0ad37626dc3db38194fa73" ], "updatedAt": "2018-05-29T00:36:12.971Z", "createdAt": "2018-05-29T00:36:12.971Z" }, { "_id": "5bcb6aa57b42899b9941c770", "user": "5b0f306d8e147f10f16ac9c8", "name": "Pods", "article": [], "episode": [], "updatedAt": "2018-06-29T00:36:12.971Z", "createdAt": "2018-06-29T00:36:12.971Z" } ] } ] ================================================ FILE: api/test/fixtures/unstable-guid.json ================================================ [ { "RSS": [ { "_id" : "5b0bfaf6bf3863483f0b71e7", "images" : { "featured" : "", "banner" : "", "favicon" : "", "og" : "" }, "description" : "todopvr (noticias)", "categories" : "RSS", "featured" : false, "public" : true, "valid" : true, "likes" : 0, "summary" : "", "interest" : "", "language" : "spa", "feedUrl" : "http://todopvr.com/foro/news_rss.php", "lastScraped" : "2018-08-30T12:47:50.621Z", "publicationDate" : "2018-05-28T12:49:58.875Z", "title" : "todopvr (noticias)", "url" : "http://todopvr.com/foro", "updatedAt" : "2018-08-30T12:47:52.164Z", "createdAt" : "2018-05-28T12:49:58.904Z", "__v" : 0, "postCount" : 54585, "consecutiveScrapeFailures" : 0, "followerCount" : 1, "fingerprint" : "guid:555008dbeb999bfca37853d86c2f1805" }, { "_id" : "5b0a1c041bbf863ebe703dbe", "images" : { "featured" : "", "banner" : "", "favicon" : "", "og" : "http://worldbank.org/content/dam/wbr/share-logo/sharing-wb-logo-clear.png" }, "description" : "World Bank Search - NEWS", "categories" : "RSS", "featured" : false, "public" : true, "valid" : true, "likes" : 0, "summary" : "", "interest" : "", "language" : "fra", "feedUrl" : "http://search.worldbank.org/api/v2/news?countrycode_exact=pe&format=atom", "lastScraped" : "2018-08-30T13:01:08.089Z", "publicationDate" : "2018-05-27T02:46:28.766Z", "title" : "World Bank Search - NEWS", "url" : "http://search.worldbank.org", "updatedAt" : "2018-08-30T13:01:08.600Z", "createdAt" : "2018-05-27T02:46:28.922Z", "__v" : 0, "postCount" : 17754, "consecutiveScrapeFailures" : 0, "followerCount" : 1, "fingerprint" : "guid:75427afbbde252e7d6deb1a39abd144a" }, { "_id" : "5b04c778e8865b482745bdee", "images" : { "featured" : "", "banner" : "", "favicon" : "", "og" : "" }, "description" : "Cindy Gross", "categories" : "RSS", "featured" : false, "public" : true, "valid" : true, "likes" : 0, "summary" : "", "interest" : "", "language" : "eng", "feedUrl" : "http://social.msdn.microsoft.com/search/feed/?format=rss&query=blogs&refinement=109", "lastScraped" : "2018-08-30T13:32:05.363Z", "publicationDate" : "2018-05-23T01:44:24.250Z", "title" : "Cindy Gross", "url" : "", "updatedAt" : "2018-08-30T13:32:08.473Z", "createdAt" : "2018-05-23T01:44:24.284Z", "__v" : 0, "postCount" : 66540, "consecutiveScrapeFailures" : 0, "followerCount" : 1, "fingerprint" : "guid:39e29cb496e69af0c061c21d4d4dd4ad" } ] } ] ================================================ FILE: api/test/fixtures/user.json ================================================ [{ "User": [ { "_id" : "4342306d8e147f10f16aceaf", "email" : "logged_in_user@email.com", "name" : "Valid Name", "username": "validusername", "password": "valid_password" }, { "email" : "another_user@email.com", "name" : "Another User", "username": "anotheruser", "password": "anotheruser" } ] }] ================================================ FILE: api/test/fixtures/user_model.json ================================================ [ { "User": [ { "_id" : "4342306d8e147eeef16aceaf", "email" : "user_model_test@email.com", "name" : "Valid Name", "username": "validusername", "password": "valid_password" } ], "Podcast": [ { "_id": "bbbb7fedfe7430d35996d66e", "feedUrl": "http://mbmbam.libsyn.com/rss", "__v": 0, "categories": "podcast", "createdAt": "2018-05-16T00:48:45.264Z", "description": "Free advice, from three of the world's most qualified experts.", "featured": false, "images": { "favicon": null, "og": "http://static.libsyn.com/p/assets/6/d/7/d/6d7d36d6929db515/MBMBAM_Update.jpg" }, "lastScraped": "2018-06-01T21:39:47.827Z", "title": "My Brother, My Brother And Me", "updatedAt": "2018-06-01T21:39:47.827Z", "url": "http://mbmbam.com", "valid": true, "isParsing": false, "language": "eng" } ], "Episode": [ { "_id": "aaaad37026dc3db38194e286", "podcast": "bbbb7fedfe7430d35996d66e", "fingerprint": "test:55", "url": "http://openargs.com/?p=45", "__v": 0, "createdAt": "2018-05-27T15:49:03.509Z", "description": "....", "duration": "2650", "enclosure": "http://dts.podtrac.com/redirect.mp3/http://media.blubrry.com/openargs/traffic.libsyn.com/openargs/09_Episode_9.mp3?dest-id=455562", "images": { "featured": "", "banner": "", "favicon": "", "og": "http://static.libsyn.com/p/assets/7/3/b/5/73b5bfccfd8e95c6/Open_Args_Logo.jpg" }, "link": "http://openargs.com/?p=45", "publicationDate": "2016-08-31T04:22:28.000Z", "title": "OA9: Abortion, Roe v. Wade, and the Constitution, Part 1", "updatedAt": "2018-05-28T19:28:02.367Z" } ], "Pin": [ { "episode": "aaaad37026dc3db38194e286", "user": "4342306d8e147eeef16aceaf", "updatedAt": "2018-05-29T00:09:40.956Z", "createdAt": "2018-05-29T00:09:40.956Z" } ], "Follow": [ { "user": "4342306d8e147eeef16aceaf", "podcast":"bbbb7fedfe7430d35996d66e" } ], "Playlist": [ { "user": "4342306d8e147eeef16aceaf", "name": "test playlist", "episodes": ["aaaad37026dc3db38194e286"] } ] } ] ================================================ FILE: api/test/models/user.js ================================================ import { expect, request } from 'chai'; import User from '../../src/models/user'; import FollowSchema from '../../src/models/follow'; import PinSchema from '../../src/models/pin'; import PlaylistSchema from '../../src/models/playlist'; import PodcastSchema from '../../src/models/podcast'; import EpisodeSchema from '../../src/models/episode'; import { loadFixture } from '../utils'; describe('User model', () => { let user; before(async () => { await loadFixture('user_model'); user = await User.findOne(); const promises = [PinSchema, FollowSchema, PlaylistSchema].map(async schema => { expect(await schema.find({ user })).to.be.an('array').that.is.not.empty; }); await Promise.all(promises); }); after(async () => { const promises = [ User, FollowSchema, PinSchema, PlaylistSchema, PodcastSchema, EpisodeSchema, ].map(async model => { await model.remove(); }); await Promise.all(promises); }); describe('remove document', () => { it('should remove the User and all Pins, Playlists, Follows and Likes with a foreign key to the User', async () => { await user.remove(); const promises = [PinSchema, FollowSchema, PlaylistSchema].map( async schema => { expect(await schema.findOne({ user }), schema.modelName).to.be.null; }, ); await Promise.all(promises); }); }); }); ================================================ FILE: api/test/parsers/content.js ================================================ import { expect } from 'chai'; import { ParseContent } from '../../src/parsers/content'; describe('Mercury Parser', () => { it('should parse the content', async () => { const content = await ParseContent('https://getstream.io'); expect(content).to.not.be.null; expect(content.title).to.be.string; expect(content.content).to.be.string; }); }); ================================================ FILE: api/test/parsers/discovery.js ================================================ import { expect } from 'chai'; import nock from 'nock'; import { discoverRSS } from '../../src/parsers/discovery'; const host = 'http://localhost'; describe('Discovery', () => { before(async () => { const mockPaths = [ { path: '/html', file: 'index.html', type: 'text/html' }, { path: '/html/', file: 'index.html', type: 'text/html' }, { path: '/case/', file: 'case.html', type: 'text/html' }, { path: '/rss', file: 'rss.xml', type: 'text/xml' }, { path: '/nofavicon', file: 'nofavicon.html', type: 'text/html' }, { path: '/nourl', file: 'nourl.xml', type: 'text/xml' }, { path: '/fail', file: 'fail.xml', type: 'text/xml' }, ]; for (const { path, file, type } of mockPaths) { nock(host) .get(path) .replyWithFile(200, `${__dirname}/../data/discovery/${file}`, { 'Content-Type': type }) } nock(host) .get(`${__dirname}/favicon.ico`) .reply(500) }); after(() => nock.cleanAll()); const testCases = [ { title: 'html request', url: `${host}/html`, site: { title: 'RSSFinder', favicon: `${host}/favicon.ico`, url: `${host}/html`, }, feedUrls: [{ title: 'RSS', url: `${host}/rssfinder.xml` }], }, { title: 'html request 2', url: `${host}/html/`, site: { title: 'RSSFinder', favicon: `${host}/favicon.ico`, url: `${host}/html`, }, feedUrls: [{ title: 'RSS', url: `${host}/rssfinder.xml` }], }, { title: 'html request case', url: `${host}/case/`, site: { title: 'RSSFinder', favicon: `${host}/favicon.ico`, url: `${host}/case`, }, feedUrls: [{ title: 'RSS', url: `${host}/rssfinder.xml` }], }, { title: 'rss request cnn', url: `${host}/rss`, site: { title: 'CNN.com - RSS Channel - App International Edition', favicon: `https://www.cnn.com/favicon.ico`, url: `https://www.cnn.com/app-international-edition/index.html`, }, feedUrls: [{ title: 'CNN.com - RSS Channel - App International Edition', url: `http://rss.cnn.com/rss/edition` }], }, { title: 'no favicon', url: `${host}/nofavicon`, site: { title: 'RSSFinder', favicon: null, url: `${host}/nofavicon`, }, feedUrls: [{ title: 'RSS', url: `${host}/rssfinder.xml` }], }, { title: 'no url', url: `${host}/nourl`, site: { title: 'Index - 24óra', favicon: `http://index.hu/favicon.ico`, url: `http://index.hu/24ora/`, }, feedUrls: [{ title: 'Index - 24óra', url: `${host}/nourl` }], }, ]; for (let t of testCases) { it(`should extract info: ${t.title}`, async () => { const res = await discoverRSS(t.url); expect(res.site).to.deep.equal(t.site); expect(res.feedUrls).to.deep.equal(t.feedUrls); }); } }); ================================================ FILE: api/test/parsers/feed.js ================================================ import { expect } from 'chai'; import normalize from 'normalize-url'; import { getTestFeed, getTestPodcast } from '../utils'; import { ReadFeedStream, ParseFeedPosts, ParsePodcastPosts, } from '../../src/parsers/feed'; // Test data is extracted from the original feeds. Modifications to accommodate acceptable internal changes (e.g. normalization) are noted. const rssTestData = [ { filename: 'techcrunch', expectations: { title: 'TechCrunch', link: 'https://techcrunch.com/', description: 'Startup and Technology News', articlesLength: 20, fingerprint: 'guid:f53cec9fa49a491db35dae6e10b85498', firstArticleUrl: 'https://techcrunch.com/2018/05/31/area-120-subway-pigeon', firstArticleTitle: 'Google’s Area 120 incubator aims to improve your NYC subway commute with Pigeon', }, }, { filename: 'reddit-r-programming', expectations: { title: '/r/programming', // special-case for reddit feeds link: 'https://www.reddit.com/r/programming/', description: 'Computer Programming', // no description; description taken from subtitle articlesLength: 25, fingerprint: 'guid:8e55ca2e471abf0209050ea60b5f19ab', firstArticleUrl: 'https://reddit.com/r/programming/comments/8oryk9/github_was_also_talking_to_google_about_a_deal', // normalize-url drops 'www' subdomain, trailing slash firstArticleTitle: 'GitHub was also talking to Google about a deal, but went with Microsoft instead', }, }, { filename: 'hackernews', expectations: { title: 'Hacker News', link: 'https://news.ycombinator.com/', description: 'Links for the intellectually curious, ranked by readers.', articlesLength: 30, fingerprint: 'guid:f9a5c3ce2fd3f2cb3aced7c0d7332ea3', firstArticleUrl: 'https://gitea.io', firstArticleTitle: 'Gitea – Alternative to GitLab and GitHub', }, }, { filename: 'a16z', expectations: { title: 'Andreessen Horowitz', link: 'https://a16z.com/', description: 'Software Is Eating the World', articlesLength: 10, fingerprint: 'guid:0d1d4a53e6156a0250e6212700858984', firstArticleUrl: 'http://andrewchen.co/paid-marketing-addiction', firstArticleTitle: 'How Startups Get Addicted to Paid Marketing (and How to Go Beyond the Local Max)', }, }, { filename: 'stream', expectations: { title: 'The Stream Blog', link: 'https://getstream.io/blog', description: 'Welcome to the Official Stream Blog.', articlesLength: 12, firstArticleUrl: 'https://getstream.io/blog/try-out-the-stream-api-with-postman', // normalize-url drops trailing slash firstArticleTitle: 'Try out the Stream API with Postman', }, }, { filename: 'medium-technology', expectations: { title: 'Handpicked stories about Technology on Medium', link: 'https://medium.com/topic/technology?source=rss-------8-----------------technology', description: 'Technology on Medium: The download.', articlesLength: 10, firstArticleUrl: 'https://shift.newco.co/apple-wants-its-phones-back-d0d77142c7d?source=rss-------8-----------------technology', firstArticleTitle: 'Apple Wants Its Phones Back', }, }, { filename: 'hackernoon-daily-dev', expectations: { title: 'Software Development in Hacker Noon on Medium', link: 'https://hackernoon.com/tagged/software-development?source=rss----3a8144eabfe3--software_development', description: 'Latest stories tagged with Software Development in Hacker Noon on Medium', articlesLength: 10, firstArticleUrl: 'https://hackernoon.com/surveyjs-plugin-for-wordpress-9f42d9219db0?source=rss----3a8144eabfe3--software_development', firstArticleTitle: 'SurveyJS plugin for Wordpress', }, }, { filename: 'lobsters', expectations: { title: 'Lobsters', link: 'https://lobste.rs/', description: null, // empty description; no subtitle articlesLength: 25, firstArticleUrl: 'https://jwz.org/blog/2018/06/lol-github', // normalize-url drops 'www' subdomain, trailing slash firstArticleTitle: "JWZ's snarky, but relevant take on Github", }, }, { filename: 'django', expectations: { title: 'The Django weblog', link: 'https://www.djangoproject.com/weblog/', description: 'Latest news about Django, the Python Web framework.', articlesLength: 10, firstArticleUrl: 'https://djangoproject.com/weblog/2018/jun/01/bugfix-release', // normalize-url drops 'www' subdomain, trailing slash firstArticleTitle: 'Django bugfix release: 2.0.6', }, }, { filename: 'ruby-on-rails', expectations: { title: 'Riding Rails', link: 'https://weblog.rubyonrails.org/', description: null, // no description or subtitle articlesLength: 10, firstArticleUrl: 'https://weblog.rubyonrails.org/2018/5/27/this-week-in-rails-enumerable-index_with-transaction-fixes-and-more', // normalize-url drops trailing slash firstArticleTitle: 'Enumerable#index_with, transaction fixes, and more!', }, }, { filename: 'tmz', expectations: { title: 'TMZ.com', link: 'http://www.tmz.com/', description: 'Celebrity Gossip and Entertainment News, Covering Celebrity News and Hollywood Rumors. Get All The Latest Gossip at TMZ - Thirty Mile Zone.', articlesLength: 20, firstArticleUrl: 'http://tmz.com/2018/06/06/kate-spade-suicide-husband-andy-divorce-depressed', // normalize-url drops 'www' subdomain, trailing slash firstArticleTitle: 'Kate Spade Depressed Before Suicide Because Husband Wanted a Divorce', }, }, { filename: 'treehugger-latest', expectations: { title: 'Latest Items from TreeHugger', link: 'https://www.treehugger.com/feeds/latest/', description: 'The most recent 30 items from TreeHugger', articlesLength: 30, firstArticleUrl: 'https://treehugger.com/green-food/7-savory-recipes-use-rhubarb.html', // normalize-url drops 'www' subdomain firstArticleTitle: '7 savory recipes that use rhubarb', }, }, { filename: 'perezhilton', expectations: { title: 'PerezHilton', link: 'https://perezhilton.com', description: "Perez Hilton dishes up the juiciest celebrity gossip on all your favorite stars, from Justin Bieber to Kim Kardashian. Are you up-to-date on Hollywood's latest scandal?!", articlesLength: 10, firstArticleUrl: 'http://perezhilton.com/2018-06-05-kate-spade-reta-saffo-sister-mental-illness-reported-suicide', firstArticleTitle: "Kate Spade's Sister Says The Designer Suffered From Years Of Mental Illness; Reported Suicide 'Not Unexpected'", }, }, { filename: 'kottke', expectations: { title: 'kottke.org', link: 'http://kottke.org/', description: "Jason Kottke's weblog, home of fine hypertext products", // no description; description taken from subtitle articlesLength: 40, firstArticleUrl: 'https://kottke.org/18/06/ten-guidelines-for-nurturing-a-thriving-democracy-by-bertrand-russell', firstArticleTitle: 'Ten guidelines for nurturing a thriving democracy by Bertrand Russell', }, }, { filename: 'boingboing', expectations: { title: 'Boing Boing', link: 'https://boingboing.net/', // FeedParser adds trailing slash description: 'Brain candy for Happy Mutants', articlesLength: 30, firstArticleUrl: 'https://boingboing.net/2018/06/06/heres-how-the-hawaiian-isl.html', firstArticleTitle: "Here's how the Hawai'ian Islands formed", }, }, { filename: 'strava', expectations: { title: 'strava-engineering - Medium', link: 'https://medium.com/strava-engineering?source=rss----89d4108ce2a3---4', description: 'Engineers building the social network for athletes. - Medium', articlesLength: 10, firstArticleUrl: 'https://medium.com/strava-engineering/apple-dev-guild-week-f5981fe525a4?source=rss----89d4108ce2a3---4', firstArticleTitle: 'Apple Dev Guild Week', firstArticlePublicationDate: new Date(Date.UTC(2018, 5, 4, 23, 55, 0)), }, }, ]; // Test data is extracted from the original feeds. Modifications to accommodate acceptable internal changes (e.g. normalization) are noted. const podcastTestData = [ { filename: 'giant-bombcast', expectations: { title: 'Giant Bombcast', link: 'https://www.giantbomb.com/', // FeedParser adds trailing slash image: 'https://static.giantbomb.com/uploads/original/11/110673/2927815-3756859778-28940.png', episodesLength: 649, firstPodcastUrl: 'https://giantbomb.com/podcasts/giant-bombcast-534-forklift-academy/1600-2347', // normalize-url drops 'www' subdomain, trailing slash firstPodcastTitle: 'Giant Bombcast 534: Forklift Academy', firstPodcastPublicationDate: new Date(Date.UTC(2018, 4, 30, 0, 14, 0)), // Tue, 29 May 2018 16:14:00 PST --> Wed, 30 May 2018 00:14:00 GMT }, }, { filename: 'serial', expectations: { title: 'Serial', link: 'https://serialpodcast.org/', // FeedParser adds trailing slash image: 'https://serialpodcast.org/sites/all/modules/custom/serial/img/serial-itunes-logo.png', episodesLength: 28, firstPodcastUrl: 'http://feeds.serialpodcast.org/~r/serialpodcast/~3/Dx1_WiYrlg0/live', firstPodcastTitle: 'S-Town Is Live', firstPodcastPublicationDate: new Date(Date.UTC(2017, 2, 28, 13, 15, 0)), // Tue, 28 Mar 2017 13:15:00 +0000 --> Tue, 28 Mar 2017 13:15:00 GMT }, }, { filename: 'still-processing', expectations: { title: 'Still Processing', link: 'http://www.nytimes.com/podcasts/still-processing', image: 'https://content.production.cdn.art19.com/images/44/f7/bb/b8/44f7bbb8-40ce-4a63-8ab8-9bc1cd71f4be/ba7aed20b307b76c2a8ba9a6473fd4c831179c6a24e20bf3179af4f11e06bc96968fca9edf17f4d55b5cae6ef3d97484f6b34b288426d42c5f59a515a8a37d67.jpeg', episodesLength: 74, firstPodcastUrl: 'https://dts.podtrac.com/redirect.mp3/rss.art19.com/episodes/90f12a60-07c8-4c8d-ad93-90278046e861.mp3', firstPodcastTitle: "We Wouldn't Leave Kanye, But Should We?", firstPodcastPublicationDate: new Date(Date.UTC(2018, 5, 7, 10, 0, 0)), // Thu, 07 Jun 2018 10:00:00 -0000 --> Thu, 07 Jun 2018 10:00:00 GMT }, }, { filename: 'nancy', expectations: { title: 'Nancy', link: 'http://www.wnycstudios.org/shows/nancy', image: 'https://media2.wnyc.org/i/raw/1/Nancy_WNYCStudios_1400a.png', episodesLength: 47, firstPodcastUrl: 'http://wnycstudios.org/story/queer-villains', // normalize-url drops 'www' subdomain, trailing slash firstPodcastTitle: '#43: Poor Unfortunate Souls', firstPodcastPublicationDate: new Date(Date.UTC(2018, 5, 3, 16, 0, 0)), // Sun, 03 Jun 2018 12:00:00 -0400 --> Sun, 03 Jun 2018 16:00:00 GMT }, }, { filename: 'thehabitat', expectations: { title: 'The Habitat', link: 'https://www.gimletmedia.com/the-habitat', image: 'http://static.megaphone.fm/podcasts/806b466c-ef0c-11e6-b531-afa5d3e8b9e3/image/uploads_2F1522339695064-fiy1a2pf3tb-64aa58ac9b5bcdcf9e3145121e2a85eb_2FTheHabitat-final-cover.png', episodesLength: 10, firstPodcastUrl: 'https://traffic.megaphone.fm/GLT4076252096.mp3', firstPodcastTitle: 'Bonus: This Is Not My First Rodeo', firstPodcastPublicationDate: new Date(Date.UTC(2018, 4, 8, 1, 43, 0)), // Tue, 08 May 2018 01:43:00 -0000 --> Tue, 08 May 2018 01:43:00 GMT }, }, { filename: 'atlantamonster', expectations: { title: 'Atlanta Monster', link: 'http://atlantamonster.com/', // FeedParser adds trailing slash image: 'http://static.megaphone.fm/podcasts/84e4a5c4-2de7-11e8-98b7-87f52d4374c4/image/uploads_2F1521733294980-xkcadcjrpar-7faa79cc84d505be934000c158cf54f5_2Fatlanta-monster-main-art.jpg', episodesLength: 17, firstPodcastUrl: 'https://podtrac.com/pts/redirect.mp3/traffic.megaphone.fm/HSW7011693605.mp3', // normalize-url drops 'www' subdomain firstPodcastTitle: 'Live from SXSW', firstPodcastPublicationDate: new Date(Date.UTC(2018, 4, 18, 4, 0, 0)), // Fri, 18 May 2018 04:00:00 -0000 --> Fri, 18 May 2018 04:00:00 GMT }, }, { filename: 'buffering-the-vampire-slayer', expectations: { title: 'Buffering the Vampire Slayer | A Buffy the Vampire Slayer Podcast', link: 'https://art19.com/shows/buffering-the-vampire-slayer', image: 'https://content.production.cdn.art19.com/images/be/a6/a3/9f/bea6a39f-64ec-4a6f-9fba-80efbb45db2c/c9ca312ba4d3ac1415f0c0421adfce07829f7677e20fc272d3e421fb1c180fbc9dc9294d5aa3efa7480153c24daffca835fb436a1de59d4c9efb6453f111968f.jpeg', episodesLength: 70, firstPodcastUrl: 'http://rss.art19.com/episodes/91aaef4e-5a1e-4aef-b66a-84432e29f9eb.mp3', firstPodcastTitle: '4.02: Living Conditions', firstPodcastPublicationDate: new Date(Date.UTC(2018, 5, 6, 4, 0, 0)), // Wed, 06 Jun 2018 04:00:00 -0000 --> Wed, 06 Jun 2018 04:00:00 GMT }, }, { filename: 'making-obama', expectations: { title: 'Making Obama', link: 'https://www.wbez.org/shows/making-obama/71b8de57-b2be-4e03-8481-683258de3ec1', image: 'https://api.wbez.org/v2/images/6eb13711-5af1-4845-90ed-9dcd9a8e8da8.jpg?width=1400&height=1400', episodesLength: 15, firstPodcastUrl: 'https://wbez.org/shows/making-obama/obama-bonus-the-decision/f15250d1-fccb-44e4-b14e-368525b08bfc', // normalize-url drops 'www' subdomain firstPodcastTitle: 'Obama BONUS: The Decision', firstPodcastPublicationDate: new Date(Date.UTC(2018, 3, 10, 5, 1, 0)), // Tue, 10 Apr 2018 05:01:00 GMT }, }, ]; describe('Parsing', () => { describe('RSS', () => { for (let test of rssTestData) { it(`should parse feed ${test.filename}`, async () => { let tc = getTestFeed(test.filename); let posts = await ReadFeedStream(tc); let feedResponse = ParseFeedPosts('', posts, 'STABLE'); expect(feedResponse.title).to.equal(test.expectations.title); expect(feedResponse.link).to.equal(test.expectations.link); expect(feedResponse.description).to.equal(test.expectations.description); if (test.expectations.fingerprint) { expect(feedResponse.fingerprint).to.equal( test.expectations.fingerprint, ); } expect(feedResponse.articles.length).to.equal( test.expectations.articlesLength, ); expect(feedResponse.image).to.be.a('object'); if (test.expectations.articlesLength > 0) { expect(feedResponse.articles[0].title).to.equal( test.expectations.firstArticleTitle, ); expect(feedResponse.articles[0].url).to.equal( test.expectations.firstArticleUrl, ); if (test.expectations.firstArticlePublicationDate) { expect(String(feedResponse.articles[0].publicationDate)).to.equal( String(test.expectations.firstArticlePublicationDate), ); } } }); } }); describe('Podcast', () => { let response; let user; for (let test of podcastTestData) { it(`should parse podcast feed ${test.filename}`, async () => { let tc = getTestPodcast(test.filename); let posts = await ReadFeedStream(tc); let podcastResponse = ParsePodcastPosts('', posts, 'STABLE'); expect(podcastResponse.title).to.equal(test.expectations.title); expect(podcastResponse.link).to.equal(test.expectations.link); expect(podcastResponse.image).to.equal(test.expectations.image); if (test.expectations.fingerprint) { expect(podcastResponse.fingerprint).to.equal( test.expectations.fingerprint, ); } expect(podcastResponse.episodes.length).to.equal( test.expectations.episodesLength, ); if (test.expectations.episodesLength > 0) { expect(podcastResponse.episodes[0].title).to.equal( test.expectations.firstPodcastTitle, ); expect(podcastResponse.episodes[0].url).to.equal( test.expectations.firstPodcastUrl, ); expect(podcastResponse.episodes[0].publicationDate).to.eql( test.expectations.firstPodcastPublicationDate, ); } }); } }); }); ================================================ FILE: api/test/parsers/language.js ================================================ import { expect } from 'chai'; import { DetectLangFromStream } from '../../src/parsers/detect-language'; import { getTestFeed } from '../utils'; describe('Language detection', () => { it('should detect language from techcrunch', async () => { const tc = getTestFeed('techcrunch'); const result = await DetectLangFromStream(tc); expect(result).to.equal('eng'); }); it('should detect language from lemonde', async () => { const tc = getTestFeed('lemonde'); const result = await DetectLangFromStream(tc); expect(result).to.equal('fra'); }); it('should detect language from habr', async () => { const tc = getTestFeed('habr'); const result = await DetectLangFromStream(tc); expect(result).to.equal('rus'); }); }); ================================================ FILE: api/test/parsers/og.js ================================================ import { expect } from 'chai'; import { IsPodcastStream } from '../../src/parsers/detect-type'; import { ParseOG, ParseOGStream } from '../../src/parsers/og'; import { getTestPage } from '../utils'; describe('OG parsing', () => { //TODO: // - different charset // - gzip it('should not detect og image from google', async () => { const tc = getTestPage('google.html'); const result = await ParseOGStream(tc); expect(result).to.not.have.property('image'); }); it('should detect og image from techcrunch', async () => { const tc = getTestPage('techcrunch.html'); const result = await ParseOGStream(tc); const ogImage = 'https://techcrunch.com/wp-content/uploads/2018/06/wwdc-2018-logo.jpg?w=585'; expect(result).to.have.property('image', ogImage); }); it('should detect og image from techcrunch part 2', async () => { const result = await ParseOGStream(getTestPage('techcrunch_instagram.html')); const ogImage = 'https://techcrunch.com/wp-content/uploads/2018/06/instagram-algorithm.png?w=753'; expect(result).to.have.property('image', ogImage); }); it('kotaku', async () => { const result = await ParseOGStream(getTestPage('kotaku.html')); const ogImage = 'https://i.kinja-img.com/gawker-media/image/upload/s--G9Y4stcm--/c_fill,fl_progressive,g_center,h_900,q_80,w_1600/jhvo3paz6ikemi81uklc.bmp'; expect(result).to.have.property('image', ogImage); }); it('should not detect og image from broken techcrunch', async () => { const tc = getTestPage('techcrunch_broken.html'); const result = await ParseOGStream(tc); expect(result).to.not.have.property('image'); }); }); ================================================ FILE: api/test/server.js ================================================ import { expect, request } from 'chai'; import api from '../src/server'; import User from '../src/models/user'; import { loadFixture, getMockClient, getMockFeed, withLogin } from './utils'; describe('Server', () => { describe('authenticated endpoint middleware', () => { let user; before(async () => { await loadFixture('user'); user = await User.findOne({ email: 'logged_in_user@email.com' }); expect(user).to.not.be.null; }); after(async () => { await User.remove().exec(); }); describe('authenticated endpoints', () => { it("should return 200 for requests to endpoints that don't require an authenticated user", async () => { let response = await request(api).get('/'); expect(response).to.have.status(200); }); it('should return 401 for unauthorized requests to endpoints that require an authenticated user', async () => { // TODO: Explicitly test all non-excluded endpoints let response = await request(api).get(`/users/${user._id}`); expect(response).to.have.status(401); }); }); }); }); ================================================ FILE: api/test/utilities/collections.js ================================================ import RSS from '../../src/models/rss'; import Podcast from '../../src/models/podcast'; import Article from '../../src/models/article'; import Episode from '../../src/models/episode'; import { sendFeedToCollections } from '../../src/utils/collections'; import { loadFixture, dropDBs } from '../utils'; describe('Collections', () => { before(async () => { await dropDBs(); await loadFixture('initial-data'); }); describe('Update collection', () => { it('should update the rss collection', async () => { const rss = await RSS.findOne(); const content = await Article.find({ rss: rss._id }) .sort({ publicationDate: -1 }) .limit(1000); await sendFeedToCollections('rss', rss, content); }); it('should update the podcast collection', async () => { const podcast = await Podcast.findOne(); const content = await Article.find({ podcast: podcast._id }) .sort({ publicationDate: -1 }) .limit(1000); await sendFeedToCollections('podcast', podcast, content); }); }); }); ================================================ FILE: api/test/utilities/email.js ================================================ import { expect } from 'chai'; import { SendPasswordResetEmail, SendWelcomeEmail, DummyEmailTransport, } from '../../src/utils/email/send'; describe('Email sending', () => { it('should send password reset email', async () => { const data = { email: 'invalid@email.com', passcode: '7f6dc5d9-9084-4571-8578-4da2427388c6', }; let e = await SendPasswordResetEmail(data); let email = DummyEmailTransport.emails[0]; expect(email.subject).to.equal('Forgot Password'); expect(email.to).to.equal('invalid@email.com'); }); it('should send welcome email', async () => { await SendWelcomeEmail({ email: 'invalid@email.com', }); let email = DummyEmailTransport.emails[0]; expect(email.subject).to.equal('Welcome to Winds!'); expect(email.to).to.equal('invalid@email.com'); }); }); ================================================ FILE: api/test/utilities/merge.js ================================================ import { expect } from 'chai'; import RSS from '../../src/models/rss'; import Pin from '../../src/models/pin'; import Follow from '../../src/models/follow'; import Article from '../../src/models/article'; import { mergeFeeds } from '../../src/utils/merge'; import { loadFixture, dropDBs } from '../utils'; const feedA = '5b0ad0baf6f89574f638880a'; const feedB = '5b0ad0baf6f89574f638880b'; describe('Merge utility', () => { beforeEach(async () => { await dropDBs(); await loadFixture('merge-data'); }); it('should mark one of the input feeds as duplicate', async () => { expect(await RSS.findById(feedA)).to.not.be.null; expect(await RSS.findById(feedB)).to.not.be.null; await mergeFeeds(feedA, feedB, 'rss'); expect(await RSS.findById(feedA)).to.not.be.null; const feed = await RSS.findById(feedB); expect(String(feed.duplicateOf)).to.be.equal(feedA); }); it('should move articles from one feed to another', async () => { await mergeFeeds(feedA, feedB, 'rss'); expect(await Article.count({ rss: feedA })).to.be.equal(3); expect(await Article.count({ rss: feedB })).to.be.equal(2); }); it('shouldn\'t produce duplicate articles', async () => { await mergeFeeds(feedA, feedB, 'rss'); expect(await Article.count()).to.be.equal(5); const article1 = await Article.findById('5b0ad37226dc3db38194e5ee'); expect(String(article1.duplicateOf)).to.be.equal('5b0ad37226dc3db38194e5ec'); const article2 = await Article.findById('5b0ad37226dc3db38194e5ef'); expect(String(article2.duplicateOf)).to.be.equal('5b0ad37226dc3db38194e5ed'); }); it('should move pins from one feed to another', async () => { await mergeFeeds(feedA, feedB, 'rss'); const aArticles = await Article.find({ rss: feedA }); const bArticles = await Article.find({ rss: feedB }); expect(await Pin.count({ article: { $in: aArticles.map(a => a._id) } })).to.be.equal(4); expect(await Pin.count({ article: { $in: bArticles.map(a => a._id) } })).to.be.equal(0); }); it('shouldn\'t produce duplicate pins', async () => { await mergeFeeds(feedA, feedB, 'rss'); expect(await Pin.count()).to.be.equal(4); expect(await Pin.findById('5b0ad37226dc3db38194e603')).to.be.null; }); it('should move followers from one feed to another', async () => { await mergeFeeds(feedA, feedB, 'rss'); expect(await Follow.count({ rss: feedA })).to.be.equal(3); expect(await Follow.count({ rss: feedB })).to.be.equal(0); }); it('shouldn\'t produce duplicate follows', async () => { await mergeFeeds(feedA, feedB, 'rss'); expect(await Follow.count()).to.be.equal(3); expect(await Follow.findById('5b0ad37226dc3db38194e702')).to.be.null; expect(await Follow.findById('5b0ad37226dc3db38194e704')).to.be.null; }); }); ================================================ FILE: api/test/utilities/random.js ================================================ import { expect } from 'chai'; import weightedRandom from '../../src/utils/random'; describe('Weighted random', () => { it('should distribute results logarithmically', () => { const results = {}; for (let i = 0; i < 5000000; ++i) { const value = weightedRandom(10); const previousCount = results[value] || 0; results[value] = previousCount + 1; } const entries = Object.entries(results).map(e => { return { value: Number(e[0]), count: Number(e[1]) }; }); entries.sort((l, r) => { if (l.count > r.count) { return -1; } if (l.count < r.count) { return 1; } return 0; }); for (let i = 1; i < entries.length; ++i) { expect(entries[i].value).to.be.above(entries[i - 1].value); expect(entries[i - 1].count / entries[i].count).to.be.closeTo(2, 0.1); } }); }); ================================================ FILE: api/test/utilities/rate-limiter.js ================================================ import sinon from 'sinon'; import { expect } from 'chai'; import * as limiter from '../../src/utils/rate-limiter'; describe('Rate limiter', () => { let originalSetTimeout; beforeEach(async () => { await limiter.reset('fake-id'); originalSetTimeout = global.setTimeout; global.setTimeout = sinon.spy(originalSetTimeout); }); afterEach(() => { global.setTimeout = originalSetTimeout; }); it('shouldn\'t block until max capacity is reached', async () => { for (let i = 0; i < 3000; ++i) { await limiter.tick('fake-id'); expect(setTimeout.called, `waiting #${i + 1}`).to.be.false; } }); it('should block when over max capacity', async () => { for (let i = 0; i < 3000; ++i) { await limiter.tick('fake-id'); } const before = Date.now(); await limiter.tick('fake-id'); const after = Date.now(); expect(after - before).to.be.closeTo(28800, 50); }).timeout(45000).retries(3); it('shouldn\'t block after waiting', async () => { for (let i = 0; i < 3000; ++i) { await limiter.tick('fake-id'); } await new Promise(resolve => originalSetTimeout(resolve, 28800)); const before = Date.now(); await limiter.tick('fake-id'); const after = Date.now(); expect(after - before).to.be.closeTo(0, 20); }).timeout(45000).retries(3); }); ================================================ FILE: api/test/utilities/social.js ================================================ import { expect } from 'chai'; import config from '../../src/config'; import * as social from '../../src/utils/social'; describe('Reddit score', () => { it('should return post id for correct url', () => { const url = 'https://www.reddit.com/r/funny/comments/8vfdgt/xxxdoodleion/'; expect(social.extractRedditPostID({ link: url })).to.be.equal('t3_8vfdgt'); }); it('should return score for existing post', async function() { if (!config.social.reddit.secret || !config.social.reddit.password) { this.skip(); } const score = await social.redditScore('t3_7mjw12'); //XXX: reddit is fuzzing upvote count returned by the API to mess with bots expect(score).to.be.closeTo(307864, 50); }); }); describe('Hacker News score', () => { it('should return post id for correct url', () => { const url = 'https://news.ycombinator.com/item?id=17439811'; expect(social.extractHackernewsPostID({ commentUrl: url })).to.be.equal('17439811'); }); it('should return score for existing post', async () => { const score = await social.hackernewsScore('17449546'); expect(score).to.be.equal(4); }); }); ================================================ FILE: api/test/utilities/upsert.js ================================================ import mongoose from 'mongoose'; import { expect } from 'chai'; import RSS from '../../src/models/rss'; import Article from '../../src/models/article'; import Episode from '../../src/models/episode'; import { normalizedDiff, upsertManyPosts } from '../../src/utils/upsert'; import { ReadFeedStream, ParseFeedPosts, ParsePodcastPosts, CreateFingerPrints, } from '../../src/parsers/feed'; import { loadFixture, dropDBs, getTestFeed, getTestPodcast } from '../utils'; const duplicateKeyError = 11000; function objectifyAndStripId(post) { const { id, _id, ...rest } = post.toObject ? post.toObject() : post; return Object.assign({}, rest); } describe('Upsert', () => { let article1, article2, episode1; before(async () => { await dropDBs(); await loadFixture('initial-data'); article1 = await Article.findOne({ _id: '5b0ad37226dc3db38194e5ec' }).lean(); article2 = await Article.findOne({ _id: '5b0ad37226dc3db38194e5ed' }).lean(); episode1 = await Episode.findOne().lean(); }); describe('Article upsertManyPosts', () => { it('the same article shouldnt trigger an update', async () => { let operationMap = await upsertManyPosts(article1.rss, [article2], 'rss'); expect(operationMap.changed).to.be.empty; expect(operationMap.new).to.be.empty; }); it("publicationDate change shouldn't result in an update", async () => { const article3 = new Article( Object.assign(objectifyAndStripId(article1), { publicationDate: new Date(), }), ); CreateFingerPrints([article3], 'STABLE'); const operationMap = await upsertManyPosts(article1.rss, [article3], 'rss'); expect(operationMap.changed).to.be.empty; expect(operationMap.new).to.be.empty; }); it('link change should result in an update', async () => { const article3 = new Article( Object.assign(objectifyAndStripId(article1), { link: 'https://google.com/test', }), ); CreateFingerPrints([article3], 'STABLE'); const operationMap = await upsertManyPosts(article1.rss, [article3], 'rss'); expect(operationMap.changed).to.have.length(1); expect(operationMap.new).to.be.empty; expect(await Article.findOne({ _id: operationMap.changed[0]._id })).to.not.be .null; }); it('a new article should be inserted', async () => { const article3 = new Article({ fingerprint: 'hello world', url: 'https://google.com/testhelloworld', rss: article1.rss, title: 'hi', }); let operationMap = await upsertManyPosts(article1.rss, [article3], 'rss'); expect(operationMap.new).to.have.length(1); expect(await Article.findOne({ _id: operationMap.new[0]._id })).to.not.be .null; }); }); describe('Episode upsertManyPosts', () => { it('the same episode shouldnt trigger an update', async () => { let operationMap = await upsertManyPosts( episode1.podcast, [episode1], 'podcast', ); expect(operationMap.changed).to.be.empty; expect(operationMap.new).to.be.empty; }); it('a new episode should be inserted', async () => { let episode3 = new Episode({ fingerprint: 'hello world 2', url: 'hi', title: 'hi2', podcast: episode1.podcast, }); let operationMap = await upsertManyPosts( episode1.podcast, [episode3], 'podcast', ); expect(operationMap.new).to.have.length(1); }); }); describe('Double Inserts RSS feed', () => { // loop over feeds, and verify that the 2nd insert has 0 changes // this will break if something is wrong with the upsert/change detection for (let [f, url] of Object.entries({ 'techcrunch': 'https://techcrunch.com/feed', 'reddit-r-programming': 'https://reddit.com/r/programming.rss', 'hackernews': 'https://news.ycombinator.com', 'medium-technology': 'https://medium.com', })) { it(`the second run should be unchanged for ${f}`, async () => { let posts = await ReadFeedStream(getTestFeed(f)); let feedResponse = ParseFeedPosts('', posts); let articles = feedResponse.articles; for (let a of articles) { a['rss'] = '5b0ad37226dc3db38194e5ef'; } await upsertManyPosts('5b0ad37226dc3db38194e5ef', articles, 'rss'); let operationMap = await upsertManyPosts( '5b0ad37226dc3db38194e5ef', articles, 'rss', ); expect(operationMap.new).to.be.empty; expect(operationMap.changed).to.be.empty; }); } }); describe('BulkWrite behaviour', () => { // article ids are generated upon object creation // they remain the same during insert // bulk write error handling it(`article instantiation`, async () => { const a = new Article({ fingerprint: 'hihi', url: 'https://google.com/' }); expect(a.id).to.not.be.null; }); it(`article create`, async () => { const a = new Article({ fingerprint: 'hihi2', url: 'https://google.com/', rss: '5b0ad37226dc3db38194e5ef', title: 123, }); const a2 = await Article.create(a.toObject()); expect(a.id).to.equal(a2.id); }); it(`bulkwrite errors`, async () => { const data = new Article({ fingerprint: 'hihi3', url: 'https://google.com/', rss: '5b0ad37226dc3db38194e5ef', title: 123, }).toObject(); const operations = [ { insertOne: { document: data } }, { insertOne: { document: data } }, ]; let error; try { await Article.bulkWrite(operations, { ordered: false }); } catch (e) { error = e; } expect(error) .to.be.an.instanceOf(Error) .with.property('code', duplicateKeyError); }); }); describe('Double Inserts Podcasts', () => { // loop over feeds, and verify that the 2nd insert has 0 changes // this will break if something is wrong with the upsert/change detection for (let f of ['giant-bombcast', 'serial', 'a16z']) { it(`the second run should be unchanged for ${f}`, async () => { const posts = await ReadFeedStream(getTestPodcast(f)); const feedResponse = ParsePodcastPosts('', posts); const episodes = feedResponse.episodes; for (const e of episodes) { e['podcast'] = '5b0ad37226dc3db38194e5ef'; } await upsertManyPosts('5b0ad37226dc3db38194e5ef', episodes, 'podcast'); const operationMap = await upsertManyPosts( '5b0ad37226dc3db38194e5ef', episodes, 'podcast', ); expect(operationMap.new).to.be.empty; expect(operationMap.changed).to.be.empty; }); } }); describe('normalizedDiff diff function', () => { it('the diff between these 2 articles should be 4', async () => { const changes = normalizedDiff(article1, article2); expect(changes).to.have.length(4); }); it('the diff between these 2 articles should be 0', async () => { const changes = normalizedDiff(article1, article1); expect(changes).to.be.empty; }); it('test if we ignore publication date', async () => { const article3 = Object.assign(objectifyAndStripId(article1), { publicationDate: new Date(), }); const changes = normalizedDiff(article1, article3); expect(changes).to.be.empty; }); it('ensure we dont ignore other fields', async () => { const article3 = Object.assign(objectifyAndStripId(article1), { link: '123', }); const changes = normalizedDiff(article1, article3); expect(changes).to.have.length(1); }); }); }); describe('upsertManyPosts', () => { const rssID = '5b0ad0baf6f89574a638887f'; let articles; before(async () => { await dropDBs(); await RSS.create({ _id: rssID, title: 'RSS', feedUrl: 'http://amazon.com', }); let insertedArticles = await Article.find({ rss: rssID }).sort('fingerprint'); expect(insertedArticles).to.be.empty; articles = CreateFingerPrints( Array.from(Array(5).keys()).map(i => { const article = new Article({ rss: rssID, title: `Article #${i}`, description: 'Article about life the universe and everything', url: `http://google.com/${i}`, link: `http://google.com/${i}`, guid: `http://google.com/${i}`, }); article.enclosures = []; return article; }), 'STABLE' ); insertedArticles = await Article.find({ rss: rssID }).sort('fingerprint'); expect(insertedArticles).to.be.empty; }); it('should insert articles', async () => { await upsertManyPosts(rssID, articles, 'rss'); const insertedArticles = await Article.find({ rss: rssID }).sort('fingerprint'); expect(insertedArticles).to.have.length(articles.length); for (let i in articles) { expect(insertedArticles[i].url).to.be.equal(articles[i].url); expect(insertedArticles[i].title).to.be.equal(articles[i].title); expect(insertedArticles[i].description).to.be.equal(articles[i].description); expect(insertedArticles[i].fingerprint).to.be.equal(articles[i].fingerprint); } }); it('should update articles', async () => { for (let i in articles) { articles[i]._id = mongoose.Types.ObjectId(); articles[i].title = `Article №${i}`; articles[i].description = 'Article about pugs'; } CreateFingerPrints(articles, 'STABLE'); await upsertManyPosts(rssID, articles, 'rss'); const updatedArticles = await Article.find({ rss: rssID }).sort('fingerprint'); expect(updatedArticles).to.have.length(articles.length); for (let i in articles) { expect(updatedArticles[i].url).to.be.equal(articles[i].url); expect(updatedArticles[i].title).to.be.equal(articles[i].title); expect(updatedArticles[i].description).to.be.equal(articles[i].description); expect(updatedArticles[i].fingerprint).to.be.equal(articles[i].fingerprint); } }); it('should only upsert articles w/ either new guid or content hash affecting fields', async () => { // no data changed = no actions const nonUpdateResult = await upsertManyPosts(rssID, articles, 'rss'); expect(nonUpdateResult.new).to.be.empty; expect(nonUpdateResult.changed).to.be.empty; let existingArticles = await Article.find({ rss: rssID }); expect(existingArticles).to.have.length(articles.length); // content changed = update for (let i in articles) { articles[i]._id = mongoose.Types.ObjectId(); articles[i].content = `c${i}`; } CreateFingerPrints(articles, 'STABLE'); const newHashResult = await upsertManyPosts(rssID, articles, 'rss'); expect(newHashResult.new).to.be.empty; expect(newHashResult.changed).to.not.be.empty; existingArticles = await Article.find({ rss: rssID }).sort('fingerprint'); expect(existingArticles).to.have.length(articles.length); for (let i in articles) { expect(existingArticles[i].fingerprint).to.be.equal(articles[i].fingerprint); } // url changed content stayed the same = insert for (let i in articles) { articles[i]._id = mongoose.Types.ObjectId(); articles[i].url = `http://google.com/${i}/`; articles[i].link = `http://google.com/${i}/`; articles[i].guid = `http://google.com/${i}/`; } CreateFingerPrints(articles, 'STABLE'); const insertResult = await upsertManyPosts(rssID, articles, 'rss'); expect(insertResult.new).to.not.be.empty; expect(insertResult.changed).to.be.empty; const newArticles = await Article.find({ rss: rssID, _id: { $nin: existingArticles.map(a => String(a._id)) }, }).sort('fingerprint'); expect(newArticles).to.have.length(articles.length); for (let i in articles) { expect(newArticles[i].url).to.be.equal(articles[i].url); expect(newArticles[i].title).to.be.equal(articles[i].title); expect(newArticles[i].description).to.be.equal(articles[i].description); expect(newArticles[i].fingerprint).to.be.equal(articles[i].fingerprint); } }); }); ================================================ FILE: api/test/utilities/url.js ================================================ import { expect } from 'chai'; import url from 'url'; import Article from '../../src/models/article'; import RSS from '../../src/models/rss'; import Podcast from '../../src/models/podcast'; import { loadFixture, dropDBs } from '../utils'; describe('URLs utility', () => { before(async () => { await dropDBs(); await loadFixture('initial-data'); }); it('should return a valid article url', async () => { const article = await Article.findOne(); const parsedUrl = url.parse(article.getUrl()); expect(parsedUrl.href).to.be.a('string'); expect(parsedUrl.protocol).to.be.a('string'); }); it('should return a valid rss url', async () => { const rss = await RSS.findOne(); const parsedUrl = url.parse(rss.getUrl()); expect(parsedUrl.href).to.be.a('string'); expect(parsedUrl.protocol).to.be.a('string'); }); it('should return a valid podcast url', async () => { const podcast = await Podcast.findOne(); const parsedUrl = url.parse(podcast.getUrl()); expect(parsedUrl.href).to.be.a('string'); expect(parsedUrl.protocol).to.be.a('string'); }); }); ================================================ FILE: api/test/utilities/validation.js ================================================ import { expect } from 'chai'; import { isURL } from '../../src/utils/validation'; describe('Validation', () => { describe('URL', () => { let validUrls = [ 'https://techcrunch.com/feed', 'http://jesaisquoi-.tumblr.com/rss', 'https://das-kuechengefluester.de/feed/', 'http://blogsearch.google.com/blogsearch_feeds?oe=utf-8&q=land surveying&rls=org.mozilla:en-us:offici', 'http://fool.com/search/solr.aspx?datasource=article&datasource=blog&format=rss&page=&q=disney world&scope=all&sort=date', ]; let invalidUrls = [ 'http://inoreader-dw/gk-inoreader-culture.21643-media', 'newsletter:60000:info@hyggeonkel.dk', ]; for (let url of validUrls) { it(`the url should be valid ${url.slice(0, 30)}`, async () => { let valid = isURL(url); expect(valid).to.be.true; }); } for (let url of invalidUrls) { it(`the url should be invalid ${url.slice(0, 30)}`, async () => { let valid = isURL(url); expect(valid).to.be.false; }); } }); }); ================================================ FILE: api/test/utils.js ================================================ import fs from 'fs'; import jwt from 'jsonwebtoken'; import mongoose from 'mongoose'; import path from 'path'; import redis from 'redis'; import sinon from 'sinon'; import { expect, request } from 'chai'; import StreamClient from 'getstream/lib/lib/client'; import Personalization from 'getstream/lib/lib/personalization'; import Collections from 'getstream/lib/lib/collections'; import api from '../src/server'; import config from '../src/config'; import db from '../src/utils/db'; import logger from '../src/utils/logger'; import { CreateFingerPrints } from '../src/parsers/feed'; var mockClient = null; const mockFeeds = {}; export function createMockFeed(group, id) { const mock = { slug: group, userId: id, id: group + ':' + id, }; for (const method of ['follow', 'addActivity', 'addActivities', 'get', 'unfollow']) { mock[method] = sinon.spy(sinon.stub().returns(Promise.resolve({ results: [] }))); } mock['getReadOnlyToken'] = sinon.spy(sinon.stub().returns('faketoken')); mockFeeds[group + ':' + id] = mock; return mock; } export function getMockFeed(group, id) { return mockFeeds[group + ':' + id]; } function setupMocks() { mockClient = sinon.createStubInstance(StreamClient); mockClient.collections = sinon.createStubInstance(Collections); mockClient.personalization = sinon.createStubInstance(Personalization); mockClient.feed.callsFake((group, id) => { return mockFeeds[group + ':' + id] || createMockFeed(group, id); }); } export function getMockClient() { if (mockClient == null) { setupMocks(); } return mockClient; } export function getTestFeed(name) { return fs.createReadStream(path.join(__dirname, 'data', 'feed', name)); } export function getTestPodcast(name) { return fs.createReadStream(path.join(__dirname, 'data', 'podcast-feed', name)); } export function getTestPage(name) { return fs.createReadStream(path.join(__dirname, 'data', 'og', name)); } export async function loadFixture(...fixtures) { const filters = { Article: (articles) => { for (const article of articles) { article.enclosures = article.enclosures || []; } CreateFingerPrints(articles, 'STABLE'); return articles; }, Episode: (episodes) => { for (const episode of episodes) { episode.enclosures = episode.enclosures || []; } CreateFingerPrints(episodes, 'STABLE'); return episodes; }, }; for (const fixture of fixtures) { const batch = require(`./fixtures/${fixture}.json`); for (const models of batch) { for (const modelName in models) { const fixedData = models[modelName].map((data) => { //XXX: cloning loaded json to enable filtering without thinking about module cache data = Object.assign({}, data); //XXX: convert things that look like ObjectID to actual ObjectID // instances to enable mongo references for (const key in data) { //XXX: reject number attributes (see bug: https://jira.mongodb.org/browse/NODE-1146) if ( typeof data[key] !== 'number' && mongoose.Types.ObjectId.isValid(data[key]) ) { data[key] = mongoose.Types.ObjectId(data[key]); } } return data; }); const filter = filters[modelName] || ((x) => x); const filteredData = filter(fixedData); const modulePath = `../src/models/${modelName.toLowerCase()}`; //XXX: hack to avoid loading models explicitly before loading fixtures // also avoids compiling model modules twice as mocked module loader // with babel forces recompilation of transpiled source code which // causes double-registration of mongoose models const cachedModule = require.cache[require.resolve(modulePath)]; const model = cachedModule ? cachedModule.exports : require(modulePath); await Promise.all( filteredData.map((f) => { return model.create(f); }), ); } } } } export function withLogin( req, user = { email: 'valid@email.com', sub: '5b0f306d8e147f10f16aceaf', }, ) { const authToken = jwt.sign(user, config.jwt.secret); return req.set('Authorization', `Bearer ${authToken}`); } export async function dropDBs() { const redisClient = redis.createClient(config.cache.uri); const mongo = await db; await mongo.connection.dropDatabase(); await redisClient.send_command('FLUSHDB'); } ================================================ FILE: api/test/workers/conductor.js ================================================ import moment from 'moment'; import { expect } from 'chai'; import RSS from '../../src/models/rss'; import Podcast from '../../src/models/podcast'; import { conduct } from '../../src/workers/conductor'; import { tryAddToQueueFlagSet, getQueueFlagSetMembers } from '../../src/utils/queue'; import { RssQueueAdd, PodcastQueueAdd } from '../../src/asyncTasks'; import { loadFixture, dropDBs } from '../utils'; function beforeDeadline() { return moment() .subtract(3, 'minutes') .toDate(); } function afterDeadline() { return moment() .subtract(1, 'minutes') .toDate(); } describe('Conductor worker', () => { let RssQueueAddFn; let PodcastQueueAddFn; before(() => { RssQueueAddFn = RssQueueAdd._fn; PodcastQueueAddFn = PodcastQueueAdd._fn; RssQueueAdd._fn = PodcastQueueAdd._fn = () => Promise.resolve(); }); after(() => { RssQueueAdd._fn = RssQueueAddFn; PodcastQueueAdd._fn = PodcastQueueAddFn; }); beforeEach(async () => { await dropDBs(); RssQueueAdd.resetHistory(); PodcastQueueAdd.resetHistory(); }); it('should only touch data updated later then one scrape interval ago', async () => { const rssBefore = await RSS.create({ title: 'RSS feed', valid: true, followerCount: 2, consecutiveScrapeFailures: 0, feedUrl: 'http://google.com', lastScraped: beforeDeadline(), }); const podcastBefore = await Podcast.create({ title: 'Podcast feed', valid: true, followerCount: 2, consecutiveScrapeFailures: 0, feedUrl: 'http://bing.com', lastScraped: afterDeadline(), }); await conduct(); const rssAfter = await RSS.findById(rssBefore._id); const podcastAfter = await Podcast.findById(podcastBefore._id); const busyRss = new Set(await getQueueFlagSetMembers('rss')); const busyPodcasts = new Set(await getQueueFlagSetMembers('podcast')); expect(busyRss.has(`${rssAfter._id}:rss`)).to.be.true; expect(busyPodcasts.has(`${podcastAfter._id}:podcast`)).to.be.false; }); it('should only touch data followed by someone', async () => { const rssBefore = await RSS.create({ title: 'RSS feed', valid: true, followerCount: 2, consecutiveScrapeFailures: 0, feedUrl: 'http://google.com', lastScraped: beforeDeadline(), }); const podcastBefore = await Podcast.create({ title: 'Podcast feed', valid: true, followerCount: 0, consecutiveScrapeFailures: 0, feedUrl: 'http://bing.com', lastScraped: beforeDeadline(), }); await conduct(); const rssAfter = await RSS.findById(rssBefore._id); const podcastAfter = await Podcast.findById(podcastBefore._id); const busyRss = new Set(await getQueueFlagSetMembers('rss')); const busyPodcasts = new Set(await getQueueFlagSetMembers('podcast')); expect(busyRss.has(`${rssAfter._id}:rss`)).to.be.true; expect(busyPodcasts.has(`${podcastAfter._id}:podcast`)).to.be.false; }); it('should only schedule data scraping if its not in the process of parsing', async () => { const rssBefore = await RSS.create({ title: 'RSS feed', valid: true, followerCount: 2, consecutiveScrapeFailures: 0, feedUrl: 'http://google.com', lastScraped: beforeDeadline(), }); const podcastBefore = await Podcast.create({ title: 'Podcast feed', valid: true, followerCount: 2, consecutiveScrapeFailures: 0, feedUrl: 'http://bing.com', lastScraped: beforeDeadline(), }); await tryAddToQueueFlagSet('podcast', 'podcast', podcastBefore._id); await conduct(); const rssAfter = await RSS.findById(rssBefore._id); const busyRss = new Set(await getQueueFlagSetMembers('rss')); expect(busyRss.has(`${rssAfter._id}:rss`)).to.be.true; expect(RssQueueAdd.called).to.be.true; expect(PodcastQueueAdd.called).to.be.false; }); it('should touch at most 1/15 of dataset at a time', async () => { await Promise.all( Array.from(Array(15).keys()).map(async i => { await RSS.create({ title: `RSS feed #${i}`, valid: true, followerCount: 2, consecutiveScrapeFailures: 0, feedUrl: `http://google.com/${i}`, lastScraped: beforeDeadline(), }); await RSS.create({ title: `RSS popular feed #${i}`, valid: true, followerCount: 102, consecutiveScrapeFailures: 0, feedUrl: `http://google.com/${i}`, lastScraped: beforeDeadline(), }); }), ); await conduct(); const busyRss = new Set(await getQueueFlagSetMembers('rss')); expect(busyRss.size).to.be.below(3); }); it('should take at least 15 invocations to touch all dataset', async () => { await Promise.all( Array.from(Array(15).keys()).map(async i => { await RSS.create({ title: `RSS feed #${i}`, valid: true, followerCount: 2, consecutiveScrapeFailures: 0, feedUrl: `http://google.com/${i}`, lastScraped: beforeDeadline(), }); await RSS.create({ title: `RSS popular feed #${i}`, valid: true, followerCount: 102, consecutiveScrapeFailures: 0, feedUrl: `http://google.com/${i}`, lastScraped: beforeDeadline(), }); }), ); for (let i = 1; i <= 14; ++i) { await conduct(); const busyRss = new Set(await getQueueFlagSetMembers('rss')); expect(busyRss.size).to.be.below(i * 2 + 1); } await conduct(); const busyRss = new Set(await getQueueFlagSetMembers('rss')); expect(busyRss.size).to.be.equal(30); }); it('should schedule data for scraping with appropriate worker', async () => { const publicationOptions = { removeOnComplete: true, removeOnFail: true }; const rss = await RSS.create({ title: 'RSS feed', valid: true, followerCount: 2, consecutiveScrapeFailures: 0, feedUrl: 'http://google.com', lastScraped: beforeDeadline(), }); const podcast = await Podcast.create({ title: 'Podcast feed', valid: true, followerCount: 2, consecutiveScrapeFailures: 0, feedUrl: 'http://bing.com', lastScraped: beforeDeadline(), }); const rssJob = { rss: rss._id, url: rss.feedUrl }; const podcastJob = { podcast: podcast._id, url: podcast.feedUrl }; await conduct(); expect(RssQueueAdd.calledOnceWith(rssJob, publicationOptions)).to.be.true; expect(PodcastQueueAdd.calledOnceWith(podcastJob, publicationOptions)).to.be.true; }); it('should only touch data with less then 64 consecutive scrape failures', async () => { const rssBefore = await RSS.create({ title: 'RSS feed', valid: true, followerCount: 2, consecutiveScrapeFailures: 0, feedUrl: 'http://google.com', lastScraped: beforeDeadline(), }); const podcastBefore = await Podcast.create({ title: 'Podcast feed', valid: true, followerCount: 2, consecutiveScrapeFailures: 65, feedUrl: 'http://bing.com', lastScraped: beforeDeadline(), }); await conduct(); const rssAfter = await RSS.findById(rssBefore._id); const podcastAfter = await Podcast.findById(podcastBefore._id); const busyRss = new Set(await getQueueFlagSetMembers('rss')); const busyPodcasts = new Set(await getQueueFlagSetMembers('podcast')); expect(busyRss.has(`${rssAfter._id}:rss`)).to.be.true; expect(busyPodcasts.has(`${podcastAfter._id}:podcast`)).to.be.false; }); }); ================================================ FILE: api/test/workers/og.js ================================================ import nock from 'nock'; import { expect } from 'chai'; import { ogQueue } from '../../src/asyncTasks'; import RSS from '../../src/models/rss'; import Episode from '../../src/models/episode'; import Article from '../../src/models/article'; import { ParseOG } from '../../src/parsers/og'; import { ogProcessor, handleOg } from '../../src/workers/og'; import { getTestPage, loadFixture, dropDBs } from '../utils'; describe('OG worker', () => { let handler; function setupHandler() { handler = new Promise((resolve, reject) => { ogQueue.handlers['__default__'] = job => { return handleOg(job).then(resolve, reject); }; }); } before(async () => { ogQueue.process(ogProcessor).catch(err => console.log(`OG PROCESSING FAILURE: ${err.stack}`)); await dropDBs(); await loadFixture('initial-data'); }); after(async () => { ogQueue.handlers['__default__'] = ogProcessor; await ogQueue.close(); }); describe('valid job', () => { let rss; before(async () => { rss = await RSS.findOne(); }); beforeEach(() => { ParseOG.resetHistory(); }); it('should update article if image is found', async () => { setupHandler(); const data = { type: 'article', rss: rss._id, url: 'http://dorkly.com/post/86418/4-questions-i-still-have-about-avengers-infinity-war', }; const beforeUpdate = await Article.create({ rss: rss._id, title: 'Hey now', description: 'Donkey!', url: data.url, fingerprint: 'test:workers-og.js', }); await ogQueue.add(data); await handler; expect(ParseOG.calledWith(data.url)).to.be.true; const og = await ParseOG.firstCall.returnValue; expect(og).to.have.property('image'); const afterUpdate = await Article.findById(beforeUpdate._id); expect(afterUpdate.images.og).to.be.equal(og.image); }); it('should update article with image if update requested', async () => { setupHandler(); const data = { type: 'article', rss: rss._id, url: 'http://dorkly.com/post/86517/what-if-deadpool-was-in-avengers-infinity-war2/', update: true, }; const beforeUpdate = await Article.findOne({ url: data.url }); expect(beforeUpdate.images.og).to.not.be.null; await ogQueue.add(data); await handler; expect(ParseOG.calledWith(data.url)).to.be.true; const og = await ParseOG.firstCall.returnValue; expect(og).to.have.property('image'); const afterUpdate = await Article.findById(beforeUpdate._id); expect(afterUpdate.images.og).to.be.equal(og.image); }); it("shouldn't update article with image if update not requested", async () => { setupHandler(); const data = { type: 'article', rss: rss._id, url: 'http://dorkly.com/post/86517/what-if-deadpool-was-in-avengers-infinity-war2/', }; await ogQueue.add(data); await handler; expect(ParseOG.called).to.be.false; }); it("shouldn't update article if no image is found", async () => { setupHandler(); const data = { type: 'article', rss: rss._id, url: 'http://feedproxy.google.com/~r/bildblog/~3/sUeojXz2BCk', }; nock('http://feedproxy.google.com/~r/bildblog/~3/sUeojXz2BCk') .defaultReplyHeaders({ 'Content-Type': 'text/html' }) .get('') .reply(200, () => getTestPage('bildblog.html')); await ogQueue.add(data); await handler; expect(ParseOG.calledWith(data.url)).to.be.true; const og = await ParseOG.firstCall.returnValue; expect(og).to.not.have.property('image'); nock.cleanAll(); }); }); describe('invalid job', () => { it('should not update data', async () => { const testCases = [ { podcast: '', type: '', url: '' }, { podcast: '', type: '', url: '', update: true }, { podcast: '', type: '', urls: [''] }, { podcast: '', type: '', urls: [''], update: true }, { podcast: '', type: 'article', url: '' }, { podcast: '', type: 'article', url: '', update: true }, { podcast: '', type: 'article', url: undefined }, { podcast: '', type: 'article', url: undefined, update: true }, { podcast: '', type: 'article', urls: [''] }, { podcast: '', type: 'article', urls: [''], update: true }, { podcast: '', type: 'article', urls: [undefined] }, { podcast: '', type: 'article', urls: [undefined], update: true }, { podcast: '', type: 'episode', url: '' }, { podcast: '', type: 'episode', url: '', update: true }, { podcast: '', type: 'episode', url: undefined }, { podcast: '', type: 'episode', url: undefined, update: true }, { podcast: '', type: 'episode', urls: [''] }, { podcast: '', type: 'episode', urls: [''], update: true }, { podcast: '', type: 'episode', urls: [undefined] }, { podcast: '', type: 'episode', urls: [undefined], update: true }, { podcast: '', type: 'xenomorph', urls: ['http://mbmbam.libsyn.com/rssss'] }, { podcast: '', type: 'xenomorph', urls: ['http://mbmbam.libsyn.com/rssss'] }, { podcast: '', type: 'xenomorph', urls: ['http://mbmbam.libsyn.com/rssss'], update: true }, { podcast: '', type: 'xenomorph', urls: ['http://mbmbam.libsyn.com/rssss'], update: true }, { podcast: '', type: undefined, url: undefined }, { podcast: '', type: undefined, url: undefined, update: true }, { podcast: '', type: undefined, urls: [undefined] }, { podcast: '', type: undefined, urls: [undefined], update: true }, { podcast: '5b0ad37226dc3db38194e5ec', type: '', url: '' }, { podcast: '5b0ad37226dc3db38194e5ec', type: '', url: '', update: true }, { podcast: '5b0ad37226dc3db38194e5ec', type: '', urls: [''] }, { podcast: '5b0ad37226dc3db38194e5ec', type: '', urls: [''], update: true }, { podcast: '5b0ad37226dc3db38194e5ec', type: 'article', url: '' }, { podcast: '5b0ad37226dc3db38194e5ec', type: 'article', url: '', update: true }, { podcast: '5b0ad37226dc3db38194e5ec', type: 'article', url: undefined }, { podcast: '5b0ad37226dc3db38194e5ec', type: 'article', url: undefined, update: true }, { podcast: '5b0ad37226dc3db38194e5ec', type: 'article', urls: [''] }, { podcast: '5b0ad37226dc3db38194e5ec', type: 'article', urls: [''], update: true }, { podcast: '5b0ad37226dc3db38194e5ec', type: 'article', urls: [undefined] }, { podcast: '5b0ad37226dc3db38194e5ec', type: 'article', urls: [undefined], update: true }, { podcast: '5b0ad37226dc3db38194e5ec', type: 'episode', url: '' }, { podcast: '5b0ad37226dc3db38194e5ec', type: 'episode', url: '', update: true }, { podcast: '5b0ad37226dc3db38194e5ec', type: 'episode', url: undefined }, { podcast: '5b0ad37226dc3db38194e5ec', type: 'episode', url: undefined, update: true }, { podcast: '5b0ad37226dc3db38194e5ec', type: 'episode', urls: [''] }, { podcast: '5b0ad37226dc3db38194e5ec', type: 'episode', urls: [''], update: true }, { podcast: '5b0ad37226dc3db38194e5ec', type: 'episode', urls: [undefined] }, { podcast: '5b0ad37226dc3db38194e5ec', type: 'episode', urls: [undefined], update: true }, { podcast: '5b0ad37226dc3db38194e5ec', type: 'xenomorph', urls: ['http://mbmbam.libsyn.com/rssss'] }, { podcast: '5b0ad37226dc3db38194e5ec', type: 'xenomorph', urls: ['http://mbmbam.libsyn.com/rssss'] }, { podcast: '5b0ad37226dc3db38194e5ec', type: 'xenomorph', urls: ['http://mbmbam.libsyn.com/rssss'], update: true }, { podcast: '5b0ad37226dc3db38194e5ec', type: 'xenomorph', urls: ['http://mbmbam.libsyn.com/rssss'], update: true }, { podcast: '5b0ad37226dc3db38194e5ec', type: undefined, url: undefined }, { podcast: '5b0ad37226dc3db38194e5ec', type: undefined, url: undefined, update: true }, { podcast: '5b0ad37226dc3db38194e5ec', type: undefined, urls: [undefined] }, { podcast: '5b0ad37226dc3db38194e5ec', type: undefined, urls: [undefined], update: true }, { rss: '', type: '', url: '' }, { rss: '', type: '', url: '', update: true }, { rss: '', type: '', urls: [''] }, { rss: '', type: '', urls: [''], update: true }, { rss: '', type: 'article', url: '' }, { rss: '', type: 'article', url: '', update: true }, { rss: '', type: 'article', url: undefined }, { rss: '', type: 'article', url: undefined, update: true }, { rss: '', type: 'article', urls: [''] }, { rss: '', type: 'article', urls: [''], update: true }, { rss: '', type: 'article', urls: [undefined] }, { rss: '', type: 'article', urls: [undefined], update: true }, { rss: '', type: 'episode', url: '' }, { rss: '', type: 'episode', url: '', update: true }, { rss: '', type: 'episode', url: undefined }, { rss: '', type: 'episode', url: undefined, update: true }, { rss: '', type: 'episode', urls: [''] }, { rss: '', type: 'episode', urls: [''], update: true }, { rss: '', type: 'episode', urls: [undefined] }, { rss: '', type: 'episode', urls: [undefined], update: true }, { rss: '', type: 'xenomorph', urls: ['http://mbmbam.libsyn.com/rssss'] }, { rss: '', type: 'xenomorph', urls: ['http://mbmbam.libsyn.com/rssss'] }, { rss: '', type: 'xenomorph', urls: ['http://mbmbam.libsyn.com/rssss'], update: true }, { rss: '', type: 'xenomorph', urls: ['http://mbmbam.libsyn.com/rssss'], update: true }, { rss: '', type: undefined, url: undefined }, { rss: '', type: undefined, url: undefined, update: true }, { rss: '', type: undefined, urls: [undefined] }, { rss: '', type: undefined, urls: [undefined], update: true }, { rss: '5b0ad37226dc3db38194e5ec', type: '', url: '' }, { rss: '5b0ad37226dc3db38194e5ec', type: '', url: '', update: true }, { rss: '5b0ad37226dc3db38194e5ec', type: '', urls: [''] }, { rss: '5b0ad37226dc3db38194e5ec', type: '', urls: [''], update: true }, { rss: '5b0ad37226dc3db38194e5ec', type: 'article', url: '' }, { rss: '5b0ad37226dc3db38194e5ec', type: 'article', url: '', update: true }, { rss: '5b0ad37226dc3db38194e5ec', type: 'article', url: undefined }, { rss: '5b0ad37226dc3db38194e5ec', type: 'article', url: undefined, update: true }, { rss: '5b0ad37226dc3db38194e5ec', type: 'article', urls: [''] }, { rss: '5b0ad37226dc3db38194e5ec', type: 'article', urls: [''], update: true }, { rss: '5b0ad37226dc3db38194e5ec', type: 'article', urls: [undefined] }, { rss: '5b0ad37226dc3db38194e5ec', type: 'article', urls: [undefined], update: true }, { rss: '5b0ad37226dc3db38194e5ec', type: 'episode', url: '' }, { rss: '5b0ad37226dc3db38194e5ec', type: 'episode', url: '', update: true }, { rss: '5b0ad37226dc3db38194e5ec', type: 'episode', url: undefined }, { rss: '5b0ad37226dc3db38194e5ec', type: 'episode', url: undefined, update: true }, { rss: '5b0ad37226dc3db38194e5ec', type: 'episode', urls: [''] }, { rss: '5b0ad37226dc3db38194e5ec', type: 'episode', urls: [''], update: true }, { rss: '5b0ad37226dc3db38194e5ec', type: 'episode', urls: [undefined] }, { rss: '5b0ad37226dc3db38194e5ec', type: 'episode', urls: [undefined], update: true }, { rss: '5b0ad37226dc3db38194e5ec', type: 'xenomorph', urls: ['http://mbmbam.libsyn.com/rssss'] }, { rss: '5b0ad37226dc3db38194e5ec', type: 'xenomorph', urls: ['http://mbmbam.libsyn.com/rssss'] }, { rss: '5b0ad37226dc3db38194e5ec', type: 'xenomorph', urls: ['http://mbmbam.libsyn.com/rssss'], update: true }, { rss: '5b0ad37226dc3db38194e5ec', type: 'xenomorph', urls: ['http://mbmbam.libsyn.com/rssss'], update: true }, { rss: '5b0ad37226dc3db38194e5ec', type: undefined, url: undefined }, { rss: '5b0ad37226dc3db38194e5ec', type: undefined, url: undefined, update: true }, { rss: '5b0ad37226dc3db38194e5ec', type: undefined, urls: [undefined] }, { rss: '5b0ad37226dc3db38194e5ec', type: undefined, urls: [undefined], update: true }, { type: '', url: '' }, { type: '', url: '', update: true }, { type: '', urls: [''] }, { type: '', urls: [''], update: true }, { type: 'article', url: '' }, { type: 'article', url: '', update: true }, { type: 'article', url: undefined }, { type: 'article', url: undefined, update: true }, { type: 'article', urls: [''] }, { type: 'article', urls: [''], update: true }, { type: 'article', urls: [undefined] }, { type: 'article', urls: [undefined], update: true }, { type: 'episode', url: '' }, { type: 'episode', url: '', update: true }, { type: 'episode', url: undefined }, { type: 'episode', url: undefined, update: true }, { type: 'episode', urls: [''] }, { type: 'episode', urls: [''], update: true }, { type: 'episode', urls: [undefined] }, { type: 'episode', urls: [undefined], update: true }, { type: 'xenomorph', urls: ['http://mbmbam.libsyn.com/rssss'] }, { type: 'xenomorph', urls: ['http://mbmbam.libsyn.com/rssss'] }, { type: 'xenomorph', urls: ['http://mbmbam.libsyn.com/rssss'], update: true }, { type: 'xenomorph', urls: ['http://mbmbam.libsyn.com/rssss'], update: true }, { type: undefined, url: undefined }, { type: undefined, url: undefined, update: true }, { type: undefined, urls: [undefined] }, { type: undefined, urls: [undefined], update: true }, ]; ParseOG.resetHistory(); for (let i in testCases) { const data = testCases[i]; setupHandler(); await ogQueue.add(data); await handler; expect(ParseOG.called).to.be.false; } }); }); }); ================================================ FILE: api/test/workers/podcast.js ================================================ import nock from 'nock'; import { expect } from 'chai'; import { podcastQueue, StreamQueueAdd, OgQueueAdd } from '../../src/asyncTasks'; import Podcast from '../../src/models/podcast'; import Episode from '../../src/models/episode'; import { ParsePodcast } from '../../src/parsers/feed'; import { podcastProcessor, handlePodcast } from '../../src/workers/podcast'; import { loadFixture, dropDBs, getTestPodcast, getMockFeed } from '../utils'; describe('Podcast worker', () => { const data = { podcast: '5afb7fedfe7430d35996d66e', url: 'https://anchor.fm/s/1f47f58/podcast/rss', }; let originalOgQueueAdd; let originalStreamQueueAdd; let handler; let initialEpisodes; function setupHandler() { handler = new Promise((resolve, reject) => { podcastQueue.handlers['__default__'] = job => { return handlePodcast(job).then(resolve, reject); }; }); } before(async () => { await podcastQueue.empty(); originalOgQueueAdd = OgQueueAdd._fn; originalStreamQueueAdd = StreamQueueAdd._fn; OgQueueAdd._fn = () => Promise.resolve(); StreamQueueAdd._fn = () => Promise.resolve(); podcastQueue.process(podcastProcessor).catch(err => console.log(`PODCAST PROCESSING FAILURE: ${err.stack}`)); await dropDBs(); await loadFixture('initial-data'); initialEpisodes = await Episode.find({ podcast: data.podcast }); }); after(async () => { podcastQueue.handlers['__default__'] = podcastProcessor; await podcastQueue.close(); OgQueueAdd._fn = originalOgQueueAdd; StreamQueueAdd._fn = originalStreamQueueAdd; }); describe('queue', () => { it('should call worker when enqueueing jobs', async () => { setupHandler(); await podcastQueue.add(data); await handler; const episodes = await Episode.find({ podcast: data.podcast }); expect(episodes).to.have.length.above(initialEpisodes.length); }); it('should fail for invalid job', async () => { const testCases = [ { podcast: '5afb7fedfe7430d35996d66e', url: undefined }, { podcast: '5afb7fedfe7430d35996d66e', url: '' }, { podcast: '5afb7fedfe7430d35996d66e', url: 'http://dorkly.com/comics/rssss' }, ]; for (let i = 0; i < testCases.length; ++i) { setupHandler(); const data = testCases[i]; await podcastQueue.add(data); try { await handler; } catch (_) { //XXX: ignore error } const podcast = await Podcast.findById(data.podcast); expect(podcast.consecutiveScrapeFailures, `test case #${i + 1}`).to.be.an.equal(i + 1); } }); }); describe('worker', () => { before(async () => { await dropDBs(); await loadFixture('initial-data'); initialEpisodes = await Episode.find({ podcast: data.podcast }); nock(data.url) .get('') .twice() .reply(200, () => { return getTestPodcast('giant-bombcast'); }); getMockFeed('podcast', data.podcast).addActivities.resetHistory(); ParsePodcast.resetHistory(); OgQueueAdd.resetHistory(); StreamQueueAdd.resetHistory(); setupHandler(); await podcastQueue.add(data); await handler; }); after(() => { nock.cleanAll(); }); it('should parse the feed', async () => { expect(ParsePodcast.calledWith(data.url)).to.be.true; }); it('should upsert episode data from feed', async () => { const episodes = await Episode.find({ podcast: data.podcast }); expect(episodes).to.have.length(initialEpisodes.length + 649); }); it('should update feed data', async () => { const podcast = await Podcast.findById(data.podcast); // expect(podcast.postCount).to.be.equal(initialEpisodes.length + 649); }); it('should add episode data to Stream feed', async () => { const feed = getMockFeed('podcast', data.podcast); expect(feed).to.not.be.null; expect(feed.addActivities.called).to.be.true; const episodes = await Episode.find({ _id: { $nin: initialEpisodes.map(a => a._id) }, podcast: data.podcast, }); const batchCount = Math.ceil(episodes.length / 100); const foreignIds = episodes.map(e => `episodes:${e._id}`); let matchedActivities = 0; for (let i = 0; i < batchCount; ++i) { const batchSize = Math.min(100, episodes.length - i * 100); const args = feed.addActivities.getCall(i).args[0].map(a => a.foreign_id); expect(args).to.have.length(batchSize); matchedActivities += args.filter(arg => foreignIds.includes(arg)).length; } expect(matchedActivities).to.equal(episodes.length); }); it('should schedule OG job', async () => { const episodes = await Episode.find({ _id: { $nin: initialEpisodes.map(a => a._id) }, podcast: data.podcast, }); const opts = { removeOnComplete: true, removeOnFail: true }; const args = { type: 'episode', podcast: data.podcast, urls: episodes.map(e => e.link) }; expect(OgQueueAdd.calledOnceWith(args, opts)).to.be.true; }); it('should schedule Stream job', async () => { const episodes = await Episode.find({ _id: { $nin: initialEpisodes.map(a => a._id) }, podcast: data.podcast, }); const opts = { removeOnComplete: true, removeOnFail: true }; const args = { podcast: data.podcast, contentIds: episodes.map(e => e._id) }; expect(StreamQueueAdd.calledOnceWith(args, opts)).to.be.true; }); }); }); ================================================ FILE: api/test/workers/rss.js ================================================ import { parse } from 'url'; import nock from 'nock'; import { expect } from 'chai'; import { rssQueue, OgQueueAdd, StreamQueueAdd, SocialQueueAdd } from '../../src/asyncTasks'; import RSS from '../../src/models/rss'; import Article from '../../src/models/article'; import { ParseFeed } from '../../src/parsers/feed'; import { rssProcessor, handleRSS, upsertManyArticles } from '../../src/workers/rss'; import { loadFixture, dropDBs, getTestFeed, createMockFeed, getMockFeed } from '../utils'; describe('RSS worker', () => { let originalOgQueueAdd; let originalStreamQueueAdd; let originalSocialQueueAdd; let handler; function setupHandler() { handler = new Promise((resolve, reject) => { rssQueue.handlers['__default__'] = job => { return handleRSS(job).then(resolve, reject); }; }); } before(async () => { await rssQueue.empty(); OgQueueAdd.resetHistory(); StreamQueueAdd.resetHistory(); SocialQueueAdd.resetHistory(); originalOgQueueAdd = OgQueueAdd._fn; originalStreamQueueAdd = StreamQueueAdd._fn; originalSocialQueueAdd = SocialQueueAdd._fn; OgQueueAdd._fn = () => Promise.resolve(); StreamQueueAdd._fn = () => Promise.resolve(); SocialQueueAdd._fn = () => Promise.resolve(); rssQueue.process(rssProcessor).catch(err => console.error(`RSS PROCESSING FAILURE: ${err.stack}`)); await dropDBs(); await loadFixture('initial-data'); }); after(async () => { rssQueue.handlers['__default__'] = rssProcessor; await rssQueue.close(); OgQueueAdd._fn = originalOgQueueAdd; StreamQueueAdd._fn = originalStreamQueueAdd; SocialQueueAdd._fn = originalSocialQueueAdd; }); describe('queue', () => { const testCases = [];[ 'http://20minutes.fr/rss/france.xml', 'http://20minutes.fr/rss/hightech.xml', 'http://20minutes.fr/rss/paris.xml', 'http://20minutes.fr/rss/une.xml', 'http://adelcho88.podomatic.com/rss2.xml', 'http://apublica.org/feed', 'http://audiworld.com/rss.xml', 'http://blog.moneydj.com/news/feed', 'http://bookshadow.com/weblog/feeds', 'http://dingxiaoyun555.blog.163.com/rss', 'http://douban.com/feed/people/52041165/interests', 'http://geektopia.es/rss.xml', 'http://gossip.podomatic.com/rss2.xml', 'http://htxt.co.za/feed', 'http://jasonhaley.com/syndication.axd', 'http://kaiak.tw/?cat=205&feed=rss2', 'http://maxwell-land-surveying.com/feed', 'http://opplopolis.com/feed/all', 'http://rss.cnki.net/kns/rss.aspx?journal=hhzx&virtual=knavi', 'http://scottishpoetrylibrary.podomatic.com/rss2.xml', 'http://shanzhuoboshi.com/feed', 'http://simonsays.fr/feed', 'http://sospc.name/feed', 'http://sourcedigit.com/feed', 'http://stevestoj.podomatic.com/rss2.xml', 'http://straitstimes.com/news/asia/rss.xml', 'http://sunnymegatron.com/feed', 'http://tejiendoelmundo.wordpress.com/feed', 'http://thejunkies.podomatic.com/rss2.xml', 'http://thewildeternal.com/blog/feed', 'http://totoyao.wordpress.com/feed', 'http://xda-developers.com/category/android/feed', 'http://yan.sg/feed', 'http://zhukun.net/feed', 'https://90.cx/feed', 'https://api.prprpr.me/weibo/rss/5953553734', 'https://lowendbox.com/feed', 'https://qiujunya.com/feed', 'https://seattle.craigslist.org/search/act?format=rss', 'https://torrentedigital.com/feed', 'https://ttt.tt/feed', ]; for (let i = 0; i < testCases.length; ++i) { it(`should call worker when enqueueing job for ${testCases[i]}`, async () => { async function queue(url) { setupHandler(); await rssQueue.add({ rss: '5b0ad0baf6f89574a638887a', url }); await handler; } //XXX: fetching data from the net failed, falling back to mocking const url = parse(testCases[i]); nock(url.host) .get(url.path) .query(url.query) .reply(200, () => getTestFeed(url.host)); await queue(testCases[i]); nock.cleanAll(); }).timeout(30000).retries(2); } it('should fail for invalid job', async () => { const rssID = '5b0ad0baf6f89574a638887a'; const testCases = [ { rss: rssID, url: undefined }, { rss: rssID, url: '' }, { rss: rssID, url: 'http://mbmbam.libsyn.com/rssss' }, ]; const before = await RSS.findById(rssID); for (let i = 0; i < testCases.length; ++i) { setupHandler(); const data = testCases[i]; await rssQueue.add(data); await handler; const after = await RSS.findById(data.rss); expect(after.consecutiveScrapeFailures, `test case #${i + 1}`).to.be.an.equal(before.consecutiveScrapeFailures + i + 1); } }); }); describe('worker', () => { const data = { rss: '5b0ad0baf6f89574a638887a', url: 'http://dorkly.com/comics/rss', }; let initialArticles; describe('invalid feed', () => { beforeEach(async () => { await dropDBs(); await loadFixture('initial-data'); initialArticles = await Article.find({ rss: data.rss }); createMockFeed('rss', data.rss); ParseFeed.resetHistory(); OgQueueAdd.resetHistory(); SocialQueueAdd.resetHistory(); StreamQueueAdd.resetHistory(); setupHandler(); }); afterEach(() => { nock.cleanAll(); }); it('should fail to parse malformed feed', async () => { nock(data.url) .get('') .twice() .reply(200, () => { return getTestFeed('malformed-hackernews'); }); await rssQueue.add(data); await handler; const articles = await Article.find({ rss: data.rss }); expect(articles).to.have.length.above(initialArticles.length); }); it('should fail to parse empty feed', async () => { nock(data.url) .get('') .twice() .reply(200, () => { return getTestFeed('empty'); }); await rssQueue.add(data); await handler; const articles = await Article.find({ rss: data.rss }); expect(articles).to.have.length(initialArticles.length); }); }); describe('valid feed', () => { const newArticleCount = 30; before(async () => { await dropDBs(); await loadFixture('initial-data'); initialArticles = await Article.find({ rss: data.rss }); createMockFeed('rss', data.rss); ParseFeed.resetHistory(); OgQueueAdd.resetHistory(); SocialQueueAdd.resetHistory(); StreamQueueAdd.resetHistory(); setupHandler(); nock(data.url) .get('') .twice() .reply(200, () => { return getTestFeed('hackernews'); }); await rssQueue.add(data); await handler; }); after(() => { nock.cleanAll(); }); it('should parse the feed', async () => { expect(ParseFeed.calledWith(data.url)).to.be.true; }); it('should upsert article data from feed', async () => { const articles = await Article.find({ rss: data.rss }); expect(articles).to.have.length(initialArticles.length + newArticleCount); }); it('should update feed data', async () => { const rss = await RSS.findById(data.rss); // expect(rss.postCount).to.be.equal(initialArticles.length + newArticleCount); expect(rss.guidStability).to.be.equal('STABLE'); }); it('should schedule OG job', async () => { const articles = await Article.find({ _id: { $nin: initialArticles.map(a => a._id) }, rss: data.rss, }); const opts = { removeOnComplete: true, removeOnFail: true }; const args = { type: 'article', rss: data.rss, urls: articles.filter(a => !!a.url).map(a => a.url) }; expect(OgQueueAdd.calledOnceWith(args, opts)).to.be.true; }); it('should schedule Stream job', async () => { const opts = { removeOnComplete: true, removeOnFail: true }; const newArticles = await Article.find({ _id: { $nin: initialArticles.map(a => a._id) }, rss: data.rss, }); const articleIDs = newArticles.filter(a => !!a.url).map(a => a._id); const args = { rss: data.rss, contentIds: articleIDs }; expect(StreamQueueAdd.calledOnceWith(args, opts)).to.be.true; }); it('should add article data to Stream feed', async () => { const feed = getMockFeed('rss', data.rss); expect(feed).to.not.be.null; expect(feed.addActivities.called).to.be.true; const articles = await Article.find({ _id: { $nin: initialArticles.map(a => a._id) }, rss: data.rss, }); const batchCount = Math.ceil(articles.length / 100); const foreignIds = articles.map(a => `articles:${a._id}`); let matchedActivities = 0; for (let i = 0; i < batchCount; ++i) { const batchSize = Math.min(100, articles.length - i * 100); const args = feed.addActivities.getCall(i).args[0].map(a => a.foreign_id); expect(args).to.have.length(batchSize); matchedActivities += args.filter(arg => foreignIds.includes(arg)).length; } expect(matchedActivities).to.equal(articles.length); }); }); describe('feed w/ unstable guid values', () => { const testData = [{ rss: '5b0bfaf6bf3863483f0b71e7', url: 'http://todopvr.com/foro/news_rss.php', }, { rss: '5b0a1c041bbf863ebe703dbe', url: 'http://search.worldbank.org/api/v2/news?countrycode_exact=pe&format=atom', }, { rss: '5b04c778e8865b482745bdee', url: 'http://social.msdn.microsoft.com/search/feed/?format=rss&query=blogs&refinement=109', }]; before(async () => { await dropDBs(); await loadFixture('unstable-guid'); }); it.skip('should update feed data', async () => { for (const data of testData) { setupHandler(); await rssQueue.add(data); await handler; const rss = await RSS.findById(data.rss); expect(rss.guidStability).to.be.equal('UNSTABLE'); } }); }); }); }); ================================================ FILE: api/test/workers/social.js ================================================ import mongoose from 'mongoose'; import { expect } from 'chai'; import RSS from '../../src/models/rss'; import Article from '../../src/models/article'; import { fetchSocialScore } from '../../src/utils/social'; import { socialQueue } from '../../src/asyncTasks'; import { socialProcessor, handleSocial } from '../../src/workers/social'; import { loadFixture, dropDBs } from '../utils'; describe('Social worker', () => { let handler; function setupHandler() { handler = new Promise((resolve, reject) => { socialQueue.handlers['__default__'] = job => { return handleSocial(job).then(resolve, reject); }; }); } before(async () => { socialQueue.process(socialProcessor).catch(err => console.log(`OG PROCESSING FAILURE: ${err.stack}`)); await dropDBs(); await loadFixture('initial-data'); }); after(async () => { socialQueue.handlers['__default__'] = socialProcessor; await socialQueue.close(); }); describe('queue', () => { it('should call worker when enqueueing job', async () => { const articles = [{ id: '5b0ad37226dc3db38194e5ec', link: 'http://mbmbam.libsyn.com/mbmbam-398-rest-in-reeses-pieces' }, { id: '5b0ad37226dc3db38194e5ec', commentUrl: 'https://techcrunch.com/2018/05/31/area-120-subway-pigeon/#respond' }]; setupHandler(); await socialQueue.add({ rss: '5b0ad0baf6f89574a638887a', articles }); await handler; }) it('should fail for invalid job', async () => { const articles = [{ id: '5b0ad37226dc3db38194e5ec', link: 'http://mbmbam.libsyn.com/mbmbam-398-rest-in-reeses-pieces' }, { id: '5b0ad37226dc3db38194e5ec', commentUrl: 'https://techcrunch.com/2018/05/31/area-120-subway-pigeon/#respond' }]; const testCases = [ { rss: '5b0ad0baf6f-9574a638887a', articles }, { rss: '5b0ad0baf6f89574a638887', articles }, { rss: '5b0ad0baf6f89574a638887a', articles: '' }, { rss: '5b0ad0baf6f89574a638887a', articles: 0 }, { rss: '5b0ad0baf6f89574a638887a', articles: [] }, { rss: '5b0ad0baf6f89574a638887a', articles: null }, { rss: '5b0ad0baf6f89574a638887a', articles: undefined }, { rss: '5b0ad0baf6f89574a638887a', articles: {} }, { rss: '5b0ad0baf6f89574a638887aa', articles }, { rss: '5b0ad0baf6fb9574a638887a', articles: [{ id: '', link: '' }] }, { rss: '5b0ad0baf6fb9574a638887a', articles: [{ id: '5b0ad0baf6fb9574a638887a', link: '' }] }, { rss: '5b0ad0baf6fb9574a638887a', articles: [{ id: '5b0ad0baf6fb9574a638887a', link: 'ftp://gogel.com' }] }, { rss: '5b0ad0baf6fb9574a638887a', articles: [{}] }, { rss: 0, articles }, { rss: null, articles }, { rss: undefined, articles }, ]; fetchSocialScore.resetHistory(); for (let i = 0; i < testCases.length; ++i) { setupHandler(); const data = testCases[i]; await socialQueue.add(data); await handler; expect(fetchSocialScore.called, `test case #${i + 1}`).to.be.false; } }).timeout(60000); //XXX: node 8 and 9 seem to take their sweet time to finish }); describe('worker', () => { const data = { rss: '5b0ad0baf6f89574a638887a', articles: [{ id: '5b0ad37226dc3db38194e5ec', link: 'https://choosealicense.com/' }, { id: '5b0ad37226dc3db38194e5ed', commentUrl: 'https://news.ycombinator.com/item?id=17243341' }], }; before(async () => { await dropDBs(); await loadFixture('initial-data'); setupHandler(); await socialQueue.add(data); await handler; }); it('should fetch article social score', async () => { const articles = await Article.find({ _id: { $in: data.articles.map(a => a.id) }, rss: data.rss, }); for (const article of articles) { expect(article.socialScore).to.not.be.null; expect(article.socialScore.reddit).to.be.above(0); expect(article.socialScore.hackernews).to.be.above(0); } }); }); }); ================================================ FILE: api/test/workers/stream.js ================================================ import { expect } from 'chai'; import { streamQueue } from '../../src/asyncTasks'; import RSS from '../../src/models/rss'; import Article from '../../src/models/article'; import { sendFeedToCollections } from '../../src/utils/collections'; import { streamProcessor, handleStream } from '../../src/workers/stream'; import { loadFixture, dropDBs, createMockFeed, getMockFeed } from '../utils'; describe('Stream worker', () => { let handler; function setupHandler() { handler = new Promise((resolve, reject) => { streamQueue.handlers['__default__'] = job => { return handleStream(job).then(resolve, reject); }; }); } before(async () => { await streamQueue.empty(); streamQueue.process(streamProcessor).catch(err => console.log(`STREAM PROCESSING FAILURE: ${err.stack}`)); await dropDBs(); await loadFixture('initial-data'); }); after(async () => { streamQueue.handlers['__default__'] = streamProcessor; await streamQueue.close(); }); describe('queue', () => { it('should call worker when enqueueing job', async () => { const articles = [{ id: '5b0ad37226dc3db38194e5ec', publicationDate: '2018-05-25T13:00:00.000Z' }]; setupHandler(); await streamQueue.add({ rss: '5b0ad0baf6f89574a638887a', articles }); await handler; }) it('should fail for invalid job', async () => { const testCases = [ { podcast: '' }, { podcast: '5b0ad0baf6f89574a638887' }, { podcast: '5b0ad0baf6f89574a638887a', contentIds: '' }, { podcast: '5b0ad0baf6f89574a638887a', contentIds: 42 }, { podcast: '5b0ad0baf6f89574a638887a', contentIds: [''] }, { podcast: '5b0ad0baf6f89574a638887a', contentIds: ['5b0ad0baf6f89574a638887'] }, { podcast: '5b0ad0baf6f89574a638887a', contentIds: ['5b0ad0baf6f89574a638887aa'] }, { podcast: '5b0ad0baf6f89574a638887a', contentIds: [42] }, { podcast: '5b0ad0baf6f89574a638887a', contentIds: [] }, { podcast: '5b0ad0baf6f89574a638887a', contentIds: [null] }, { podcast: '5b0ad0baf6f89574a638887a', contentIds: [undefined] }, { podcast: '5b0ad0baf6f89574a638887a', contentIds: null }, { podcast: '5b0ad0baf6f89574a638887aa' }, { podcast: 42 }, { podcast: null }, { podcast: undefined }, { rss: '' }, { rss: '5b0ad0baf6f89574a638887' }, { rss: '5b0ad0baf6f89574a638887a', contentIds: '' }, { rss: '5b0ad0baf6f89574a638887a', contentIds: 42 }, { rss: '5b0ad0baf6f89574a638887a', contentIds: [''] }, { rss: '5b0ad0baf6f89574a638887a', contentIds: ['5b0ad0baf6f89574a638887'] }, { rss: '5b0ad0baf6f89574a638887a', contentIds: ['5b0ad0baf6f89574a638887aa'] }, { rss: '5b0ad0baf6f89574a638887a', contentIds: [42] }, { rss: '5b0ad0baf6f89574a638887a', contentIds: [] }, { rss: '5b0ad0baf6f89574a638887a', contentIds: [null] }, { rss: '5b0ad0baf6f89574a638887a', contentIds: [undefined] }, { rss: '5b0ad0baf6f89574a638887a', contentIds: null }, { rss: '5b0ad0baf6f89574a638887aa' }, { rss: 42 }, { rss: null }, { rss: undefined }, ]; sendFeedToCollections.resetHistory(); for (let i = 0; i < testCases.length; ++i) { setupHandler(); const data = testCases[i]; await streamQueue.add(data); await handler; const rssFeed = getMockFeed('rss', data.rss); expect(sendFeedToCollections.called, `test case #${i + 1}`).to.be.false; } }).timeout(60000); //XXX: node 8 and 9 seem to take their sweet time to finish }); describe('worker', () => { const data = { rss: '5b0ad0baf6f89574a638887a', contentIds: ['5b0ad37226dc3db38194e5ec', '5b0ad37226dc3db38194e5ed'] }; before(async () => { await dropDBs(); await loadFixture('initial-data'); createMockFeed('rss', data.rss); setupHandler(); sendFeedToCollections.resetHistory(); await streamQueue.add(data); await handler; }); it('should add article data to Stream feed', async () => { expect(sendFeedToCollections.calledOnce).to.be.true; }); }); }); ================================================ FILE: api/test-entry.js ================================================ require('@babel/register')({ presets: [['@babel/preset-env', { targets: { node: 'current' } }]], plugins: [ 'shebang', [ 'istanbul', { exclude: ['test', 'setup-tests.js', 'test-entry.js'], }, ], ], }); //XXX: mocking modules before anything else is loaded const util = require('util'); const sinon = require('sinon'); const mock = require('mock-require'); function spyOnEverything(module) { const spiedOn = {}; const proto = require(module); for (const key in proto) { if (!proto.hasOwnProperty(key)) { continue; } const prop = proto[key]; if (util.isFunction(prop)) { spiedOn[key] = sinon.spy(function() { return spiedOn[key]._fn.apply(this, arguments); }); spiedOn[key]._fn = prop; } else { spiedOn[key] = prop; } } return spiedOn; } mock('getstream', { connect: sinon.stub().callsFake(() => { return require('./test/utils').getMockClient(); }), }); mock('./src/utils/events', sinon.spy(sinon.stub().returns(Promise.resolve()))); mock('./src/utils/social', spyOnEverything('./src/utils/social')); mock('./src/utils/collections', spyOnEverything('./src/utils/collections')); mock('./src/parsers/feed', spyOnEverything('./src/parsers/feed')); mock('./src/parsers/og', spyOnEverything('./src/parsers/og')); mock('./src/asyncTasks', spyOnEverything('./src/asyncTasks')); require('./setup-tests'); ================================================ FILE: app/electron-builder.yaml ================================================ appId: io.getstream.winds copyright: Copyright © 2018 Stream.io Inc. All rights reserved. productName: Winds compression: normal directories: buildResources: build output: dist files: - "!node_modules" mac: category: public.app-category.news entitlements: build/entitlements.mac.plist provisioningProfile: ../../winds-private/electron/embedded.provisionprofile icon: build/favicons/icon.icns identity: EHV7XZLAHA target: - pkg - dmg - mas publish: provider: s3 bucket: winds-2.0-releases path: releases mas: entitlements: build/entitlements.mas.plist win: target: nsis icon: build/favicons/icon.ico publish: provider: s3 bucket: winds-2.0-releases path: releases linux: description: Winds is a beautiful open-source RSS Reader and Podcast application provided by GetStream.io. category: Network;Feed target: - snap - AppImage publish: provider: s3 bucket: winds-2.0-releases path: releases ================================================ FILE: app/package.json ================================================ { "name": "Winds", "version": "3.3.14", "description": "Winds is a beautiful open source RSS Reader and Podcast app. Wind 2.0 was created using React/Redux/Node.\nFor more information, visit https://getstream.io/winds/.\nTo contribute or run your own version head over to Github: https://github.com/getstream/winds", "private": true, "author": "Winds Team ", "license": "BSD-3-Clause", "repository": "https://github.com/getstream/winds.git", "bugs": { "url": "https://github.com/getstream/winds/issues" }, "homepage": "https://winds.getstream.io", "main": "public/electron.js", "keywords": [ "Winds", "RSS", "RSS Reader", "Podcast", "Podcast Player", "Stream", "GetStream" ], "scripts": { "web": "react-scripts start", "build": "react-scripts build", "start": "concurrently \"yarn web\" \"wait-on http://localhost:3000 && electron .\"", "pack": "electron-builder --dir", "dist": "PUBLIC_URL=./ react-scripts build && electron-builder --mac --linux --win -p always", "prettier": "prettier --config ../.prettierrc --write \"src/**/*.js\"" }, "dependencies": { "algoliasearch": "^4.2.0", "axios": "^0.19.2", "electron-updater": "^4.3.1", "getstream": "^4.5.1", "history": "^4.10.1", "is-electron": "^2.2.0", "moment": "^2.26.0", "moment-duration-format": "^2.3.2", "node-sass": "^4.14.1", "rangy": "^1.3.0", "raven-js": "^3.27.2", "rc-slider": "^9.2.4", "react": "^16.13.1", "react-audio-player": "^0.13.0", "react-dom": "^16.13.1", "react-dropzone": "^11.0.1", "react-hot-loader": "^4.12.21", "react-html-parser": "^2.0.2", "react-image": "^4.0.0", "react-modal": "^3.11.2", "react-player": "^2.1.0", "react-popover": "^0.5.10", "react-redux": "^7.2.0", "react-router-dom": "^5.2.0", "react-scripts": "^3.4.1", "react-waypoint": "^9.0.2", "redux": "^4.0.5", "stream-analytics": "^2.8.0" }, "devDependencies": { "concurrently": "^5.2.0", "cross-env": "^7.0.2", "electron": "^9.0.0", "electron-builder": "^22.6.1", "electron-publisher-s3": "^20.17.2", "prettier": "^2.0.5", "stylelint": "^13.5.0", "stylelint-config-standard": "^20.0.0", "stylelint-order": "^4.0.0", "typescript": "^3.9.3", "version-bump-prompt": "^6.0.3", "wait-on": "^5.0.0" }, "eslintConfig": { "extends": "react-app" }, "browserslist": [ ">0.2%", "not dead", "not ie <= 11", "not op_mini all" ] } ================================================ FILE: app/public/actions.js ================================================ (function() { const remote = require('electron').remote; function init() { document.getElementById('window-min').addEventListener('click', function() { const window = remote.getCurrentWindow(); window.minimize(); }); document.getElementById('window-max').addEventListener('click', function() { const window = remote.getCurrentWindow(); if (!window.isMaximized()) { window.maximize(); } else { window.unmaximize(); } }); document.getElementById('window-close').addEventListener('click', function() { const window = remote.getCurrentWindow(); window.close(); }); } document.onreadystatechange = function() { if (document.readyState === 'complete') { init(); } }; })(); ================================================ FILE: app/public/electron.js ================================================ const { app, BrowserWindow, shell, ipcMain, Menu, TouchBar, remote, } = require('electron'); const { TouchBarButton, TouchBarLabel, TouchBarSpacer } = TouchBar; const isDev = 'ELECTRON_IS_DEV' in process.env ? parseInt(process.env.ELECTRON_IS_DEV, 10) === 1 : !(app || remote.app).isPackaged; let mainWindow; const createWindow = () => { mainWindow = new BrowserWindow({ backgroundColor: '#F7F7F7', minWidth: 880, show: false, titleBarStyle: 'hidden', webPreferences: { nodeIntegration: false, preload: __dirname + '/preload.js', }, height: 860, width: 1280, }); mainWindow.loadURL( isDev ? 'http://localhost:3000' : `file://${__dirname}/index.html`, ); if (isDev) mainWindow.webContents.openDevTools(); mainWindow.once('ready-to-show', () => { mainWindow.show(); ipcMain.on('open-external-window', (event, arg) => { shell.openExternal(arg); }); ipcMain.on('media-controls', (event, args) => { mediaControls(event, args); }); }); mainWindow.on('close', (event) => { if (app.quitting) mainWindow = null; else { event.preventDefault(); mainWindow.hide(); } }); }; const generateMenu = () => { let template = [ { label: 'File', submenu: [{ role: 'about' }, { role: 'quit' }], }, { label: 'Edit', submenu: [ { role: 'undo' }, { role: 'redo' }, { type: 'separator' }, { role: 'cut' }, { role: 'copy' }, { role: 'paste' }, { role: 'pasteandmatchstyle' }, { role: 'delete' }, { role: 'selectall' }, ], }, { label: 'View', submenu: [ { role: 'reload' }, { role: 'forcereload' }, { role: 'toggledevtools' }, { type: 'separator' }, { role: 'resetzoom' }, { role: 'zoomin' }, { role: 'zoomout' }, { type: 'separator' }, { role: 'togglefullscreen' }, ], }, { role: 'window', submenu: [{ role: 'minimize' }, { role: 'close' }], }, { role: 'help', submenu: [ { click() { shell.openExternal('https://getstream.io/winds'); }, label: 'Learn More', }, { click() { shell.openExternal('https://github.com/GetStream/Winds/issues'); }, label: 'File Issue on GitHub', }, ], }, ]; if (process.platform === 'darwin') { template.unshift({ label: app.getName(), submenu: [ { role: 'about' }, { type: 'separator' }, { role: 'services', submenu: [] }, { type: 'separator' }, { role: 'hide' }, { role: 'hideothers' }, { role: 'unhide' }, { type: 'separator' }, { role: 'quit' }, ], }); } template[1].submenu.push( { type: 'separator' }, { label: 'Speech', submenu: [{ role: 'startspeaking' }, { role: 'stopspeaking' }], }, ); template[3].submenu = [ { role: 'reload' }, { role: 'forcereload' }, { role: 'toggleDevTools' }, { type: 'separator' }, { role: 'zoom' }, { type: 'separator' }, { role: 'front' }, ]; template[4].submenu.push( { type: 'separator' }, { label: 'Winds', click() { mainWindow.show(); }, }, ); Menu.setApplicationMenu(Menu.buildFromTemplate(template)); }; const mediaControls = (event, args) => { let next = new TouchBarButton({ icon: `${__dirname}/static/next.png`, click: () => { event.sender.send('media-controls', 'next'); }, }); let previous = new TouchBarButton({ icon: `${__dirname}/static/previous.png`, click: () => { event.sender.send('media-controls', 'previous'); }, }); let playPause = new TouchBarButton({ icon: `${__dirname}/static/pause.png`, click: () => { event.sender.send('media-controls', 'togglePlayPause'); }, }); let info = new TouchBarLabel({ label: args.title && args.title.length > 40 ? `${args.title.substr(0, 40) + '...'}` : args.title, textColor: '#FFFFFF', }); if (args.type === 'play') { playPause.icon = `${__dirname}/static/pause.png`; info.label = args.title; } else { playPause.icon = `${__dirname}/static/play.png`; } let touchBar = new TouchBar([ previous, playPause, next, new TouchBarSpacer({ size: 'flexible' }), info, new TouchBarSpacer({ size: 'flexible' }), ]); mainWindow.setTouchBar(touchBar); }; app.on('ready', () => { createWindow(); generateMenu(); }); app.on('window-all-closed', () => { if (process.platform !== 'darwin') app.quit(); }); app.on('activate', () => { if (mainWindow === null) createWindow(); else mainWindow.show(); }); app.on('before-quit', () => (app.quitting = true)); ipcMain.on('load-page', (event, arg) => { mainWindow.loadURL(arg); }); ================================================ FILE: app/public/entitlements.mac.plist ================================================ com.apple.security.files.user-selected.read-only com.apple.security.files.user-selected.read-write ================================================ FILE: app/public/entitlements.mas.plist ================================================ com.apple.security.app-sandbox com.apple.application-identifier EHV7XZLAHA.io.getstream.winds com.apple.security.network.client com.apple.security.files.user-selected.read-write ================================================ FILE: app/public/index.html ================================================ Winds - Powered by GetStream.io
================================================ FILE: app/public/info.plist ================================================ com.apple.developer.team-identifier EHV7XZLAHA com.apple.application-identifier EHV7XZLAHA.io.getstream.winds ================================================ FILE: app/public/manifest.json ================================================ { "short_name": "Winds", "name": "Winds - Powered by GetStream.io", "description": "Winds 3.0 is a beautiful Open Source Podcast & RSS Reader created by Stream. Free desktop apps are available for macOS, Linux and Windows. A web version is available as well.", "icons": [ { "src": "/favicons/favicon-96x96.png", "type": "image/png", "sizes": "96x96" }, { "src": "/favicons/favicon-128x128.png", "type": "image/png", "sizes": "128x128" }, { "src": "/favicons/favicon-196x196.png", "type": "image/png", "sizes": "196x196" }, { "src": "/favicons/favicon-256x256.png", "type": "image/png", "sizes": "256x256" }, { "src": "/favicons/favicon-512x512.png", "type": "image/png", "sizes": "512x512" } ], "start_url": "/?utm_source=pwa", "background_color": "#ffffff", "display": "standalone", "orientation":"portrait", "scope": "/", "theme_color": "#f7f7f7" } ================================================ FILE: app/public/preload.js ================================================ window.ipcRenderer = require('electron').ipcRenderer; ================================================ FILE: app/src/App.js ================================================ import React from 'react'; import isElectron from 'is-electron'; import { Provider } from 'react-redux'; import { createStore } from 'redux'; import { createHashHistory, createBrowserHistory } from 'history'; import AppRouter from './AppRouter.js'; import reducer from './reducers'; import './styles/global.scss'; let initialState = {}; if ('authedUser' in localStorage) { try { initialState['authedUser'] = localStorage['authedUser']; } catch (e) { initialState['authedUser'] = null; } } let store; let history; if (isElectron()) { history = createHashHistory(); store = createStore(reducer, initialState); } else { history = createBrowserHistory(); store = createStore( reducer, initialState, window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__(), ); } const crawlUpDomForAnchorTag = (node, e) => { if (!node) { return; } else if (node.nodeName === 'A') { const href = node.getAttribute('href'); if (href && !href.includes('#/') && isElectron()) { e.preventDefault(); window.ipcRenderer.send('open-external-window', href); } else { return; } } else { // need to pass the click event down through the recursive calls so we can preventDefault if needed return crawlUpDomForAnchorTag(node.parentNode, e); } }; if (isElectron()) { document.body.addEventListener('click', (e) => { crawlUpDomForAnchorTag(e.target, e); }); } const App = () => ( ); export default App; ================================================ FILE: app/src/AppRouter.js ================================================ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { Router, Switch, Route } from 'react-router-dom'; import AuthedRoute from './AuthedRoute'; import UnauthedRoute from './UnauthedRoute'; import Dashboard from './views/Dashboard'; import PodcastsView from './views/PodcastsView.js'; import RSSFeedsView from './views/RSSFeedsView.js'; import FoldersView from './views/FoldersView.js'; import AdminView from './views/AdminView'; import NotFound from './views/404View'; import Header from './components/Header'; import Player from './components/Player.js'; import { Create, ForgotPassword, Login, ResetPassword } from './views/auth-views'; import { getAllData } from './api'; class AppRouter extends Component { componentDidMount() { getAllData(this.props.dispatch); } render() { return (
); } } AppRouter.propTypes = { dispatch: PropTypes.func.isRequired, history: PropTypes.object.isRequired, }; const mapStateToProps = (state) => ({ user: state.user }); export default connect(mapStateToProps)(AppRouter); ================================================ FILE: app/src/AuthedRoute.js ================================================ import { Redirect, Route, withRouter } from 'react-router-dom'; import Loader from './components/Loader'; import PropTypes from 'prop-types'; import React from 'react'; import { connect } from 'react-redux'; class AuthedRoute extends React.Component { render() { const { component, ...rest } = this.props; const Component = component; return ( { if (!localStorage['authedUser']) { if (this.props.redirect) { return ; } else { return
; } } else if (!this.props.user) { if (this.props.showLoader) { return ; } else { return
; } } else { return ; } }} /> ); } } AuthedRoute.defaultProps = { redirect: true, showLoader: true, }; AuthedRoute.propTypes = { component: PropTypes.elementType, redirect: PropTypes.bool, showLoader: PropTypes.bool, user: PropTypes.shape({}), }; const mapStateToProps = (state) => ({ user: state.user, }); export default withRouter(connect(mapStateToProps)(AuthedRoute)); ================================================ FILE: app/src/UnauthedRoute.js ================================================ import { Redirect, Route, withRouter } from 'react-router-dom'; import PropTypes from 'prop-types'; import React from 'react'; const UnauthedRoute = ({ component: Component, ...rest }) => { return ( { if (!window.localStorage.getItem('authedUser')) { return ; } else if (rest.redirect) { return ; } }} /> ); }; UnauthedRoute.defaultProps = { redirect: true, }; UnauthedRoute.propTypes = { component: PropTypes.elementType, }; export default withRouter(UnauthedRoute); ================================================ FILE: app/src/api/folderAPI.js ================================================ import fetch from '../util/fetch'; import { unfollowRss, unfollowPodcast } from '../api'; export const getFolders = (dispatch) => { fetch('GET', '/folders') .then(({ data }) => dispatch({ data, type: 'BATCH_UPDATE_FOLDERS' })) .catch((err) => { console.log(err); // eslint-disable-line no-console }); }; export const newFolder = (dispatch, data, thenFn, catchFn) => { fetch('POST', '/folders', data) .then((res) => { getFolders(dispatch); if (thenFn) thenFn(res); }) .catch(catchFn); }; export const updateFolder = (dispatch, folderID, data, thenFn, catchFn) => { fetch('PUT', `/folders/${folderID}`, data) .then((res) => { getFolders(dispatch); if (thenFn) thenFn(res); }) .catch(catchFn); }; export const upsertFolder = async ( dispatch, folderId = '', isRss, feedID, name, thenFn, catchFn, ) => { try { // Remove Feed from its current folder // if (folderId) { let data = { action: 'remove' }; data[isRss ? 'rss' : 'podcast'] = feedID; await fetch('PUT', `/folders/${folderId}`, data); } // Create a new folder with the feed // let data = { name }; data[isRss ? 'rss' : 'podcast'] = [feedID]; const res = await fetch('POST', '/folders', data); getFolders(dispatch); if (thenFn) thenFn(res); } catch (e) { if (catchFn) thenFn(catchFn); } }; export const renameFolder = (dispatch, folderID, name, thenFn, catchFn) => { fetch('PUT', `/folders/${folderID}`, { name }) .then((res) => { getFolders(dispatch); if (thenFn) thenFn(res); }) .catch(catchFn); }; export const deleteFolder = async (dispatch, folder, unfollow, thenFn, catchFn) => { fetch('DELETE', `/folders/${folder._id}`) .then((res) => { if (unfollow) { for (const feed of folder.rss) unfollowRss(dispatch, feed._id); for (const feed of folder.podcast) unfollowPodcast(dispatch, feed._id); } getFolders(dispatch); if (thenFn) thenFn(res); }) .catch(catchFn); }; export const getFolderFeeds = (folderID, params) => { return fetch('GET', `/folders/${folderID}/feed`, {}, params); }; ================================================ FILE: app/src/api/index.js ================================================ import fetch from '../util/fetch'; import { getPinnedArticles, getPinnedEpisodes } from '../util/pins'; import { getFolders } from './folderAPI'; import { getTags } from './tagAPI'; import { getNotes } from './noteAPI'; export const getUser = (dispatch, userId) => { fetch('GET', `/users/${userId}`) .then((res) => { window.streamAnalyticsClient.setUser({ id: res.data._id, alias: res.data.email, }); dispatch({ type: 'UPDATE_USER', user: res.data, }); }) .catch((err) => { if ( err.response && (err.response.status === 401 || err.response.status === 404) ) { localStorage.clear(); window.location = '/'; } }); }; export const getAliases = (dispatch) => { fetch('GET', '/aliases') .then(({ data }) => { const aliases = data.reduce((result, { _id, alias, podcast, rss }) => { const feedID = podcast ? podcast._id : rss._id; result[feedID] = { _id, alias }; return result; }, {}); dispatch({ aliases, type: 'BATCH_UPDATE_ALIASES', }); }) .catch((err) => { console.log(err); // eslint-disable-line no-console }); }; export const getSuggestedRss = (dispatch) => { fetch('GET', '/rss', {}, { type: 'recommended' }) .then((res) => { dispatch({ rssFeeds: res.data, type: 'UPDATE_SUGGESTED_RSS_FEEDS', }); }) .catch((err) => { console.log(err); // eslint-disable-line no-console }); }; export const getSuggestedPodcasts = (dispatch) => { fetch('GET', '/podcasts', {}, { type: 'recommended' }) .then((res) => { dispatch({ podcasts: res.data, type: 'UPDATE_SUGGESTED_PODCASTS', }); }) .catch((err) => { console.log(err); // eslint-disable-line no-console }); }; export const getRssById = (dispatch, id) => { fetch('GET', `/rss/${id}`) .then((res) => { if (res.data.duplicateOf) return fetch('GET', `/rss/${res.data.duplicateOf}`); return res; }) .then((response) => { dispatch({ rssFeed: response.data, type: 'UPDATE_RSS_FEED', }); }); }; export const getPodcastById = (dispatch, id) => { fetch('GET', `/podcasts/${id}`) .then((res) => { dispatch({ podcast: res.data, type: 'UPDATE_PODCAST_SHOW', }); }) .catch((err) => { console.log(err); // eslint-disable-line no-console }); }; export const getPodcastEpisodes = (podcastID) => { fetch( 'GET', '/episodes', {}, { podcast: podcastID, sort_by: 'publicationDate,desc', }, ) .then((res) => this.props.dispatch({ episodes: res.data, type: 'BATCH_UPDATE_EPISODES', }), ) .catch((err) => { console.log(err); // eslint-disable-line no-console }); }; export const getRssFollows = (dispatch) => { fetch('GET', '/follows', null, { type: 'rss' }) .then((res) => { dispatch({ rssFeeds: res.data, type: 'BATCH_UPDATE_RSS_FEEDS', }); dispatch({ follows: res.data, type: 'BATCH_FOLLOW_RSS_FEEDS', }); }) .catch((err) => { console.log(err); // eslint-disable-line no-console }); }; export const getPodcastsFollows = (dispatch) => { fetch('GET', '/follows', null, { type: 'podcast' }) .then((res) => { dispatch({ podcasts: res.data, type: 'BATCH_UPDATE_PODCASTS', }); dispatch({ follows: res.data, type: 'BATCH_FOLLOW_PODCASTS', }); }) .catch((err) => { console.log(err); // eslint-disable-line no-console }); }; export const getFeatured = (dispatch) => { fetch('GET', '/featured').then((res) => { dispatch({ featuredItems: res.data, type: 'UPDATE_FEATURED_ITEMS', }); }); }; export const followRss = (dispatch, rssFeedID) => { dispatch({ rssFeedID, type: 'FOLLOW_RSS_FEED' }); fetch('POST', '/follows', {}, { rss: rssFeedID, type: 'rss' }).catch((err) => { console.log(err); // eslint-disable-line no-console dispatch({ rssFeedID, type: 'UNFOLLOW_RSS_FEED' }); }); }; export const unfollowRss = (dispatch, rssFeedID) => { dispatch({ rssFeedID, type: 'UNFOLLOW_RSS_FEED' }); fetch('DELETE', '/follows', {}, { rss: rssFeedID, type: 'rss' }).catch((err) => { console.log(err); // eslint-disable-line no-console dispatch({ rssFeedID, type: 'FOLLOW_RSS_FEED' }); }); }; export const followPodcast = (dispatch, podcastID) => { dispatch({ podcastID, type: 'FOLLOW_PODCAST' }); fetch('POST', '/follows', null, { podcast: podcastID, type: 'podcast' }).catch( (err) => { console.log(err); // eslint-disable-line no-console dispatch({ podcastID, type: 'UNFOLLOW_PODCAST' }); }, ); }; export const unfollowPodcast = (dispatch, podcastID) => { dispatch({ podcastID, type: 'UNFOLLOW_PODCAST' }); fetch('DELETE', '/follows', null, { podcast: podcastID, type: 'podcast' }).catch( (err) => { console.log(err); // eslint-disable-line no-console dispatch({ podcastID, type: 'FOLLOW_PODCAST' }); }, ); }; export const getAllData = (dispatch) => { const userId = localStorage['authedUser']; if (userId) { getUser(dispatch, userId); getAliases(dispatch); getPinnedArticles(dispatch); getPinnedEpisodes(dispatch); getRssFollows(dispatch); getPodcastsFollows(dispatch); getFolders(dispatch); getTags(dispatch); getNotes(dispatch); } }; ================================================ FILE: app/src/api/noteAPI.js ================================================ import fetch from '../util/fetch'; export const getNotes = (dispatch) => { fetch('GET', '/notes') .then(({ data }) => dispatch({ data, type: 'BATCH_UPDATE_NOTES' })) .catch((err) => console.log(err)); // eslint-disable-line no-console }; export const newNote = (dispatch, type, id, start, end, text, thenFn, catchFn) => { const typeId = type === 'article' ? { article: id } : { episode: id }; fetch('POST', '/notes', { start, end, text, ...typeId }) .then((res) => { dispatch({ data: res.data, type: 'NEW_NOTE' }); if (thenFn) thenFn(res); }) .catch(catchFn); }; export const updateNote = (dispatch, noteId, text, thenFn, catchFn) => { fetch('PUT', `/notes/${noteId}`, { text }) .then((res) => { dispatch({ data: res.data, type: 'UPDATE_NOTE' }); if (thenFn) thenFn(res); }) .catch(catchFn); }; export const deleteNote = async (dispatch, feedId, noteId, thenFn, catchFn) => { fetch('DELETE', `/notes/${noteId}`) .then((res) => { dispatch({ noteId, feedId, type: 'DELETE_NOTE' }); if (thenFn) thenFn(res); }) .catch(catchFn); }; ================================================ FILE: app/src/api/tagAPI.js ================================================ import fetch from '../util/fetch'; export const getTags = (dispatch) => { fetch('GET', '/tags') .then(({ data }) => dispatch({ data, type: 'BATCH_UPDATE_TAGS' })) .catch((err) => { console.log(err); // eslint-disable-line no-console }); }; export const newTag = (dispatch, data, thenFn, catchFn) => { fetch('POST', '/tags', data) .then((res) => { getTags(dispatch); if (thenFn) thenFn(res); }) .catch(catchFn); }; export const addTag = (dispatch, tagId, feedId, type, thenFn, catchFn) => { let data = {}; data[type] = feedId; fetch('PUT', `/tags/${tagId}`, data) .then((res) => { getTags(dispatch); if (thenFn) thenFn(res); }) .catch(catchFn); }; export const removeTag = (dispatch, tagId, feedId, type, thenFn, catchFn) => { let data = { action: 'remove' }; data[type] = feedId; fetch('PUT', `/tags/${tagId}`, data) .then((res) => { getTags(dispatch); if (thenFn) thenFn(res); }) .catch(catchFn); }; export const renameTag = (dispatch, tagId, name, thenFn, catchFn) => { fetch('PUT', `/tags/${tagId}`, { name }) .then((res) => { getTags(dispatch); if (thenFn) thenFn(res); }) .catch(catchFn); }; export const deleteTag = async (dispatch, tagId, thenFn, catchFn) => { fetch('DELETE', `/tags/${tagId}`) .then((res) => { getTags(dispatch); if (thenFn) thenFn(res); }) .catch(catchFn); }; ================================================ FILE: app/src/components/AddOPMLModal.js ================================================ import React from 'react'; import PropTypes from 'prop-types'; import ReactModal from 'react-modal'; import Dropzone from 'react-dropzone'; import { Img } from 'react-image'; import { connect } from 'react-redux'; import { withRouter } from 'react-router-dom'; import fetch from '../util/fetch'; import saveIcon from '../images/icons/save.svg'; import exitIcon from '../images/buttons/exit.svg'; class AddOPMLModal extends React.Component { constructor(props) { super(props); this.resetState = { errorMessage: '', errored: false, submitting: false, success: false, file: null, }; this.state = { ...this.resetState }; } resetModal = () => { this.setState({ ...this.resetState }); }; handleSubmit = (e) => { e.preventDefault(); this.setState({ errorMessage: '', errored: false, submitting: true, success: false, }); let fd = new FormData(); fd.append('opml', this.state.file); fetch('POST', '/opml/upload', fd, null, { 'Content-Type': 'multipart/form-data' }) .then(() => { this.setState({ submitting: false, success: true }); setTimeout(() => { this.resetModal(); this.props.done(); }, 1500); }) .catch((err) => { this.setState({ errorMessage: err.message, errored: true, submitting: false, }); }); }; render() { let buttonText = 'Import OPML'; if (this.state.submitting) buttonText = 'Importing...'; else if (this.state.success) buttonText = 'Success!'; return ( { this.resetModal(); this.props.toggleModal(); }} overlayClassName="modal-overlay" shouldCloseOnOverlayClick={true} >

Add OPML File

this.setState({ file: file[0] })} > {({ getRootProps, getInputProps }) => { return (
{this.state.file ? (
{this.state.file.name}
) : (
or drag your file here
)}
); }}
Upload a valid RSS OPML file and we will add it to Winds.
{this.state.errorMessage}
); } } AddOPMLModal.defaultProps = { isOpen: false, }; AddOPMLModal.propTypes = { dispatch: PropTypes.func.isRequired, done: PropTypes.func.isRequired, history: PropTypes.shape({ push: PropTypes.func.isRequired }).isRequired, isOpen: PropTypes.bool, toggleModal: PropTypes.func.isRequired, }; export default connect()(withRouter(AddOPMLModal)); ================================================ FILE: app/src/components/AddPodcastModal.js ================================================ import React from 'react'; import PropTypes from 'prop-types'; import ReactModal from 'react-modal'; import { Img } from 'react-image'; import { connect } from 'react-redux'; import { withRouter } from 'react-router-dom'; import fetch from '../util/fetch'; import saveIcon from '../images/icons/save.svg'; import exitIcon from '../images/buttons/exit.svg'; class AddPodcastModal extends React.Component { constructor(props) { super(props); this.resetState = { checkedPodcastsToFollow: [], errorMessage: '', errored: false, podcastInputValue: '', podcastsToFollow: [], stage: 'submit-podcast-url', submitting: false, success: false, }; this.state = { ...this.resetState }; } resetModal = () => { this.setState({ ...this.resetState }); }; submitPodcastURL = (e) => { e.preventDefault(); this.setState({ errorMessage: '', errored: false, submitting: true, success: false, }); fetch('POST', '/podcasts', { feedUrl: this.state.podcastInputValue }) .then((res) => { for (let podcast of res.data) { this.props.dispatch({ podcast, type: 'UPDATE_PODCAST_SHOW', }); } this.setState({ podcastsToFollow: res.data, stage: 'select-podcasts', submitting: false, }); }) .catch(() => { this.setState({ errorMessage: 'Oops, something went wrong. Please try again later.', errored: true, submitting: false, }); }); }; submitPodcastSelections = (e) => { e.preventDefault(); this.setState({ errorMessage: '', errored: false, submitting: true, success: false, }); // TODO: FIX Dispatch Promise.all( this.state.checkedPodcastsToFollow.map((checkedPodcastToFollow) => { return fetch('post', '/follows', null, { podcast: checkedPodcastToFollow, type: 'podcast', }).then((res) => { this.props.dispatch({ podcastID: res.data.podcast, type: 'FOLLOW_PODCAST', }); return res.data.podcast; }); }), ).then((podcastIDs) => { this.setState({ submitting: false, success: true, }); this.props.history.push(`/podcasts/${podcastIDs[0]}`); setTimeout(() => { this.resetModal(); this.props.done(); }, 1500); }); }; render() { let buttonText = 'Submit'; if (this.state.submitting) buttonText = 'Submitting...'; else if (this.state.success) buttonText = 'Success!'; let currentView = null; if (this.state.stage === 'submit-podcast-url') { currentView = (
this.setState({ podcastInputValue: e.target.value }) } placeholder="Enter URL" type="text" value={this.state.podcastInputValue} />
Enter a valid podcast URL and we'll add it to Winds.
{this.state.errorMessage}
); } else if (this.state.stage === 'select-podcasts') { currentView = (
We found a few podcasts with that URL. Once your selection has been made, we will begin to process the podcasts. They will be ready shortly after.
{this.state.podcastsToFollow.map((podcastToFollow) => { return (
); })}
); } return ( { this.resetModal(); this.props.toggleModal(); }} overlayClassName="modal-overlay" shouldCloseOnOverlayClick={true} >

Add New Podcast

{ this.resetModal(); this.props.toggleModal(); }} src={exitIcon} />
{currentView}
); } } AddPodcastModal.defaultProps = { isOpen: false, }; AddPodcastModal.propTypes = { history: PropTypes.shape({ push: PropTypes.func.isRequired }).isRequired, dispatch: PropTypes.func.isRequired, done: PropTypes.func.isRequired, isOpen: PropTypes.bool, toggleModal: PropTypes.func.isRequired, }; export default connect()(withRouter(AddPodcastModal)); ================================================ FILE: app/src/components/AddRSSModal.js ================================================ import React from 'react'; import PropTypes from 'prop-types'; import ReactModal from 'react-modal'; import { Img } from 'react-image'; import { connect } from 'react-redux'; import { withRouter } from 'react-router-dom'; import fetch from '../util/fetch'; import saveIcon from '../images/icons/save.svg'; import rssIcon from '../images/icons/rss.svg'; import exitIcon from '../images/buttons/exit.svg'; class AddRSSModal extends React.Component { constructor(props) { super(props); this.resetState = { checkedFeedsToFollow: [], errorMessage: '', errored: false, feedsToFollow: [], rssInputValue: '', stage: 'submit-rss-url', submitting: false, success: false, }; this.state = { ...this.resetState }; } handleStageOneFormSubmit = (e) => { e.preventDefault(); this.setState({ errorMessage: '', errored: false, submitting: true, success: false, }); fetch('POST', '/rss', { feedUrl: this.state.rssInputValue }) .then((res) => { for (let rssFeed of res.data) { this.props.dispatch({ rssFeed, type: 'UPDATE_RSS_FEED', }); } this.setState({ feedsToFollow: res.data, stage: 'select-feeds', submitting: false, }); }) .catch(() => { this.setState({ errorMessage: 'Oops, something went wrong. Please try again later.', errored: true, submitting: false, }); }); }; resetModal = () => { this.setState({ ...this.resetState }); }; submitFeedSelections = (e) => { e.preventDefault(); this.setState({ errorMessage: '', errored: false, submitting: true, success: false, }); // TODO: FIX Dispatch Promise.all( this.state.checkedFeedsToFollow.map((checkedFeedToFollow) => { return fetch('post', '/follows', null, { rss: checkedFeedToFollow, type: 'rss', }).then((res) => { this.props.dispatch({ rssFeedID: res.data.rss, type: 'FOLLOW_RSS_FEED', }); return res.data.rss; }); }), ) .then((rssFeeds) => { this.setState({ submitting: false, success: true, }); this.props.history.push(`/rss/${rssFeeds[0]}`); setTimeout(() => { this.resetModal(); this.props.done(); }, 1500); }) .catch((err) => { this.setState({ errorMessage: err.message, submitting: false, success: false, }); }); }; render = () => { let buttonText = 'Submit'; if (this.state.submitting) buttonText = 'Submitting...'; else if (this.state.success) buttonText = 'Success!'; let currentView = null; if (this.state.stage === 'submit-rss-url') { currentView = (
this.setState({ rssInputValue: e.target.value }) } placeholder="Enter URL" type="text" value={this.state.rssInputValue} />
Enter a valid RSS feed url and we will add it to Winds.
{this.state.errorMessage}
); } else if (this.state.stage === 'select-feeds') { currentView = (
Once your selection has been made, we will begin to process the feeds. They will be ready shortly after.
{this.state.feedsToFollow.map((feedToFollow) => { return (
); })}
{this.state.errorMessage}
); } return ( { this.resetModal(); this.props.toggleModal(); }} overlayClassName="modal-overlay" shouldCloseOnOverlayClick={true} >

Add New RSS Feed

{currentView}
); }; } AddRSSModal.defaultProps = { isOpen: false, }; AddRSSModal.propTypes = { dispatch: PropTypes.func.isRequired, done: PropTypes.func.isRequired, history: PropTypes.shape({ push: PropTypes.func.isRequired }).isRequired, isOpen: PropTypes.bool, toggleModal: PropTypes.func.isRequired, }; export default connect()(withRouter(AddRSSModal)); ================================================ FILE: app/src/components/AliasModal.js ================================================ import React from 'react'; import PropTypes from 'prop-types'; import ReactModal from 'react-modal'; import { Img } from 'react-image'; import { connect } from 'react-redux'; import fetch from '../util/fetch'; import { getAliases } from '../api'; import saveIcon from '../images/icons/save.svg'; import exitIcon from '../images/buttons/exit.svg'; class AliasModal extends React.Component { constructor(props) { super(props); this.state = { error: false, submitting: false, success: false, }; } closeModal = () => { this.setState({ error: false, submitting: false, success: false }); this.props.toggleModal(); }; handleSubmit = (e) => { e.preventDefault(); const alias = new FormData(e.target).get('alias'); const id = this.props.isRss ? { rss: this.props.feedID } : { podcast: this.props.feedID }; this.setState({ submitting: true }); fetch('POST', '/aliases', { alias, ...id }) .then((res) => { if (res.data) { this.setState({ success: true, submitting: false }); getAliases(this.props.dispatch); setTimeout(() => this.closeModal(), 500); } }) .catch(() => this.setState({ error: true, submitting: false })); }; render() { let buttonText = 'SAVE'; if (this.state.submitting) { buttonText = 'Submitting...'; } else if (this.state.success) { buttonText = 'Success!'; } return (

Rename Feed

{this.state.error && (
Oops, something went wrong. Please try again later.
)}
); } } AliasModal.defaultProps = { isOpen: false, }; AliasModal.propTypes = { isOpen: PropTypes.bool, toggleModal: PropTypes.func.isRequired, defVal: PropTypes.string, isRss: PropTypes.bool, feedID: PropTypes.string, dispatch: PropTypes.func.isRequired, }; export default connect()(AliasModal); ================================================ FILE: app/src/components/AllArticlesList.js ================================================ import PropTypes from 'prop-types'; import React from 'react'; import { connect } from 'react-redux'; import ArticleListItem from './ArticleListItem'; import { Waypoint } from 'react-waypoint'; import loaderIcon from '../images/loaders/default.svg'; import { Img } from 'react-image'; import { getFeed } from '../util/feeds'; class AllArticles extends React.Component { constructor(props) { super(props); this.state = { newArticlesAvailable: false, cursor: 0, reachedEndOfFeed: false, }; this.contentsEl = React.createRef(); } componentDidMount() { this.getArticleFeed(); this.subscription = window.streamClient .feed('user_article', this.props.userID, this.props.userArticleStreamToken) .subscribe(() => this.setState({ newArticlesAvailable: true })); } componentDidUpdate() { if (this.contentsEl.current && localStorage['all-article-list-scroll-position']) { this.contentsEl.current.scrollTop = localStorage['all-article-list-scroll-position']; delete localStorage['all-article-list-scroll-position']; } } componentWillUnmount() { this.subscription.cancel(); } getArticleFeed() { getFeed(this.props.dispatch, 'article', this.state.cursor, 10); } render() { return (

Articles

{this.state.newArticlesAvailable && (
{ this.getArticleFeed(); this.setState({ newArticlesAvailable: false }); }} > New articles available - click to refresh
)} {this.props.articles.map((article) => { return ( { localStorage[ 'all-article-list-scroll-position' ] = this.contentsEl.current.scrollTop; }} {...article} /> ); })} {this.state.reachedEndOfFeed ? (

That's it! No more articles here.

What, did you think that once you got all the way around, you'd just be back at the same place that you started? Sounds like some real round-feed thinking to me.

) : (
this.setState({ cursor: this.state.cursor + 1 }, () => this.getArticleFeed(), ) } />
)}
); } } AllArticles.defaultProps = { articles: [], }; AllArticles.propTypes = { articles: PropTypes.arrayOf(PropTypes.shape({})), dispatch: PropTypes.func.isRequired, userID: PropTypes.string.isRequired, userArticleStreamToken: PropTypes.string.isRequired, }; const mapStateToProps = (state) => { let articles = []; if (state.articles && state.feeds && state.feeds.article) articles = state.feeds.article.map((id) => state.articles[id]); for (let article of articles) { if (state.pinnedArticles && state.pinnedArticles[article._id]) { article.pinID = state.pinnedArticles[article._id]._id; } else article.pinID = ''; if ( state.feeds.article.indexOf(article._id) < 20 && state.feeds.article.indexOf(article._id) !== -1 ) { article.recent = true; } else { article.recent = false; } } return { articles, userArticleStreamToken: state.user.streamTokens.user_article, userID: state.user._id, }; }; export default connect(mapStateToProps)(AllArticles); ================================================ FILE: app/src/components/AllEpisodesList.js ================================================ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { Waypoint } from 'react-waypoint'; import EpisodeListItem from './EpisodeListItem'; import { getFeed } from '../util/feeds'; import { ReactComponent as LoaderIcon } from '../images/loaders/default.svg'; class AllEpisodesList extends React.Component { constructor(props) { super(props); this.state = { newEpisodesAvailable: false, cursor: 0, reachedEndOfFeed: false, }; this.contentsEl = React.createRef(); } componentDidMount() { this.getEpisodeFeed(); this.subscription = window.streamClient .feed('user_episode', this.props.userID, this.props.userEpisodeStreamToken) .subscribe(() => this.setState({ newEpisodesAvailable: true })); } componentDidUpdate() { if (this.contentsEl.current && localStorage['all-episode-list-scroll-position']) { this.contentsEl.current.scrollTop = localStorage['all-episode-list-scroll-position']; delete localStorage['all-episode-list-scroll-position']; } } componentWillUnmount() { this.subscription.cancel(); } getEpisodeFeed() { getFeed(this.props.dispatch, 'episode', this.state.cursor, 10); } render() { return (

Episodes

{this.state.newEpisodesAvailable && (
{ this.getEpisodeFeed(); this.setState({ newEpisodesAvailable: false }); }} > New episodes available - click to refresh
)} {this.props.episodes.map((episode) => ( { localStorage[ 'all-episode-list-scroll-position' ] = this.contentsEl.current.scrollTop; }} playable={false} {...episode} /> ))} {this.state.reachedEndOfFeed ? (

That's it! No more episodes here.

What, did you think that once you got all the way around, you'd just be back at the same place that you started? Sounds like some real round-feed thinking to me.

) : (
{ this.setState({ cursor: this.state.cursor + 1 }, () => this.getEpisodeFeed(), ); }} />
)}
); } } AllEpisodesList.defaultProps = { episodes: [], }; AllEpisodesList.propTypes = { dispatch: PropTypes.func.isRequired, episodes: PropTypes.arrayOf(PropTypes.shape({})), userID: PropTypes.string.isRequired, userEpisodeStreamToken: PropTypes.string.isRequired, }; const mapStateToProps = (state) => { let episodes = []; if (state.episodes && state.feeds && state.feeds.episode) episodes = state.feeds.episode.map((id) => state.episodes[id]); for (let episode of episodes) { if (state.pinnedEpisodes && state.pinnedEpisodes[episode._id]) { episode.pinID = state.pinnedEpisodes[episode._id]._id; } else episode.pinID = ''; if ( state.feeds.episode.indexOf(episode._id) < 20 && state.feeds.episode.indexOf(episode._id) !== -1 ) { episode.recent = true; } else episode.recent = false; } return { episodes, userEpisodeStreamToken: state.user.streamTokens.user_episode, userID: state.user._id, }; }; export default connect(mapStateToProps)(AllEpisodesList); ================================================ FILE: app/src/components/ArticleListItem.js ================================================ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { withRouter } from 'react-router-dom'; import { pinArticle, unpinArticle } from '../util/pins'; import FeedListItem from './FeedListItem'; class ArticleListItem extends React.Component { render() { const folderView = this.props.location.pathname.includes('folders'); const tagView = this.props.location.pathname.includes('tags'); const id = this.props._id; const rssId = this.props.rss._id; const folderId = this.props.foldersFeed[rssId]; const link = folderView || tagView ? `/folders/${folderId}/r/${rssId}/a/${id}` : `/rss/${rssId}/articles/${id}`; const note = this.props.notes[id] || []; const highlightsNo = note.filter((h) => !h.text).length; const notesNo = note.length - highlightsNo; const tagsNo = this.props.tagsFeed.filter((tag) => tag === id).length; return ( pinArticle(id, this.props.dispatch)} playable={false} tags={tagsNo} unpin={() => unpinArticle(this.props.pinID, id, this.props.dispatch)} /> ); } } ArticleListItem.defaultProps = { images: {}, pinID: '', recent: false, }; ArticleListItem.propTypes = { _id: PropTypes.string.isRequired, description: PropTypes.string, dispatch: PropTypes.func.isRequired, images: PropTypes.shape({ og: PropTypes.string }), onNavigation: PropTypes.func, pinID: PropTypes.string, publicationDate: PropTypes.string, recent: PropTypes.bool, rss: PropTypes.shape({ _id: PropTypes.string, title: PropTypes.string, }), title: PropTypes.string, url: PropTypes.string, foldersFeed: PropTypes.shape({}), location: PropTypes.shape({ pathname: PropTypes.string }).isRequired, }; const mapStateToProps = (state) => ({ foldersFeed: state.foldersFeed || {}, tagsFeed: state.tagsFeed || [], notes: state.notes || {}, }); export default connect(mapStateToProps)(withRouter(ArticleListItem)); ================================================ FILE: app/src/components/Avatar/index.js ================================================ import { Img } from 'react-image'; import PropTypes from 'prop-types'; import React from 'react'; let Avatar = (props) => { let url; if (props.gravatarURL) { url = props.gravatarURL; } else if (props.userID) { url = `https://www.gravatar.com/avatar/${props.userID}?s=200&default=identicon`; } else { return null; } return (
); }; Avatar.propTypes = { gravatarURL: PropTypes.string, userID: PropTypes.string, height: PropTypes.number, width: PropTypes.number, }; export default Avatar; ================================================ FILE: app/src/components/BookmarkPanel.js ================================================ import React from 'react'; import PropTypes from 'prop-types'; import moment from 'moment'; import { Img } from 'react-image'; import { connect } from 'react-redux'; import { Link, withRouter } from 'react-router-dom'; import TimeAgo from './TimeAgo'; import Panel from './Panel'; import getPlaceholderImageURL from '../util/getPlaceholderImageURL'; import { getPinnedArticles, getPinnedEpisodes } from '../util/pins'; class BookmarkPanel extends React.Component { componentDidMount() { if (!this.props.articles.length) getPinnedArticles(this.props.dispatch); if (!this.props.episodes.length) getPinnedEpisodes(this.props.dispatch); } render() { let bookmarks = []; const folderView = this.props.location.pathname.includes('folders') || this.props.location.pathname.includes('tags'); const foldersFeed = this.props.foldersFeed; if (this.props.type === 'article') bookmarks = this.props.articles; else if (this.props.type === 'episode') bookmarks = this.props.episodes; else bookmarks = [...this.props.articles, ...this.props.episodes]; bookmarks = bookmarks.sort( (a, b) => moment(b.createdAt).valueOf() - moment(a.createdAt).valueOf(), ); return ( {bookmarks.map((bookmark) => { if (bookmark.article) return ( } src={[ bookmark.article.rss.images.favicon, getPlaceholderImageURL(bookmark.article._id), ]} />
{bookmark.article.title}
); else return ( } src={[ bookmark.episode.podcast.images.favicon, getPlaceholderImageURL(bookmark.episode._id), ]} />
{bookmark.episode.title}
); })}
); } } BookmarkPanel.defaultProps = { articles: [], episodes: [], }; BookmarkPanel.propTypes = { dispatch: PropTypes.func.isRequired, location: PropTypes.shape({ pathname: PropTypes.string }).isRequired, type: PropTypes.string, articles: PropTypes.arrayOf(PropTypes.shape()), episodes: PropTypes.arrayOf(PropTypes.shape()), foldersFeed: PropTypes.shape({}), }; const mapStateToProps = (state) => ({ articles: state.pinnedArticles ? Object.values(state.pinnedArticles) : [], episodes: state.pinnedEpisodes ? Object.values(state.pinnedEpisodes) : [], foldersFeed: state.foldersFeed || {}, }); export default connect(mapStateToProps)(withRouter(BookmarkPanel)); ================================================ FILE: app/src/components/Drawer.js ================================================ import PropTypes from 'prop-types'; import React from 'react'; class Drawer extends React.Component { constructor(props) { super(props); this.state = {}; } render() { if (this.props.isOpen) { return (
{this.props.children}
); } else { return null; } } } Drawer.defaultProps = { className: '', isOpen: false, }; Drawer.propTypes = { children: PropTypes.oneOfType([PropTypes.node, PropTypes.arrayOf(PropTypes.node)]), className: PropTypes.string, closeDrawer: PropTypes.func.isRequired, isOpen: PropTypes.bool, }; export default Drawer; ================================================ FILE: app/src/components/EpisodeListItem.js ================================================ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { withRouter } from 'react-router-dom'; import FeedListItem from './FeedListItem'; import { pinEpisode, unpinEpisode } from '../util/pins'; class EpisodeListItem extends React.Component { playOrPauseEpisode = () => { if (this.props.inPlayer && this.props.player.playing) this.props.pauseEpisode(); else if (this.props.inPlayer) this.props.resumeEpisode(); else this.props.playEpisode(this.props._id, this.props.podcast._id); }; render() { const folderView = this.props.location.pathname.includes('folders'); const tagView = this.props.location.pathname.includes('tags'); const id = this.props._id; const podcastId = this.props.podcast._id; const folderId = this.props.foldersFeed[podcastId]; const link = folderView || tagView ? `/folders/${folderId}/p/${podcastId}/e/${id}` : `/podcasts/${podcastId}/episodes/${id}`; const note = this.props.notes[id] || []; const highlightsNo = note.filter((h) => !h.text).length; const notesNo = note.length - highlightsNo; const tagsNo = this.props.tagsFeed.filter((tag) => tag === id).length; return ( pinEpisode(id, this.props.dispatch)} playOrPauseEpisode={this.playOrPauseEpisode} playable={true} tags={tagsNo} unpin={() => unpinEpisode(this.props.pinID, id, this.props.dispatch)} /> ); } } EpisodeListItem.defaultProps = { images: {}, pinID: '', recent: false, }; EpisodeListItem.propTypes = { _id: PropTypes.string, dispatch: PropTypes.func.isRequired, pauseEpisode: PropTypes.func.isRequired, playEpisode: PropTypes.func.isRequired, resumeEpisode: PropTypes.func.isRequired, player: PropTypes.shape({ contextID: PropTypes.string, playing: PropTypes.bool, }), inPlayer: PropTypes.bool, description: PropTypes.string, images: PropTypes.shape({ og: PropTypes.string }), pinID: PropTypes.string, onNavigation: PropTypes.func, playable: PropTypes.bool, link: PropTypes.string, podcast: PropTypes.shape({ _id: PropTypes.string.isRequired, title: PropTypes.string, }), publicationDate: PropTypes.string, recent: PropTypes.bool, title: PropTypes.string, foldersFeed: PropTypes.shape({}), location: PropTypes.shape({ pathname: PropTypes.string }).isRequired, }; const mapDispatchToProps = (dispatch) => { return { dispatch, pauseEpisode: () => dispatch({ type: 'PAUSE_EPISODE' }), resumeEpisode: () => dispatch({ type: 'RESUME_EPISODE' }), playEpisode: (episodeID, podcastID) => { dispatch({ contextID: podcastID, episodeID: episodeID, playing: true, type: 'PLAY_EPISODE', }); }, }; }; const mapStateToProps = (state, ownProps) => { return { inPlayer: state.player && state.player.episodeID === ownProps._id && state.player.contextID === ownProps.podcast._id, player: state.player || {}, notes: state.notes || {}, tagsFeed: state.tagsFeed || [], foldersFeed: state.foldersFeed || {}, }; }; export default connect(mapStateToProps, mapDispatchToProps)(withRouter(EpisodeListItem)); ================================================ FILE: app/src/components/FeaturedItems.js ================================================ import PropTypes from 'prop-types'; import React from 'react'; import { connect } from 'react-redux'; import getPlaceholderImageURL from '../util/getPlaceholderImageURL'; import { Link } from 'react-router-dom'; import { getFeatured } from '../api'; class FeaturedItems extends React.Component { constructor(props) { super(props); this.state = { featured: localStorage.getItem('featured') || 'show', }; } componentDidMount() { if (!this.props.featuredItems.length) getFeatured(this.props.dispatch); } render() { return (

Featured on Winds

{ const featured = this.state.featured === 'show' ? 'hide' : 'show'; this.setState({ featured }); localStorage.setItem('featured', featured); }} > {this.state.featured === 'show' ? 'Hide' : 'Show'}
{this.state.featured === 'show' && (
{this.props.featuredItems.map((featuredItem) => { let linkURL = '#'; if (featuredItem.type === 'rss') { linkURL = `/rss/${featuredItem._id}?featured=true`; } else if (featuredItem.type === 'podcast') { linkURL = `/podcasts/${featuredItem._id}?featured=true`; } return (

{featuredItem.title}

); })}

)}
); } } FeaturedItems.defaultProps = { featuredItems: [], }; FeaturedItems.propTypes = { dispatch: PropTypes.func.isRequired, featuredItems: PropTypes.array, }; const mapStateToProps = (state) => ({ featuredItems: state.featuredItems || [], }); export default connect(mapStateToProps)(FeaturedItems); ================================================ FILE: app/src/components/FeedHeader.js ================================================ import React from 'react'; import PropTypes from 'prop-types'; import Tag from './Tag/Tag'; import TimeAgo from './TimeAgo'; import { Img } from 'react-image'; import getPlaceholderImageURL from '../util/getPlaceholderImageURL'; import { ReactComponent as LinkIcon } from '../images/icons/link.svg'; import { ReactComponent as BookmarkIcon } from '../images/icons/bookmark.svg'; import { ReactComponent as BookmarkedIcon } from '../images/icons/bookmarked.svg'; import { ReactComponent as PauseIcon } from '../images/icons/pause.svg'; import { ReactComponent as PlayIcon } from '../images/icons/play.svg'; class FeedHeader extends React.Component { render() { const { _id, title, images, url, publicationDate, pinID, pin, unpin, tweet, commentUrl, recent, hackernews, reddit, type, } = this.props; const { playOrPauseEpisode, playable, isPlaying } = this.props; return (
playable && playOrPauseEpisode()} > } src={[images.og, getPlaceholderImageURL(_id)]} width="50" /> {playable && (
{isPlaying ? : }
)}

{title}

{recent &&
} (pinID ? unpin() : pin())}> {pinID ? : } tweet()}> {commentUrl && ( )} {reddit && ( {reddit.score} )} {hackernews && ( {hackernews.score} )}
); } } FeedHeader.propTypes = { type: PropTypes.string.isRequired, _id: PropTypes.string.isRequired, title: PropTypes.string.isRequired, publicationDate: PropTypes.string, url: PropTypes.string, commentUrl: PropTypes.string, images: PropTypes.shape({ og: PropTypes.string }), tweet: PropTypes.func, pin: PropTypes.func, unpin: PropTypes.func, pinID: PropTypes.string, recent: PropTypes.bool, hackernews: PropTypes.shape({}), reddit: PropTypes.shape({}), playOrPauseEpisode: PropTypes.func, playable: PropTypes.bool, isPlaying: PropTypes.bool, }; export default FeedHeader; ================================================ FILE: app/src/components/FeedListItem.js ================================================ import React from 'react'; import PropTypes from 'prop-types'; import { Img } from 'react-image'; import { Link } from 'react-router-dom'; import TimeAgo from './TimeAgo'; import getPlaceholderImageURL from '../util/getPlaceholderImageURL'; import { ReactComponent as NoteIcon } from '../images/icons/note.svg'; import { ReactComponent as BookmarkIcon } from '../images/icons/bookmark.svg'; import { ReactComponent as BookmarkedIcon } from '../images/icons/bookmarked.svg'; import { ReactComponent as PenIcon } from '../images/icons/pen.svg'; import { ReactComponent as TagIcon } from '../images/icons/tag-simple.svg'; import { ReactComponent as PauseIcon } from '../images/icons/pause.svg'; import { ReactComponent as PlayIcon } from '../images/icons/play.svg'; class FeedListItem extends React.Component { render() { const { _id, title, images, link, description, feedTitle, publicationDate, pinID, pin, unpin, onNavigation, notes, highlights, tags, recent, } = this.props; const { inPlayer, isPlaying, playable, playOrPauseEpisode } = this.props; return ( onNavigation && onNavigation()} to={link} >
{ if (playable) { e.stopPropagation(); e.preventDefault(); playOrPauseEpisode(); } }} > } src={[images.og, getPlaceholderImageURL(_id)]} width="100" /> {playable && (
{inPlayer && isPlaying ? : }
)} {recent &&
}

{title}

{ e.preventDefault(); e.stopPropagation(); pinID ? unpin() : pin(); }} > {pinID ? : } {notes} Note {notes > 1 && 's'} {highlights} Highlight {highlights > 1 && 's'} {tags} Tag {tags > 1 && 's'}
{feedTitle} {'Posted '}
{description}
); } } FeedListItem.defaultProps = { images: {}, }; FeedListItem.propTypes = { _id: PropTypes.string.isRequired, title: PropTypes.string.isRequired, description: PropTypes.string, publicationDate: PropTypes.string, feedTitle: PropTypes.string, link: PropTypes.string, images: PropTypes.shape({ og: PropTypes.string }), onNavigation: PropTypes.func, pin: PropTypes.func, unpin: PropTypes.func, pinID: PropTypes.string, recent: PropTypes.bool, notes: PropTypes.number, highlights: PropTypes.number, tags: PropTypes.number, playOrPauseEpisode: PropTypes.func, playable: PropTypes.bool, inPlayer: PropTypes.bool, isPlaying: PropTypes.bool, }; export default FeedListItem; ================================================ FILE: app/src/components/Folder/DeleteModal.js ================================================ import React from 'react'; import PropTypes from 'prop-types'; import ReactModal from 'react-modal'; import { deleteFolder } from '../../api/folderAPI'; class DeleteModal extends React.Component { constructor(props) { super(props); this.resetState = { error: false, submitting: false, success: false, unfollow: false, }; this.state = { ...this.resetState, }; } closeModal = () => { this.setState({ ...this.resetState }); this.props.toggleModal(); }; handleSubmit = () => { this.setState({ submitting: true }); deleteFolder( this.props.dispatch, this.props.folder, this.state.unfollow, () => { this.setState({ success: true, submitting: false }); setTimeout(() => { this.props.onDelete(); this.closeModal(); }, 500); }, () => this.setState({ error: true, submitting: false }), ); }; render() { let buttonText = 'DELETE'; if (this.state.submitting) buttonText = 'Deleting...'; else if (this.state.success) buttonText = 'Deleted!'; return ( this.closeModal()} overlayClassName="modal-overlay" shouldCloseOnOverlayClick={true} >

Delete Folder

Are you sure you want to delete this folder?

{this.state.error && (
Oops, something went wrong. Please try again later.
)}
); } } DeleteModal.defaultProps = { isOpen: false, }; DeleteModal.propTypes = { isOpen: PropTypes.bool.isRequired, toggleModal: PropTypes.func.isRequired, folder: PropTypes.shape({ _id: PropTypes.string, rss: PropTypes.array, podcast: PropTypes.array, }), dispatch: PropTypes.func.isRequired, onDelete: PropTypes.func.isRequired, }; export default DeleteModal; ================================================ FILE: app/src/components/Folder/FeedToFolderModal.js ================================================ import React from 'react'; import PropTypes from 'prop-types'; import ReactModal from 'react-modal'; import { upsertFolder } from '../../api/folderAPI'; class FeedToFolderModal extends React.Component { constructor(props) { super(props); this.resetState = { name: '', errMsg: '', submitting: false, success: false, }; this.state = { ...this.resetState }; } submit = (e) => { e.preventDefault(); this.setState({ submitting: true, success: false, errMsg: '' }); if (!this.state.name) return this.setState({ submitting: false, errMsg: 'Your folder needs a name!', }); upsertFolder( this.props.dispatch, this.props.currFolderID, this.props.isRss, this.props.feedID, this.state.name, ({ data }) => { this.setState({ submitting: false, success: true }); setTimeout(() => { this.closeModal(); this.props.history.push(`/folders/${data._id}`); }, 1000); }, (err) => { console.log(err); // eslint-disable-line no-console this.setState({ errored: 'Oops, something went wrong. Please try again.', submitting: false, }); }, ); }; closeModal = () => { this.setState({ ...this.resetState }); this.props.toggleModal(); }; render() { let buttonText = 'Save'; if (this.state.submitting) buttonText = 'Submitting...'; else if (this.state.success) buttonText = 'Success!'; return (

Add feed to New Folder

this.setState({ name: e.target.value, errMsg: '', }) } placeholder="Folder name" type="text" value={this.state.name} />
{this.state.errMsg && (
{this.state.errMsg}
)}
); } } FeedToFolderModal.defaultProps = { isOpen: false, currFolderID: null, }; FeedToFolderModal.propTypes = { dispatch: PropTypes.func.isRequired, isOpen: PropTypes.bool, toggleModal: PropTypes.func.isRequired, feedID: PropTypes.string.isRequired, isRss: PropTypes.bool.isRequired, currFolderID: PropTypes.string, history: PropTypes.shape({ push: PropTypes.func.isRequired }).isRequired, }; export default FeedToFolderModal; ================================================ FILE: app/src/components/Folder/Folder.js ================================================ import React from 'react'; import PropTypes from 'prop-types'; import Popover from 'react-popover'; import { connect } from 'react-redux'; import FolderFeeds from './FolderFeeds'; import RenameModal from './RenameModal'; import DeleteModal from './DeleteModal'; import Loader from '../Loader'; import { ReactComponent as FolderIcon } from '../../images/icons/folder.svg'; import { ReactComponent as CircleIcon } from '../../images/icons/circle.svg'; import { ReactComponent as DotCircleIcon } from '../../images/icons/dot-circle.svg'; import { ReactComponent as SettingIcon } from '../../images/icons/settings.svg'; class Folder extends React.Component { constructor(props) { super(props); // Folder sort requires custom ranking feature enables in Stream this.state = { renameModal: false, deleteModal: false, menuPopover: false, sortBy: 'latest', }; } toggleMenuPopover = () => { this.setState((prevState) => ({ menuPopover: !prevState.menuPopover })); }; toggleRenameModal = () => { this.setState((prevState) => ({ renameModal: !prevState.renameModal, menuPopover: false, })); }; toggleDeleteModal = () => { this.setState((prevState) => ({ deleteModal: !prevState.deleteModal, menuPopover: false, })); }; setSortBy = (sortBy) => { this.setState({ sortBy, menuPopover: false }); }; menuPopover = () => (
this.setSortBy('latest')} > {this.state.sortBy === 'latest' ? : } Latest
this.setSortBy('oldest')} > {this.state.sortBy === 'oldest' ? : } Oldest
Rename
Delete
); render() { if (!this.props.folder._id) return ; return ( <>

{this.props.folder.name}

this.props.history.replace('/folders')} toggleModal={this.toggleDeleteModal} /> ); } } Folder.defaultProps = { folder: {}, }; Folder.propTypes = { dispatch: PropTypes.func.isRequired, history: PropTypes.shape({ replace: PropTypes.func.isRequired, }).isRequired, match: PropTypes.shape({ params: PropTypes.shape({ folderID: PropTypes.string, }).isRequired, }).isRequired, folder: PropTypes.shape({ _id: PropTypes.string, name: PropTypes.string, rss: PropTypes.array, podcast: PropTypes.array, }), }; const mapStateToProps = (state, ownProps) => ({ folder: state.folders && ownProps.match.params.folderID ? state.folders.find((f) => f._id === ownProps.match.params.folderID) : {}, }); export default connect(mapStateToProps)(Folder); ================================================ FILE: app/src/components/Folder/FolderFeeds.js ================================================ import PropTypes from 'prop-types'; import React from 'react'; import { Waypoint } from 'react-waypoint'; import { connect } from 'react-redux'; import ArticleListItem from '../ArticleListItem'; import EpisodeListItem from '../EpisodeListItem'; import Loader from '../Loader'; import { getFolderFeeds } from '../../api/folderAPI'; import { ReactComponent as LoaderIcon } from '../../images/loaders/default.svg'; class FolderFeeds extends React.Component { constructor(props) { super(props); this.resetState = { loading: true, error: false, page: 0, newFeeds: false, reachedEndOfFeed: false, feeds: [], }; this.state = { ...this.resetState }; } componentDidMount() { if (this.props.folder._id) { this.setState({ ...this.resetState }, () => this.getFeeds(this.props.folder._id), ); this.subscribeToStreamFeed( this.props.folder._id, this.props.folder.streamToken, ); } } componentDidUpdate(prevProps) { if ( prevProps.folder._id !== this.props.folder._id || prevProps.sortBy !== this.props.sortBy ) { this.setState({ ...this.resetState }, () => this.getFeeds(this.props.folder._id), ); this.subscribeToStreamFeed( this.props.folder._id, this.props.folder.streamToken, ); } } subscribeToStreamFeed(folderID, streamToken) { this.unsubscribeFromStreamFeed(); this.subscription = window.streamClient .feed('folder', folderID, streamToken) .subscribe(() => this.setState({ newFeeds: true })); } unsubscribeFromStreamFeed() { if (this.subscription) this.subscription.cancel(); } getFeeds = (folderID, newFeed = false) => { this.setState({ loading: true, error: false }); const params = { page: newFeed ? 0 : this.state.page, per_page: 10, sort_by: this.props.sortBy, }; getFolderFeeds(folderID, params) .then(({ data }) => { this.setState({ loading: false, error: false }); if (data.length === 0) this.setState({ reachedEndOfFeed: true }); else this.setState(({ feeds }) => ({ feeds: newFeed ? data : [...feeds, ...data], })); }) .catch((err) => { this.setState({ loading: false, error: true }); console.log(err); // eslint-disable-line no-console }); }; render() { const folder = this.props.folder; const feeds = this.state.feeds.map((feed) => { if (feed.type === 'articles') feed.pinID = this.props.pinnedArticles[feed._id] ? this.props.pinnedArticles[feed._id]._id : ''; else feed.pinID = this.props.pinnedEpisodes[feed._id] ? this.props.pinnedEpisodes[feed._id]._id : ''; return feed; }); if (this.state.loading && !feeds.length) return ; return (
{this.state.newFeeds && (
{ this.getFeeds(folder._id, true); this.setState({ newFeeds: false }); }} > New Feeds Available – Click to Refresh
)} {this.state.error && (

Something went wrong! please try again.

)} {!this.state.error && !feeds.length && (

We haven't found any feeds for this Folder yet :(

)} {!!feeds.length && ( <> {feeds.map((feed) => feed.type === 'articles' ? ( ) : ( ), )} {this.state.reachedEndOfFeed ? (

That's it! No more feeds here.

What, did you think that once you got all the way around, you'd just be back at the same place that you started? Sounds like some real round-feed thinking to me.

) : (
this.setState( (prevState) => ({ page: prevState.page + 1, }), () => this.getFeeds(folder._id), ) } />
)} )}
); } } FolderFeeds.propTypes = { dispatch: PropTypes.func.isRequired, sortBy: PropTypes.string, pinnedArticles: PropTypes.shape({}), pinnedEpisodes: PropTypes.shape({}), folder: PropTypes.shape({ _id: PropTypes.string, streamToken: PropTypes.string, }), }; const mapStateToProps = (state) => ({ pinnedArticles: state.pinnedArticles || {}, pinnedEpisodes: state.pinnedEpisodes || {}, }); export default connect(mapStateToProps)(FolderFeeds); ================================================ FILE: app/src/components/Folder/FolderPanel.js ================================================ import React from 'react'; import PropTypes from 'prop-types'; import { Img } from 'react-image'; import { connect } from 'react-redux'; import { Link } from 'react-router-dom'; import { withRouter } from 'react-router-dom'; import NewFolderModal from './NewFolderModal'; import getPlaceholderImageURL from '../../util/getPlaceholderImageURL'; import { ReactComponent as FolderIcon } from '../../images/icons/folder.svg'; import { ReactComponent as FolderIconOpen } from '../../images/icons/folder-open.svg'; import { ReactComponent as AddIcon } from '../../images/icons/add-green.svg'; /* Follows the same structure of Panel component */ class FolderPanel extends React.Component { constructor(props) { super(props); this.state = { modal: false, }; } toggleModal = () => { this.setState((prevState) => ({ modal: !prevState.modal })); }; render() { const params = this.props.match.params; return ( <>
Folders
{this.props.folders.reduce((result, folder) => { const open = folder._id === params.folderID; result.push( {open ? : }
{folder.name}
, ); if (open) { const folderView = !( params.rssFeedID || params.podcastID ); for (const f of folder.feeds) { const feedOpen = folderView || f._id === params.rssFeedID || f._id === params.podcastID; const isRss = f.categories.toLowerCase() === 'rss'; result.push( } src={[ f.images ? f.images.favicon : null, getPlaceholderImageURL(f._id), ]} />
{f.title}
{isRss ? 'RSS' : 'PODCAST'}
, ); } } return result; }, [])}
); } } FolderPanel.defaultProps = { folders: [], }; FolderPanel.propTypes = { folders: PropTypes.arrayOf(PropTypes.shape({})), match: PropTypes.shape({ params: PropTypes.shape({ folderID: PropTypes.string, rssFeedID: PropTypes.string, podcastID: PropTypes.string, }), }), }; const mapStateToProps = (state) => { if (!state.folders) return { folders: [] }; const folders = state.folders.map((folder) => { let feeds = [...folder.rss, ...folder.podcast]; if (state.aliases) { feeds = feeds.map((feed) => { if (state.aliases[feed._id]) feed.title = state.aliases[feed._id].alias; return feed; }); } feeds.sort((a, b) => a.title.localeCompare(b.title)); return { ...folder, feeds }; }); return { folders }; }; export default withRouter(connect(mapStateToProps)(FolderPanel)); ================================================ FILE: app/src/components/Folder/FolderPopover.js ================================================ import React from 'react'; import PropTypes from 'prop-types'; import Popover from 'react-popover'; import { connect } from 'react-redux'; import { withRouter } from 'react-router-dom'; import FeedToFolderModal from './FeedToFolderModal'; import Loader from '../Loader'; import { updateFolder } from '../../api/folderAPI'; import { ReactComponent as FolderIcon } from '../../images/icons/folder.svg'; import { ReactComponent as FolderSelectedIcon } from '../../images/icons/folder-select.svg'; class FolderPopover extends React.Component { constructor(props) { super(props); this.state = { folderPopover: false, folderModal: false, loading: false, }; } updateFolder = (targetId) => { if (this.state.loading) return; this.setState({ loading: true }); const currFolder = this.getCurrentFolder(); let data = {}; data[this.props.isRss ? 'rss' : 'podcast'] = this.props.feedID; if (currFolder === targetId) data = { ...data, action: 'remove' }; //todo Update url updateFolder( this.props.dispatch, targetId, data, () => { const url = this.props.history.location.pathname.replace( this.props.match.params.folderID, currFolder === targetId ? 'undefined' : targetId, ); this.props.history.replace(url); this.setState({ loading: false }); this.toggleFolderPopover(); }, () => this.setState({ loading: false }), ); }; toggleFolderModal = () => { this.setState((prevState) => ({ folderModal: !prevState.folderModal })); }; toggleFolderPopover = () => { this.setState((prevState) => ({ folderPopover: !prevState.folderPopover })); }; getCurrentFolder = () => { const folder = this.props.folders.find((folder) => this.isCurrentFolder(folder)); return folder && folder._id; }; isCurrentFolder = (folder) => { for (const feed of folder[this.props.isRss ? 'rss' : 'podcast']) if (this.props.feedID === feed._id) return true; return false; }; render() { const folderPopover = (
{this.props.folders.map((folder) => (
this.updateFolder(folder._id)} > {this.isCurrentFolder(folder) ? ( ) : ( )} {folder.name}
))}
Create new folder
); return ( <>
{this.state.loading ? ( ) : ( )}
); } } FolderPopover.defaultProps = { folders: [], }; FolderPopover.propTypes = { folders: PropTypes.array, isRss: PropTypes.bool, feedID: PropTypes.string, dispatch: PropTypes.func.isRequired, history: PropTypes.shape({ location: PropTypes.shape({ pathname: PropTypes.string.isRequired }).isRequired, replace: PropTypes.func.isRequired, }).isRequired, match: PropTypes.shape({ params: PropTypes.shape({ folderID: PropTypes.string }), }), }; const mapStateToProps = (state) => ({ folders: state.folders || [], }); export default withRouter(connect(mapStateToProps)(FolderPopover)); ================================================ FILE: app/src/components/Folder/IntroFolders.js ================================================ import React from 'react'; import NewFolderModal from './NewFolderModal'; import { ReactComponent as FolderNoteIcon } from '../../images/icons/foldernote.svg'; import { ReactComponent as AddIcon } from '../../images/icons/add.svg'; import { ReactComponent as NoteIcon } from '../../images/icons/note.svg'; class IntroFolders extends React.Component { constructor(props) { super(props); this.state = { modalIsOpen: false, }; } toggleModal = () => { this.setState((prevState) => ({ modalIsOpen: !prevState.modalIsOpen, })); }; render() { return (

Notes, highlights, tags and folders {' '} make it easy to organize, focus and recall the most interesting content you discover on Winds.

  • Tag articles and podcast episodes
  • Organize feeds in folders
  • Add notes and highlights
New Folder
); } } export default IntroFolders; ================================================ FILE: app/src/components/Folder/NewFolderModal.js ================================================ import React from 'react'; import PropTypes from 'prop-types'; import ReactModal from 'react-modal'; import { Img } from 'react-image'; import { connect } from 'react-redux'; import { withRouter } from 'react-router-dom'; import getPlaceholderImageURL from '../../util/getPlaceholderImageURL'; import SearchFeed from './SearchFeed'; import { newFolder } from '../../api/folderAPI'; import { ReactComponent as RemoveIcon } from '../../images/icons/remove.svg'; class NewFolderModal extends React.Component { constructor(props) { super(props); this.resetState = { feeds: [], name: '', errored: false, submitting: false, success: false, }; this.state = { ...this.resetState }; } submitNewFolder = (e) => { e.preventDefault(); if (!this.state.name) return this.setState({ errored: true }); this.setState({ errored: false, submitting: true, success: false }); const rss = this.state.feeds .filter((feed) => feed.type === 'rss') .map((feed) => feed._id); const podcast = this.state.feeds .filter((feed) => feed.type === 'podcast') .map((feed) => feed._id); newFolder( this.props.dispatch, { name: this.state.name, rss, podcast }, ({ data }) => { this.setState({ submitting: false, success: true }); setTimeout(() => { this.closeModal(); this.props.history.push(`/folders/${data._id}`); }, 1500); }, (err) => { console.log(err); // eslint-disable-line no-console this.setState({ errored: true, submitting: false }); }, ); }; closeModal = () => { this.setState({ ...this.resetState }); this.props.toggleModal(); }; addFeed = (feed) => { if (this.state.feeds.some((f) => f._id === feed._id)) return; this.setState({ feeds: [...this.state.feeds, { ...feed }] }); }; removeFeed = (index) => { const feeds = [...this.state.feeds]; feeds.splice(index, 1); this.setState({ feeds }); }; render() { let buttonText = 'Save'; if (this.state.submitting) buttonText = 'Submitting...'; else if (this.state.success) buttonText = 'Success!'; return (

Create a new folder

this.setState({ name: e.target.value, errored: false }) } placeholder="Folder name" type="text" value={this.state.name} />
Select at least one feed:
{this.state.feeds.map((result, i) => (
{result.title}
{result.type.toUpperCase()}
this.removeFeed(i)} />
))}
{this.state.errored && (
{this.state.name ? 'Oops, something went wrong. Please try again.' : 'Your folder needs a name!'}
)}
); } } NewFolderModal.defaultProps = { isOpen: false, }; NewFolderModal.propTypes = { history: PropTypes.shape({ push: PropTypes.func.isRequired }).isRequired, dispatch: PropTypes.func.isRequired, isOpen: PropTypes.bool, toggleModal: PropTypes.func.isRequired, }; export default connect()(withRouter(NewFolderModal)); ================================================ FILE: app/src/components/Folder/RenameModal.js ================================================ import React from 'react'; import PropTypes from 'prop-types'; import ReactModal from 'react-modal'; import { Img } from 'react-image'; import { renameFolder } from '../../api/folderAPI'; import saveIcon from '../../images/icons/save.svg'; import exitIcon from '../../images/buttons/exit.svg'; class RenameModal extends React.Component { constructor(props) { super(props); this.state = { error: false, submitting: false, success: false, }; } closeModal = () => { this.setState({ error: false, submitting: false, success: false }); this.props.toggleModal(); }; handleSubmit = (e) => { e.preventDefault(); const name = new FormData(e.target).get('name'); this.setState({ submitting: true }); renameFolder( this.props.dispatch, this.props.folderId, name, (res) => { if (res.data) { this.setState({ success: true, submitting: false }); setTimeout(() => this.closeModal(), 500); } }, () => this.setState({ error: true, submitting: false }), ); }; render() { let buttonText = 'SAVE'; if (this.state.submitting) buttonText = 'Submitting...'; else if (this.state.success) buttonText = 'Success!'; return ( this.closeModal()} overlayClassName="modal-overlay" shouldCloseOnOverlayClick={true} >

Rename Folder

this.closeModal()} src={exitIcon} />
{this.state.error && (
Oops, something went wrong. Please try again later.
)}
); } } RenameModal.defaultProps = { isOpen: false, }; RenameModal.propTypes = { isOpen: PropTypes.bool, toggleModal: PropTypes.func.isRequired, defVal: PropTypes.string, folderId: PropTypes.string, dispatch: PropTypes.func.isRequired, }; export default RenameModal; ================================================ FILE: app/src/components/Folder/SearchFeed.js ================================================ import React from 'react'; import PropTypes from 'prop-types'; import Algolia from 'algoliasearch'; import { Img } from 'react-image'; import { connect } from 'react-redux'; import config from '../../config'; import getPlaceholderImageURL from '../../util/getPlaceholderImageURL'; import { ReactComponent as SearchOpacityIcon } from '../../images/icons/search-opacity.svg'; import { ReactComponent as AlgoliaLogo } from '../../images/logos/powered-by-algolia.svg'; const client = Algolia(config.algolia.appId, config.algolia.searchKey); const index = client.initIndex(config.algolia.index); class SearchFeed extends React.Component { constructor(props) { super(props); this.state = { displayResults: false, query: '', results: [], selectedIndex: 0, }; this.inputElement = React.createRef(); } search = (query) => { index.search({ query }, (err, result) => { if (err) return console.log(err); // eslint-disable-line no-console const followed = this.props.followedFeeds; const hits = result.hits .sort((a, b) => (followed[a._id] ? (followed[b._id] ? 0 : -1) : 1)) .filter((r) => !this.props.folders[r._id]); this.setState({ results: hits.slice(0, 8) }); }); }; handleInputChange = (e) => { this.setState({ displayResults: !!e.target.value.trim(), query: e.target.value, selectedIndex: 0, }); this.search(e.target.value); }; handleKeyDown = (e) => { if (e.keyCode === 27) { e.preventDefault(); if (this.state.query) e.stopPropagation(); this.setState({ query: '', results: [], displayResults: false }); } else if (e.keyCode === 40) { e.preventDefault(); let newPos = this.state.selectedIndex + 1; if (newPos > 4) newPos = 4; this.setState({ selectedIndex: newPos }); } else if (e.keyCode === 38) { e.preventDefault(); let newPos = this.state.selectedIndex - 1; if (newPos < 0) newPos = 0; this.setState({ selectedIndex: newPos }); } else if (e.keyCode === 13) { e.preventDefault(); if (!this.state.results.length) return; this.props.addFeed(this.state.results[this.state.selectedIndex]); this.inputElement.current.blur(); this.setState({ displayResults: false }); } }; render() { return (
{ if (!!this.state.results.length !== 0) this.setState({ displayResults: true }); }} onKeyDown={this.handleKeyDown} placeholder="Search Winds Feeds..." ref={this.inputElement} type="text" value={this.state.query} />
{this.state.displayResults && ( <>
this.setState({ displayResults: false })} />
{this.state.results.length ? ( this.state.results.map((result, i) => (
{ this.props.addFeed(result); this.inputElement.current.blur(); this.setState({ displayResults: false }); }} >
{result.title}
{result.type.toUpperCase()}
)) ) : (
No search results found...
)}
)}
); } } SearchFeed.propTypes = { addFeed: PropTypes.func, folders: PropTypes.shape({}), followedFeeds: PropTypes.shape({}), }; const mapStateToProps = (state) => ({ folders: (state.folders || []).reduce((acc, f) => { f.rss.map((r) => (acc[r._id] = true)); f.podcast.map((p) => (acc[p._id] = true)); return acc; }, {}), followedFeeds: { ...(state.followedRssFeeds || {}), ...(state.followedPodcasts || {}), }, }); export default connect(mapStateToProps)(SearchFeed); ================================================ FILE: app/src/components/Header.js ================================================ // import config from '../config'; import UserProfileSettingsDrawer from './UserProfileSettingsDrawer'; import octocatDarkIcon from '../images/logos/octocat-dark.svg'; import backIcon from '../images/icons/back.svg'; import forwardIcon from '../images/icons/forward.svg'; import githubIcon from '../images/Octocat.png'; import homeIcon from '../images/icons/home.svg'; import refreshIcon from '../images/icons/refresh-black.svg'; import addIcon from '../images/icons/add.svg'; import { Link, withRouter } from 'react-router-dom'; import React, { Component } from 'react'; import Avatar from './Avatar'; import { Img } from 'react-image'; import PropTypes from 'prop-types'; import SearchBar from './SearchBar'; import { connect } from 'react-redux'; import Popover from 'react-popover'; import AddRSSModal from './AddRSSModal'; import AddPodcastModal from './AddPodcastModal'; import AddOPMLModal from './AddOPMLModal'; import fetch from '../util/fetch'; class Header extends Component { constructor(props) { super(props); this.state = { editProfileDrawerIsOpen: false, githubPopoverIsOpen: false, newContentPopoverIsOpen: false, newPodcastModalIsOpen: false, newRSSModalIsOpen: false, }; } toggleGithubPopover = (e) => { e.preventDefault(); this.setState((prevState) => ({ githubPopoverIsOpen: !prevState.githubPopoverIsOpen, })); }; toggleNewContentPopover = (e) => { e.preventDefault(); this.setState((prevState) => ({ newContentPopoverIsOpen: !prevState.newContentPopoverIsOpen, })); }; toggleNewRSSModal = () => { this.setState((prevState) => ({ newContentPopoverIsOpen: false, newRSSModalIsOpen: !prevState.newRSSModalIsOpen, })); }; toggleNewPodcastModal = () => { this.setState((prevState) => ({ newContentPopoverIsOpen: false, newPodcastModalIsOpen: !prevState.newPodcastModalIsOpen, })); }; toggleOPMLModal = () => { this.setState((prevState) => ({ newContentPopoverIsOpen: false, addOPMLModalIsOpen: !prevState.addOPMLModalIsOpen, })); }; toggleProfilePopover = () => { this.setState((prevState) => ({ profilePopoverIsOpen: !prevState.profilePopoverIsOpen, })); }; closeProfilePopover = () => { this.setState({ profilePopoverIsOpen: false }); }; closeDrawer = () => { this.setState({ editProfileDrawerIsOpen: false }); }; openDrawer = () => { this.setState({ editProfileDrawerIsOpen: true }); }; downloadOPML = () => { fetch('GET', '/opml/download') .then((res) => { if (res.data) { const link = document.createElement('a'); const blob = new Blob([res.data], { type: 'text/xml' }); link.href = URL.createObjectURL(blob); link.download = 'export.xml'; link.click(); } }) .catch((err) => { window.alert(JSON.stringify(err)); console.log(err); // eslint-disable-line no-console }); }; render() { const profilePopover = (
{this.props.user.name} {this.props.user.username}
{this.props.user.admin && ( admin section )}
{ localStorage.clear(); window.location.reload(); }} > Sign out
); const newContentPopover = (
New Podcast
New RSS
Add OMPL
); const githubPopover = ( ); return (
{/* */}
Notice: The hosted version of Winds will be shut down on 31/10/2021.

You can export your RSS + Podcast data in OPML format by CLICKING HERE.
{ window.location.reload(); }} >
New
); } } Header.propTypes = { history: PropTypes.shape({ goBack: PropTypes.func.isRequired, goForward: PropTypes.func.isRequired, }), user: PropTypes.shape({ _id: PropTypes.string, admin: PropTypes.bool, name: PropTypes.string, username: PropTypes.string, gravatar: PropTypes.string, }), }; const mapStateToProps = (state) => ({ user: state.user, }); export default connect(mapStateToProps)(withRouter(Header)); ================================================ FILE: app/src/components/HtmlRender.js ================================================ import React from 'react'; import PropTypes from 'prop-types'; import ReactHtmlParser from 'react-html-parser'; import { connect } from 'react-redux'; import rangy from 'rangy'; import 'rangy/lib/rangy-classapplier'; import 'rangy/lib/rangy-highlighter'; import 'rangy/lib/rangy-selectionsaverestore'; import 'rangy/lib/rangy-textrange'; import NoteInput from './Notes/NoteInput'; import HighlightMenu from './Notes/HighlightMenu'; import { newNote, deleteNote, updateNote } from '../api/noteAPI'; import { ReactComponent as NoteIcon } from '../images/icons/note.svg'; import { ReactComponent as NoteGreenIcon } from '../images/icons/note-green.svg'; import { ReactComponent as Highlight } from '../images/icons/highlight.svg'; import { ReactComponent as HighlightRemove } from '../images/icons/highlight-remove.svg'; class HtmlRender extends React.Component { constructor(props) { super(props); this.resetState = { isHighlight: false, isNote: false, highlighted: false, noteText: '', }; this.state = { ...this.resetState, html: [], }; this.wrapper = React.createRef(); } componentDidMount() { rangy.init(); this.highlighter = rangy.createHighlighter(); this.highlighter.addClassApplier(rangy.createClassApplier('highlight')); this.highlighter.addClassApplier(rangy.createClassApplier('highlight-note')); window.highlighter = this.highlighter; this.setHtml(); this.wrapper.current.addEventListener('mouseup', this.onMouseUp); this.wrapper.current.addEventListener('click', this.onClick); } componentDidUpdate(prevProps) { if ( this.props.content !== prevProps.content || this.props.notes !== prevProps.notes ) this.setHtml(); } componentWillUnmount() { this.wrapper.current.removeEventListener('mouseup', this.onMouseUp); this.wrapper.current.removeEventListener('click', this.onClick); } setHtml = () => { if (this.props.content) this.setState({ html: ReactHtmlParser(this.props.content) }, () => { const deserialize = this.props.notes.reduce( (acc, h, i) => acc.concat( `|${h.start}$${h.end}$${i}$${ h.text ? 'highlight-note' : 'highlight' }$feed-content`, ), 'type:textContent', ); this.highlighter.removeAllHighlights(); this.highlighter.deserialize(deserialize); this.forceUpdate(); }); }; saveSelection = () => { if (this.savedSel) rangy.removeMarkers(this.savedSel); this.savedSel = rangy.saveSelection(); }; restoreSelection = () => { if (this.savedSel) rangy.restoreSelection(this.savedSel); }; close = () => { this.setState({ ...this.resetState }); rangy.getSelection().removeAllRanges(); }; getHighlightObj = (element) => { let range = this.highlighter.getHighlightForElement(element); if (!range) return null; range = range.characterRange; return this.props.notes.find( (h) => h.start === range.start && h.end === range.end, ); }; onClick = (e) => { const selection = rangy.getSelection().nativeSelection; if (this.state.isHighlight && !selection.rangeCount) this.setState({ ...this.resetState }); const className = e.target.getAttribute('class') || ''; if (className.includes('highlight')) { const highlightRange = rangy.createRange(); highlightRange.selectNode(e.target); const bound = highlightRange.nativeRange.getBoundingClientRect(); this.saveSelection(); const highlight = this.getHighlightObj(e.target); const isNote = className.includes('highlight-note'); this.setState({ rangeBounds: { top: bound.top, left: bound.left, height: bound.height, width: bound.width, }, isHighlight: !isNote, highlighted: !isNote, isNote: isNote, noteText: highlight ? highlight.text : '', }); } }; onMouseUp = () => { const selection = rangy.getSelection().nativeSelection; const range = selection.rangeCount && selection.getRangeAt(0); let bound = range && range.getBoundingClientRect(); if (range && range.commonAncestorContainer.className === 'note-input') return; else if (range && !range.collapsed) { this.saveSelection(); this.setState({ rangeBounds: { top: bound.top, left: bound.left, height: bound.height, width: bound.width, }, isHighlight: true, isNote: false, highlighted: false, noteText: '', }); } else { this.setState({ ...this.resetState }); } }; addHighlight = () => { this.restoreSelection(); const node = rangy.getSelection().focusNode.parentElement; const highlight = this.getHighlightObj(node); const charRange = rangy .getSelection() .getRangeAt(0) .toCharacterRange(this.wrapper.current); if ( highlight && highlight.start <= charRange.start && this.state.isNote && (this.state.highlighted || this.state.noteText) ) { updateNote(this.props.dispatch, highlight._id, this.state.noteText); } else { const highlighted = this.highlighter.highlightSelection( this.state.noteText ? 'highlight-note' : 'highlight', { containerElementId: 'feed-content', exclusive: false }, ); if (!highlighted.length) return this.close(); const range = highlighted[0].characterRange; newNote( this.props.dispatch, this.props.type, this.props.id, range.start, range.end, this.state.noteText, ); } this.setState({ ...this.resetState }); rangy.getSelection().removeAllRanges(); }; removeHighlight = () => { this.restoreSelection(); const removed = this.highlighter.unhighlightSelection(); if (!removed.length) return this.close(); const range = removed[0].characterRange; const highlight = this.props.notes.find( (h) => h.start === range.start && h.end === range.end, ); deleteNote(this.props.dispatch, this.props.id, highlight._id); this.setState({ ...this.resetState }); rangy.getSelection().removeAllRanges(); }; renderNoteIcons = () => { const wrapper = this.wrapper.current; if (!wrapper) return null; const wrapperTop = wrapper.getBoundingClientRect().top; return this.highlighter.highlights .filter((h) => h.classApplier.className === 'highlight-note') .map((h) => { const range = rangy.createRange(); range.selectCharacters( this.wrapper.current, h.characterRange.start, h.characterRange.end, ); const bound = range.nativeRange.getBoundingClientRect(); return ( ); }); }; render() { const wrapperBounds = this.wrapper.current && this.wrapper.current.getBoundingClientRect(); return (
{this.state.html}
{this.renderNoteIcons()} this.setState({ noteText })} /> {this.state.highlighted ? ( ) : ( )} this.setState({ isNote: true, isHighlight: false }) } />
); } } HtmlRender.propTypes = { dispatch: PropTypes.func.isRequired, content: PropTypes.string, type: PropTypes.string.isRequired, id: PropTypes.string, notes: PropTypes.array, }; const mapStateToProps = (state, ownParams) => ({ notes: (state.notes && state.notes[ownParams.id]) || [], }); export default connect(mapStateToProps)(HtmlRender); ================================================ FILE: app/src/components/Loader.js ================================================ import React from 'react'; import PropTypes from 'prop-types'; import { Img } from 'react-image'; import LoaderIcon from '../images/loaders/default.svg'; const Loader = ({ defaultLoader, radius }) => defaultLoader ? (
) : (
); Loader.defaultProps = { defaultLoader: true, radius: 16, }; Loader.propTypes = { defaultLoader: PropTypes.bool, radius: PropTypes.number, }; export default Loader; ================================================ FILE: app/src/components/MediaCard.js ================================================ import { Link } from 'react-router-dom'; import PropTypes from 'prop-types'; import React from 'react'; const MediaCard = (props) => { let icon; if (props.type === 'share') { icon = 'retweet'; } else if (props.type === 'episode') { icon = 'play'; } else if (props.type === 'article') { icon = 'rss'; } return (
{props.author}
{props.title}
); }; MediaCard.propTypes = { author: PropTypes.string, image: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string), PropTypes.string]), link: PropTypes.string, title: PropTypes.string, type: PropTypes.string.isRequired, }; export default MediaCard; ================================================ FILE: app/src/components/Notes/HighlightMenu.js ================================================ import React from 'react'; import PropTypes from 'prop-types'; class HighlightMenu extends React.Component { constructor(props) { super(props); this.state = { init: true, w: 0, h: 0, }; } refCallback = (element) => { if (!element) return; const bounds = element.getBoundingClientRect(); this.setState({ w: bounds.width, h: bounds.height, init: false }); }; render() { const bounds = this.props.bounds ? this.props.bounds : { top: 0, left: 0, width: 0, height: 0 }; const wrapperBounds = this.props.wrapperBounds ? this.props.wrapperBounds : { top: 0, left: 0, width: 0 }; let top = bounds.top - wrapperBounds.top - this.state.h - 10; const reverseArrow = top <= 0; if (top <= 0) top = bounds.height - wrapperBounds.top + bounds.top + 10; let left = bounds.left + bounds.width / 2 - wrapperBounds.left - this.state.w / 2; if (left <= 0) left = 2; else if (left + this.state.w > wrapperBounds.width) left = wrapperBounds.width - this.state.w - 10; return (
{this.props.children}
); } } HighlightMenu.defaultProps = { active: false, }; HighlightMenu.propTypes = { children: PropTypes.node, active: PropTypes.bool, bounds: PropTypes.shape({}), wrapperBounds: PropTypes.shape({}), }; export default HighlightMenu; ================================================ FILE: app/src/components/Notes/NoteInput.js ================================================ import React from 'react'; import PropTypes from 'prop-types'; import { ReactComponent as NoteIcon } from '../../images/icons/note.svg'; class NoteInput extends React.Component { close = (e) => { e.preventDefault(); e.stopPropagation(); this.props.close(); }; handleDelete = (e) => { e.preventDefault(); e.stopPropagation(); this.props.deleteNote(); }; handleSubmit = (e) => { e.preventDefault(); e.stopPropagation(); this.props.addNote(); }; render() { return (
{ if (e.keyCode === 27) { e.stopPropagation(); this.props.close(); } }} onSubmit={this.handleSubmit} >

Notes