diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml new file mode 100644 index 00000000..c30881ec --- /dev/null +++ b/.github/workflows/publish.yaml @@ -0,0 +1,64 @@ +# This is a basic workflow to help you get started with Actions + +name: Build & Deploy to Dev + +# Controls when the action will run. Triggers the workflow on push or pull request +# events but only for the master branch +on: + push: + branches: [master, feat/k8s] + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "build" + build-and-deploy: + # The type of runner that the job will run on + runs-on: ubuntu-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + - name: Checkout sources + uses: actions/checkout@v3 + + - name: Cache skaffold image builds & config + uses: actions/cache@v2 + with: + path: ~/.skaffold/ + key: skaffold + restore-keys: | + skaffold + + - name: Config git bot user + run: | + git config --global user.email "github-actions[bot]@users.noreply.github.com" + git config --global user.name "github-actions[bot]" + + - name: Build with Skaffold + uses: hiberbee/github-action-skaffold@latest + env: + SANITY_READ_DATA_TOKEN: ${{ secrets.SANITY_READ_DATA_TOKEN }} + SANITY_API_TOKEN: ${{ secrets.SANITY_API_TOKEN }} + SANITY_PREVIEW_SECRET: ${{ secrets.SANITY_PREVIEW_SECRET }} + with: + + command: build + repository: registry.iteam.services + digest-source: tag + + - name: Render output + uses: hiberbee/github-action-skaffold@latest + env: + SANITY_READ_DATA_TOKEN: ${{ secrets.SANITY_READ_DATA_TOKEN }} + SANITY_API_TOKEN: ${{ secrets.SANITY_API_TOKEN }} + SANITY_PREVIEW_SECRET: ${{ secrets.SANITY_PREVIEW_SECRET }} + with: + command: render --output deploy/latest.yaml + cache-file: '' + repository: registry.iteam.services + digest-source: tag + + - name: Push new manifest to FluxCD + run: | + git add deploy/latest.yaml + git commit --amend --no-edit + git push diff --git a/.gitignore b/.gitignore index 496ee2ca..a7dfb30e 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -.DS_Store \ No newline at end of file +.DS_Store +.env \ No newline at end of file diff --git a/client/Dockerfile b/client/Dockerfile new file mode 100644 index 00000000..b11abd38 --- /dev/null +++ b/client/Dockerfile @@ -0,0 +1,53 @@ +# Install dependencies only when needed +FROM node:16-alpine AS deps +# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed. +RUN apk add --no-cache libc6-compat autoconf automake build-base curl git libtool make nodejs npm pkgconf nasm yasm optipng +WORKDIR /app +COPY package.json yarn.lock ./ +RUN yarn install --frozen-lockfile + +# Rebuild the source code only when needed +FROM node:16-alpine AS builder +WORKDIR /app +COPY . . +COPY --from=deps /app/node_modules ./node_modules + +ARG SANITY_READ_DATA_TOKEN +ARG SANITY_API_TOKEN +ARG SANITY_PREVIEW_SECRET + +ENV SANITY_READ_DATA_TOKEN $SANITY_READ_DATA_TOKEN +ENV SANITY_API_TOKEN $SANITY_API_TOKEN +ENV SANITY_PREVIEW_SECRET $SANITY_PREVIEW_SECRET + + +RUN yarn build && yarn install --production --ignore-scripts --prefer-offline + +# Production image, copy all the files and run next +FROM node:16-alpine AS runner +WORKDIR /app + +ENV NODE_ENV production + +RUN addgroup -g 1001 -S nodejs +RUN adduser -S nextjs -u 1001 + +# You only need to copy next.config.js if you are NOT using the default configuration +# COPY --from=builder /app/next.config.js ./ +COPY --from=builder /app/public ./public +COPY --from=builder --chown=nextjs:nodejs /app/.next ./.next +COPY --from=builder /app/node_modules ./node_modules +COPY --from=builder /app/package.json ./package.json + +USER nextjs + +EXPOSE 3000 + +ENV PORT 3000 + +# Next.js collects completely anonymous telemetry data about general usage. +# Learn more here: https://nextjs.org/telemetry +# Uncomment the following line in case you want to disable telemetry. +ENV NEXT_TELEMETRY_DISABLED 1 + +CMD ["node_modules/.bin/next", "start"] \ No newline at end of file diff --git a/client/package.json b/client/package.json index 56c42d61..e9c8e2c5 100644 --- a/client/package.json +++ b/client/package.json @@ -18,7 +18,6 @@ "google-libphonenumber": "^3.2.24", "google-map-react": "^1.1.7", "gray-matter": "^4.0.3", - "imagemin-optipng": "^8.0.0", "imagemin-svgo": "^9.0.0", "lodash": "^4.17.15", "lru-cache": "^6.0.0", diff --git a/client/photos-used.txt b/client/photos-used.txt deleted file mode 100644 index 6a5ad5c1..00000000 --- a/client/photos-used.txt +++ /dev/null @@ -1 +0,0 @@ -https://unsplash.com/photos/wR11KBaB86U (https://unsplash.com/@paralitik) diff --git a/client/src/components/HubspotForm/index.js b/client/src/components/HubspotForm/index.js index b40cac85..f5ead8b7 100644 --- a/client/src/components/HubspotForm/index.js +++ b/client/src/components/HubspotForm/index.js @@ -1,7 +1,7 @@ -import React from "react" +import React, { useState } from "react" import styled from "styled-components" -import { Title, Box } from "../Core" +import { Title, Box, Button } from "../Core" import { device } from "../../utils" @@ -21,13 +21,15 @@ const HubspotForm = ({ value, title = "Boka intromöte direkt i kalendern", }) => { + const [formVisible, setFormVisible] = useState(false) React.useEffect(() => { + if (!formVisible) return const script = document.createElement("script") script.src = "https://static.hsappstatic.net/MeetingsEmbed/ex/MeetingsEmbedCode.js" script.async = true document.body.appendChild(script) - }, []) + }, [formVisible]) return ( {title} - -
+ { formVisible ? (<> + +
+ +) : ( + +)} ) } diff --git a/client/src/components/PageWrapper/PageWrapper.js b/client/src/components/PageWrapper/PageWrapper.js index ab83fb3d..34fbd115 100644 --- a/client/src/components/PageWrapper/PageWrapper.js +++ b/client/src/components/PageWrapper/PageWrapper.js @@ -1,6 +1,6 @@ -import React, { useEffect, useContext } from "react" +import React, { useEffect, useContext } from 'react' -import GlobalContext from "../../context/GlobalContext" +import GlobalContext from '../../context/GlobalContext' const PageWrapper = ({ children, headerDark = false, footerDark = false }) => { const gContext = useContext(GlobalContext) diff --git a/client/src/context/GlobalContext.js b/client/src/context/GlobalContext.js index 3de788ed..6f5fe9b2 100644 --- a/client/src/context/GlobalContext.js +++ b/client/src/context/GlobalContext.js @@ -1,5 +1,4 @@ import React, { useState } from "react" -import { Helmet } from "react-helmet" const GlobalContext = React.createContext() @@ -69,15 +68,6 @@ const GlobalProvider = ({ children }) => { decCartTotal, }} > - - - {children} ) diff --git a/client/src/data/tekniken.json b/client/src/data/tekniken.json new file mode 100644 index 00000000..a07c183b --- /dev/null +++ b/client/src/data/tekniken.json @@ -0,0 +1,17152 @@ +{ + "db": [ + { + "meta": { "exported_on": 1448480046000, "version": "003" }, + "data": { + "posts": [ + { + "id": 8, + "title": "Sign out", + "slug": "sign-out", + "markdown": null, + "html": null, + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": null, + "author_id": 3, + "created_at": 1079373660000, + "created_by": 3, + "updated_at": 1079373660000, + "updated_by": 3, + "published_at": 1079373660000, + "published_by": 3 + }, + { + "id": 57, + "title": "Pagineringskontroll i .NET 3.5", + "slug": "pagineringskontroll-i-net-35", + "markdown": "\r\n\r\n\r\nASP.NET har en hel del bra kontroller, men konstigt nog ingen för att göra paginering. Man har därför varit tvungen att välja mellan två alternativ. Antingen en DataGrid, vilken har inbyggd pagingering, men är en väldigt stor kontroll som dessutom skriver ut en väldig massa html-markup som man inte har kontroll över. Eller så använder man en Repeater där man har full kontroll över hur markupen ser ut, men i gengäld måste skapa pagineringen helt själv.\r\n\r\n\r\nMed .NET 3.5 så kommer det emellertid finnas två nya kontroller som kommer att erbjuda ett mellanting mellan dessa två lösningar. Med ListView är det möjligt att få avancerad funktionalitet som finns i DataGrid men samtidigt ha full kontroll över vilken markup som skrivs ut. Med DataPager så erbjuds det en inbyggd kontroll för att sköta paginering. \r\n\r\n\r\nMer info på http://www.west-wind.com/WebLog/posts/127340.aspx\r\n\r\n", + "html": "


ASP.NET har en hel del bra kontroller, men konstigt nog ingen för att göra paginering. Man har därför varit tvungen att välja mellan två alternativ. Antingen en DataGrid, vilken har inbyggd pagingering, men är en väldigt stor kontroll som dessutom skriver ut en väldig massa html-markup som man inte har kontroll över. Eller så använder man en Repeater där man har full kontroll över hur markupen ser ut, men i gengäld måste skapa pagineringen helt själv.


Med .NET 3.5 så kommer det emellertid finnas två nya kontroller som kommer att erbjuda ett mellanting mellan dessa två lösningar. Med ListView är det möjligt att få avancerad funktionalitet som finns i DataGrid men samtidigt ha full kontroll över vilken markup som skrivs ut. Med DataPager så erbjuds det en inbyggd kontroll för att sköta paginering.


Mer info på http://www.west-wind.com/WebLog/posts/127340.aspx


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1086, + "created_at": 1187222400000, + "created_by": 1086, + "updated_at": 1187222400000, + "updated_by": 1086, + "published_at": 1187222400000, + "published_by": 1086 + }, + { + "id": 58, + "title": "Hur man aktiverar debugging i Vista och Visual Studio 2008", + "slug": "hur-man-aktiverar-debugging-i-vista-och-visual-studio-2008", + "markdown": "\r\n\r\n\r\nOm du får felet ”Strong name validation failed” när du försöker debugga en ASP.NET applikation i Vista med Visual Studio 2008 Beta 2 är tricket att aktivera Windows Authentication för applikationen du debuggar.\r\n\r\n\r\nEventuellt behöver du också följa följande instruktion för att signera iisresolver.dll i Visual Studio:http://weblogs.asp.net/dwahlin/archive/2007/08/06/fixing-a-vs-net-2008-asp-net-debugging-issue-on-vista-quot-strong-name-validation-failed-quot.aspx\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/orcas.jpg)", + "html": "


Om du får felet ”Strong name validation failed” när du försöker debugga en ASP.NET applikation i Vista med Visual Studio 2008 Beta 2 är tricket att aktivera Windows Authentication för applikationen du debuggar.


Eventuellt behöver du också följa följande instruktion för att signera iisresolver.dll i Visual Studio:
http://weblogs.asp.net/dwahlin/archive/2007/08/06/fixing-a-vs-net-2008-asp-net-debugging-issue-on-vista-quot-strong-name-validation-failed-quot.aspx


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1087, + "created_at": 1187222400000, + "created_by": 1087, + "updated_at": 1187222400000, + "updated_by": 1087, + "published_at": 1187222400000, + "published_by": 1087 + }, + { + "id": 61, + "title": "Bästa sättet att använda genomskinliga bilder på webben", + "slug": "basta-sattet-att-anvanda-genomskinliga-bilder-pa-webben", + "markdown": "\r\n\r\n\r\nUppdatering: Ett fel hade letat sig in i koden nedan. Nu är den fungerande. Exempel finns här:\r\n\r\n\r\n \r\n\r\nGenom åren har man använt olika tricks för att använda alpha transparenta png bilder på webben. Dessa används t ex för att skapa halvgenomskinliga skuggor eller logotyper med kantutjämningar.\r\n\r\n\r\n\r\n \r\n\r\n\r\nKlistra in följande rader i din kod och ange class=”alphaImage” eller class=”alphaBackground” i din layout så sköter sig resten själv. Firefox och Internet Explorer 7 har inbyggt stöd för detta och följande ”hack” är till för att IE 5.5 och IE 6.0 ska visa bilderna korrekt. Koden fungerar både bra för vanliga bilder men också för bakgrundsbilder i tabellceller (ändra till runtimeStyle.backgroundImage om du hellre använder  ”div style=”background-image” istället).  \r\n\r\n\r\n \r\n\r\n\r\nLäs mer om detta på : http://www.stilbuero.de/2006/03/15/png-alpha-transparency-fast-and-easy/\r\n\r\n\r\n \r\n\r\n\r\nDet finurliga med koden är att den anges på ett ställe och till skillnad från htc-metoden som liknade denna i utförandet går denna snabbare och genererar inget blinkande medan htc filen laddas.\r\n\r\n\r\n \r\n\r\n\r\n\r\n        \r\n\r\n\r\n\r\n\r\n        \r\n\r\n\r\n", + "html": "



Uppdatering: Ett fel hade letat sig in i koden nedan. Nu är den fungerande. Exempel finns här:


 


Genom åren har man använt olika tricks för att använda alpha transparenta png bilder på webben. Dessa används t ex för att skapa halvgenomskinliga skuggor eller logotyper med kantutjämningar.




 


Klistra in följande rader i din kod och ange class=”alphaImage” eller class=”alphaBackground” i din layout så sköter sig resten själv. Firefox och Internet Explorer 7 har inbyggt stöd för detta och följande ”hack” är till för att IE 5.5 och IE 6.0 ska visa bilderna korrekt. Koden fungerar både bra för vanliga bilder men också för bakgrundsbilder i tabellceller (ändra till runtimeStyle.backgroundImage om du hellre använder  ”div style=”background-image” istället).  



 


Läs mer om detta på : http://www.stilbuero.de/2006/03/15/png-alpha-transparency-fast-and-easy/



 


Det finurliga med koden är att den anges på ett ställe och till skillnad från htc-metoden som liknade denna i utförandet går denna snabbare och genererar inget blinkande medan htc filen laddas.



 



       
<!-- Additional IE/Win specific style sheet (Conditional Comments) -->



        <!--[if lte IE 6]>



        <style type=\"text/css\" media=\"projection, screen\">



           



            * .alphaBackground {



                         background: expression(



                        this.runtimeStyle.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\"' + this.background + '\", sizingMethod=\"scale\")',



                         this.runtimeStyle.background = ''



                         );



}




 



            * .alphaImage {



                background-image: expression(



                         this.runtimeStyle.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\"' + this.currentStyle.backgroundImage.split('\\\"')[1] + '\", sizingMethod=\"image\")',



                        this.runtimeStyle.backgroundImage
= 'none',



                        this.src = '/images/indent.gif' /* byt ut denna till din egen transparanta gif bild */



                );



            }



        </style><![endif]-->


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1087, + "created_at": 1187024280000, + "created_by": 1087, + "updated_at": 1187024280000, + "updated_by": 1087, + "published_at": 1187024280000, + "published_by": 1087 + }, + { + "id": 65, + "title": "Debugga i Vista", + "slug": "debugga-i-vista", + "markdown": "\r\n\r\n\r\nVisual Studio 2005 och Vista fungerar inte alltid helt OK tillsammans. Bland annat så är det väldigt svårt att få debuggern att fungera med ASP.NET. Den här bloggen beskriver dock hur man skall göra för att komma igång:\r\n\r\n\r\n\r\nhttp://mvolo.com/blogs/serverside/archive/2006/12/28/Fix-problems-with-Visual-Studio-F5-debugging-of-ASP.NET-applications-on-IIS7-Vista.aspx\r\n\r\n\r\n", + "html": "


Visual Studio 2005 och Vista fungerar inte alltid helt OK tillsammans. Bland annat så är det väldigt svårt att få debuggern att fungera med ASP.NET. Den här bloggen beskriver dock hur man skall göra för att komma igång:



http://mvolo.com/blogs/serverside/archive/2006/12/28/Fix-problems-with-Visual-Studio-F5-debugging-of-ASP.NET-applications-on-IIS7-Vista.aspx


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1086, + "created_at": 1184256660000, + "created_by": 1086, + "updated_at": 1184256660000, + "updated_by": 1086, + "published_at": 1184256660000, + "published_by": 1086 + }, + { + "id": 72, + "title": "Hur man stänger av slumpmässiga siffror i Words XML-format", + "slug": "hur-man-stanger-av-slumpmassiga-siffror-i-words-xml-format", + "markdown": "\r\n\r\nVi har tidigare skrivit om hur nya versioner av Word lägger till slumptal i XML-taggarna för att ”förbättra sammanslagningsprecisionen”. (Det handlar enligt vissa källor egentligen inte alls om några slumptal, utan ett tal som kan spåras tillbaka till en viss användare och dator, vilket skulle göra sammanslagning av dokument lättare). De här slumptalen kan förstöra rätt mycket för en applikation som läser in Word-xml. I Word 2007 är inställningen för att stänga av den här funktionen ännu lite svårare att hitta än i Word 2003.\r\n\r\n\r\n\r\n1) Klicka på Office-knappen (längst upp till vänster)2) Öppna Word-alternativ(resten är på engelska idag, eftersom jag inte har någon svensk version av Word :-) )3) Öppna Trust Center och sedan Trust Center Settings4) Öppna Privacy Options5) Kryssa ur rutan Store random number to improve Combine accuracy\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/wordbutton.png)", + "html": "


Vi har tidigare skrivit om hur nya versioner av Word lägger till slumptal i XML-taggarna för att ”förbättra sammanslagningsprecisionen”. (Det handlar enligt vissa källor egentligen inte alls om några slumptal, utan ett tal som kan spåras tillbaka till en viss användare och dator, vilket skulle göra sammanslagning av dokument lättare). De här slumptalen kan förstöra rätt mycket för en applikation som läser in Word-xml. I Word 2007 är inställningen för att stänga av den här funktionen ännu lite svårare att hitta än i Word 2003.





1) Klicka på Office-knappen (längst upp till vänster)
2) Öppna Word-alternativ
(resten är på engelska idag, eftersom jag inte har någon svensk version av Word :-) )
3) Öppna Trust Center och sedan Trust Center Settings
4) Öppna Privacy Options
5) Kryssa ur rutan Store random number to improve Combine accuracy










", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1183383480000, + "created_by": 6, + "updated_at": 1183383480000, + "updated_by": 6, + "published_at": 1183383480000, + "published_by": 6 + }, + { + "id": 76, + "title": "TortoiseSVN i Visual Studio 2008", + "slug": "tortoisesvn-i-visual-studio-2008", + "markdown": "\r\n\r\n\r\nFör att integrera källkodssystemet Subversion in i Visual Studio kan man använda sig av AnkhSVN. Tyvärr fungerar inte detta verktyg i Visual Studio 2008 (beta2) än, därför finns det ett manuellt sätt att integrera TortoiseSVN direkt in i Visual Studio utan Ankh.\r\n\r\n\r\nGör så här:\r\n\r\n\r\nLadda ner zip filen från följande länk: http://garrys-brain.blogspot.com/2007/07/tortoisesvn-and-visual-studio.html\r\nPacka upp och kör install.vbs (ändra i vbs filen om din tortoise är installerad till annat än defaultplatsen)\r\nStarta Visual Studio 2008\r\nHögerklicka på Customize i verktygsfältet\r\nKryssa för Context Menus (nu dyker det upp ett nytt verktygsfält som visar alla tillgängliga högerklicksmenyer, detta fält syns bara när du är i customize-läge)\r\nKopiera (ctrl-dra) menyvalen “Tools>External Command 3”, “Tools>External Command 6”, “Tools>External Command 7” till Project and Solution Context Menus>Item\r\nKopiera “Tools>External Command 4”, “Tools>External Command 5”, “Tools>External Command 7” till valfri plats i verktygsfältet.\r\n\r\n\r\n\r\n\r\nVoilá, nu kan du köra update, commit, diff och blame direkt\r\ni Visual Studio 2008 utan AnkhSvn. Tyvärr ändras inte ikonernas färger när du\r\nändrar i filerna men detta sätt ger en enklare vardag än att behöva leta upp\r\nfilerna i Windows Explorer när du ska anropa källkodssystemet!\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/tortoise-vs.png)", + "html": "


För att integrera källkodssystemet Subversion in i Visual Studio kan man använda sig av AnkhSVN. Tyvärr fungerar inte detta verktyg i Visual Studio 2008 (beta2) än, därför finns det ett manuellt sätt att integrera TortoiseSVN direkt in i Visual Studio utan Ankh.


Gör så här:



  1. Ladda ner zip filen från följande länk: http://garrys-brain.blogspot.com/2007/07/tortoisesvn-and-visual-studio.html

  2. Packa upp och kör install.vbs (ändra i vbs filen om din tortoise är installerad till annat än defaultplatsen)

  3. Starta Visual Studio 2008

  4. Högerklicka på Customize i verktygsfältet

  5. Kryssa för Context Menus (nu dyker det upp ett nytt verktygsfält som visar alla tillgängliga högerklicksmenyer, detta fält syns bara när du är i customize-läge)

  6. Kopiera (ctrl-dra) menyvalen “Tools>External Command 3”, “Tools>External Command 6”, “Tools>External Command 7” till Project and Solution Context Menus>Item

  7. Kopiera “Tools>External Command 4”, “Tools>External Command 5”, “Tools>External Command 7” till valfri plats i verktygsfältet.





Voilá, nu kan du köra update, commit, diff och blame direkt
i Visual Studio 2008 utan AnkhSvn. Tyvärr ändras inte ikonernas färger när du
ändrar i filerna men detta sätt ger en enklare vardag än att behöva leta upp
filerna i Windows Explorer när du ska anropa källkodssystemet!


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1087, + "created_at": 1188551940000, + "created_by": 1087, + "updated_at": 1188551940000, + "updated_by": 1087, + "published_at": 1188551940000, + "published_by": 1087 + }, + { + "id": 80, + "title": "Hur man får Windows Installer att skapa vanliga genvägar", + "slug": "hur-man-far-windows-installer-att-skapa-vanliga-genvagar", + "markdown": "\r\n\r\nI ett installationsprojekt Visual Studio kan man göra\r\ngenvägar, t.ex. på användarens skrivbord. När installationen genomförs blir\r\ndessa genvägar s.k. advertised shortcuts. Det innebär att genvägen\r\ninnehåller mer information än en vanlig genväg, bl.a. om vilka komponenter som\r\nmåste finnas och hur programmet ska ominstalleras om det har gått sönder.\r\nNackdelen är att vissa vanliga egenskaper hos genvägar – som att kunna dra\r\nfiler till dem – försvinner.\r\n\r\nSåhär gör man för att få vanliga genvägar som resultat av\r\nsitt installationspaket:\r\n\r\n\r\nAlternativ 1\r\n\r\n\r\nEnklast men kräver manuella insatser av användaren. Starta\r\nsetup.exe med argument:\r\n\r\nC:\\installdir\\setup.exe DISABLEADVTSHORTCUTS=1\r\n\r\n\r\nAlternativ 2\r\n\r\n\r\nModifiera msi-paketet – krångligare men självklart rätt val\r\nom man ska distribuera sin applikation. Tyvärr finns inget direkt sätt att göra\r\ndet i Visual Studio, så man får ta till verktyg från Windows SDK och lägga i\r\nett post build event:\r\n\r\ncscript //nologo \"$(ProjectDir)WiRunSql.vbs\"\r\n\"$(BuiltOuputPath)\" \"INSERT INTO Property(Property, Value)\r\nVALUES ('DISABLEADVTSHORTCUTS', '1')\"\r\n\r\nFör att detta ska fungera måste\r\nman kopiera WiRunSql.vbs till installationsprojektets mapp från C:\\Program\r\nFiles\\Microsoft SDKs\\Windows\\v6.0\\Samples\\SysMgmt\\MSI\\scripts.\r\n\r\n", + "html": "


I ett installationsprojekt Visual Studio kan man göra
genvägar, t.ex. på användarens skrivbord. När installationen genomförs blir
dessa genvägar s.k. advertised shortcuts. Det innebär att genvägen
innehåller mer information än en vanlig genväg, bl.a. om vilka komponenter som
måste finnas och hur programmet ska ominstalleras om det har gått sönder.
Nackdelen är att vissa vanliga egenskaper hos genvägar – som att kunna dra
filer till dem – försvinner.


Såhär gör man för att få vanliga genvägar som resultat av
sitt installationspaket:



Alternativ 1


Enklast men kräver manuella insatser av användaren. Starta
setup.exe med argument:


C:\\installdir\\setup.exe DISABLEADVTSHORTCUTS=1



Alternativ 2


Modifiera msi-paketet – krångligare men självklart rätt val
om man ska distribuera sin applikation. Tyvärr finns inget direkt sätt att göra
det i Visual Studio, så man får ta till verktyg från Windows SDK och lägga i
ett post build event:


cscript //nologo \"$(ProjectDir)WiRunSql.vbs\"
\"$(BuiltOuputPath)\" \"INSERT INTO Property(Property, Value)
VALUES ('DISABLEADVTSHORTCUTS', '1')\"


För att detta ska fungera måste
man kopiera WiRunSql.vbs till installationsprojektets mapp från C:\\Program
Files\\Microsoft SDKs\\Windows\\v6.0\\Samples\\SysMgmt\\MSI\\scripts.


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1182758400000, + "created_by": 6, + "updated_at": 1182758400000, + "updated_by": 6, + "published_at": 1182758400000, + "published_by": 6 + }, + { + "id": 85, + "title": "Signera applikationer för ClickOnce-installation", + "slug": "signera-applikationer-for-clickonce-installation", + "markdown": "\r\n\r\nI Visual Studio 2005 finns en inbyggd funktion för att skapa\r\ns.k. ClickOnce-installationspaket där man lätt kan installera applikationer via\r\nwebben. Installationspaketet måste signeras med ett certifikat. Visual Studio\r\nkan själv skapa ett certifikat, men det har väldigt kort giltighetstid. Om man\r\nhar en egen certifikatserver kan man skapat ett eget certifikat med lång hållbarhet:\r\n\r\n\r\nSkapa en ny certifikatmall för kodsignering i CA-servern\r\n\r\n\r\n1) Öppna Certification\r\nAuthority under administrativa verktyg i kontrollpanelen\r\n\r\n2) Högerklicka på Certificate Templates och välj Manage\r\n\r\n3) Högerklicka på Code Signing och välj Duplicate\r\nTemplate. Döp certifikatmallen till något lämpligt\r\n\r\n4) Välj fliken RequestHandling och kryssa i\r\nrutan Allow private key to be exported. Öka giltighetstiden från ett år\r\nom du vill.\r\n\r\n5) Sätt lämpliga rättigheter på fliken Security,\r\ntryck OK\r\n\r\n6) Gå\r\ntillbaka till Certification Authority. Högerklicka på Certificate\r\nTemplates och välj New -> Certificate Template to Issue\r\n\r\n7) Välj din nya mall\r\n\r\n8) Starta om CA-servern\r\n\r\n\r\nSkapa ett certifikat för kodsignering\r\n\r\n\r\n1) Surfa till http://dinserver/certsrv\r\n\r\n2) Välj avancerad förfrågan, och välj att skapa och skicka\r\nen ny förfrågan\r\n\r\n3) Välj mallen du skapade ovan. \r\n\r\n4) Kryssa i\r\nMark keys as exportable och Export keys to file. Döp filen\r\nmed den privata nyckeln till något passande, t.ex. codesigning.pvk\r\n\r\n5) Tryck på Submit\r\n\r\n6) Ladda ner certifikatet och spara det som codesigning.cer\r\ntillsammans med privata nyckeln\r\n\r\n7) Leta upp pvk2pfx.exe, det ligger normalt i c:\\program\r\nfiles\\Microsoft Visual Studio 8\\Common 7\\tools\\bin\r\n\r\n8) Skapa en certifikatfil med privata nyckeln inbakad:\r\n\r\n                     \r\npvk2pfx.exe –pvk codesigning.pvk –spc codesigning.cer –pi\r\nlösenordet_du_skrev_i_punkt_4_ovan –pfx codesigning.pfx\r\n\r\nNu kan du i ditt VS2005-projekt öppna Egenskaper och\r\npå fliken Publicera välja ditt nyskapade certifikat codesigning.pfx.\r\n\r\n", + "html": "


I Visual Studio 2005 finns en inbyggd funktion för att skapa
s.k. ClickOnce-installationspaket där man lätt kan installera applikationer via
webben. Installationspaketet måste signeras med ett certifikat. Visual Studio
kan själv skapa ett certifikat, men det har väldigt kort giltighetstid. Om man
har en egen certifikatserver kan man skapat ett eget certifikat med lång hållbarhet:



Skapa en ny certifikatmall för kodsignering i CA-servern


1) Öppna Certification
Authority
under administrativa verktyg i kontrollpanelen


2) Högerklicka på Certificate Templates och välj Manage


3) Högerklicka på Code Signing och välj Duplicate
Template
. Döp certifikatmallen till något lämpligt


4) Välj fliken RequestHandling och kryssa i
rutan Allow private key to be exported. Öka giltighetstiden från ett år
om du vill.


5) Sätt lämpliga rättigheter på fliken Security,
tryck OK


6) Gå
tillbaka till Certification Authority. Högerklicka på Certificate
Templates
och välj New -> Certificate Template to Issue


7) Välj din nya mall


8) Starta om CA-servern



Skapa ett certifikat för kodsignering


1) Surfa till http://dinserver/certsrv


2) Välj avancerad förfrågan, och välj att skapa och skicka
en ny förfrågan


3) Välj mallen du skapade ovan.


4) Kryssa i
Mark keys as exportable och Export keys to file. Döp filen
med den privata nyckeln till något passande, t.ex. codesigning.pvk


5) Tryck på Submit


6) Ladda ner certifikatet och spara det som codesigning.cer
tillsammans med privata nyckeln


7) Leta upp pvk2pfx.exe, det ligger normalt i c:\\program
files\\Microsoft Visual Studio 8\\Common 7\\tools\\bin


8) Skapa en certifikatfil med privata nyckeln inbakad:


                     
pvk2pfx.exe –pvk codesigning.pvk –spc codesigning.cer –pi
lösenordet_du_skrev_i_punkt_4_ovan –pfx codesigning.pfx


Nu kan du i ditt VS2005-projekt öppna Egenskaper och
på fliken Publicera välja ditt nyskapade certifikat codesigning.pfx.


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1181925840000, + "created_by": 6, + "updated_at": 1181925840000, + "updated_by": 6, + "published_at": 1181925840000, + "published_by": 6 + }, + { + "id": 88, + "title": "Telnet i Vista", + "slug": "telnet-i-vista", + "markdown": "\r\n\r\n\r\n\r\nTelnet är ett fiffigt program, särskilt när man vill felsöka anslutningar till webbservrar (genom att t.ex. ansluta till port 80: ”c:\\>telnet www.iteam.se 80” och se om man får något svar). I Vista installeras inte telnet som standard, men det finns med och man kan lätt lägga till det själv:\r\n\r\n\r\n1) Öppna kontrollpanelen2) Öppna Program3) Välj ”Slå av och på Windows-funktioner”4) Kryssa i ”Telnet Client”\r\n\r\n![Bild](http://tekniken.nu/uploads/telnet.png)\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/installingtelnetonvista.png)\r\n\r\n\r\nUppdatering 2009-10-19: Ovanstående tips gäller även i Windows 7.\r\n\r\n", + "html": "



Telnet är ett fiffigt program, särskilt när man vill felsöka anslutningar till webbservrar (genom att t.ex. ansluta till port 80: ”c:\\>telnet www.iteam.se 80” och se om man får något svar). I Vista installeras inte telnet som standard, men det finns med och man kan lätt lägga till det själv:


1) Öppna kontrollpanelen
2) Öppna Program
3) Välj ”Slå av och på Windows-funktioner”
4) Kryssa i ”Telnet Client”







Uppdatering 2009-10-19: Ovanstående tips gäller även i Windows 7.


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1181670000000, + "created_by": 6, + "updated_at": 1181670000000, + "updated_by": 6, + "published_at": 1181670000000, + "published_by": 6 + }, + { + "id": 90, + "title": "404-sidor i IIS7 (vista)", + "slug": "404-sidor-i-iis7-vista", + "markdown": "\r\n\r\nNär man ställer in ”error pages” i IIS7 så måste man också \r\nhögerklicka, välja ”Edit feature settings...” och där kryssa i ”Custom\r\nerror pages”. Detta gäller bara när man kör i classic mode.\r\n\r\n", + "html": "


När man ställer in ”error pages” i IIS7 så måste man också
högerklicka, välja ”Edit feature settings...” och där kryssa i ”Custom
error pages”. Detta gäller bara när man kör i classic mode.


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1089, + "created_at": 1181572380000, + "created_by": 1089, + "updated_at": 1181572380000, + "updated_by": 1089, + "published_at": 1181572380000, + "published_by": 1089 + }, + { + "id": 103, + "title": "Safari för Windows har blivit riktigt bra", + "slug": "safari-for-windows-har-blivit-riktigt-bra", + "markdown": "\r\n\r\n\r\nDen första betaversionen av Apples webbläsare Safari basunerades ut vid en Apple-keynote, men man kunde snabbt konstatera att den releasen var ett antal månader för tidig även för en betaversion. Rapporterna om ständiga kraschar och en majoritet av felrendrerade siter gjorde att de flesta (inklusive undertecknad) helt hoppade över att ladda ner den. Nu är dock Safari for Windows framme i betaversion 3 och har blivit både stabil och korrekt.\r\n\r\n\r\n Bra tips för den som är avundsjuk på Mac-kompisar, eller som i vårt fall verkligen behöver en lättillgänglig testmiljö för webbplatser. Det är grymt skönt att slippa dra igång kontors-Macen eller en virtuell MacOSX i VM-ware varje gång man ska testa en site.\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/tekniken-safari.png)", + "html": "


Den första betaversionen av Apples webbläsare Safari basunerades ut vid en Apple-keynote, men man kunde snabbt konstatera att den releasen var ett antal månader för tidig även för en betaversion. Rapporterna om ständiga kraschar och en majoritet av felrendrerade siter gjorde att de flesta (inklusive undertecknad) helt hoppade över att ladda ner den. Nu är dock Safari for Windows framme i betaversion 3 och har blivit både stabil och korrekt.


Bra tips för den som är avundsjuk på Mac-kompisar, eller som i vårt fall verkligen behöver en lättillgänglig testmiljö för webbplatser. Det är grymt skönt att slippa dra igång kontors-Macen eller en virtuell MacOSX i VM-ware varje gång man ska testa en site.


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1189698000000, + "created_by": 6, + "updated_at": 1189698000000, + "updated_by": 6, + "published_at": 1189698000000, + "published_by": 6 + }, + { + "id": 109, + "title": "Snygg lösning för att bygga kommaseparerad lista i SQL", + "slug": "snygg-losning-for-att-bygga-kommaseparerad-lista-i-sql", + "markdown": "\r\n\r\nNär du står inför faktumet att du behöver innehållet i en\r\ntabell som en kommaseparerad lista i en kolumn brukar oftast lösningen bli en\r\nstored procedure med en cursor och efter lite FETCH NEXT FROM etc så får du ut\r\nen sträng. Nedanstående lösningen är mycket snyggare och effektivare:\r\n\r\nDvs, du låter frågan själv bygga vidare på en tom variabel.\r\n\r\nDECLARE @EmployeeList varchar(100)\r\nSELECT @EmployeeList = COALESCE(@EmployeeList + ', ', '') + \r\n   CAST(Emp_UniqueID AS varchar(5))\r\nFROM SalesCallsEmployees\r\nWHERE SalCal_UniqueID = 1\r\nSELECT @EmployeeList\r\n--Results--\r\n\r\n\r\n---------\r\n1, 2, 4\r\nKälla:\r\n\r\n\r\nhttp://www.sqlteam.com/article/using-coalesce-to-build-comma-delimited-string\r\n\r\n\r\n", + "html": "


När du står inför faktumet att du behöver innehållet i en
tabell som en kommaseparerad lista i en kolumn brukar oftast lösningen bli en
stored procedure med en cursor och efter lite FETCH NEXT FROM etc så får du ut
en sträng. Nedanstående lösningen är mycket snyggare och effektivare:


Dvs, du låter frågan själv bygga vidare på en tom variabel.


DECLARE @EmployeeList varchar(100)


SELECT @EmployeeList = COALESCE(@EmployeeList + ', ', '') + 

   CAST(Emp_UniqueID AS varchar(5))

FROM SalesCallsEmployees

WHERE SalCal_UniqueID = 1


SELECT @EmployeeList

--Results--


---------

1, 2, 4

Källa:



http://www.sqlteam.com/article/using-coalesce-to-build-comma-delimited-string


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1087, + "created_at": 1190155800000, + "created_by": 1087, + "updated_at": 1190155800000, + "updated_by": 1087, + "published_at": 1190155800000, + "published_by": 1087 + }, + { + "id": 111, + "title": "Alltid fräscha filer i webbläsaren", + "slug": "alltid-frascha-filer-i-webblasaren", + "markdown": "\r\n\r\nUnder utvecklingsfasen av en site där man ändrar\r\ni javascript och stylesheets flera gånger varje dag, men även när man uppdaterar en skarp website med nya filer, vill man att alla\r\nwebläsare skall använda dom nya filerna istället dom gamla som den har cachat.\r\n\r\nLösningen är att ändra sökvägen varje gång man släpper nya\r\nfiler. Till sökvägen räknas även parametrar, detta gör att vi inte behöver\r\nändra i själva filnamnet varje gång vi vill garantera att alla webläsare får\r\nnya filer.\r\n\r\nDen bästa lösningen är att lägga på filens senaste\r\nändringstid, då hämtar webläsaren en ny fil när det behövs och samtidigt\r\nutnyttjar sin cache optimalt.\r\n\r\n\r\n\r\n", + "html": "


Under utvecklingsfasen av en site där man ändrar
i javascript och stylesheets flera gånger varje dag, men även när man uppdaterar en skarp website med nya filer, vill man att alla
webläsare skall använda dom nya filerna istället dom gamla som den har cachat.


Lösningen är att ändra sökvägen varje gång man släpper nya
filer. Till sökvägen räknas även parametrar, detta gör att vi inte behöver
ändra i själva filnamnet varje gång vi vill garantera att alla webläsare får
nya filer.


Den bästa lösningen är att lägga på filens senaste
ändringstid, då hämtar webläsaren en ny fil när det behövs och samtidigt
utnyttjar sin cache optimalt.


<script src=’Javascripts/myjavascript.js?lastmodified=<%#
System.IO.File.GetLastWriteTime( Server.MapPath(\"~/Javascripts/myjavascript.js\"))%>’
type=’text/javascript’></script>


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": " ta en gammal ur cachen - här är ett knep!", + "author_id": 1089, + "created_at": 1190281500000, + "created_by": 1089, + "updated_at": 1190281500000, + "updated_by": 1089, + "published_at": 1190281500000, + "published_by": 1089 + }, + { + "id": 112, + "title": "Bygg en egen sökmotor med Google Custom Search Engine", + "slug": "bygg-en-egen-sokmotor-med-google-custom-search-engine", + "markdown": "\r\n\r\n\r\nMed Google Custom Search Engine kan du koka ihop en egen sökmotor, som alltid söker efter vissa ord eller som bara söker på siter du har valt ut. Om man t.ex. vill göra en sökmotor för recept som söker på några svenska siter gör man såhär:\r\n\r\n\r\n1) Gå till www.google.com/coop och registrera ett konto\r\n\r\n\r\n2) Konfigurera din nya sökmotor:\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/recept1.png)\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/recept2.png)\r\n\r\n\r\n3) Testa din nya sökmotor:\r\n\r\n\r\n\r\nReceptmotorn\r\n\r\n\r\n\r\n\r\n4) Klistra in koden för att få sökmotorn direkt på din egen site.\r\n\r\n\r\n", + "html": "


Med Google Custom Search Engine kan du koka ihop en egen sökmotor, som alltid söker efter vissa ord eller som bara söker på siter du har valt ut. Om man t.ex. vill göra en sökmotor för recept som söker på några svenska siter gör man såhär:


1) Gå till www.google.com/coop och registrera ett konto


2) Konfigurera din nya sökmotor:











3) Testa din nya sökmotor:



Receptmotorn



4) Klistra in koden för att få sökmotorn direkt på din egen site.


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1190304600000, + "created_by": 6, + "updated_at": 1190304600000, + "updated_by": 6, + "published_at": 1190304600000, + "published_by": 6 + }, + { + "id": 114, + "title": "Visual Studio envisas med att öppna webbprojekt som web sites", + "slug": "visual-studio-envisas-med-att-oppna-webbprojekt-som-web-sites", + "markdown": "\r\n\r\n\r\nDet finns två sorters webbprojekt i Visual Studio 2005 och 2008:\r\n\r\n## Web Site\r\n\r\nEn web site är ett förenklat webbprojekt som inte har en egen projektfil, alla filer i projektets katalog ingår automatiskt. Idén när Visual Studio 2005 skapades var att alla webbprojekt skulle vara av den här sorten, men en massiv protest från utvecklare över hela internet gjorde att man tog tillbaka den gamla projekttypen från Visual Studio 2003 (nedan). Web site-projekt passar bäst för små siter där man inte vill behöva krångla med att ta in och ut filer ur projektet. Nackdelen är att man inte kan exkludera filer man inte vill ha med i releaser till driftsmiljön.\r\n\r\n## Web Application Project\r\n\r\nWeb application project är ett webbprojekt som fungerar som i Visual Studio 2003 - det finns en riktigt projektfil, man kan inkludera och exkludera filer, göra fler inställningar för projektet etc. Det här är den modell som vi använder mest. I Visual Studio 2008 finns den här projekttypen med redan från början, till Visual Studio 2005 måste man ladda ner den som en separat projektmall.\r\n\r\n\r\nIbland får Visual Studio för sig att hoppa över projektfilen och ladda en web application project som ett web site-projekt istället. Nyckeln är .webinfo-filen. Radera den så laddas projeket som det ska igen.\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/vs.png)", + "html": "


Det finns två sorters webbprojekt i Visual Studio 2005 och 2008:


Web Site


En web site är ett förenklat webbprojekt som inte har en egen projektfil, alla filer i projektets katalog ingår automatiskt. Idén när Visual Studio 2005 skapades var att alla webbprojekt skulle vara av den här sorten, men en massiv protest från utvecklare över hela internet gjorde att man tog tillbaka den gamla projekttypen från Visual Studio 2003 (nedan). Web site-projekt passar bäst för små siter där man inte vill behöva krångla med att ta in och ut filer ur projektet. Nackdelen är att man inte kan exkludera filer man inte vill ha med i releaser till driftsmiljön.


Web Application Project


Web application project är ett webbprojekt som fungerar som i Visual Studio 2003 - det finns en riktigt projektfil, man kan inkludera och exkludera filer, göra fler inställningar för projektet etc. Det här är den modell som vi använder mest. I Visual Studio 2008 finns den här projekttypen med redan från början, till Visual Studio 2005 måste man ladda ner den som en separat projektmall.


Ibland får Visual Studio för sig att hoppa över projektfilen och ladda en web application project som ett web site-projekt istället. Nyckeln är .webinfo-filen. Radera den så laddas projeket som det ska igen.


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1190641500000, + "created_by": 6, + "updated_at": 1190641500000, + "updated_by": 6, + "published_at": 1190641500000, + "published_by": 6 + }, + { + "id": 118, + "title": "Visual Studio-snippet för log4net", + "slug": "visual-studio-snippet-for-log4net", + "markdown": "\r\n\r\n## Log4net\r\n\r\nLog4net är ett loggningsramverk som har utvecklats av Apache (samma grupp som ligger bakom den berömda webbservern Apache). Med log4net kan man lägga till regler för hur man ska hantera felmeddelanden - vanligt är att t.ex. logga mindre allvarliga fel till en fil som man kan gå igenom när man felsöker, och att skicka allvarliga fel direkt via epost. Utvecklarens bästa vän helt enkelt!\r\n\r\n\r\nUtan ett bra loggramverk är det lätt att missa fel som användarna råkar ut för - hur många gånger orkar man verkligen kontakta en webbplats om ett fel man stöter på som användare? Ibland har man som utvecklare inte heller tillgång till driftservern, vilket gör felsökningen svår om man inte får felmeddelandena skickade till sig.\r\n\r\n## Snippets\r\n\r\nFrån och med Visual Studio 2005 finns en funktion för att göra kodmakros, vilket man kallar för snippets. Om man skriver ett fördefinierat ord (t.ex. \"prop\") och trycker på tab två gånger så fyller Visual Studio i ett helt kodblock (t.ex. all kod som behövs för en property). Varför inte slå ihop två bra idéer och göra en snippet för den kod som behövs för att logga med log4net? Sagt och gjort!\r\n\r\n## Instruktioner\r\n\r\nLadda ner log4net.snippet.zip\r\nZippa upp och spara den i My Documents\\Visual Studio 2008\\Code Snippets\\Visual C#\\My Code Snippets\r\nÖppna Visual Studio och välj Tools->Code Snippets Manager i menyn, och peka My Code Snippets till katalogen i punkten ovan.\r\nSkriv log4net i din C#-klass och tryck tab två gånger\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/vs.png)", + "html": "


Log4net


Log4net är ett loggningsramverk som har utvecklats av Apache (samma grupp som ligger bakom den berömda webbservern Apache). Med log4net kan man lägga till regler för hur man ska hantera felmeddelanden - vanligt är att t.ex. logga mindre allvarliga fel till en fil som man kan gå igenom när man felsöker, och att skicka allvarliga fel direkt via epost. Utvecklarens bästa vän helt enkelt!


Utan ett bra loggramverk är det lätt att missa fel som användarna råkar ut för - hur många gånger orkar man verkligen kontakta en webbplats om ett fel man stöter på som användare? Ibland har man som utvecklare inte heller tillgång till driftservern, vilket gör felsökningen svår om man inte får felmeddelandena skickade till sig.


Snippets


Från och med Visual Studio 2005 finns en funktion för att göra kodmakros, vilket man kallar för snippets. Om man skriver ett fördefinierat ord (t.ex. \"prop\") och trycker på tab två gånger så fyller Visual Studio i ett helt kodblock (t.ex. all kod som behövs för en property). Varför inte slå ihop två bra idéer och göra en snippet för den kod som behövs för att logga med log4net? Sagt och gjort!


Instruktioner



  1. Ladda ner log4net.snippet.zip

  2. Zippa upp och spara den i My Documents\\Visual Studio 2008\\Code Snippets\\Visual C#\\My Code Snippets

  3. Öppna Visual Studio och välj Tools->Code Snippets Manager i menyn, och peka My Code Snippets till katalogen i punkten ovan.

  4. Skriv log4net i din C#-klass och tryck tab två gånger




", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "da log4net i sin applikation.", + "author_id": 1086, + "created_at": 1190976840000, + "created_by": 1086, + "updated_at": 1190976840000, + "updated_by": 1086, + "published_at": 1190976840000, + "published_by": 1086 + }, + { + "id": 120, + "title": "20 killer apps till ditt intranät", + "slug": "20-killer-apps-till-ditt-intranat", + "markdown": "\r\n\r\n\r\nNär du står inför att bygga ett intranät kan det vara lätt att köra fast i idéarbetet med vilka funktioner som finnas med. Här kommer därför några inspirationstips på bra funktioner\r\n(små och stora) som kan öka värdet av din intranätsinvestering och får dina medarbetare att besöka\r\nintranätet oftare:\r\n\r\n\r\n\r\nTidrapportering\r\n\r\n\r\nMedarbetarlista med egen presentationssida med bild, kopplad mot Active Directory eller Exchange\r\n\r\nMatlista: närliggande lunchrestauranger / interna restauranger\r\n\r\nDagens namnsdagsbarn/födelsedagsbarn\r\n\r\n\r\nFilskickningsfunktion för att skicka och ta emot filer som är för stora för epost\r\n\r\nTipslåda för förbättringar på kontoret\r\n\r\nStrukturkapital: koppling till filarkiv, mallar, exempelofferter, dokument\r\n\r\nNyheter: interna försäljningsnyheter, nya anställda osv\r\n\r\nResursbokning: boka konferensrum, projektorer, matbeställning till möten\r\n\r\nKommentarsfunktion för nyheter\r\n\r\nRöstningsfunktion: t.ex. veckans fråga\r\n\r\nBildarkiv: samla alla företagets köpta foton samt ladda upp bilder från företagsevent\r\n\r\nFöretagsprofil: mallar, guidelines, typsnitt\r\n\r\nProjekthantering: att-göralistor, prioriteringar, uppföljning av kostnader och nedlagd tid\r\n\r\nEkonomiska rapporter och nyckeltal: integration med affärssystem\r\n\r\nMailutskicksfunktion för nyhetsbrev\r\n\r\nSL-koppling: busstidtabeller osv\r\n\r\nTV-\r\nstreaming: titta på live-TV, planera inspelning\r\n\r\nOmvärldsbevakning: integration av flöden från Reuters och liknande leverantörer\r\n\r\nKontaktregister kopplat till Exchange\r\n\r\nBildhanterare: beskära bilder till standardformat, skapa logotyper/variationer\r\n\r\nHänvisningssystem\r\n\r\n\r\nÅtgärdslistor med koppling till Gemensamma Mappar i Exchange)\r\n\r\nIT-självhjälp: felsökning, rapportera problem till IT-avdelningen\r\n\r\n", + "html": "


När du står inför att bygga ett intranät kan det vara lätt att köra fast i idéarbetet med vilka funktioner som finnas med. Här kommer därför några inspirationstips på bra funktioner
(små och stora) som kan öka värdet av din intranätsinvestering och får dina medarbetare att besöka
intranätet oftare:




  • Tidrapportering


  • Medarbetarlista med egen presentationssida med bild, kopplad mot Active Directory eller Exchange


  • Matlista: närliggande lunchrestauranger / interna restauranger


  • Dagens namnsdagsbarn/födelsedagsbarn


  • Filskickningsfunktion för att skicka och ta emot filer som är för stora för epost


  • Tipslåda för förbättringar på kontoret


  • Strukturkapital: koppling till filarkiv, mallar, exempelofferter, dokument


  • Nyheter: interna försäljningsnyheter, nya anställda osv


  • Resursbokning: boka konferensrum, projektorer, matbeställning till möten


  • Kommentarsfunktion för nyheter


  • Röstningsfunktion: t.ex. veckans fråga


  • Bildarkiv: samla alla företagets köpta foton samt ladda upp bilder från företagsevent


  • Företagsprofil: mallar, guidelines, typsnitt


  • Projekthantering: att-göralistor, prioriteringar, uppföljning av kostnader och nedlagd tid


  • Ekonomiska rapporter och nyckeltal: integration med affärssystem


  • Mailutskicksfunktion för nyhetsbrev


  • SL-koppling: busstidtabeller osv


  • TV-
    streaming: titta på live-TV, planera inspelning


  • Omvärldsbevakning: integration av flöden från Reuters och liknande leverantörer


  • Kontaktregister kopplat till Exchange


  • Bildhanterare: beskära bilder till standardformat, skapa logotyper/variationer


  • Hänvisningssystem


  • Åtgärdslistor med koppling till Gemensamma Mappar i Exchange)


  • IT-självhjälp: felsökning, rapportera problem till IT-avdelningen


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1087, + "created_at": 1191328920000, + "created_by": 1087, + "updated_at": 1191328920000, + "updated_by": 1087, + "published_at": 1191328920000, + "published_by": 1087 + }, + { + "id": 124, + "title": "Så loggar du AJAX med Google Analytics", + "slug": "sa-loggar-du-ajax-med-google-analytics", + "markdown": "\r\n\r\nGoogle Analytics är ju fantastiskt bra för att följa sina besökare på sin webbplats, men när fler och fler applikationer bygger på AJAX finns det inte längre uppenbara ställen att lägga in sin tracking-kod, då är det bra att man kan logga även med hjälp av Javascript. Såhär kan det exempelvis set ut i din kod:\r\n\r\n\r\n<\r\nscript\r\n\r\nsrc\r\n=\"https://ssl.google-analytics.com/urchin.js\"\r\ntype\r\n=\"text/javascript\">\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n \r\n\r\n\r\n\r\n\r\n<\r\nscript\r\n\r\ntype\r\n=\"text/javascript\">\r\n\r\n\r\n\r\n\r\n_uacct = \"XXX-XXXX-XXXX\";\r\n\r\n\r\n\r\n\r\n \r\n\r\n\r\n\r\n\r\nfunction\r\nlogin()\r\n\r\n\r\n\r\n{\r\n\r\n\r\n\r\n    try{urchinTracker('/client/login');} catch(err){}\r\n\r\n\r\n\r\n}\r\n\r\n\r\n\r\nfunction\r\nlogout()\r\n\r\n\r\n\r\n{\r\n\r\n\r\n\r\n    try{urchinTracker('/client/logout');} catch(err){}\r\n\r\n\r\n\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n", + "html": "


Google Analytics är ju fantastiskt bra för att följa sina besökare på sin webbplats, men när fler och fler applikationer bygger på AJAX finns det inte längre uppenbara ställen att lägga in sin tracking-kod, då är det bra att man kan logga även med hjälp av Javascript. Såhär kan det exempelvis set ut i din kod:



<
script

src
=\"https://ssl.google-analytics.com/urchin.js\"
type
=\"text/javascript\">



</
script
>




 



<
script

type
=\"text/javascript\">



_uacct = \"XXX-XXXX-XXXX\";




 



function
login()



{



    try{urchinTracker('/client/login');} catch(err){}



}



function
logout()



{



    try{urchinTracker('/client/logout');} catch(err){}



}



</
script
>


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "rar att få missvisande statistik - så här gör du för att ordna det!", + "author_id": 1087, + "created_at": 1192108620000, + "created_by": 1087, + "updated_at": 1192108620000, + "updated_by": 1087, + "published_at": 1192108620000, + "published_by": 1087 + }, + { + "id": 131, + "title": "Tips: Snipshot - onlineverktyg för enklare bildhantering", + "slug": "tips-snipshot---onlineverktyg-for-enklare-bildhantering", + "markdown": "\r\n\r\n\r\nIbland uppstår behovet av att instruera en publicerande kund eller förälder i lite enklare bildhantering, oftast handlar det om hur man beskär och skalar om bilder. De flesta håller nog med mig om att Windows inbyggda program ”Paint” inte är speciellt optimalt för någon som helst bildhantering och i många fall kan installation av ett separat program vara överkurs eller, pga. säkerhetsinställningar, omöjligt.\r\n\r\n\r\nNär jag letade runt lite efter en bra webbaserad lösning hittade jag siten Snipshot.com, som verkligen gör precis det man vill på ett enkelt och ”kundvänligt” sätt:\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/snipshotlogo.png)\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/snipshot1.png)\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/snipshot3.png)", + "html": "


Ibland uppstår behovet av att instruera en publicerande kund eller förälder i lite enklare bildhantering, oftast handlar det om hur man beskär och skalar om bilder. De flesta håller nog med mig om att Windows inbyggda program ”Paint” inte är speciellt optimalt för någon som helst bildhantering och i många fall kan installation av ett separat program vara överkurs eller, pga. säkerhetsinställningar, omöjligt.


När jag letade runt lite efter en bra webbaserad lösning hittade jag siten Snipshot.com, som verkligen gör precis det man vill på ett enkelt och ”kundvänligt” sätt:








", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Tips: Snipshot - onlineverktyg för enklare bildhantering", + "meta_description": "", + "author_id": 1085, + "created_at": 1193077200000, + "created_by": 1085, + "updated_at": 1193077200000, + "updated_by": 1085, + "published_at": 1193077200000, + "published_by": 1085 + }, + { + "id": 134, + "title": "Bygg en egen karta med Google Maps från en lista med adresser", + "slug": "bygg-en-egen-karta-med-google-maps-fran-en-lista-med-adresser", + "markdown": "\r\n\r\n\r\nGoogle Maps har ett XML-format för kartdata som heter KML. KML kan innehålla kartpunkter, geometrisk figurer (om man vill markera ett helt område på kartan), bildöverlägg o.s.v. Om man har en färdig KML-fil så anropar man helt enkelt http://maps.google.com/maps?q=http://minserver.com/minfil.kml, så visas alla punkter och annat som KML-filen innehåller.\r\n\r\n\r\nHur skapar man då enklast en KML-fil med punkter? Ett sätt är att skriva ihop den för hand. Det är ganska jobbigt, särskilt som punkterna fungerar bäst med koordinater. Men som tur är så finns en adress-till-kartpunkt-omvandlare inbyggd i Google Maps! Såhär använder man den:\r\n\r\n\r\nSkaffa en utvecklarnyckel för Google Maps: http://www.google.com/apis/maps/signup.html\r\nKlipp ut Placemark-taggen och klistra in den inuti Folder-taggen\r\nFortsätt göra geokodningar som i punkt 2 och klistra in dina Placemarks i KML-filen\r\nPå varje placemark kan du lägga till information, t.ex. en name-tag och en description-tag. Man kan också byta ut punkternas ikoner, lägga till bilder och mycket annat. Läs mer i KML-manualen.\r\nTesta din karta: http://maps.google.com/maps?q=http://minserver.com/minfil.kml\r\nFör att styra vilket zoom-läge kartan ska starta i, lägg till &z=4 när du anropar KML-filen\r\nFör att styra vilken centralpunkt kartan ska visa, lägg till ll=0,0 (byt ut 0,0 mot din valda longitud och latitud).\r\nOm du har många punkter kan du lägga dem i flera foldrar med hjälp av flera Folder-taggar. Om man klickar på en folder så zoomar kartan automatiskt in så att alla \r\n\r\n\r\n\r\nProcessen ovan kan självklart automatiseras helt, antingen genom att scripta processen (enklast) eller genom att göra de här sakerna med Google Maps API:t (snyggast). Att göra geokodning av adresser tar några sekunder per punkt, så det smart att göra kodningen i förväg och spara KML-filen statiskt för att få bra hastighet.\r\n\r\n\r\nHär är ett exempel som jag själv har gjort, över ett klädmärkes återförsäljare: camilla norrbacks världskarta\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/maps.png)", + "html": "


Google Maps har ett XML-format för kartdata som heter KML. KML kan innehålla kartpunkter, geometrisk figurer (om man vill markera ett helt område på kartan), bildöverlägg o.s.v. Om man har en färdig KML-fil så anropar man helt enkelt http://maps.google.com/maps?q=http://minserver.com/minfil.kml, så visas alla punkter och annat som KML-filen innehåller.


Hur skapar man då enklast en KML-fil med punkter? Ett sätt är att skriva ihop den för hand. Det är ganska jobbigt, särskilt som punkterna fungerar bäst med koordinater. Men som tur är så finns en adress-till-kartpunkt-omvandlare inbyggd i Google Maps! Såhär använder man den:



  1. Skaffa en utvecklarnyckel för Google Maps: http://www.google.com/apis/maps/signup.html

  2. Klipp ut Placemark-taggen och klistra in den inuti Folder-taggen

  3. Fortsätt göra geokodningar som i punkt 2 och klistra in dina Placemarks i KML-filen

  4. På varje placemark kan du lägga till information, t.ex. en name-tag och en description-tag. Man kan också byta ut punkternas ikoner, lägga till bilder och mycket annat. Läs mer i KML-manualen.

  5. Testa din karta: http://maps.google.com/maps?q=http://minserver.com/minfil.kml

  6. För att styra vilket zoom-läge kartan ska starta i, lägg till &z=4 när du anropar KML-filen

  7. För att styra vilken centralpunkt kartan ska visa, lägg till ll=0,0 (byt ut 0,0 mot din valda longitud och latitud).

  8. Om du har många punkter kan du lägga dem i flera foldrar med hjälp av flera Folder-taggar. Om man klickar på en folder så zoomar kartan automatiskt in så att alla


Processen ovan kan självklart automatiseras helt, antingen genom att scripta processen (enklast) eller genom att göra de här sakerna med Google Maps API:t (snyggast). Att göra geokodning av adresser tar några sekunder per punkt, så det smart att göra kodningen i förväg och spara KML-filen statiskt för att få bra hastighet.


Här är ett exempel som jag själv har gjort, över ett klädmärkes återförsäljare: camilla norrbacks världskarta


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "kan detta automatiseras!", + "author_id": 6, + "created_at": 1193738760000, + "created_by": 6, + "updated_at": 1193738760000, + "updated_by": 6, + "published_at": 1193738760000, + "published_by": 6 + }, + { + "id": 139, + "title": "Se upp med eventhanterare som pekar på lagrade objekt", + "slug": "se-upp-med-eventhanterare-som-pekar-pa-lagrade-objekt", + "markdown": "\r\n\r\n\r\nEn intressant liten artikel (egentligen förtäckt reklam för en produkt, men låt gå) om ett gäng som skrivit kod i C# för att styra en förarlös bil i The Darpa Challenge: http://www.codeproject.com/showcase/IfOnlyWedUsedANTSProfiler.asp\r\n\r\n\r\nDet här är samma sak som vi själva upptäckte för något år sedan (men aldrig bloggade om): om objekt1 lyssnar på events från objekt2 kan objekt1 inte tas bort av garbage collectorn förrän objekt2 också tas bort - eftersom de har en stark koppling. Ett fall där detta kan inträffa i ASP.NET är om man har objekt i Session som genererar events, som man låter webbkontroller lyssna på. Då kommer webbkontrollen att ligga kvar i minnet även efter att sidan laddats ur (då de normalt städas bort).\r\n\r\n\r\nEn fin lösning på det här problemet är att använda svaga referenser, som t.ex. finns inbyggt i Smalltalk: http://www.haible.de/bruno/papers/cs/weak/WeakDatastructures-writeup.html.\r\n.NET har en WeakReference-klass, http://msdn2.microsoft.com/en-us/library/system.weakreference.aspx, men jag har aldrig sett den användas någonstans. Framförallt inte på events.\r\n\r\n\r\n\r\nSå det rätta att göra i .NET för att undvika det här är att alltid se till att städa upp sina event-listeners. Det som gör det lite ointuitivt är att i alla exempel från Microsoft så sparas aldrig någon referens till eventlyssnarna, så det går inte att ta bort dem. Så här brukar det se ut:\r\n\r\n\r\nfoo.AnEvent += new EventHandler(AMethod);\r\n\r\n\r\ndvs. man skapar upp ett EventHandler-objekt som man sen kopplar men inte har någon annan referens till. På så sätt så har man sen ingen möjlighet att ta bort kopplingen. I 99% av fallen vad gäller t.ex. webbsidor så gör det inget - allt tas ändå bort av sig självt när webbförfrågan är över. Men om man nu vill ta bort lyssnaren på ett fint sätt så måste man istället göra såhär:\r\n\r\n\r\n\r\nEventHandler anEventHandler = new EventHandler(AMethod);\r\nfoo.AnEvent += anEventHandler;\r\n/* .... massor av kod etc... */\r\nfoo.AnEvent -= anEventHandler;\r\n\r\n\r\n\r\n\r\nNär man gör foo.AnEvent -= anEventHandler så tar man bort referensen till this ifrån foo, vilket gör att this inte har några starka referenser och kan städas bort ur minnet som vanligt.\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/22183849.jpg)", + "html": "


En intressant liten artikel (egentligen förtäckt reklam för en produkt, men låt gå) om ett gäng som skrivit kod i C# för att styra en förarlös bil i The Darpa Challenge: http://www.codeproject.com/showcase/IfOnlyWedUsedANTSProfiler.asp


Det här är samma sak som vi själva upptäckte för något år sedan (men aldrig bloggade om): om objekt1 lyssnar på events från objekt2 kan objekt1 inte tas bort av garbage collectorn förrän objekt2 också tas bort - eftersom de har en stark koppling. Ett fall där detta kan inträffa i ASP.NET är om man har objekt i Session som genererar events, som man låter webbkontroller lyssna på. Då kommer webbkontrollen att ligga kvar i minnet även efter att sidan laddats ur (då de normalt städas bort).


En fin lösning på det här problemet är att använda svaga referenser, som t.ex. finns inbyggt i Smalltalk: http://www.haible.de/bruno/papers/cs/weak/WeakDatastructures-writeup.html.

.NET har en WeakReference-klass, http://msdn2.microsoft.com/en-us/library/system.weakreference.aspx, men jag har aldrig sett den användas någonstans. Framförallt inte på events.



Så det rätta att göra i .NET för att undvika det här är att alltid se till att städa upp sina event-listeners. Det som gör det lite ointuitivt är att i alla exempel från Microsoft så sparas aldrig någon referens till eventlyssnarna, så det går inte att ta bort dem. Så här brukar det se ut:


foo.AnEvent += new EventHandler(AMethod);


dvs. man skapar upp ett EventHandler-objekt som man sen kopplar men inte har någon annan referens till. På så sätt så har man sen ingen möjlighet att ta bort kopplingen. I 99% av fallen vad gäller t.ex. webbsidor så gör det inget - allt tas ändå bort av sig självt när webbförfrågan är över. Men om man nu vill ta bort lyssnaren på ett fint sätt så måste man istället göra såhär:



EventHandler anEventHandler = new EventHandler(AMethod);

foo.AnEvent += anEventHandler;

/* .... massor av kod etc... */

foo.AnEvent -= anEventHandler;



När man gör foo.AnEvent -= anEventHandler så tar man bort referensen till this ifrån foo, vilket gör att this inte har några starka referenser och kan städas bort ur minnet som vanligt.


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "lectorn inte att kunna ta bort webbkontrollerna.", + "author_id": 1086, + "created_at": 1195463580000, + "created_by": 1086, + "updated_at": 1195463580000, + "updated_by": 1086, + "published_at": 1195463580000, + "published_by": 1086 + }, + { + "id": 140, + "title": "Visual Studio 2008 i skarp version idag", + "slug": "visual-studio-2008-i-skarp-version-idag", + "markdown": "\r\n\r\n\r\nFör alla som har tillgång till MSDN går det nu att ladda ner den slutgiltiga versionen av Visual Studio 2008 Team Suite. Den officiella lanseringen kommer att ske i februari men koden är skarp och går att hämta redan nu.\r\n\r\n\r\nNytt i VS 2008 är bl.a. stöd för .NET 3.5 med tillhörande tekniker som LINQ (Microsofts nya dataramverk som både är en object-relational-mapper och som gör att man kan ställa SQL-frågor till vanliga .NET-objekt), Windows Presentation Foundation samt många förbättringar gällande kod-editorn. Detta är också den första versionen som är direkt anpassad för Vista och är mycket stabilare än t.ex. 2005 som har en del Vista-problem. \r\n\r\n\r\nVi på Iteam har använt VS2008 beta 2 och har varit mycket nöjda med den och den skarpa versionen lär vara ännu bättre.\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/visualstudio2008.png)", + "html": "


För alla som har tillgång till MSDN går det nu att ladda ner den slutgiltiga versionen av Visual Studio 2008 Team Suite. Den officiella lanseringen kommer att ske i februari men koden är skarp och går att hämta redan nu.


Nytt i VS 2008 är bl.a. stöd för .NET 3.5 med tillhörande tekniker som LINQ (Microsofts nya dataramverk som både är en object-relational-mapper och som gör att man kan ställa SQL-frågor till vanliga .NET-objekt), Windows Presentation Foundation samt många förbättringar gällande kod-editorn. Detta är också den första versionen som är direkt anpassad för Vista och är mycket stabilare än t.ex. 2005 som har en del Vista-problem.


Vi på Iteam har använt VS2008 beta 2 och har varit mycket nöjda med den och den skarpa versionen lär vara ännu bättre.


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "edan nu!", + "author_id": 1089, + "created_at": 1195481160000, + "created_by": 1089, + "updated_at": 1195481160000, + "updated_by": 1089, + "published_at": 1195481160000, + "published_by": 1089 + }, + { + "id": 141, + "title": "Så flyttar man tempkatalogen för en ASP.NET-applikation", + "slug": "sa-flyttar-man-tempkatalogen-for-en-aspnet-applikation", + "markdown": "\r\n\r\n\r\nNär ASP.NET behöver spara en temporär fil sparas den i C:\\Windows\\Microsoft.NET\\Framework\\v2.0.50727\\Temporary ASP.NET Files. Det är oftast inget problem, eftersom det mest är kompilerade versioner av dll-filerna och liknande som lagras där. \r\n\r\n\r\nEtt fall där det kan bli ett problem är i webbapplikationer där användarna kan ladda upp filer. Medan filen laddas upp sparas den i tempkatalogen, och skulle något gå på tok (t.ex. om disken skulle bli full) så riskerar man att få ha kvar filen till dess att webbserverprocessen startas om. Vissa gillar serverkonfigurationer där man håller C-disken minimal i storlek och placerar alla data på andra diskar - då kan hela serverdriften äventyras av stora tempfiler på fel ställe.\r\n\r\n\r\nDet är dock väldigt lätt att få webbapplikationen att lägga filerna på ett annat ställe. Lägg in följande i web.config:\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/files_storage-main-pic.jpg)", + "html": "


När ASP.NET behöver spara en temporär fil sparas den i C:\\Windows\\Microsoft.NET\\Framework\\v2.0.50727\\Temporary ASP.NET Files. Det är oftast inget problem, eftersom det mest är kompilerade versioner av dll-filerna och liknande som lagras där.


Ett fall där det kan bli ett problem är i webbapplikationer där användarna kan ladda upp filer. Medan filen laddas upp sparas den i tempkatalogen, och skulle något gå på tok (t.ex. om disken skulle bli full) så riskerar man att få ha kvar filen till dess att webbserverprocessen startas om. Vissa gillar serverkonfigurationer där man håller C-disken minimal i storlek och placerar alla data på andra diskar - då kan hela serverdriften äventyras av stora tempfiler på fel ställe.


Det är dock väldigt lätt att få webbapplikationen att lägga filerna på ett annat ställe. Lägg in följande i web.config:


<compilation tempDirectory=\"e:\\MyApp Temp ASP.NET Files\"/>

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": " men som tur är går det lätt att flytta katalogen till en annan plats.", + "author_id": 6, + "created_at": 1195489440000, + "created_by": 6, + "updated_at": 1195489440000, + "updated_by": 6, + "published_at": 1195489440000, + "published_by": 6 + }, + { + "id": 149, + "title": "MVC-ramverk för ASP.NET", + "slug": "mvc-ramverk-for-aspnet", + "markdown": "\r\n\r\n\r\nArkitekturen Model - View - Controller, oftast förkortad MVC, uppfanns redan 1979 under arbetet med programspråket Smalltalk. Grundidén är (precis som med många andra arkitekturer) att tydligt separera presentation, affärslogik och data från varandra. Såhär fungerar MVC (ursäkta lite svengelska här och var):\r\n\r\n\r\n\r\nModel är den komponent som representerar data och innehåll. Model motsvarar saker i verkligheten, t.ex. produkt, kund eller order.\r\n\r\nView är den komponent som skapar ett användargränssnitt för en modell. Varje modell kan ha många olika views. Det är viktigt för separationen att modellen inte känner till något och inte förutsätter något om sina views. På samma sätt ska en view inte förutsätta något om sin controller utan bara skicka events för det användaren utför.\r\n\r\nController är den komponent som hanterar användarinteraktion och styr affärslogiken. Controllern tar t.ex. emot knapptryck och inmatningar, uppdaterar modellen med nytt innehåll och uppdaterar modellens view. Det är också controllern som bestämmer vilken view som ska visas för en modell, om det finns flera.\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/mvcuml.png)\r\n\r\n\r\nI ASP.NET idag kan man säga att ASPX-/ASCX-sidan utgör view, och codebehind för sidan utgör controller. Hur man implementerar model styrs inte - det väljer utvecklaren själv från fall till fall. Problemet med ASP.NET är att controller (codebehind) och view (ASPX) är väldigt hårt knutna till varandra. Controllern anropas samtidigt som view och man måste krångla ganska mycket för att låta en controller välja en annan view (i princip göra en redirect).\r\n\r\n\r\nDet nya MVC-ramverket för ASP.NET innebär en äkta MVC-arkitektur. Postbacks kommer t.ex. inte längre att skickas till codebehind, utan alltid till controllern för den objekttyp man arbetar med. Alla delar är sammankopplade med interface, vilket gör att det är lätt att byta ut stora delar vid testning (man kan t.ex. byta ut alla controllers mot dummy-objekt för att testa sina views, eller byta ut alla views för att göra smarta unit tests).\r\n\r\n\r\nDet ska bli mycket intressant att se om MVC helt kommer att ersätta ASP.NET som det fungerar idag. MVC-ramverket förväntas komma i .NET Framework 3.5 SP 1, ganska snart.\r\n\r\n\r\nLäs mer om ramverket i Scott Guthries blogg (han är en av utvecklarna i projektet).\r\nLäs mer om arkitekturen MVC på WikiPedia.\r\nSvenske bloggaren Fredrik Normén skriver också mycket om MVC-ramverket, ofta ur ett praktiskt perspektiv (hur man faktiskt använder det).\r\n\r\n", + "html": "


Arkitekturen Model - View - Controller, oftast förkortad MVC, uppfanns redan 1979 under arbetet med programspråket Smalltalk. Grundidén är (precis som med många andra arkitekturer) att tydligt separera presentation, affärslogik och data från varandra. Såhär fungerar MVC (ursäkta lite svengelska här och var):




  • Model är den komponent som representerar data och innehåll. Model motsvarar saker i verkligheten, t.ex. produkt, kund eller order.


  • View är den komponent som skapar ett användargränssnitt för en modell. Varje modell kan ha många olika views. Det är viktigt för separationen att modellen inte känner till något och inte förutsätter något om sina views. På samma sätt ska en view inte förutsätta något om sin controller utan bara skicka events för det användaren utför.


  • Controller är den komponent som hanterar användarinteraktion och styr affärslogiken. Controllern tar t.ex. emot knapptryck och inmatningar, uppdaterar modellen med nytt innehåll och uppdaterar modellens view. Det är också controllern som bestämmer vilken view som ska visas för en modell, om det finns flera.








I ASP.NET idag kan man säga att ASPX-/ASCX-sidan utgör view, och codebehind för sidan utgör controller. Hur man implementerar model styrs inte - det väljer utvecklaren själv från fall till fall. Problemet med ASP.NET är att controller (codebehind) och view (ASPX) är väldigt hårt knutna till varandra. Controllern anropas samtidigt som view och man måste krångla ganska mycket för att låta en controller välja en annan view (i princip göra en redirect).


Det nya MVC-ramverket för ASP.NET innebär en äkta MVC-arkitektur. Postbacks kommer t.ex. inte längre att skickas till codebehind, utan alltid till controllern för den objekttyp man arbetar med. Alla delar är sammankopplade med interface, vilket gör att det är lätt att byta ut stora delar vid testning (man kan t.ex. byta ut alla controllers mot dummy-objekt för att testa sina views, eller byta ut alla views för att göra smarta unit tests).


Det ska bli mycket intressant att se om MVC helt kommer att ersätta ASP.NET som det fungerar idag. MVC-ramverket förväntas komma i .NET Framework 3.5 SP 1, ganska snart.


Läs mer om ramverket i Scott Guthries blogg (han är en av utvecklarna i projektet).

Läs mer om arkitekturen MVC på WikiPedia.

Svenske bloggaren Fredrik Normén skriver också mycket om MVC-ramverket, ofta ur ett praktiskt perspektiv (hur man faktiskt använder det).


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "mmer att underlätta testdriven utveckling och tydligare separation mellan gränssnitt och affärslogik.", + "author_id": 6, + "created_at": 1196341440000, + "created_by": 6, + "updated_at": 1196341440000, + "updated_by": 6, + "published_at": 1196341440000, + "published_by": 6 + }, + { + "id": 150, + "title": "Skapa direct-push kanal med hjälp av AjaxPro och ASP.NET", + "slug": "skapa-direct-push-kanal-med-hjalp-av-ajaxpro-och-aspnet", + "markdown": "\r\n\r\n\r\nNu bjuder vi på resultatet av en lång utredning:\r\n\r\n\r\nEtt allt vanligare önskemål i webb 2.0-projekt är låta gränssnittet vara \"live\", t.ex. att det syns direkt på din skärm utan omladdning när nya besökare kommer till din sida. För att åstadkomma detta skapar man en kanal mellan server och klient med hjälp av Ajax. Detta är ett extremt effektivt sätt att låta ditt användargränssnitt vara live-kopplat mot t.ex. en databas. Det finns dock några stora utmaningar och många fallgropar att tänka på när du designar din applikation.\r\n\r\n\r\nI teorin går det till så här:\r\n\r\n\r\nI javascript skapar du ett asynkront event-anrop till din server:\r\n\r\nfunction startListner()\r\n{\r\n    /* restartListner anropas vid anslutningsfel och startar om anslutningen */\r\n    Site.Ajax.WaitForUpdates(gotUpdate, restartListner);\r\n}\r\nfunction restartListner(){\r\n    /* vänta en sekund för att låta köade anslutningar komma före */\r\n    window.setTimeout(startListner, 1000); }function gotUpdate(result){       // hantera ditt event här       restartListner();}\r\n\r\n\r\n\r\n\r\n\r\n\r\nPå servern låser du din tråd och väntar på att något händer:\r\n\r\nstatic Hashtable waitHandles = new Hashtable();[AjaxPro.AjaxMethod(AjaxPro.HttpSessionStateRequirement.Read)]public WaitResult WaitForUpdates(){      WaitResult w = new WaitResult();               AutoResetEvent anEvent = new AutoResetEvent(false);    lock (waitHandles)    {        waitHandles[System.Threading.Thread.CurrentThread]= anEvent;    }    /* Vänta till dess att något har hänt på servern,dock längst 5 sekunder */\r\n    anEvent.WaitOne(new TimeSpan(0, 0, 0, 5), false); /* Hämta alla sparade events */    UpdateEvent[] events = frontend.Manager.GetEvents();     w.UpdateEvents = events;    return w;}\r\n\r\n\r\n\r\nNär något viktigt hander på servern, t ex att något ändras i din databas så kan du skicka ett event tillbaka hela vägen till klienten genom att släppa låset och låta ovanstående request gå igenom:\r\n\r\n\r\n// Släpp sedan alla eventlyssnare som väntar på events\r\n\r\nlock (waitHandles)\r\n{\r\n    // släpp alla väntande eventlyssnare\r\n    foreach (AutoResetEvent anEvent in waitHandles.Values)\r\n    {\r\n        anEvent.Set();\r\n    }\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\nViktigt att tänka på:\r\n\r\n\r\n\r\nSe till att inte ställa fler än två anrop till servern under tiden som du väntar på svar. Enligt rekommendation i HTTP 1.1-standarden får webbläsaren maximalt göra två samtidiga anslutningar till en och samma server, vilket innebär att alla försök till att hämta data från servern kommer att köas upp tills det finns en ledig anslutning. Detta inkluderar alla javascript, stylesheets, bilder, HTML-dokument etc. Därför är det dels bra att schemalägga första lyssnandet på servern enligt ovan till några sekunder efter att sidan har laddats för att alla bilder, stylesheets och javascript ska hinna hämtas korrekt. Se också till att låta eventuella uppköade anrop få någon sekund på sig att köras igenom innan du ställer en ny fråga till servern. \r\n\r\nEtt bra tips är att flytta alla statiska resurser till en annan domän, t.ex.: resources.dindoman.se. Det frigör två extra HTTP-anslutningar. \r\n\r\nFörsök samordna alla dina events från servern till en och samma kanal – skicka gärna ett enkelt objekt till klienten som beskriver detaljer om alla typer av server-event och låt klienten avgöra hur de ska hatneras – voila en s.k. event-hubb! \r\n\r\nSkriv inte till sessionen i din eventlyssnare om det går att undvika. Om du gör det kommer det krävas att du har [AjaxPro.AjaxMethod(AjaxPro.HttpSessionStateRequirement.ReadWrite)] vilket kommer låsa hela sessionen under tiden som du väntar på svar. \r\n\r\nTänk också på att göra så få anrop till servern som möjligt, baka gärna ihop dina bilder till en stor PNG som du sedan positionerar med hjälp av CSS, baka också gärna ihop så mycket som möjligt av dina CSS- och JavaScript-filer. \r\n\r\nAnvänd FireBug och Yslow för att analysera vad som tar tid i din applikation. \r\n\r\nHantera att events kan hända under tiden som din klient inte lyssnar genom att skicka med en tidpunkt (t.ex UTC tiden på servern) för ditt senaste mottagna event. \r\n\r\nHantera timeout-fel i javascript genom att ställa nya requests till servern (lägg bara till en extra callback sist i ditt AJAX-anrop till servern). \r\n\r\nExperimentera med hur lång tid servern ska vänta på händelser och hur lång tid klienten ska vänta innan ett nytt anrop ska ställas. \r\n\r\nExperimentera med standardvärdet för timeout i AjaxPro – standard är åtta sekunder. \r\n\r\nAnvänd inte SetInterval - om något oförutsett händer på servern eller klienten kommer SetInterval köa upp massor av nya förfrågningar som alla kommer starta så fort det finns möjlighet.Använd SetTimeout istället längst ner i din callback\r\n\r\n\r\nDet absolut viktigaste av ovanstående är att inte använda AjaxPro.HttpSessionStateRequirement.ReadWrite. Om du gör det kommer att alla sidor i din applikation tar mellan noll och fem sekunder extra att exekvera och det är en väldigt svårsökt nöt att knäcka om man inte känner till den.\r\n\r\n\r\nLycka till!\r\n\r\n\r\nChristian\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/398px-c-band_radar-dish_antenna.jpg)", + "html": "


Nu bjuder vi på resultatet av en lång utredning:


Ett allt vanligare önskemål i webb 2.0-projekt är låta gränssnittet vara \"live\", t.ex. att det syns direkt på din skärm utan omladdning när nya besökare kommer till din sida. För att åstadkomma detta skapar man en kanal mellan server och klient med hjälp av Ajax. Detta är ett extremt effektivt sätt att låta ditt användargränssnitt vara live-kopplat mot t.ex. en databas. Det finns dock några stora utmaningar och många fallgropar att tänka på när du designar din applikation.


I teorin går det till så här:


I javascript skapar du ett asynkront event-anrop till din server:


function startListner()

{

    /* restartListner anropas vid anslutningsfel 
och startar om anslutningen */

    Site.Ajax.WaitForUpdates(gotUpdate, restartListner);

}


function restartListner()
{

    /* vänta en sekund för att låta köade 
anslutningar komma före */

    window.setTimeout(startListner, 1000); 
}

function gotUpdate(result)
{
       // hantera ditt event här
       restartListner();
}





På servern låser du din tråd och väntar på att något händer:


static Hashtable waitHandles = new Hashtable();

[AjaxPro.AjaxMethod(AjaxPro.HttpSessionStateRequirement.Read)]
public WaitResult WaitForUpdates()

    WaitResult w = new WaitResult();
          
    AutoResetEvent anEvent = new AutoResetEvent(false);
    lock (waitHandles)
    {
        waitHandles[System.Threading.Thread.CurrentThread]
= anEvent;
    }
    /* Vänta till dess att något har hänt på servern,
dock längst 5 sekunder */

    anEvent.WaitOne(new TimeSpan(0, 0, 0, 5), false);
/* Hämta alla sparade events */
    UpdateEvent[] events = frontend.Manager.GetEvents();

    w.UpdateEvents = events;
    return w;
}





När något viktigt hander på servern, t ex att något ändras i din databas så kan du skicka ett event tillbaka hela vägen till klienten genom att släppa låset och låta ovanstående request gå igenom:


// Släpp sedan alla eventlyssnare som väntar på events


lock (waitHandles)

{

    // släpp alla väntande eventlyssnare

    foreach (AutoResetEvent anEvent in waitHandles.Values)

    {

        anEvent.Set();

    }

}





Viktigt att tänka på:





  • Se till att inte ställa fler än två anrop till servern under tiden som du väntar på svar. Enligt rekommendation i HTTP 1.1-standarden får webbläsaren maximalt göra två samtidiga anslutningar till en och samma server, vilket innebär att alla försök till att hämta data från servern kommer att köas upp tills det finns en ledig anslutning. Detta inkluderar alla javascript, stylesheets, bilder, HTML-dokument etc. Därför är det dels bra att schemalägga första lyssnandet på servern enligt ovan till några sekunder efter att sidan har laddats för att alla bilder, stylesheets och javascript ska hinna hämtas korrekt. Se också till att låta eventuella uppköade anrop få någon sekund på sig att köras igenom innan du ställer en ny fråga till servern.

  • Ett bra tips är att flytta alla statiska resurser till en annan domän, t.ex.: resources.dindoman.se. Det frigör två extra HTTP-anslutningar.

  • Försök samordna alla dina events från servern till en och samma kanal – skicka gärna ett enkelt objekt till klienten som beskriver detaljer om alla typer av server-event och låt klienten avgöra hur de ska hatneras – voila en s.k. event-hubb!

  • Skriv inte till sessionen i din eventlyssnare om det går att undvika. Om du gör det kommer det krävas att du har [AjaxPro.AjaxMethod(AjaxPro.HttpSessionStateRequirement.ReadWrite)] vilket kommer låsa hela sessionen under tiden som du väntar på svar.

  • Tänk också på att göra så få anrop till servern som möjligt, baka gärna ihop dina bilder till en stor PNG som du sedan positionerar med hjälp av CSS, baka också gärna ihop så mycket som möjligt av dina CSS- och JavaScript-filer.

  • Använd FireBug och Yslow för att analysera vad som tar tid i din applikation.

  • Hantera att events kan hända under tiden som din klient inte lyssnar genom att skicka med en tidpunkt (t.ex UTC tiden på servern) för ditt senaste mottagna event.

  • Hantera timeout-fel i javascript genom att ställa nya requests till servern (lägg bara till en extra callback sist i ditt AJAX-anrop till servern).

  • Experimentera med hur lång tid servern ska vänta på händelser och hur lång tid klienten ska vänta innan ett nytt anrop ska ställas.

  • Experimentera med standardvärdet för timeout i AjaxPro – standard är åtta sekunder.

  • Använd inte SetInterval - om något oförutsett händer på servern eller klienten kommer SetInterval köa upp massor av nya förfrågningar som alla kommer starta så fort det finns möjlighet.Använd SetTimeout istället längst ner i din callback


Det absolut viktigaste av ovanstående är att inte använda AjaxPro.HttpSessionStateRequirement.ReadWrite. Om du gör det kommer att alla sidor i din applikation tar mellan noll och fem sekunder extra att exekvera och det är en väldigt svårsökt nöt att knäcka om man inte känner till den.


Lycka till!


Christian


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1087, + "created_at": 1196694660000, + "created_by": 1087, + "updated_at": 1196694660000, + "updated_by": 1087, + "published_at": 1196694660000, + "published_by": 1087 + }, + { + "id": 151, + "title": "Jämförelse mellan EPiServer och RedDot", + "slug": "jamforelse-mellan-episerver-och-reddot", + "markdown": "\r\nEdenström har i sin blogg postat resultat från en jämförelse mellan EPiServer CMS 5 och RedDot 7.5 som har gjorts av det brittiska webbutvecklingsföretaget ioko Carelink. EPiServer ligger enligt dem bättre till i både funktionalitet och pris. Inte så oväntat för oss som har arbetat med båda systemen...", + "html": "

Edenström har i sin blogg postat resultat från en jämförelse mellan EPiServer CMS 5 och RedDot 7.5 som har gjorts av det brittiska webbutvecklingsföretaget ioko Carelink. EPiServer ligger enligt dem bättre till i både funktionalitet och pris. Inte så oväntat för oss som har arbetat med båda systemen...
", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1196769840000, + "created_by": 6, + "updated_at": 1196769840000, + "updated_by": 6, + "published_at": 1196769840000, + "published_by": 6 + }, + { + "id": 159, + "title": "Smartare hantering av null-värden i webbkontroller", + "slug": "smartare-hantering-av-null-varden-i-webbkontroller", + "markdown": "\r\n\r\n\r\nNär man bygger en web user control i C# behöver man ofta hantera situationen att en datakälla kan vara null. Det innebär att man måste hantera detta specialfall överallt i kontrollen för att undvika null reference-fel. Exempel (datakällan till kontrollen är objektet User):\r\n\r\n’/>’/>’/>\r\n\r\nDetta skapar dålig och oläslig kod som lätt riskerar att gå sönder i oväntade fall. Vårt tips är därför att overrida metoden DataBindChildren och helt stänga av hela eller delar av din kod innan systemet automatiskt databinder dem:\r\n\r\nprotected override void DataBindChildren()\r\n{\r\n    if (User != null)\r\n        base.DataBindChildren();\r\n    else\r\n        this.Visible = false;\r\n}\r\n\r\nVilket leder till att din ASPX kod nu kan se ut som den borde: \r\n\r\n\r\n’/>’/>’/>\r\n\r\n\r\n\r\n\r\n\r\n\r\nDet går ockå bra att använda detta för att välja att binda olika block i din kod:\r\n\r\nprotected override void DataBindChildren()\r\n{\r\n    if (DisplayMode == DisplayMode.Tiny)\r\n        TinyPlaceHolder.DataBind();\r\n\r\n    if (DisplayMode == DisplayMode.Small)\r\n        SmallPlaceHolder.DataBind();\r\n}\r\n\r\nDetta gör att du kan ha flera presentationssätt i samma kontroll utan att det ska ta mer prestanda, det enda blocket som binds är ju det som är aktuellt, resterande block göms undan. Det normala beteendet är ju att alla block databindningar sker (även i kontroller som är osynliga) vilket tar kraft och gör att du måste hantera alla specialfall direkt i din ASPX kod.\r\n\r\n", + "html": "


När man bygger en web user control i C# behöver man ofta hantera situationen att en datakälla kan vara null. Det innebär att man måste hantera detta specialfall överallt i kontrollen för att undvika null reference-fel. Exempel (datakällan till kontrollen är objektet User):


<asp:Literal runat=”server” 

    Text=’<%# User == null ? ”” : User[”firstName”]%>’/>
<asp:Literal runat=”server”

    Text=’<%# User == null ? ”” : User[”lastName”]%>’/>
<asp:Literal runat=”server”

    Text=’<%# User == null ? ”” : User[”email”]%>’/>

Detta skapar dålig och oläslig kod som lätt riskerar att gå sönder i oväntade fall. Vårt tips är därför att overrida metoden DataBindChildren och helt stänga av hela eller delar av din kod innan systemet automatiskt databinder dem:


protected override void DataBindChildren()

{

    if (User != null)

        base.DataBindChildren();

    else

        this.Visible = false;

}


Vilket leder till att din ASPX kod nu kan se ut som den borde:




<asp:Literal runat=”server” Text=’<%# User[”firstName”]%>’/>
<asp:Literal runat=”server” Text=’<%# User[”lastName”]%>’/>
<asp:Literal runat=”server” Text=’<%# User[”email”]%>’/>





Det går ockå bra att använda detta för att välja att binda olika block i din kod:


protected override void DataBindChildren()

{

    if (DisplayMode == DisplayMode.Tiny)

        TinyPlaceHolder.DataBind();



    if (DisplayMode == DisplayMode.Small)

        SmallPlaceHolder.DataBind();

}

Detta gör att du kan ha flera presentationssätt i samma kontroll utan att det ska ta mer prestanda, det enda blocket som binds är ju det som är aktuellt, resterande block göms undan. Det normala beteendet är ju att alla block databindningar sker (även i kontroller som är osynliga) vilket tar kraft och gör att du måste hantera alla specialfall direkt i din ASPX kod.


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1087, + "created_at": 1197883560000, + "created_by": 1087, + "updated_at": 1197883560000, + "updated_by": 1087, + "published_at": 1197883560000, + "published_by": 1087 + }, + { + "id": 164, + "title": "Stäng av timeout när du debuggar i IIS7", + "slug": "stang-av-timeout-nar-du-debuggar-i-iis7", + "markdown": "\r\n\r\n\r\nNär man debuggar ett webbprojekt i IIS 7.0 och stöter på en brytpunkt utan att stega vidare så kommer debugprocessen att avbrytas efter 90 sekunder. Det här är väldigt frustrerande eftersom det ju händer lite då och då att man måste tänka till lite extra och inte gärna vill stressa ihjäl sig för att man bara har 90 sekunder på sig att inspektera alla variabler etc.\r\n\r\n\r\nAnledningen till detta är att IISen med jämna mellanrum ser efter hur webbprocesserna mår. Om en process inte svarar (för att den är låst) så stängs den av. Detta för att förhindra att det ligger en massa låsta processer och knyter upp resurser och skräpar ner. Men tyvärr så gäller detta även för processer vilka väntar på en brytpunkt.\r\n\r\n\r\nDet finns två olika lösningar på problemet. Den ena går ut på att man helt enkelt stänger av denna hälsokontroll. Den andra bygger på att man låter hälsokontrollen vara kvar, men att man utökar timeoutvärdet för när IISen anser att en viss process är sönder.\r\n\r\n\r\nI båda fallen så skall man gå in och ändra på den AppPool som ens processer kör under. Markera AppPoolen och tryck på ”Advanced settings”. Under dessa inställningar kan man antingen stänga av funktionaliteten helt genom att sätta ”Ping Enabled” till ”false”, eller utöka värdet ”Ping Maximum Response Time”.\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/iis7-timeout1.png)\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/iis7-timeout2.png)", + "html": "


När man debuggar ett webbprojekt i IIS 7.0 och stöter på en brytpunkt utan att stega vidare så kommer debugprocessen att avbrytas efter 90 sekunder. Det här är väldigt frustrerande eftersom det ju händer lite då och då att man måste tänka till lite extra och inte gärna vill stressa ihjäl sig för att man bara har 90 sekunder på sig att inspektera alla variabler etc.


Anledningen till detta är att IISen med jämna mellanrum ser efter hur webbprocesserna mår. Om en process inte svarar (för att den är låst) så stängs den av. Detta för att förhindra att det ligger en massa låsta processer och knyter upp resurser och skräpar ner. Men tyvärr så gäller detta även för processer vilka väntar på en brytpunkt.


Det finns två olika lösningar på problemet. Den ena går ut på att man helt enkelt stänger av denna hälsokontroll. Den andra bygger på att man låter hälsokontrollen vara kvar, men att man utökar timeoutvärdet för när IISen anser att en viss process är sönder.


I båda fallen så skall man gå in och ändra på den AppPool som ens processer kör under. Markera AppPoolen och tryck på ”Advanced settings”. Under dessa inställningar kan man antingen stänga av funktionaliteten helt genom att sätta ”Ping Enabled” till ”false”, eller utöka värdet ”Ping Maximum Response Time”.












", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "an det!", + "author_id": 1086, + "created_at": 1199465520000, + "created_by": 1086, + "updated_at": 1199465520000, + "updated_by": 1086, + "published_at": 1199465520000, + "published_by": 1086 + }, + { + "id": 168, + "title": "Så här får du AnkhSVN att fungera i Visual Studio 2008 i Vista", + "slug": "sa-har-far-du-ankhsvn-att-fungera-i-visual-studio-2008-i-vista", + "markdown": "\r\n\r\n\r\nFör att få AnkhSVN att fungera i Visual Studio 2008 i Vista, gör såhär:\r\n\r\n\r\n\r\nAvinstallera eventuell tidigare version av AnkhSVN.\r\nKör registerändringen du hittar här: http://damieng.com/blog/2007/06/13/ankhsvn-and-visual-studio-20072008orcas\r\nProva att starta Visual Studio 2008. Om du har tur har du alla praktiska SVN-verktyg på plats i Solution Explorer. För mig behövde det hackas mer (se nedan).\r\nPå nya maskiner finns det inbyggt stöd i processorn för att skydd från otillåten minneshantering (kallat Non-Execute Protection) vilket ger en AccessViolationException när du startar VS 2008. Det enda nu tillgängliga sättet att kringå detta är att stänga av NEP för hela systemet. Det är självklart inte att rekommendera i längden, men kan du som jag inte klara dig utan AnkhSVN så är det värt det. Kom bara ihåg att aktivera detta igen när det kommit en ny version av AnkhSVN som fungerar som den ska i Vista.Tryck på Windows-R (kör) – se till att du kör kommandot som administratör och skriv in följande kommando:bcdedit.exe /set {current} nx AlwaysOffStarta därefter om datorn och starta Visual Studio 2008 och du kommer se denna efterlängtade vy:\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/subversion_logo-384x332.png)\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/ankh.png)", + "html": "


För att få AnkhSVN att fungera i Visual Studio 2008 i Vista, gör såhär:




  1. Avinstallera eventuell tidigare version av AnkhSVN.

  2. Kör registerändringen du hittar här: http://damieng.com/blog/2007/06/13/ankhsvn-and-visual-studio-20072008orcas

  3. Prova att starta Visual Studio 2008. Om du har tur har du alla praktiska SVN-verktyg på plats i Solution Explorer. För mig behövde det hackas mer (se nedan).

  4. På nya maskiner finns det inbyggt stöd i processorn för att skydd från otillåten minneshantering (kallat Non-Execute Protection) vilket ger en AccessViolationException när du startar VS 2008. Det enda nu tillgängliga sättet att kringå detta är att stänga av NEP för hela systemet. Det är självklart inte att rekommendera i längden, men kan du som jag inte klara dig utan AnkhSVN så är det värt det. Kom bara ihåg att aktivera detta igen när det kommit en ny version av AnkhSVN som fungerar som den ska i Vista.

    Tryck på Windows-R (kör) – se till att du kör kommandot som administratör och skriv in följande kommando:

    bcdedit.exe /set {current} nx AlwaysOff

    Starta därefter om datorn och starta Visual Studio 2008 och du kommer se denna efterlängtade vy:





", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "tiella tips! ", + "author_id": 1087, + "created_at": 1200301320000, + "created_by": 1087, + "updated_at": 1200301320000, + "updated_by": 1087, + "published_at": 1200301320000, + "published_by": 1087 + }, + { + "id": 174, + "title": "Så får man regular expressions att returnera kortaste matchningen", + "slug": "sa-far-man-regular-expressions-att-returnera-kortaste-matchningen", + "markdown": "\r\n\r\n\r\nRegular expressions (ingen riktigt bra svensk översättning finns, \"reguljära uttryck\" som används ibland känns mest som svengelska) är kanske det kraftfullaste verktyget för\r\nstränghantering en utvecklare har till sitt förfogande, men samtidigt\r\ndet mest komplicerade.Ett enkelt regular expression-mönster ser ut såhär:\r\n\r\n\r\n\r\n\r\n\r\n\"a.*g\"\r\n\r\n\r\n\r\n\r\n\r\n.* betyder matcha en sträng med vilka tecken som helst (.), valfritt antal gånger (*), så länge strängen omges av tecknen \"a\" och \"g\". \"abcdefg\" matchat mot mönstret ovan returnerar \"abcdefg\". \"atgefhijkl\" returnerar \"atg\". Problemet uppstår när omgivande tecken finns med fler gånger i strängen, eftersom * alltid matchar mot en så läng sträng den kan. Det betyder att strängen \"abcdefghijklmnopqrstg\" returnerar hela strängen, \"abcdefghijklmnopqrstg\". Ibland vill man ha det så, men ibland är det fel tolkning. När man använder ett regexp för att plocka ut HTML-taggar blir det fel t.ex.\r\n\r\n\r\nSom tur är så finns det en variant av * som returnerar kortaste matchningen: ?. ? kallas ibland för \"the lazy quantifier\" och * för \"the greedy quantifier\".\r\n\r\n\r\nOm man matchar \"abcdefghijklmnopqrstg\" mot \"a.*?g\" så får man ut den kortaste matchningen, \"abcdefg\".\r\n\r\n\r\nAtt det ofta blir fel kan bero på att många är vana vid att använda s.k. jokertecken (wildcards) som är en sorts budgetvariant av regexp. När man använder jokertecken finns bara * inte ?. Många programmerare är vana vid att använda jokertecken för att filtrera filnamn (\"*.doc\") men använder regular expressions mycket mer sällan.\r\n\r\n\r\n.NETs motor för regular expressions fungerar i princip identiskt med Perls regular expressions, så det här är en bra referensmanual för regular expressions i .NET:\r\n\r\n\r\n\r\nhttp://www.regular-expressions.info/reference.html\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/emailregexpbox.png)", + "html": "


Regular expressions (ingen riktigt bra svensk översättning finns, \"reguljära uttryck\" som används ibland känns mest som svengelska) är kanske det kraftfullaste verktyget för
stränghantering en utvecklare har till sitt förfogande, men samtidigt
det mest komplicerade.
Ett enkelt regular expression-mönster ser ut såhär:




\"a.*g\"



.* betyder matcha en sträng med vilka tecken som helst (.), valfritt antal gånger (*), så länge strängen omges av tecknen \"a\" och \"g\". \"abcdefg\" matchat mot mönstret ovan returnerar \"abcdefg\". \"atgefhijkl\" returnerar \"atg\". Problemet uppstår när omgivande tecken finns med fler gånger i strängen, eftersom * alltid matchar mot en så läng sträng den kan. Det betyder att strängen \"abcdefghijklmnopqrstg\" returnerar hela strängen, \"abcdefghijklmnopqrstg\". Ibland vill man ha det så, men ibland är det fel tolkning. När man använder ett regexp för att plocka ut HTML-taggar blir det fel t.ex.


Som tur är så finns det en variant av * som returnerar kortaste matchningen: ?. ? kallas ibland för \"the lazy quantifier\" och * för \"the greedy quantifier\".


Om man matchar \"abcdefghijklmnopqrstg\" mot \"a.*?g\" så får man ut den kortaste matchningen, \"abcdefg\".


Att det ofta blir fel kan bero på att många är vana vid att använda s.k. jokertecken (wildcards) som är en sorts budgetvariant av regexp. När man använder jokertecken finns bara * inte ?. Många programmerare är vana vid att använda jokertecken för att filtrera filnamn (\"*.doc\") men använder regular expressions mycket mer sällan.


.NETs motor för regular expressions fungerar i princip identiskt med Perls regular expressions, så det här är en bra referensmanual för regular expressions i .NET:



http://www.regular-expressions.info/reference.html


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "ar som är så korta som möjligt, istället för så långa som möjligt som är det regular expressions returnerar som standard.", + "author_id": 6, + "created_at": 1201191600000, + "created_by": 6, + "updated_at": 1201191600000, + "updated_by": 6, + "published_at": 1201191600000, + "published_by": 6 + }, + { + "id": 184, + "title": "Bästa tipsen för att optimera bildladdning på webbplatser", + "slug": "basta-tipsen-for-att-optimera-bildladdning-pa-webbplatser", + "markdown": "\r\n\r\n\r\nHTTP 1.1 är det protokoll som är standard för att överföra webbsidor på nätet idag. Det många inte vet  är att det har en inbyggd begränsning på två anslutningar per webbadress. Detta innebär att om klienten skall ladda ner 10 bilder kommer detta ske i 5 helt separata steg där den laddar ner två bilder i taget tills alla bilder är nedladdade. Effekten av detta är att webbläsaren måste fråga servern tio gånger och varje gång läggs pingtiden till. Pingtiden är normalt 5-100 ms beroende bl.a. på avståndet mellan datorerna, och med 10 bilder kommer alltså den totala väntetiden bli 25-500 ms, d.v.s. upp till en halv sekund. Då är inte inte ens överföringstiden inräknad!\r\n\r\n\r\nJag ska berätta om några smarta tips för att sidan ska gå snabbare, men först några jämförelser:\r\n\r\n\r\n\r\nEn exempelsida som är typisk för många sidor på webben. Summan av pingtiden (vid 50 ms snitt):10  små bilder t.ex ikoner = 500 ms1 stor bild = 50 ms2 mellanstora bilder = 100 ms3 stylesheets =150 ms4 javascriptfiler = 200 ms1000 ms totalt / 2 kopplingar = 500 ms i ren väntetid.\r\n\r\n\r\n\r\nEn optimerad sida med samma förutsättningar som ovan:\r\n1  bildkarta med små bilder t.ex ikoner = 50 ms1 stor bild = 50 ms2 mellanstora bilder = 100 ms1 stylesheet =50 ms1 javascriptfil = 50 ms300 ms totalt / 2 kopplingar = 150ms i ren väntetid.\r\n\r\n## Slå ihop filer\r\n\r\nGenom att slå ihop stylesheets och javascript-filerna till endast två så fick vi bort 250 ms. Den allra största vinsten gör vi dock på ikonerna, genom att använda en bildkarta istället, och där sparar vi alltså hela 450 ms. Självklart så kommer nästa sidladdning ha cachat alla bilder och stylesheets så den största vinsten görs första laddningen men varje gång du introducerar nya ikoner på en sida så kommer väntetiden att ticka.\r\n\r\n## Skapa fler än två connections\r\n\r\nDu kan också använda flera olika adresser (även 2 olika domäner som pekar på samma ip-adress och server går bra) och därmed öka antalet kopplingar. Med fler domäner måste man också räkna in DNS-uppslagningar, så att använda alltför många domäner flyttar bara problemet. Två domäner är lagom och innebär att du t.ex. kan hämta sidan och javascript från huvuddomänen medan bilder och stylesheets hämtas från en resursdomän. Ex: domän ett kan heta www.domain.com och domän två resources.domain.com eller bara domain.com.\r\n\r\n## En bildkartaFör att slå ihop bilder behöver du skapa en bildkarta. Börja med att skapa en en bild med 3 rutor i bredd och så många rutor hög som antal ikoner du vill ha. En ruta i det här fallet motsvarar ikonstorleken du vill ha, t.ex. 24, 32 eller 64 pixlar. I detta exempel gör vi ikonerna 24 pixlar stora och vi vill ha två ikoner. För att hålla koll på var ikonerna hamnar slår vi på ett rutnät på 24 pixlar (edit/preferences/grid och View/grid i photoshop).\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/grids.png)\r\nAnledningen till att jag valde 3 rutor i bredd är för att det motsvarar de tre stadier som en ikon kan ha d.v.s .normal, en mouseover/hover eller aktiv och en inaktiv. Självklart behöver inte alla rutor vara lika stora men det förenklar hanteringen både i PhotoShop och sedan när CSS-koden skall skrivas.## CSS-kodenKoden som klipper isär bildkartan ser ut såhär:\r\n.icon { background-image: url(../images/icons_24.png); width: 24px; height: 24px; overflow: hidden; float:left;}.icon.warning { background-position: 0px 0px; }.icon.warning:hover, .icon.warning.active { background-position: 0px -24px; }.icon.warning.disabled { background-position: 0px -48px; }.icon.query { background-position: -24px 0px; }.icon.query:hover, .icon.query.active { background-position: -24px -24px; }.icon.query.disabled { background-position: -24px -48px; }\r\n\r\nFörsta raden definierar bakgrundsbilden och storleken på ikonerna, width och height ska alltså motsvara ikonstorleken. ”Float:left” gör att ikonerna beter sig som om de vore vanliga bilder. Här kan du även lägga in marginaler och sånt som du vill ha på alla ikoner som standard.De andra raderna definerar varje ikon och stadium för sig. Logiken bakom siffrorna är att minska med ikonbredden för varje stadium i den högra siffran och minska med ikonhöjden för varje ny ikon i den vänstra siffran.\r\n\r\n\r\n## Hur man använder ikonerna i htmlNu är bilden och stylesheetet klart så hur använder man då ikonerna i html sidan, jo som vanliga divar.  Koden blir kompakt och lättläst.\r\n
\r\n\r\nSjälvklart kan man lägga till tooltips precis som om det vore vanliga bilder\r\n\r\n
\r\n## Andra fördelar\r\nGenom att byta ut url:en till bakgrundsbilden på ett ställe så byter du alla ikoner på hela siten, ett enkelt sätt att hantera olika teman. Du slipper också tänka på att förladda bilder när du använder mouseover-/hover-effekter eftersom alla ikonerna alltid är inladdade.\r\n", + "html": "


HTTP 1.1 är det protokoll som är standard för att överföra webbsidor på nätet idag. Det många inte vet  är att det har en inbyggd begränsning på två anslutningar per webbadress. Detta innebär att om klienten skall ladda ner 10 bilder kommer detta ske i 5 helt separata steg där den laddar ner två bilder i taget tills alla bilder är nedladdade. Effekten av detta är att webbläsaren måste fråga servern tio gånger och varje gång läggs pingtiden till. Pingtiden är normalt 5-100 ms beroende bl.a. på avståndet mellan datorerna, och med 10 bilder kommer alltså den totala väntetiden bli 25-500 ms, d.v.s. upp till en halv sekund. Då är inte inte ens överföringstiden inräknad!


Jag ska berätta om några smarta tips för att sidan ska gå snabbare, men först några jämförelser:



En exempelsida som är typisk för många sidor på webben. Summan av pingtiden (vid 50 ms snitt):
10  små bilder t.ex ikoner = 500 ms
1 stor bild = 50 ms
2 mellanstora bilder = 100 ms
3 stylesheets =150 ms
4 javascriptfiler = 200 ms
1000 ms totalt / 2 kopplingar = 500 ms i ren väntetid.



En optimerad sida med samma förutsättningar som ovan:

1  bildkarta med små bilder t.ex ikoner = 50 ms
1 stor bild = 50 ms
2 mellanstora bilder = 100 ms
1 stylesheet =50 ms
1 javascriptfil = 50 ms
300 ms totalt / 2 kopplingar = 150ms i ren väntetid.


Slå ihop filer


Genom att slå ihop stylesheets och javascript-filerna till endast två så fick vi bort 250 ms. Den allra största vinsten gör vi dock på ikonerna, genom att använda en bildkarta istället, och där sparar vi alltså hela 450 ms. Självklart så kommer nästa sidladdning ha cachat alla bilder och stylesheets så den största vinsten görs första laddningen men varje gång du introducerar nya ikoner på en sida så kommer väntetiden att ticka.


Skapa fler än två connections


Du kan också använda flera olika adresser (även 2 olika domäner som pekar på samma ip-adress och server går bra) och därmed öka antalet kopplingar. Med fler domäner måste man också räkna in DNS-uppslagningar, så att använda alltför många domäner flyttar bara problemet. Två domäner är lagom och innebär att du t.ex. kan hämta sidan och javascript från huvuddomänen medan bilder och stylesheets hämtas från en resursdomän. Ex: domän ett kan heta www.domain.com och domän två resources.domain.com eller bara domain.com.


En bildkarta

För att slå ihop bilder behöver du skapa en bildkarta. Börja med att skapa en en bild med 3 rutor i bredd och så många rutor hög som antal ikoner du vill ha. En ruta i det här fallet motsvarar ikonstorleken du vill ha, t.ex. 24, 32 eller 64 pixlar. I detta exempel gör vi ikonerna 24 pixlar stora och vi vill ha två ikoner. För att hålla koll på var ikonerna hamnar slår vi på ett rutnät på 24 pixlar (edit/preferences/grid och View/grid i photoshop).






Anledningen till att jag valde 3 rutor i bredd är för att det motsvarar de tre stadier som en ikon kan ha d.v.s .normal, en mouseover/hover eller aktiv och en inaktiv. Självklart behöver inte alla rutor vara lika stora men det förenklar hanteringen både i PhotoShop och sedan när CSS-koden skall skrivas.

CSS-koden

Koden som klipper isär bildkartan ser ut såhär:

.icon { background-image: url(../images/icons_24.png); width: 24px; height: 24px; overflow: hidden; float:left;}
.icon.warning { background-position: 0px 0px; }
.icon.warning:hover, .icon.warning.active { background-position: 0px -24px; }
.icon.warning.disabled { background-position: 0px -48px; }
.icon.query { background-position: -24px 0px; }
.icon.query:hover, .icon.query.active { background-position: -24px -24px; }
.icon.query.disabled { background-position: -24px -48px; }

Första raden definierar bakgrundsbilden och storleken på ikonerna, width och height ska alltså motsvara ikonstorleken. ”Float:left” gör att ikonerna beter sig som om de vore vanliga bilder. Här kan du även lägga in marginaler och sånt som du vill ha på alla ikoner som standard.
De andra raderna definerar varje ikon och stadium för sig. Logiken bakom siffrorna är att minska med ikonbredden för varje stadium i den högra siffran och minska med ikonhöjden för varje ny ikon i den vänstra siffran.

Hur man använder ikonerna i html

Nu är bilden och stylesheetet klart så hur använder man då ikonerna i html sidan, jo som vanliga divar.  Koden blir kompakt och lättläst.

<div class=”icon warning”></div>
<div class=”icon warning active”></div>
<div class=”icon query disabled”></div>

Självklart kan man lägga till tooltips precis som om det vore vanliga bilder

<div class=”icon warning” title=”warning”></div>

Andra fördelar

Genom att byta ut url:en till bakgrundsbilden på ett ställe så byter du alla ikoner på hela siten, ett enkelt sätt att hantera olika teman. Du slipper också tänka på att förladda bilder när du använder mouseover-/hover-effekter eftersom alla ikonerna alltid är inladdade.

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "rotokollet är konstruerat. Här kommer en otroligt smart lösning!", + "author_id": 1089, + "created_at": 1203705300000, + "created_by": 1089, + "updated_at": 1203705300000, + "updated_by": 1089, + "published_at": 1203705300000, + "published_by": 1089 + }, + { + "id": 185, + "title": "Det stora slaget: ASP.NET AJAX mot AjaxPro", + "slug": "det-stora-slaget-aspnet-ajax-mot-ajaxpro", + "markdown": "\r\n\r\n\r\nEftersom Michael Schwarz har slutat utveckla AjaxPro.NET har vi gjort en utvärdering av andra alternativ för vår AJAX-utveckling. Våra bedömningsgrunder är:\r\n\r\n\r\n\r\n\r\n\r\n\r\nIntegrerbarhet med .NET och våra utvecklingsmiljöer\r\nSnabbhet och effektivitet\r\nStorlek och antal filer att inkludera på varje sida\r\nFramtidssäkerhet\r\nSnygghet och allmän känsla\r\n\r\n\r\n\r\n\r\n\r\n## AJAX ASP.NET som är inbyggt i .NET 3.0.\r\n\r\nI grund och botten kan man dela upp det inbyggda stödet i .NET i tre grupper:\r\n\r\n\r\n\r\na. UpdatePanels och AJAX-kontroller (uppdatera delar av sidan utan synlig omladdning)\r\n\r\n\r\n\r\n\r\n\r\n  \r\n    Static text\r\n    \r\n  \r\n  \r\n    \r\n  \r\n\r\n\r\n\r\n\r\nb. Statiska webmetoder (Webmethods direkt på sidan, nästan exakt samma implementation som AjaxPro)\r\n\r\n\r\n\r\n\r\nDefault.aspx.cs:\r\n[WebMethod(true)]\r\npublic static string AJAXHello(string name)\r\n{\r\n  return \"Hello \" + name;\r\n}\r\n\r\n\r\n\r\nc. Anropa en Web Service (.asmx) direkt från JavaScript\r\n\r\n\r\n\r\n\r\nCall WebService\r\nWebservice.asmx:\r\n[WebMethod]\r\n[ScriptMethod(UseHttpGet = true)]\r\npublic DateTime Hello(string name)\r\n{\r\n  return \"Hello \" + name;\r\n}\r\n\r\n\r\nVi kan direkt konstatera att alternativ a (UpdatePanel) är förkastligt då den anropar och binder om hela sidan vid varje anrop, därefter görs en klientmatchning som uppdaterar de delar av sidan som har uppdaterats. Detta skapar väldigt stor overhead och fungerar endast på enkla sidor och sådana behöver man oftast inte implementera AJAX på överhuvudtaget.\r\n\r\n\r\nAlternativ b kändes intressant men har begränsningen att man måste skriva det mesta av JavaScript-anropen själv – AjaxPro genererar ju automatiskt en proxyklass som hanterar alla anrop. Dessutom kan man inte göra denna typ av anrop på en UserControl.\r\n\r\n\r\nAlternativ c är mest intressant då detta får fördelen att man skapar en standardiserat SOAP-gränssnitt som man integrera även på andra sätt än AJAX. Några nackdelar i jämförelse med AjaxPro är att man själv behöver konvertera de flesta mer komplicerade objekten till JavaScript själv. Att t.ex. överföra en DataTable eller ett DataSet direkt till klienten resulterar i serialiseringsproblem.\r\n\r\n\r\n(Jämför man hastigheten med AjaxPro märker man också att eftersom alla anrop måste gå via XML tar konverteringen till JavaScript längre tid än JSON som AjaxPro använder sig av. Nu är står ju X:et i AJAX just för XML så man får nog stå ut med denna nackdel i hastighet med tanke på framtidssäkerheten i XML.)\r\n\r\n\r\nFörutom ovanstående nackdelar kan man också notera att minimiantalet include-script är fyra dynamiskt genererade jämfört med ett statiskt i AjaxPro vilket skapar en overhead av 117 kb innan man lagt på sitt favorit-JavaScript UI-bibliotek (ExtJS eller YUI?).\r\n\r\n## Poäng AJAX ASP.NET:\r\n\r\n\r\n\r\n\r\n\r\nIntegrerbarhet med .NET och våra utvecklingsmiljöer: 5 av 5\r\nSnabbhet och effektivitet: 1 av 5\r\nStorlek och antal filer att inkludera på varje sida: 2 av 5\r\nFramtidssäkerhet: 5 av 5\r\nSnygghet och allmän känsla: 2 av 5\r\n\r\nTotalt: 15 av 25 möjliga\r\n\r\n\r\n\r\n\r\n## AjaxPro jämförelsepoäng:\r\n\r\n\r\n\r\n\r\n\r\nIntegrerbarhet med .NET och våra utvecklingsmiljöer: 5 av 5\r\nSnabbhet och effektivitet: 4 av 5\r\nStorlek och antal filer att inkludera på varje sida: 4 av 5\r\nFramtidssäkerhet: 2 av 5 (biblioteket är dock Open Source vilket ger en viss trygghet)\r\nSnygghet och allmän känsla: 5 av 5\r\n\r\nTotalt: 20 poäng av 25 möjliga\r\n\r\nVår slutsats är därför: Trots att utvecklingen är nedlagd så är det i väntan på bättre alternativ bättre för oss att jobba vidare med AjaxPro och hoppas att det finns andra utvecklare som just nu jobbar på ett bättre och mer integrerat alternativ för .NET (förhoppningsvis en direkt ExtJs-implementation till .NET). Dessutom ska det bli spännande att se vad MVC.NET erbjuder i AJAX-väg plus att det ryktas om att det finns JSON-stöd i nya WCF (Windows Communication Framework) - mer om det längre fram.\r\n\r\n\r\nDen högsta önskan är dock att vi snart slipper Javascript helt och kan gå över till C# även på klienten i och med SilverLight 2 som snart släpps i Beta.\r\n\r\n\r\n\r\n// Christian & Tommy\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/ajax.png)", + "html": "


Eftersom Michael Schwarz har slutat utveckla AjaxPro.NET har vi gjort en utvärdering av andra alternativ för vår AJAX-utveckling. Våra bedömningsgrunder är:





  • Integrerbarhet med .NET och våra utvecklingsmiljöer

  • Snabbhet och effektivitet

  • Storlek och antal filer att inkludera på varje sida

  • Framtidssäkerhet

  • Snygghet och allmän känsla




AJAX ASP.NET som är inbyggt i .NET 3.0.


I grund och botten kan man dela upp det inbyggda stödet i .NET i tre grupper:



a. UpdatePanels och AJAX-kontroller (uppdatera delar av sidan utan synlig omladdning)



<asp:UpdatePanel RenderMode=\"Inline\" runat=\"server\" UpdateMode=\"Conditional\">

  <ContentTemplate>

    <asp:Label runat=\"server\" ID=\"UpdateMe\">Static text</asp:Label>

    <asp:Button runat=\"server\" ID=\"Button1\" OnClick=\"Button1_Click\" />

  </ContentTemplate>

  <Triggers >

    <asp:AsyncPostBackTrigger ControlID=\"Button1\" />

  </Triggers>

</asp:UpdatePanel>



b. Statiska webmetoder (Webmethods direkt på sidan, nästan exakt samma implementation som AjaxPro)



Default.aspx.cs:

[WebMethod(true)]

public static string AJAXHello(string name)

{

  return \"Hello \" + name;

}



c. Anropa en Web Service (.asmx) direkt från JavaScript



<a href=\"javascript:WebService.Hello(prompt('Namn?'), function(result){alert(result)});\">Call WebService</a>

Webservice.asmx:

[WebMethod]

[ScriptMethod(UseHttpGet = true)]

public DateTime Hello(string name)

{

  return \"Hello \" + name;

}


Vi kan direkt konstatera att alternativ a (UpdatePanel) är förkastligt då den anropar och binder om hela sidan vid varje anrop, därefter görs en klientmatchning som uppdaterar de delar av sidan som har uppdaterats. Detta skapar väldigt stor overhead och fungerar endast på enkla sidor och sådana behöver man oftast inte implementera AJAX på överhuvudtaget.


Alternativ b kändes intressant men har begränsningen att man måste skriva det mesta av JavaScript-anropen själv – AjaxPro genererar ju automatiskt en proxyklass som hanterar alla anrop. Dessutom kan man inte göra denna typ av anrop på en UserControl.


Alternativ c är mest intressant då detta får fördelen att man skapar en standardiserat SOAP-gränssnitt som man integrera även på andra sätt än AJAX. Några nackdelar i jämförelse med AjaxPro är att man själv behöver konvertera de flesta mer komplicerade objekten till JavaScript själv. Att t.ex. överföra en DataTable eller ett DataSet direkt till klienten resulterar i serialiseringsproblem.


(Jämför man hastigheten med AjaxPro märker man också att eftersom alla anrop måste gå via XML tar konverteringen till JavaScript längre tid än JSON som AjaxPro använder sig av. Nu är står ju X:et i AJAX just för XML så man får nog stå ut med denna nackdel i hastighet med tanke på framtidssäkerheten i XML.)


Förutom ovanstående nackdelar kan man också notera att minimiantalet include-script är fyra dynamiskt genererade jämfört med ett statiskt i AjaxPro vilket skapar en overhead av 117 kb innan man lagt på sitt favorit-JavaScript UI-bibliotek (ExtJS eller YUI?).


Poäng AJAX ASP.NET:





  • Integrerbarhet med .NET och våra utvecklingsmiljöer: 5 av 5

  • Snabbhet och effektivitet: 1 av 5

  • Storlek och antal filer att inkludera på varje sida: 2 av 5

  • Framtidssäkerhet: 5 av 5

  • Snygghet och allmän känsla: 2 av 5


Totalt: 15 av 25 möjliga



AjaxPro jämförelsepoäng:





  • Integrerbarhet med .NET och våra utvecklingsmiljöer: 5 av 5

  • Snabbhet och effektivitet: 4 av 5

  • Storlek och antal filer att inkludera på varje sida: 4 av 5

  • Framtidssäkerhet: 2 av 5 (biblioteket är dock Open Source vilket ger en viss trygghet)

  • Snygghet och allmän känsla: 5 av 5


Totalt: 20 poäng av 25 möjliga

Vår slutsats är därför: Trots att utvecklingen är nedlagd så är det i väntan på bättre alternativ bättre för oss att jobba vidare med AjaxPro och hoppas att det finns andra utvecklare som just nu jobbar på ett bättre och mer integrerat alternativ för .NET (förhoppningsvis en direkt ExtJs-implementation till .NET). Dessutom ska det bli spännande att se vad MVC.NET erbjuder i AJAX-väg plus att det ryktas om att det finns JSON-stöd i nya WCF (Windows Communication Framework) - mer om det längre fram.


Den högsta önskan är dock att vi snart slipper Javascript helt och kan gå över till C# även på klienten i och med SilverLight 2 som snart släpps i Beta.



// Christian & Tommy


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "-inbyggda ASP.NET AJAX istället?", + "author_id": 1087, + "created_at": 1204057440000, + "created_by": 1087, + "updated_at": 1204057440000, + "updated_by": 1087, + "published_at": 1204057440000, + "published_by": 1087 + }, + { + "id": 189, + "title": "Kortaste exemplet på hur man använder Exchange 2007 Web Services", + "slug": "kortaste-exemplet-pa-hur-man-anvander-exchange-2007-web-services", + "markdown": "\r\n\r\n\r\nFörut använde man krångliga WebDav frågor som skickades via XML till Exchange-servern. Från och med Exchange 2007 finns det dock en inbyggd Web Service som man kan använda för att på ett smidigt sätt integrera direkt mot Exchange Server. Tyvärr är de flesta kodexempel för att använda denna Web Service väldigt komplicerade och långa, vilket minskar läsbarheten och ökar startsträckan att lära sig hur man använder den. Jag bestämde mig för att bena ut vad som är det enklaste exemplet för att läsa ut alla Tasks från ett användarkonto i Exchange. Innan du kan köra koden nedan behöver du lägga till WSDL-filen i Web References i Visual Studio (ex. https://exchange-server/ews/services.wsdl)\r\n\r\n\r\nSå här \"enkel\" blev koden:\r\n\r\n\r\n\r\n// server = ex. https://exchange-server\r\n// exchangeCredentials är det konto som du vill hämta tasks från eller ett servicekonto – då anger du en mailbox i folders nedan\r\npublic List GetOutlookTasks(string serverUrl, Credentials exchangeCredentials)\r\n{\r\n  ExchangeServiceBinding esb = new ExchangeServiceBinding();\r\n  esb.Credentials = exchangeCredentials;\r\n  esb.Url = string.Format(@\"{0}/EWS/Exchange.asmx\", server);\r\n  // Tell it you only want to look in the tasks folder\r\n  DistinguishedFolderIdType[] folders = new DistinguishedFolderIdType[1];\r\n  folders [0] = new DistinguishedFolderIdType();\r\n  folders [0].Id = DistinguishedFolderIdNameType.tasks; // Smidigt att kunna ange typ av folder med hjälp av en typ och inte namn som kan variera\r\n  // Form the FindItem request\r\n  FindItemType findItemRequest = new FindItemType();\r\n  findItemRequest.ItemShape = new ItemResponseShapeType();\r\n  findItemRequest.ItemShape.BaseShape = DefaultShapeNamesType.AllProperties; // Viktigt för att man ska kunna se fler fält än systemfält\r\n  findItemRequest.ParentFolderIds = folderIDArray;  \r\n  // Send the request and get the response\r\n  FindItemResponseType findItemResponse = esb.FindItem(findItemRequest);\r\n  if (findItemResponse.ResponseMessages.Items.Length > 0)\r\n  {\r\n    // Detta skulle man gärna slippa...\r\n    FindItemResponseMessageType responseMessage = findItemResponse.ResponseMessages.Items[0] as FindItemResponseMessageType;\r\n    ArrayOfRealItemsType realItems = responseMessage.RootFolder.Item as ArrayOfRealItemsType;\r\n    List outlookTasks = new List();\r\n    foreach (TaskType task in realItems.Items)\r\n    {\r\n      // smidigt att kunna anropa fälten direkt mha Intellisence och utan krångliga schemanamn etc\r\n      Console.WriteLine(\"Task: {0} Duration: {1}-{2} \\n\", task.Subject, task.StartDate, task.DueDate);\r\n      outlookTasks.Add(task);\r\n    }\r\n    return outlookTasks;\r\n  }\r\n  return null;\r\n}\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/exchange2007.png)", + "html": "


Förut använde man krångliga WebDav frågor som skickades via XML till Exchange-servern. Från och med Exchange 2007 finns det dock en inbyggd Web Service som man kan använda för att på ett smidigt sätt integrera direkt mot Exchange Server. Tyvärr är de flesta kodexempel för att använda denna Web Service väldigt komplicerade och långa, vilket minskar läsbarheten och ökar startsträckan att lära sig hur man använder den. Jag bestämde mig för att bena ut vad som är det enklaste exemplet för att läsa ut alla Tasks från ett användarkonto i Exchange. Innan du kan köra koden nedan behöver du lägga till WSDL-filen i Web References i Visual Studio (ex. https://exchange-server/ews/services.wsdl)


Så här \"enkel\" blev koden:



// server = ex. https://exchange-server

// exchangeCredentials är det konto som du vill hämta tasks från eller ett servicekonto – då anger du en mailbox i folders nedan

public List GetOutlookTasks(string serverUrl, Credentials exchangeCredentials)

{

  ExchangeServiceBinding esb = new ExchangeServiceBinding();

  esb.Credentials = exchangeCredentials;

  esb.Url = string.Format(@\"{0}/EWS/Exchange.asmx\", server);


  // Tell it you only want to look in the tasks folder

  DistinguishedFolderIdType[] folders = new DistinguishedFolderIdType[1];

  folders [0] = new DistinguishedFolderIdType();

  folders [0].Id = DistinguishedFolderIdNameType.tasks; // Smidigt att kunna ange typ av folder med hjälp av en typ och inte namn som kan variera


  // Form the FindItem request

  FindItemType findItemRequest = new FindItemType();

  findItemRequest.ItemShape = new ItemResponseShapeType();

  findItemRequest.ItemShape.BaseShape = DefaultShapeNamesType.AllProperties; // Viktigt för att man ska kunna se fler fält än systemfält

  findItemRequest.ParentFolderIds = folderIDArray;

  
  // Send the request and get the response

  FindItemResponseType findItemResponse = esb.FindItem(findItemRequest);


  if (findItemResponse.ResponseMessages.Items.Length > 0)

  {

    // Detta skulle man gärna slippa...

    FindItemResponseMessageType responseMessage = findItemResponse.ResponseMessages.Items[0] as FindItemResponseMessageType;

    ArrayOfRealItemsType realItems = responseMessage.RootFolder.Item as ArrayOfRealItemsType;


    List outlookTasks = new List();

    foreach (TaskType task in realItems.Items)

    {

      // smidigt att kunna anropa fälten direkt mha Intellisence och utan krångliga schemanamn etc

      Console.WriteLine(\"Task: {0} Duration: {1}-{2} \\n\", task.Subject, task.StartDate, task.DueDate);

      outlookTasks.Add(task);

    }


    return outlookTasks;

  }


  return null;

}


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "r kommer ett enkelt exempel på hur man använder den!", + "author_id": 1087, + "created_at": 1205809200000, + "created_by": 1087, + "updated_at": 1205809200000, + "updated_by": 1087, + "published_at": 1205809200000, + "published_by": 1087 + }, + { + "id": 192, + "title": "LINQ-labb", + "slug": "linq-labb", + "markdown": "\r\n\r\n\r\nAlla .NET utvecklare har väl hört talas om LINQ, men de flesta känner nog att det är lite väl mycket nytt som man inte riktigt har tid att sätta sig in i. Därför tog jag mig lite tid och har testat vad det handlar om och kan säga att jag är väldigt imponerad!\r\n\r\n\r\nDet kommer en mer utförlig blog snart med mer kodexempel, men tills dess så rekommenderar jag er att titta på följande galna italienare (Luca Bolognese) som knappt kan engelska. Scrolla fram till kodexemplen så får ni lite känsla för vad det handlar om.\r\n\r\n\r\nNär du väl börjar labba så kommer du snabbt inse att dokumentationen i MSDN är lite väl tom på exempel, då har jag hittat den här sidan som är ovärdelig:\r\n\r\n\r\n\r\n101 LINQ samples\r\n\r\n\r\n\r\nAvslutningsvis så kommer här det enklaste exemplet på hur man skapar en LINQ-fråga:\r\n\r\n\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/linq1.png)\r\nObservera hur fint tabellerna byter från plural i tabellnamnet (om du använder plural i databasen) till singular i klassnamnet.\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/linq2.png)\r\n\r\n\r\n\r\nDBDataContext db = new DBDataContext();\r\nvar query = from country c in db.countries\r\n  where c.country_code == code\r\n  select c;\r\nreturn query.First().country_name;\r\n\r\n\r\n\r\n\r\n\r\nDBDataContext db = new DBDataContext();\r\nvar query = from country c in db.countries\r\n  where country.country_id == countryId\r\n  select c;\r\ncountry c = query.First();\r\nc.country_name = \"New name”;\r\ndb.SubmitChanges();\r\n\r\n\r\n\r\nVoila!\r\n\r\n\r\n", + "html": "


Alla .NET utvecklare har väl hört talas om LINQ, men de flesta känner nog att det är lite väl mycket nytt som man inte riktigt har tid att sätta sig in i. Därför tog jag mig lite tid och har testat vad det handlar om och kan säga att jag är väldigt imponerad!


Det kommer en mer utförlig blog snart med mer kodexempel, men tills dess så rekommenderar jag er att titta på följande galna italienare (Luca Bolognese) som knappt kan engelska. Scrolla fram till kodexemplen så får ni lite känsla för vad det handlar om.


När du väl börjar labba så kommer du snabbt inse att dokumentationen i MSDN är lite väl tom på exempel, då har jag hittat den här sidan som är ovärdelig:



101 LINQ samples


Avslutningsvis så kommer här det enklaste exemplet på hur man skapar en LINQ-fråga:










Observera hur fint tabellerna byter från plural i tabellnamnet (om du använder plural i databasen) till singular i klassnamnet.







DBDataContext db = new DBDataContext();

var query = from country c in db.countries

  where c.country_code == code

  select c;

return query.First().country_name;






DBDataContext db = new DBDataContext();

var query = from country c in db.countries

  where country.country_id == countryId

  select c;


country c = query.First();

c.country_name = \"New name”;

db.SubmitChanges();



Voila!


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "d det handlar om och kan säga att jag är väldigt imponerad!", + "author_id": 1087, + "created_at": 1206959400000, + "created_by": 1087, + "updated_at": 1206959400000, + "updated_by": 1087, + "published_at": 1206959400000, + "published_by": 1087 + }, + { + "id": 194, + "title": "Nytt sätt att sätta properties på sidor i EPiServer CMS 5", + "slug": "nytt-satt-att-satta-properties-pa-sidor-i-episerver-cms-5", + "markdown": "\r\n\r\n\r\nI Release Notes till senaste versionen av EPiServer CMS 5 gömmer sig en ganska viktig förändring som kan orsaka mycket frustration. Man måste göra på ett nytt sätt när man sätter värden på properties på sidor från koden, annars kommer man att få en NotSupportedException (\"Property is read-only\").\r\n\r\n\r\nSåhär gör man i tidigare versioner, fram till version 4.61:\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/episervercms5.png)\r\n```prettyprint lang-c-sharp\r\nCurrentPage[\"MyProperty\"] = \"Nytt värde\";\r\nGlobal.EPDataFactory.Save(CurrentPage, SaveAction.Publish);\r\n```\r\n\r\n\r\n\r\nI CMS 5 är dock alla properties i CurrentPage-objektet endast för läsning. Orsaken till det är att man därmed kunde göra några viktiga antaganden som har lett till enklare och bättre cache-hantering. Såhär gör man i den nya versionen när man vill ändra värden på properties:\r\n\r\n\r\n```prettyprint lang-c-sharp\r\nPageData writeable = CurrentPage.CreateWritableClone();\r\nwriteable[\"MyProperty\"] = \"Nytt värde\";\r\nDataFactory.Instance.Save(writeable, SaveAction.Publish);\r\n```\r\n\r\n\r\n\r\nInte så mycket svårare således, men jag tycker att texten i felmeddelandet kunde ha varit lite mer hjälpsam än \"Property is read-only\".\r\n\r\n", + "html": "


I Release Notes till senaste versionen av EPiServer CMS 5 gömmer sig en ganska viktig förändring som kan orsaka mycket frustration. Man måste göra på ett nytt sätt när man sätter värden på properties på sidor från koden, annars kommer man att få en NotSupportedException (\"Property is read-only\").


Såhär gör man i tidigare versioner, fram till version 4.61:





I CMS 5 är dock alla properties i CurrentPage-objektet endast för läsning. Orsaken till det är att man därmed kunde göra några viktiga antaganden som har lett till enklare och bättre cache-hantering. Såhär gör man i den nya versionen när man vill ändra värden på properties:





Inte så mycket svårare således, men jag tycker att texten i felmeddelandet kunde ha varit lite mer hjälpsam än \"Property is read-only\".


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "ett felmeddelande om att properties inte går att skriva till.", + "author_id": 6, + "created_at": 1207655700000, + "created_by": 6, + "updated_at": 1207655700000, + "updated_by": 6, + "published_at": 1207655700000, + "published_by": 6 + }, + { + "id": 208, + "title": "I vilken ordning ska knapparna sitta?", + "slug": "i-vilken-ordning-ska-knapparna-sitta", + "markdown": "\r\n\r\n\r\nNär man skapar en webbapplikation kommer man ofta till frågeställningen, ska \"OK\"-knappen ligga till vänster eller till höger om \"Avbryt\" knappen?\r\n\r\n\r\nI Windows ligger alltid OK-knappen längst till vänster och tyvärr är det tvärt om i Mac. På webbplatser behöver man ta hänsyn till att den knapp som ligger längst till vänster oftast är den som automatiskt blir nedtryckt om man trycker på Enter på tangentbordet. Om man har en ”Rensa formuläret” (vilket jag avrekommenderar om det inte är absolut nödvändigt) knapp bör den absolut inte ligga längst till vänster eftersom det kan innebära att användarna av misstag råkar radera ut allt de precis matat in.\r\n\r\n\r\nMin rekommendation är att låta OK-knappen ligga längst till vänster om det inte är stort avstånd mellan knapparna, då passar det bättre att låta OK-knappen ligga längst till höger i dialogen.\r\n\r\n\r\nLäs en undersökning om detta här: http://measuringuserexperience.com/SubmitCancel/index.htm\r\n\r\n\r\nHar du en annan åsikt? Kommentera gärna nedan!\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/errordialog.png)", + "html": "


När man skapar en webbapplikation kommer man ofta till frågeställningen, ska \"OK\"-knappen ligga till vänster eller till höger om \"Avbryt\" knappen?


I Windows ligger alltid OK-knappen längst till vänster och tyvärr är det tvärt om i Mac. På webbplatser behöver man ta hänsyn till att den knapp som ligger längst till vänster oftast är den som automatiskt blir nedtryckt om man trycker på Enter på tangentbordet. Om man har en ”Rensa formuläret” (vilket jag avrekommenderar om det inte är absolut nödvändigt) knapp bör den absolut inte ligga längst till vänster eftersom det kan innebära att användarna av misstag råkar radera ut allt de precis matat in.


Min rekommendation är att låta OK-knappen ligga längst till vänster om det inte är stort avstånd mellan knapparna, då passar det bättre att låta OK-knappen ligga längst till höger i dialogen.


Läs en undersökning om detta här: http://measuringuserexperience.com/SubmitCancel/index.htm


Har du en annan åsikt? Kommentera gärna nedan!


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1087, + "created_at": 1212083820000, + "created_by": 1087, + "updated_at": 1212083820000, + "updated_by": 1087, + "published_at": 1212083820000, + "published_by": 1087 + }, + { + "id": 211, + "title": "soapUI - fiffigt testverktyg för web services", + "slug": "soapui---fiffigt-testverktyg-for-web-services", + "markdown": "\r\n\r\n\r\nNär man utvecklar web services så kan det vara svårt att spåra eventuella fel. Man kan använda en lokal proxy som Fiddler, men det kan ändå blir ganska mycket trial and error. Då finns soapUI till hjälp! soapUI är en Java-applikation som man kan köra från valfri dator (med Java installerat). Gratisversionen av soapUI räcker i regel långt och innehåller funktioner som:\r\n\r\n\r\nInspektion: visning av WSDL-filer som en hierarki, alla metoder och metodsignaturer, SSL-information, validering av WSDL, visning av alla headers och all trafik.\r\nAnrop: man kan anropa metoderna i en web service direkt ifrån soapUI. Det finns stöd även för mer avancerade funktioner som WS-Security och WS-Attachments.\r\nTester: man kan konfigurera och spara testprojekt. Varje test kan skräddarsys med egna headers, autentisering etc.\r\nBelastningstester\r\nSimulering - soapUI kan skapa en dummy-web service utifrån en WSDL-fil. Bra att ha för lokal testning medan man utvecklar sin applikation. \r\n\r\n\r\nI betalversionen soapUI pro finns ännu fler funktioner som WSDL-refaktorering, rapportgenerator för automatiska tester och enklare gränssnitt för manuella testanrop till metoder.\r\n\r\n\r\n\r\nLadda ner soapUI här!\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/soapui-logo.png)", + "html": "


När man utvecklar web services så kan det vara svårt att spåra eventuella fel. Man kan använda en lokal proxy som Fiddler, men det kan ändå blir ganska mycket trial and error. Då finns soapUI till hjälp! soapUI är en Java-applikation som man kan köra från valfri dator (med Java installerat). Gratisversionen av soapUI räcker i regel långt och innehåller funktioner som:



  • Inspektion: visning av WSDL-filer som en hierarki, alla metoder och metodsignaturer, SSL-information, validering av WSDL, visning av alla headers och all trafik.

  • Anrop: man kan anropa metoderna i en web service direkt ifrån soapUI. Det finns stöd även för mer avancerade funktioner som WS-Security och WS-Attachments.

  • Tester: man kan konfigurera och spara testprojekt. Varje test kan skräddarsys med egna headers, autentisering etc.

  • Belastningstester

  • Simulering - soapUI kan skapa en dummy-web service utifrån en WSDL-fil. Bra att ha för lokal testning medan man utvecklar sin applikation.


I betalversionen soapUI pro finns ännu fler funktioner som WSDL-refaktorering, rapportgenerator för automatiska tester och enklare gränssnitt för manuella testanrop till metoder.



Ladda ner soapUI här!



", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1213265940000, + "created_by": 6, + "updated_at": 1213265940000, + "updated_by": 6, + "published_at": 1213265940000, + "published_by": 6 + }, + { + "id": 217, + "title": "Visual Studio 2008 SP1 och .NET Framework 3.5 SP1 är släppta", + "slug": "visual-studio-2008-sp1-och-net-framework-35-sp1-ar-slappta", + "markdown": "\r\n\r\n\r\n\r\nI veckan har Microsoft släppt service pack 1 för både Visual Studio 2008 och .NET Framework 3.5. Det finns så många och stora nyheter att många tycker att det knappt räknas till ett servicepack längre!\r\n\r\n\r\n\r\n\r\nMånga av nyheterna gäller Windows Presentation Foundation, WPF, både för utveckling och för exekvering så detta kanske är det som behövs för att WPF-applikationer ska få sitt genomslag. Givetvis finns en hel del nytt även för webutvecklare, bl.a. bättre stöd för JavaScript-bibliotek och Intellisense.\r\n\r\n\r\n## Några av nyheterna i Visual studio 2008 SP1\r\n\r\nBättre WPF designer för dom som bygger windows applikationer.\r\nStöd för SQL 2008.\r\nADO.NET Entity designer (Entity Framework är ett sätt att koppla objekt i .NET direkt mot en databas liknande t.ex Hibernate.)\r\nBättre javascript-stöd, d.v.s. bättre intellisense.\r\nBättre prestanda (det behövs verkligen).\r\nBättre integration mot Team foundation server.\r\n\r\n\r\n\r\n\r\n\r\n## Nyheter i .NET 3.5 SP1\r\n\r\nSnabbare applikationstarter.\r\n20-45% bättre prestanda för WPF applikationer (helt utan kodändringar).\r\nStöd för hårdvaruaccelerade effekter i WPF.\r\n\r\n\r\n\r\nServicepacket tar nånstans mellan 30-60 minuter att installera ungefär och kräver en omstart.\r\n\r\n\r\n\r\n\r\nLadda ner här: http://www.microsoft.com/downloads/details.aspx?FamilyID=27673c47-b3b5-4c67-bd99-84e525b5ce61&DisplayLang=en\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/visualstudio2008.png)", + "html": "



I veckan har Microsoft släppt service pack 1 för både Visual Studio 2008 och .NET Framework 3.5. Det finns så många och stora nyheter att många tycker att det knappt räknas till ett servicepack längre!



Många av nyheterna gäller Windows Presentation Foundation, WPF, både för utveckling och för exekvering så detta kanske är det som behövs för att WPF-applikationer ska få sitt genomslag. Givetvis finns en hel del nytt även för webutvecklare, bl.a. bättre stöd för JavaScript-bibliotek och Intellisense.


Några av nyheterna i Visual studio 2008 SP1



  • Bättre WPF designer för dom som bygger windows applikationer.

  • Stöd för SQL 2008.

  • ADO.NET Entity designer (Entity Framework är ett sätt att koppla objekt i .NET direkt mot en databas liknande t.ex Hibernate.)

  • Bättre javascript-stöd, d.v.s. bättre intellisense.

  • Bättre prestanda (det behövs verkligen).

  • Bättre integration mot Team foundation server.




Nyheter i .NET 3.5 SP1



  • Snabbare applikationstarter.

  • 20-45% bättre prestanda för WPF applikationer (helt utan kodändringar).

  • Stöd för hårdvaruaccelerade effekter i WPF.



Servicepacket tar nånstans mellan 30-60 minuter att installera ungefär och kräver en omstart.



Ladda ner här: http://www.microsoft.com/downloads/details.aspx?FamilyID=27673c47-b3b5-4c67-bd99-84e525b5ce61&DisplayLang=en


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1089, + "created_at": 1218716100000, + "created_by": 1089, + "updated_at": 1218716100000, + "updated_by": 1089, + "published_at": 1218716100000, + "published_by": 1089 + }, + { + "id": 218, + "title": "Testa webbplatser i olika versioner av Internet Explorer", + "slug": "testa-webbplatser-i-olika-versioner-av-internet-explorer", + "markdown": "\r\n\r\n\r\n\r\nIETester gör det möjligt att surfa med olika versioner av Internet Explorer på sin dator utan att behöva strula med virtuella maskiner.\r\n\r\n\r\n\r\n\r\nDet är än så länge en alfa-version men den verkar fungera hyfsat och kan definitvt vara nåt att hålla koll på - behovet att testa webbar i olika IE-versioner lär ju inte bli mindre när IE 8 släppts skarpt.\r\n\r\n\r\n\r\n\r\nEn viktig fördel jämfört med att köra en virtuell IE6-dator är att det med detta verktyg blir möjligt att surfa även mot Visual Studios inbyggda webserver som bara tillåter uppkopplingar från den lokala datorn.\r\n\r\n\r\n\r\n\r\nhttp://www.my-debugbar.com/wiki/IETester/HomePage\r\n\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/ietester-0.2.png)", + "html": "



IETester gör det möjligt att surfa med olika versioner av Internet Explorer på sin dator utan att behöva strula med virtuella maskiner.



Det är än så länge en alfa-version men den verkar fungera hyfsat och kan definitvt vara nåt att hålla koll på - behovet att testa webbar i olika IE-versioner lär ju inte bli mindre när IE 8 släppts skarpt.



En viktig fördel jämfört med att köra en virtuell IE6-dator är att det med detta verktyg blir möjligt att surfa även mot Visual Studios inbyggda webserver som bara tillåter uppkopplingar från den lokala datorn.



http://www.my-debugbar.com/wiki/IETester/HomePage





", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1089, + "created_at": 1218818400000, + "created_by": 1089, + "updated_at": 1218818400000, + "updated_by": 1089, + "published_at": 1218818400000, + "published_by": 1089 + }, + { + "id": 223, + "title": "Spela flashvideo på din webbplats", + "slug": "spela-flashvideo-pa-din-webbplats", + "markdown": "\r\n\r\n## Flashvideo - en kort historia\r\n\r\n\r\nFör några år sedan var det riktigt krångligt att spela upp video på sin webbplats. Man kunde lägga upp en video för nedladdning, men det tog ofta lång tid och kvaliteten var rätt dålig. Lite senare kom streamingservrar som gjorde att man kunde erbjuda bättre kvalitet, i och med att användaren inte behövde ladda ner hela filmen på en gång. Men format var fortfarande ett problem - hur ser man till att en film fungerar på Windows, Mac och Linux? Streamingservrar var också ofta en dyr historia. Själv hade jag ett tag en Linuxserver där jag hade kompilerat open source-versionen av Apples Quicktime Streaming server och streamade MPEG1 så att så många som möjligt skulle kunna titta. Det funkade och var en bra kompromiss - men det var inte direkt enkelt, varken att få igång eller underhålla.\r\n\r\n\r\n\r\n\r\nNär version 6 av Flash kom introducerades ett nytt sätt att spela film på webbplatser. Men Flash Video, FLV, kunde man koda om filmer till ett format som var enkelt att visa på alla datorer med Flash installerat. Någon gång kring version 8 började detta användas ordentligt. Utöver plattformsstödet så är det också enkelt att få s.k. progressiv nedladdning att fungera, vilket innebär att tittaren kan starta filmen innan hela filmen har hämtats från server. Progressiv nedladdning är en sort fattigmans-streaming - filmen startar snabbare, men man kan t.ex. inte spola fram i en lång film och starta snabbt därifrån.\r\n\r\n\r\n## Såhär gör man\r\n\r\nEnkelt sammanfattat gör man såhär:\r\n1) Koda om din film till FLV-format\r\n2) Skaffa en FLV-spelare\r\n3) Ladda upp filmen och infoga FLV-spelaren i din webbsida.\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n1. Koda om film\r\n\r\nFör att koda om en film till FLV-format kan man använda Macromedia Flash, förstås. Men det finns också gratisalternativ, t.ex. Riva FLV Encoder. Om man är lite nördigare och vill ha mer kontroll över resultatet (typ som undertecknad) så går man direkt på FFMPEG, som är den underliggande kodningsapplikation som Riva och andra bygger på. Såhär använder man FFMPEG:\r\nffmpeg.exe -i original.avi -f flv -b 600k -s 400x300 -deinterlace -ab 56k -ar 22050 -ac 1 final.flv\r\n\r\n\r\nFörklaring av parametrarna:\r\n\r\n-i infil\r\n-f format, i detta fall flv\r\n-b bitrate, 600 kbps (glöm inte k:et, som man inte behövde i gamla versioner av FFMPEG)\r\n-s storlek i pixlar på den konverterade filmen\r\n-deinterlace (behövs bara om din ursprungsfil är interlace förstås)\r\n-ab bitrate för ljudet\r\n-ar sample rate för ljudet (i Hz)\r\n-ac antal ljudkanaler, 1:an i exemplet betyder mono\r\n\r\nDet finns hundratals andra parametrar för att ändra frame rate, klippa ur avsnitt, beskära etc. \r\n\r\n\r\n2. Skaffa en FLV-spelare\r\nFLV-filer kan inte spelas upp som de är, man behöver en Flash-applikation som läser in filen och som i regel också erbjuder möjligheter att starta, stoppa o.s.v. Den bästa FLV-spelaren är JW FLV Media Player. Den är gratis för ickekommersiella webbplatser, och kostar €20 annars. Den klarar FLV, MP4, AAC och MP3 (det går alltså också bra att göra en musikspelare om man vill). Om tittaren har rätt version av Flash så behöver man alltså inte ens koda om en film i MP4 för att visa den. Siten innehåller allt du behöver för att komma igång, inklusive exempelkod och en guide för att sätta ihop rätt parametrar till spelaren. Den nyaste versionen är 4.1 och den har fått stöd för fler format och fått en inbyggd fullskärmsvisare.\r\n\r\n\r\n3. Ladda upp filmen och infoga FLV-spelaren\r\nHur man infogar FLV-spelaren i sin egen HTML-kod står bra beskrivet i dokumentationen till JW FLV Media Player. Om du har en IIS-server måste du lägga till mime-typen för FLV (som är video/x-flv) för att servern ska tillåta att FLV-filer hämtas. I övrigt är det bara att lägga upp filmen som vilken annan fil som helst.\r\n\r\n\r\nMycket nöje!\r\n\r\n\r\n\r\n\r\n\r\n\r\n var s1 = new SWFObject(\"/libraries/flvplayer/player.swf\",\"ply\",\"400\",\"200\",\"9\",\"#ffffff\");\r\n s1.addParam(\"allowfullscreen\",\"true\");\r\n s1.addParam(\"flashvars\",\"file=/uploads/watchmen.flv&controlbar=over\");\r\n s1.write(\"moviePlayer\");\r\n\r\n(Glöm inte att testa fullskärmsknappen till vänster om volymkontrollen!)", + "html": "


Flashvideo - en kort historia



För några år sedan var det riktigt krångligt att spela upp video på sin webbplats. Man kunde lägga upp en video för nedladdning, men det tog ofta lång tid och kvaliteten var rätt dålig. Lite senare kom streamingservrar som gjorde att man kunde erbjuda bättre kvalitet, i och med att användaren inte behövde ladda ner hela filmen på en gång. Men format var fortfarande ett problem - hur ser man till att en film fungerar på Windows, Mac och Linux? Streamingservrar var också ofta en dyr historia. Själv hade jag ett tag en Linuxserver där jag hade kompilerat open source-versionen av Apples Quicktime Streaming server och streamade MPEG1 så att så många som möjligt skulle kunna titta. Det funkade och var en bra kompromiss - men det var inte direkt enkelt, varken att få igång eller underhålla.



När version 6 av Flash kom introducerades ett nytt sätt att spela film på webbplatser. Men Flash Video, FLV, kunde man koda om filmer till ett format som var enkelt att visa på alla datorer med Flash installerat. Någon gång kring version 8 började detta användas ordentligt. Utöver plattformsstödet så är det också enkelt att få s.k. progressiv nedladdning att fungera, vilket innebär att tittaren kan starta filmen innan hela filmen har hämtats från server. Progressiv nedladdning är en sort fattigmans-streaming - filmen startar snabbare, men man kan t.ex. inte spola fram i en lång film och starta snabbt därifrån.


Såhär gör man


Enkelt sammanfattat gör man såhär:

1) Koda om din film till FLV-format

2) Skaffa en FLV-spelare

3) Ladda upp filmen och infoga FLV-spelaren i din webbsida.





1. Koda om film


För att koda om en film till FLV-format kan man använda Macromedia Flash, förstås. Men det finns också gratisalternativ, t.ex. Riva FLV Encoder. Om man är lite nördigare och vill ha mer kontroll över resultatet (typ som undertecknad) så går man direkt på FFMPEG, som är den underliggande kodningsapplikation som Riva och andra bygger på. Såhär använder man FFMPEG:

ffmpeg.exe -i original.avi -f flv -b 600k -s 400x300 -deinterlace -ab 56k -ar 22050 -ac 1 final.flv


Förklaring av parametrarna:


-i infil

-f format, i detta fall flv

-b bitrate, 600 kbps (glöm inte k:et, som man inte behövde i gamla versioner av FFMPEG)

-s storlek i pixlar på den konverterade filmen

-deinterlace (behövs bara om din ursprungsfil är interlace förstås)

-ab bitrate för ljudet

-ar sample rate för ljudet (i Hz)

-ac antal ljudkanaler, 1:an i exemplet betyder mono


Det finns hundratals andra parametrar för att ändra frame rate, klippa ur avsnitt, beskära etc.

2. Skaffa en FLV-spelare

FLV-filer kan inte spelas upp som de är, man behöver en Flash-applikation som läser in filen och som i regel också erbjuder möjligheter att starta, stoppa o.s.v. Den bästa FLV-spelaren är JW FLV Media Player. Den är gratis för ickekommersiella webbplatser, och kostar €20 annars. Den klarar FLV, MP4, AAC och MP3 (det går alltså också bra att göra en musikspelare om man vill). Om tittaren har rätt version av Flash så behöver man alltså inte ens koda om en film i MP4 för att visa den. Siten innehåller allt du behöver för att komma igång, inklusive exempelkod och en guide för att sätta ihop rätt parametrar till spelaren. Den nyaste versionen är 4.1 och den har fått stöd för fler format och fått en inbyggd fullskärmsvisare.

3. Ladda upp filmen och infoga FLV-spelaren
Hur man infogar FLV-spelaren i sin egen HTML-kod står bra beskrivet i dokumentationen till JW FLV Media Player. Om du har en IIS-server måste du lägga till mime-typen för FLV (som är video/x-flv) för att servern ska tillåta att FLV-filer hämtas. I övrigt är det bara att lägga upp filmen som vilken annan fil som helst.

Mycket nöje!






(Glöm inte att testa fullskärmsknappen till vänster om volymkontrollen!)", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1219836600000, + "created_by": 6, + "updated_at": 1219836600000, + "updated_by": 6, + "published_at": 1219836600000, + "published_by": 6 + }, + { + "id": 228, + "title": "XBL istället för HTC - nu är det möjligt tack vare Googles xbl.js", + "slug": "xbl-istallet-for-htc---nu-ar-det-mojligt-tack-vare-googles-xbljs", + "markdown": "\r\n\r\n\r\nHTC är Microsofts lösning på hur man ska separera innehåll och logik i webbläsaren, på samma sätt som man separerar innehåll och utseende med stylesheets.\r\n\r\n\r\nEn HTC-fil består av ett XML-dokument med filändelsen .htc som deklarerar events och JavaScript. För att sedan koppla ihop ett HTML-element med dess logik sätter använder man attributet behavior i stylesheet, t.ex. “ .button {behavior: url(Layout/imagebutton.htc);}”.\r\n\r\n\r\nHTC stöds dock varken av Safari eller av Chrome, och kräver dessutom lite trixande för att fungera i Firefox. Då Chrome gissningsvis kommer att bli populär väldigt snart så är det ju viktigare än någonsin att gå ifrån HTC.\r\n\r\n\r\nSom tur är finns XBL (och XBL 2), W3C-standarder som tagit det bästa av HTC och standardiserat detta. Tyvärr finns inget egentligt stöd idag i någon webbläsare, men tack vare ett litet JavaScript som finns på http://code.google.com/p/xbl/ så kan vi redan idag använda detta i alla moderna webbläsare.\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/xbl.jpg)\r\nLyckligtvis är det extremt lätt att konvertera HTC till XBL! Deklarera bindningarna i en XML fil (som vi väljer att kalla xblBindings.xml) med följande syntax:\r\n```prettyprint lang-xml\r\n\r\n\r\n\r\n\r\n \r\n \r\n\r\n```\r\n\r\n\r\n\r\nObservera att raden \"\r\n.button {binding:url(Layout/xblBindings.xml#imagebutton);}\r\n\r\n```\r\n\r\n\r\n\r\nTyvärr hittade vi snabbt en showstopper d.v.s. en bugg som gör produkten mer eller mindre oanvändbar i denna beta.\r\n\r\n\r\nOm man skapar en ny bit HTML-kod och stoppar in i dokumentet efter det är färdigladdat med hjälp av AJAX så binder tydligen inte xbl.js dessa element. Följden blir då i exemplet att skapar man en ny HTML-knapp i javascript så kommer den inte att få det nya utseendet.\r\n\r\n\r\nVår förhoppning är dock att den buggen ska lösas snart. Efter att vi registrerade detta som en bugg XBLs utvecklare så har de lovat att detta ska vara fixat i första skarpa releasen som är planerad till 2008-12-01.\r\n\r\n", + "html": "


HTC är Microsofts lösning på hur man ska separera innehåll och logik i webbläsaren, på samma sätt som man separerar innehåll och utseende med stylesheets.


En HTC-fil består av ett XML-dokument med filändelsen .htc som deklarerar events och JavaScript. För att sedan koppla ihop ett HTML-element med dess logik sätter använder man attributet behavior i stylesheet, t.ex. “ .button {behavior: url(Layout/imagebutton.htc);}”.


HTC stöds dock varken av Safari eller av Chrome, och kräver dessutom lite trixande för att fungera i Firefox. Då Chrome gissningsvis kommer att bli populär väldigt snart så är det ju viktigare än någonsin att gå ifrån HTC.


Som tur är finns XBL (och XBL 2), W3C-standarder som tagit det bästa av HTC och standardiserat detta. Tyvärr finns inget egentligt stöd idag i någon webbläsare, men tack vare ett litet JavaScript som finns på http://code.google.com/p/xbl/ så kan vi redan idag använda detta i alla moderna webbläsare.




Lyckligtvis är det extremt lätt att konvertera HTC till XBL! Deklarera bindningarna i en XML fil (som vi väljer att kalla xblBindings.xml) med följande syntax:



Observera att raden \"<xbl:implementation><![CDATA[\" är skriven utan radbrytning då XBL 2.0 beta 2 helt enkelt inte fungerade med en radbrytning där och den gav inte heller några felmeddelanden.


De flesta exemplen på nätet lägger all javascript i själva XML filen, men då fungerar inte intellisense eller färgkodning. Att felsöka koden blir mycket svårt så vi valde att flytta ut själva logiken och därmed få en återanvändningsbar javascript-kod.


Logiken som tidigare låg inbakad i vår HTC-fil flyttade vi till extern javascript fil med den enda förändringen att innehållet i event_setnormal() är flyttad till en funktion som heter Imagebutton(element) så att vi får tillgång till elementet inifrån koden.





För att sedan använda vår nya funktion så deklarerar vi bara detta i något stylesheet.





Tyvärr hittade vi snabbt en showstopper d.v.s. en bugg som gör produkten mer eller mindre oanvändbar i denna beta.


Om man skapar en ny bit HTML-kod och stoppar in i dokumentet efter det är färdigladdat med hjälp av AJAX så binder tydligen inte xbl.js dessa element. Följden blir då i exemplet att skapar man en ny HTML-knapp i javascript så kommer den inte att få det nya utseendet.


Vår förhoppning är dock att den buggen ska lösas snart. Efter att vi registrerade detta som en bugg XBLs utvecklare så har de lovat att detta ska vara fixat i första skarpa releasen som är planerad till 2008-12-01.


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": " ett smart JavaScript som kan hämtas från Google Code.", + "author_id": 1089, + "created_at": 1221142680000, + "created_by": 1089, + "updated_at": 1221142680000, + "updated_by": 1089, + "published_at": 1221142680000, + "published_by": 1089 + }, + { + "id": 239, + "title": "Microsoft och Nokia omfamnar jQuery ", + "slug": "microsoft-och-nokia-omfamnar-jquery-", + "markdown": "\r\n\r\nOm man jobbar med att göra moderna och dynamiska sidor idag så är det nästan ett krav att man då också använder ett javascriptbibliotek. Dessa bibliotek tar hand om många av de saker som fortfaranade är lite knepiga med javascript, och de ser till att ens kod fungerar bra på olika webbläsare. De innehåller också ofta fina funktioner för att manipulera DOM-trädet och göra snitsiga grafiska effekter.\r\n\r\nIdag så meddelade både Microsoft och Nokia att de kommer att stödja jQuery, ett av de mer populära av de här biblioteken. jQuery är släppt under både GPL- och MIT-licens, båda två öppna källkodslicenser, vilket gör att nyheten om att Microsoft använder det nog fick många att höja på ögonbrynen. Microsoft har tidigare avstått från att använda öppen källkod, men det verkar ändras nu. Den kommande SP2 för Visual Studio 2008 kommer att inkludera stöd för jQuery.\r\n\r\nNokia i sin tur har en historik av att använda öppen källkod (Maemo, deras köp av Trolltech ex.) varför deras support nog inte ter sig lika överraskande.\r\n\r\nMer information kan hittas på John Resigs blogg, liksom dessa två Microsoftbloggar.\r\n\r\nPs. Har inte Trolltech och jQuery väldigt snarlika slogans? Ds.\r\n\r\n![Bild](http://tekniken.nu/uploads/jquery.png)", + "html": "

Om man jobbar med att göra moderna och dynamiska sidor idag så är det nästan ett krav att man då också använder ett javascriptbibliotek. Dessa bibliotek tar hand om många av de saker som fortfaranade är lite knepiga med javascript, och de ser till att ens kod fungerar bra på olika webbläsare. De innehåller också ofta fina funktioner för att manipulera DOM-trädet och göra snitsiga grafiska effekter.

Idag så meddelade både Microsoft och Nokia att de kommer att stödja jQuery, ett av de mer populära av de här biblioteken. jQuery är släppt under både GPL- och MIT-licens, båda två öppna källkodslicenser, vilket gör att nyheten om att Microsoft använder det nog fick många att höja på ögonbrynen. Microsoft har tidigare avstått från att använda öppen källkod, men det verkar ändras nu. Den kommande SP2 för Visual Studio 2008 kommer att inkludera stöd för jQuery.

Nokia i sin tur har en historik av att använda öppen källkod (Maemo, deras köp av Trolltech ex.) varför deras support nog inte ter sig lika överraskande.

Mer information kan hittas på John Resigs blogg, liksom dessa två Microsoftbloggar.

Ps. Har inte Trolltech och jQuery väldigt snarlika slogans? Ds.

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Microsoft och Nokia omfamnar jQuery ", + "meta_description": "r att stödja biblioteket jQuery.", + "author_id": 1086, + "created_at": 1222703603000, + "created_by": 1086, + "updated_at": 1222703603000, + "updated_by": 1086, + "published_at": 1222703603000, + "published_by": 1086 + }, + { + "id": 245, + "title": "Sök och ersätt en SVN changelog till läsbart format", + "slug": "sok-och-ersatt-en-svn-changelog-till-lasbart-format", + "markdown": "\r\n\r\nNär man använder Subversion (SVN) eller annat källkodshanteringssystem kan man ofta få ut en ’change log’ och de är ofta väldigt tekniska. Vill man dela med sig av denna till kunder eller andra dokument är det ett väldigt jobb att manuellt rensa i denna lista. Då kan jag tipsa om att lägga in loggen i Word och ange den här söksträngen så blir din changelog väldigt mycket lättare att läsa:\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/subversion-logo.png)", + "html": "

När man använder Subversion (SVN) eller annat källkodshanteringssystem kan man ofta få ut en ’change log’ och de är ofta väldigt tekniska. Vill man dela med sig av denna till kunder eller andra dokument är det ett väldigt jobb att manuellt rensa i denna lista. Då kan jag tipsa om att lägga in loggen i Word och ange den här söksträngen så blir din changelog väldigt mycket lättare att läsa:

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Sök och ersätt en SVN changelog till läsbart format", + "meta_description": "", + "author_id": 1087, + "created_at": 1223657442000, + "created_by": 1087, + "updated_at": 1223657442000, + "updated_by": 1087, + "published_at": 1223657442000, + "published_by": 1087 + }, + { + "id": 253, + "title": "Reintegrate merge i Subversion", + "slug": "reintegrate-merge-i-subversion", + "markdown": "\r\n\r\nSubversion är en väldigt bra källkodshanteringsplattform på många olika sätt, men en stor nackdel är det dåliga stödet för merge. Medan det är väldigt lätt och resurssnålt att göra en ny branch är det inte helt enkelt att göra en merge igen. Problemet har varit att det inte funnits något bra sätt att få med all historik. Oftast resulterar detta i att när mergen väl görs så sker det med en enda stor commit där de tidigare incheckningarnas logg är inkopierad. Det här gör att det är väldigt svårt i efterhand att se exakt när en viss förändring gjordes och av vem.\r\n\r\nMed version 1.5 av Subversion som kom i somras så har emellertid detta till viss del åtgärdas, främst genom det nya stödet för ”reintegrate merge”. Typfallet för denna sorts merge är när man som utvecklare skall göra en större förändring i koden och därför skapar en separat branch för denna förändring (en s.k. ”topic branch”). När förändringen är klar skall denna mergas in i huvudkoden. Oftast är sådana här branches ganska kortlivade; när den väl är integrerad i huvudbranchen så tas den bort.\r\n\r\nDet är här som ”reintegrate merge” kommer in i bilden. Genom att använda denna funktion kan Subversion själv ta hand om att se till att alla loggmeddelanden hanteras på rätt sätt, så att när man efteråt går igenom loggen ser de ursprungliga incheckningarna istället för en enda stor.\r\n\r\nI det här exemplet kommer vi att använda TortioseSvn, men kommandoraden fungerar precis lika bra. Det krävs att man har version 1.5+ av TortoiseSvn.\r\n\r\nVi har i vårt repository en trunk, från vilken en branch vid namn ”integrate_demo” har skapats. I denna branch har vi sedan gjort några ändringar som vi nu vill få in i trunken.\r\n\r\n\r\n\r\nVi högerklickar därför på ”trunk”-katalogen och väljer ”Merge”, varpå detta fönster visas. Här väljer vi det mittersta valet, ”Reintegrate a branch”. För att kunna använda denna måste vi dock först se till att den lokala trunken som vi skall göra en merge in i inte har några oincheckade ändringar i sig.\r\n\r\n\r\n\r\nI nästa dialog så anger vi varifrån vi vill göra vår merge, vilket i det här fallet är branchen ”integrate_demo”.\r\n\r\n\r\n\r\nDen tredje och sista dialogen erbjuder ett flertal olika valmöjligheter; i vårt fall så nöjer vi oss dock med standardvärdena. Kom ihåg att alltid göra en ”Test merge” först för att se om några problem uppstår.\r\n\r\n\r\n\r\nOm allt ser bra ut så är det bara att trycka på ”Merge” varpå själva mergen utförs. Det enda som nu återstår är att göra en commit på den lokala trunken. Vad som då skiljer sig här gentemot det tidigare sättet som man gjorde merge är att man nu inte behöver ta med kopior av alla de logg-meddelanden som fanns i branchen: allt detta tar subversion själv hand om. Det räcker således med ett dylikt meddelande:\r\n\r\n\r\n\r\nDet här fungerar hur bra som helst i de flesta fall, men ibland så händer det att man får detta felmeddelandet:\r\n\r\nError: Cannot reintegrate from yetError: Some revisions have been merged under it that have not been mergedError: into the reintegration target; merge them first, then retry.\r\n\r\nVäldigt kryptiskt och tyvärr felvisande eftersom lösningen oftast inte är den som föreslås. Detta kommer nämligen av att problem uppstår om subversion själv tror att det gjorts en merge in i topic-branchen. Anledningen till att den tror detta är att den hittar flaggan ”merge-info” i branchen. Detta är en ny flagga som tillkommit iomed det nya merge-stödet i 1.5. Genom användandet av denna flagga kan subversion själv hålla reda på vilka revisioner som blivit mergade och på så sätt undvika att samma revision blir integrerade flera gånger. Problemet är bara att denna flagga även sätts vid vissa andra operationer såsom kopiering eller omdöpning av filer. Detta är en känd bugg som Subversions utvecklingsgrupp själva håller på att lösa till version 1.5.1. Tills dess att detta är löst så är dock lösningen på detta problemet att se till att denna flagga tas bort överallt där den är satt i topic-branchen, förutom i roten på branchen. För att göra detta kan man antingen använda TortoiseSVN och manuellt hitta alla filer eller kataloger med denna flagga och ta bort den, eller använda kommandotolken. Eftersom det ju kan röra sig om ganska många filer är nog det senare att föredra.\r\n\r\nI vårt exempel ovan innebär det då att vi först går in i roten på vår topic-branch, dvs.\r\n\r\ncd C:\\demo\\checkedout\\branches\\integrate_demo\r\n\r\nDärefter kör vi följande kommando vilket kommer att ta bort alla instanser av ”merge-info”-flaggan (OBS! Gör bara det här om du inte har gjort en merge in till topicbranchen. Om så är fallet så bör du göra såsom felmeddelandet anger och göra en merge av dessa in till trunken först.)\r\n\r\nsvn propdel -R svn:mergeinfo *\r\n\r\nEfter att detta är gjort är det bara att göra en commit, ex.\r\n\r\nsvn commit –m ”Removed bogus merge info before integrating.”\r\n\r\noch se fortsätta med reintegrate merge.\r\n\r\nMer info om detta finns på\r\n\r\nhttp://subversion.tigris.org/svn_1.5_releasenotes.html#merge-tracking\r\n\r\nhttp://www.svnforum.org/2017/viewtopic.php?t=6718\r\n\r\n![Bild](http://tekniken.nu/uploads/branches.jpg)", + "html": "

Subversion är en väldigt bra källkodshanteringsplattform på många olika sätt, men en stor nackdel är det dåliga stödet för merge. Medan det är väldigt lätt och resurssnålt att göra en ny branch är det inte helt enkelt att göra en merge igen. Problemet har varit att det inte funnits något bra sätt att få med all historik. Oftast resulterar detta i att när mergen väl görs så sker det med en enda stor commit där de tidigare incheckningarnas logg är inkopierad. Det här gör att det är väldigt svårt i efterhand att se exakt när en viss förändring gjordes och av vem.

Med version 1.5 av Subversion som kom i somras så har emellertid detta till viss del åtgärdas, främst genom det nya stödet för ”reintegrate merge”. Typfallet för denna sorts merge är när man som utvecklare skall göra en större förändring i koden och därför skapar en separat branch för denna förändring (en s.k. ”topic branch”). När förändringen är klar skall denna mergas in i huvudkoden. Oftast är sådana här branches ganska kortlivade; när den väl är integrerad i huvudbranchen så tas den bort.

Det är här som ”reintegrate merge” kommer in i bilden. Genom att använda denna funktion kan Subversion själv ta hand om att se till att alla loggmeddelanden hanteras på rätt sätt, så att när man efteråt går igenom loggen ser de ursprungliga incheckningarna istället för en enda stor.

I det här exemplet kommer vi att använda TortioseSvn, men kommandoraden fungerar precis lika bra. Det krävs att man har version 1.5+ av TortoiseSvn.

Vi har i vårt repository en trunk, från vilken en branch vid namn ”integrate_demo” har skapats. I denna branch har vi sedan gjort några ändringar som vi nu vill få in i trunken.

Vi högerklickar därför på ”trunk”-katalogen och väljer ”Merge”, varpå detta fönster visas. Här väljer vi det mittersta valet, ”Reintegrate a branch”. För att kunna använda denna måste vi dock först se till att den lokala trunken som vi skall göra en merge in i inte har några oincheckade ändringar i sig.

I nästa dialog så anger vi varifrån vi vill göra vår merge, vilket i det här fallet är branchen ”integrate_demo”.

Den tredje och sista dialogen erbjuder ett flertal olika valmöjligheter; i vårt fall så nöjer vi oss dock med standardvärdena. Kom ihåg att alltid göra en ”Test merge” först för att se om några problem uppstår.

Om allt ser bra ut så är det bara att trycka på ”Merge” varpå själva mergen utförs. Det enda som nu återstår är att göra en commit på den lokala trunken. Vad som då skiljer sig här gentemot det tidigare sättet som man gjorde merge är att man nu inte behöver ta med kopior av alla de logg-meddelanden som fanns i branchen: allt detta tar subversion själv hand om. Det räcker således med ett dylikt meddelande:

Det här fungerar hur bra som helst i de flesta fall, men ibland så händer det att man får detta felmeddelandet:

Error: Cannot reintegrate from <branch> yet
Error: Some revisions have been merged under it that have not been merged
Error: into the reintegration target; merge them first, then retry.

Väldigt kryptiskt och tyvärr felvisande eftersom lösningen oftast inte är den som föreslås. Detta kommer nämligen av att problem uppstår om subversion själv tror att det gjorts en merge in i topic-branchen. Anledningen till att den tror detta är att den hittar flaggan ”merge-info” i branchen. Detta är en ny flagga som tillkommit iomed det nya merge-stödet i 1.5. Genom användandet av denna flagga kan subversion själv hålla reda på vilka revisioner som blivit mergade och på så sätt undvika att samma revision blir integrerade flera gånger. Problemet är bara att denna flagga även sätts vid vissa andra operationer såsom kopiering eller omdöpning av filer. Detta är en känd bugg som Subversions utvecklingsgrupp själva håller på att lösa till version 1.5.1. Tills dess att detta är löst så är dock lösningen på detta problemet att se till att denna flagga tas bort överallt där den är satt i topic-branchen, förutom i roten på branchen. För att göra detta kan man antingen använda TortoiseSVN och manuellt hitta alla filer eller kataloger med denna flagga och ta bort den, eller använda kommandotolken. Eftersom det ju kan röra sig om ganska många filer är nog det senare att föredra.

I vårt exempel ovan innebär det då att vi först går in i roten på vår topic-branch, dvs.

cd C:\\demo\\checkedout\\branches\\integrate_demo

Därefter kör vi följande kommando vilket kommer att ta bort alla instanser av ”merge-info”-flaggan (OBS! Gör bara det här om du inte har gjort en merge in till topicbranchen. Om så är fallet så bör du göra såsom felmeddelandet anger och göra en merge av dessa in till trunken först.)

svn propdel -R svn:mergeinfo *

Efter att detta är gjort är det bara att göra en commit, ex.

svn commit –m ”Removed bogus merge info before integrating.”

och se fortsätta med reintegrate merge.

Mer info om detta finns på

http://subversion.tigris.org/svn_1.5_releasenotes.html#merge-tracking

http://www.svnforum.org/2017/viewtopic.php?t=6718

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Reintegrate merge i Subversion", + "meta_description": "", + "author_id": 1086, + "created_at": 1226656072000, + "created_by": 1086, + "updated_at": 1226656072000, + "updated_by": 1086, + "published_at": 1226656072000, + "published_by": 1086 + }, + { + "id": 254, + "title": "Best practice when dynamically binding user controls", + "slug": "best-practice-when-dynamically-binding-user-controls", + "markdown": "\r\nWhen you bind a custom user control with data that is generated from another control such as datarepeater or datalist etc, the usercontrol needs to store its data to be able to correctly bind the data after postback and be able to catch events in proper manner. The following is from my understanding the best way to solve the problem with as few lines of code and most efficient both for viewstate size and speed.\r\n\r\n! Note that EnableViewstate is switched off since we alredy have our data in the cache\r\n\r\n-----The ASPX page --------------------------------------\r\n\r\n    \r\n\r\n    \"/>\r\n\r\n\r\n\r\n--------------------------------------------------------------\r\n\r\n---- The DataListing user control -----------------------\r\n\r\n     <%# Container.DataItem%>\r\n\r\n---------------------------------------------------------------\r\n\r\nThe code above is will render a list of elements and where the links will be rendered with a separate usercontrol. The problem only occurs when we want to catch the event from the LinkButton in the usercontrol since we don't have any controls to attach eventhandlers to on Init().\r\n\r\nThe trick is to do as little as possible before we have the data from the :\r\n\r\n1. Attach events on Init\r\n\r\n2. Set the datasource on the set method of your public property\r\n\r\n3. Be sure to rebind your data to the item.dataItem before you use it.\r\n\r\n------ Example from CodeBehind of the user control --------------------\r\n\r\nprivate void DataListing_Init(object sender, EventArgs e)\r\n{\r\n    dataList.ItemCommand += new DataListCommandEventHandler(dataList_ItemCommand);\r\n}\r\n\r\npublic object DataSource\r\n{\r\n    set\r\n    {\r\n        dataList.DataSource = Trex.GetTrexTable(value).GetDefaultView();\r\n    }\r\n} \r\n \r\nprivate void dataList_ItemCommand(object source, DataListCommandEventArgs e)\r\n{\r\n    //  This is an important row, it resets the dataItem to the current index in the dataSource,         since the e.Item.DataItem is not saved in the Viewstate\r\n    e.Item.DataItem = ((DataView)dataList.DataSource)[e.Item.ItemIndex]; \r\n\r\n    Trex.Navigate(e.Item.DataItem as DataRowView);\r\n} \r\nIteam gillar Svensk FastighetsförmedlingIteam har utvidgat sitt samarbete med Svensk Fastighetsförmedling och hanterar idag IT-drift och support för20 24 av företagets bobutiker i Stockholmsområdet.\r\n\r\nchristian landgren - iteam solutions abobservatoriegatan 6 - se-113 29 stockholmphone: +46(0) 70-775 58 31 - fax: +46 8 22 03 22christian.landgren@iteam.se - www.iteam.se ", + "html": "

When you bind a custom user control with data that is generated from another control such as datarepeater or datalist etc, the usercontrol needs to store its data to be able to correctly bind the data after postback and be able to catch events in proper manner. The following is from my understanding the best way to solve the problem with as few lines of code and most efficient both for viewstate size and speed.

! Note that EnableViewstate is switched off since we alredy have our data in the cache

-----The ASPX page --------------------------------------

<asp:DataList Runat="server" EnableViewstate="False">
<ItemTemplate>   

    <Site:DataListing runat="server" DataLink="<%#  Container.Element.Links%>"/>
</ItemTemplate>

</asp:DataList>

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

---- The DataListing user control -----------------------

<asp:DataList Runat="server" Id="dataList" EnableViewstate="False">
<ItemTemplate>
     <asp:LinkButton Runat="server"><%# Container.DataItem%></asp:LinkButton>
</ItemTemplate>
</asp:DataList>

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

The code above is will render a list of elements and where the links will be rendered with a separate usercontrol. The problem only occurs when we want to catch the event from the LinkButton in the usercontrol since we don't have any controls to attach eventhandlers to on Init().

The trick is to do as little as possible before we have the data from the :

1. Attach events on Init

2. Set the datasource on the set method of your public property

3. Be sure to rebind your data to the item.dataItem before you use it.

------ Example from CodeBehind of the user control --------------------

private void DataListing_Init(object sender, EventArgs e)

{

    dataList.ItemCommand += new DataListCommandEventHandler(dataList_ItemCommand);

}

public object DataSource

{

    set

    {

        dataList.DataSource = Trex.GetTrexTable(value).GetDefaultView();

    }

}

 

private void dataList_ItemCommand(object source, DataListCommandEventArgs e)

{

    //  This is an important row, it resets the dataItem to the current index in the dataSource,
        since the e.Item.DataItem is not saved in the Viewstate

    e.Item.DataItem = ((DataView)dataList.DataSource)[e.Item.ItemIndex];


    Trex.Navigate(e.Item.DataItem as DataRowView);

}

Iteam gillar Svensk Fastighetsförmedling
Iteam har utvidgat sitt samarbete med Svensk Fastighetsförmedling och hanterar idag IT-drift och support för20 24 av företagets bobutiker i Stockholmsområdet.

christian landgren - iteam solutions ab
observatoriegatan 6 - se-113 29 stockholm
phone: +46(0) 70-775 58 31 - fax: +46 8 22 03 22
christian.landgren@iteam.se - www.iteam.se ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Best practice when dynamically binding user controls", + "meta_description": null, + "author_id": 1087, + "created_at": 1226656074000, + "created_by": 1087, + "updated_at": 1226656074000, + "updated_by": 1087, + "published_at": 1226656074000, + "published_by": 1087 + }, + { + "id": 260, + "title": "Hur du mappar om en användare efter återställning av backup i SQL Server", + "slug": "hur-du-mappar-om-en-anvandare-efter-aterstallning-av-backup-i-sql-server", + "markdown": "\r\n\r\nNär du har återställt en backup i Microsoft SQL Server till en ny eller befintlig SQL server hamnar du ofta i läget då du redan har en användare med samma användarnamn på servern men som inte är mappat till din databas (det är nu du oftast skapar ytterligare en användare med nytt namn). Istället finns det ett enkelt kommando för att mappa din användare till den befintliga i SQL servern:\r\n\r\nI SQL 2000:sp_change_users_login 'change_one', 'webuser', 'webuser'\r\n\r\nI SQL 2005 (och senare):sp_change_users_login 'update_one', 'webuser', 'webuser'\r\n\r\n---\r\n\r\nTack Anders och tack till våra vänner på TeliaSonera i Haninge som tipsade oss om detta tidsbesparande kommando!\r\n\r\n![Bild](http://tekniken.nu/uploads/633638953944219660-user1_into.png)", + "html": "

När du har återställt en backup i Microsoft SQL Server till en ny eller befintlig SQL server hamnar du ofta i läget då du redan har en användare med samma användarnamn på servern men som inte är mappat till din databas (det är nu du oftast skapar ytterligare en användare med nytt namn). Istället finns det ett enkelt kommando för att mappa din användare till den befintliga i SQL servern:

I SQL 2000:
sp_change_users_login 'change_one', 'webuser', 'webuser'

I SQL 2005 (och senare):
sp_change_users_login 'update_one', 'webuser', 'webuser'

---

Tack Anders och tack till våra vänner på TeliaSonera i Haninge som tipsade oss om detta tidsbesparande kommando!

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Hur du mappar om en användare efter återställning av backup i SQL Server", + "meta_description": " såhär löser man det!", + "author_id": 1087, + "created_at": 1228298593000, + "created_by": 1087, + "updated_at": 1228298593000, + "updated_by": 1087, + "published_at": 1228298593000, + "published_by": 1087 + }, + { + "id": 270, + "title": "Integrera Google Maps på enklaste sätt", + "slug": "integrera-google-maps-pa-enklaste-satt", + "markdown": "\r\n\r\nOm du vill visa en karta på din webbsida och koppla adresser till kartan med nålar så kan det inte vara enklare än vad Google Maps har gjort det (gå in på maps.google.com/api för att få en egen utvecklarnyckel):\r\n\r\n![Bild](http://tekniken.nu/uploads/633686468928661480-image001.jpg@01C97ADE.AA232C50__image001.jpg)\r\n```prettyprint lang-html\r\n\r\n \r\n```\r\n\r\n\r\n\r\nSedan kan du anropa koden ovan med hjälp av följande javascript-anrop:\r\nshowAddress(“Observatoriegatan 6, 113 29 STOCKHOLM”, “Iteam Solutions AB”);\r\nExempelimplementation:\r\n\r\n\r\n\r\n```prettyprint lang-html\r\n
    \r\n
  • \r\n

    Bojens Färg

    Norrtullsgatan 61, 113 45 STOCKHOLM

    \r\n
  • \r\n
  • \r\n

    Bygghuset Roslagstull

    Björnnäsvägen 23, 113 47 Stockholm

    \r\n
  • \r\n
  • \r\n

    Järnhörnan

    Södermannagatan 46, 116 40 Stockholm

    \r\n
  • \r\n
  • \r\n

    Bojens Färg

    Norrtullsgatan 61, 113 45 STOCKHOLM

    \r\n
  • \r\n
\r\n```\r\n\r\n\r\nResultatet blir såhär med lite stylesheets:\r\n\r\n\r\n", + "html": "

Om du vill visa en karta på din webbsida och koppla adresser till kartan med nålar så kan det inte vara enklare än vad Google Maps har gjort det (gå in på maps.google.com/api för att få en egen utvecklarnyckel):



Sedan kan du anropa koden ovan med hjälp av följande javascript-anrop:

showAddress(“Observatoriegatan 6, 113 29 STOCKHOLM”, “Iteam Solutions AB”);

Exempelimplementation:



Resultatet blir såhär med lite stylesheets:

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Integrera Google Maps på enklaste sätt", + "meta_description": "", + "author_id": 1087, + "created_at": 1233050091000, + "created_by": 1087, + "updated_at": 1233050091000, + "updated_by": 1087, + "published_at": 1233050091000, + "published_by": 1087 + }, + { + "id": 272, + "title": "Problem med att göra Commit i subversion med VisualSVN Server", + "slug": "problem-med-att-gora-commit-i-subversion-med-visualsvn-server", + "markdown": "\r\n\r\nVi har bytt ut vår kommandoradsbaserade subversionserver mot VisualSVN Server. Den är väldigt mycket enklare att administrera eftersom man får en vanlig MMC-snapin där det mesta kan ändras i ett grafiskt gränssnitt. Den har också en koppling mot Active Directory, så att användarna kan använda sina vanliga namn och lösenord.\r\n\r\n\r\n\r\nFör en ny användare har dock ett ett problem uppstått. Det går bra att checka ut och uppdatera, men när man ska göra commit visas följande felmeddelande:\r\n\r\nCommand: CommitError: Commit failed (details follow): Error: Server sent unexpected return value (403 Forbidden) in response to MKACTIVITY  Error: request for '/svn/iteam/!svn/act/df0680f5-2970-bd4c-9a85-090722815a53' Finished!: \r\n\r\nEfter mycket felsökande och Googlande kom vi via en bloggpost äntligen fram till vad felet är: VisualSVN Server gör skillnad på stora och små bokstäver i sökvägen! Dock verkar det bara gälla commit, inte checkout och update, vilket gör felsökningen ännu svårare.\r\n\r\nI vårt fall ska repositoryadressen vara https://vårserver/Iteam/blabla inte https://vårserver/iteam/blabla som vi råkat skriva. För att det ska funka måste allt vara i rätt case, inklusive namn på server, underkataloger o.s.v.\r\n\r\n![Bild](http://tekniken.nu/uploads/633695196533266221-visualsvn.png)", + "html": "

Vi har bytt ut vår kommandoradsbaserade subversionserver mot VisualSVN Server. Den är väldigt mycket enklare att administrera eftersom man får en vanlig MMC-snapin där det mesta kan ändras i ett grafiskt gränssnitt. Den har också en koppling mot Active Directory, så att användarna kan använda sina vanliga namn och lösenord.

För en ny användare har dock ett ett problem uppstått. Det går bra att checka ut och uppdatera, men när man ska göra commit visas följande felmeddelande:

Command: Commit
Error: Commit failed (details follow): 
Error: Server sent unexpected return value (403 Forbidden) in response to MKACTIVITY  
Error: request for '/svn/iteam/!svn/act/df0680f5-2970-bd4c-9a85-090722815a53' 
Finished!: 

Efter mycket felsökande och Googlande kom vi via en bloggpost äntligen fram till vad felet är: VisualSVN Server gör skillnad på stora och små bokstäver i sökvägen! Dock verkar det bara gälla commit, inte checkout och update, vilket gör felsökningen ännu svårare.

I vårt fall ska repositoryadressen vara https://vårserver/Iteam/blabla inte https://vårserver/iteam/blabla som vi råkat skriva. För att det ska funka måste allt vara i rätt case, inklusive namn på server, underkataloger o.s.v.

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Problem med att göra Commit i subversion med VisualSVN Server", + "meta_description": "", + "author_id": 6, + "created_at": 1233922852000, + "created_by": 6, + "updated_at": 1233922852000, + "updated_by": 6, + "published_at": 1233922852000, + "published_by": 6 + }, + { + "id": 274, + "title": "ASP.NET: 8 Tips när du konverterar en Web Site till Web Application", + "slug": "aspnet-8-tips-nar-du-konverterar-en-web-site-till-web-application", + "markdown": "\r\n\r\nDet råder lite begreppsförvirring kring det koncept som heter Web Site och det som heter Web Application så först och främst:\r\nWeb Application är en webbplats utvecklad med hjälp av Visual Studio som har en .csproj fil i rotbiblioteket. Web Application försvann ett tag i och med Visual Studio 2005 för att helt ersättas med:Web Site är en webbplats utvecklad med valfritt verktyg och saknar .csproj fil och all källkod inkl .cs filer går att redigera i runtime och om-kompileras on the fly utan omkompilering vilket innebär att man kan fortsätta utveckla applikationen under tiden som man debuggar den.\r\nSpontant känns Web Site helt klart bättre och man förstår varför Microsoft ville bli av med Web Application som känns lite som ett hack för det krävs så mycket extrafiler som beskriver projektet osv. Alla aspx-filer måste dessutom kompletteras med en designer.cs-fil vilket också gör projektet lite mer klottrigt. MEN, när man vant sig med detta och framför allt har flera projekt sedan tidigare i den gamla formen Web Application så är det inte alltid så kul att behöva byta ut byggscript osv så ofta behöver du konvertera en Web Site till Web Application. Då ska du tänka på följande:\r\nSkapa en ny Web Application project i Visual StudioKopiera dina filer från din Web Site till denna mappHögerklicka på Convert To Web Application på huvudnivån eller på enskilda filerGå igenom alla filer och se till att där det står <@Control Src=””> byter du ut detta till <@Control Codebehind=””>Om det står CodeFile=”” byter du också det till CodeBehindUpprepa steg 3 ovan för de filer du har uppdaterat med punkt 4 och 5.Flytta de filer som ligger i App_Code till lämpliga ställen (t ex rootnivån för global.asax.cs, separat mapp för dina klasser)Ta bort .webinfo filen och se till att bara behålla en AssemblyInfo.cs\r\nNu bör det fungera att kompilera!\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/633701230915225319-image001.png@01C98C37.192E89A0__image001.png)", + "html": "

Det råder lite begreppsförvirring kring det koncept som heter Web Site och det som heter Web Application så först och främst:

  • Web Application är en webbplats utvecklad med hjälp av Visual Studio som har en .csproj fil i rotbiblioteket. Web Application försvann ett tag i och med Visual Studio 2005 för att helt ersättas med:
  • Web Site är en webbplats utvecklad med valfritt verktyg och saknar .csproj fil och all källkod inkl .cs filer går att redigera i runtime och om-kompileras on the fly utan omkompilering vilket innebär att man kan fortsätta utveckla applikationen under tiden som man debuggar den.

Spontant känns Web Site helt klart bättre och man förstår varför Microsoft ville bli av med Web Application som känns lite som ett hack för det krävs så mycket extrafiler som beskriver projektet osv. Alla aspx-filer måste dessutom kompletteras med en designer.cs-fil vilket också gör projektet lite mer klottrigt. MEN, när man vant sig med detta och framför allt har flera projekt sedan tidigare i den gamla formen Web Application så är det inte alltid så kul att behöva byta ut byggscript osv så ofta behöver du konvertera en Web Site till Web Application. Då ska du tänka på följande:

  1. Skapa en ny Web Application project i Visual Studio
  2. Kopiera dina filer från din Web Site till denna mapp
  3. Högerklicka på Convert To Web Application på huvudnivån eller på enskilda filer
  4. Gå igenom alla filer och se till att där det står <@Control Src=””> byter du ut detta till <@Control Codebehind=””>
  5. Om det står CodeFile=”” byter du också det till CodeBehind
  6. Upprepa steg 3 ovan för de filer du har uppdaterat med punkt 4 och 5.
  7. Flytta de filer som ligger i App_Code till lämpliga ställen (t ex rootnivån för global.asax.cs, separat mapp för dina klasser)
  8. Ta bort .webinfo filen och se till att bara behålla en AssemblyInfo.cs

Nu bör det fungera att kompilera!


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "ASP.NET: 8 Tips när du konverterar en Web Site till Web Application", + "meta_description": "", + "author_id": 1087, + "created_at": 1234526290000, + "created_by": 1087, + "updated_at": 1234526290000, + "updated_by": 1087, + "published_at": 1234526290000, + "published_by": 1087 + }, + { + "id": 275, + "title": "Initiera objekt på en rad - Object initializer", + "slug": "initiera-objekt-pa-en-rad---object-initializer", + "markdown": "\r\n\r\nUrsäkta för det dåliga bildskämtet – initiera en klass = första dagen i en skolklass.. ;-)\r\n\r\n\r\nFör en tid sedan skrev jag en blogg om det enklaste exemplet för integration mot Exchange. Då hade jag ännu inte lärt mig en ny teknik i C# 3.0 som heter Object initializer. Object initializer gör att man kan både initiera ett objekt och tilldela dess egenskaper på samma rad, detta är en gammal nyhet egentligen men många känner inte till den så här kommer lite bakgrundsinformation om varför den är så bra att känna till. Med hjälp av den tekniken så slipper man initiera temporära variabler för alla initieringsobjekt. Koden som produceras liknar ganska mycket JavaScript där man ofta använder detta för att skicka parametrar till metoder med hjälp av temporära objekt.\r\n\r\n\r\nDu intierar objektet genom att lägga till {} efter din objektintiering ().\r\n\r\n![Bild](http://tekniken.nu/uploads/633701230921319069-image001.jpg@01C98C34.B62C14A0__image001.jpg)\r\n```prettyprint lang-c-sharp\r\nnew User() { Email = \"John\" }\r\n```\r\n\r\n\r\nStörst effekt gör detta när man använder sig av Web Services, för problemet med SOAP Web Services är att det inte går att definiera konstruktorer på serversidan. Man måste manuellt skapa temporära objekt vilket i tidigare versioner av C# behövde göras på flera rader vilket tog lite mycket visuell plats i koden. Exchange Web Service är typiskt exempel där det här ger enorm effekt.\r\n\r\n\r\nExempel på kod som initieras på flera rader:\r\n\r\n```prettyprint lang-c-sharp\r\nUser user = newUser();\r\nuser.FirstName = \"John\";\r\nuser.LastName = \"Doe\";\r\nuser.Email = new EmailAddress();\r\nuser.Email.Address = \"john@doe.com\";\r\nuser.Email.Name =\"John Doe\";\r\nUsers.Add(user);\r\n```\r\n\r\n\r\nKan nu skrivas såhär:\r\n\r\n```prettyprint lang-c-sharp\r\nUsers.Add(newUser() { Email = newEmailAddress() { Address=\"john@doe.com\", Name=\"John Doe\"}, FirstName =\"John\", LastName = \"Doe\"});\r\n```\r\n\r\n\r\nDessutom får man ypperlig hjälp av Intellisence som också kommer ihåg vilka objekt du redan har angett. Lägg också märke till att du kan intiera fler objekt inne i initieraren.\r\n\r\n\r\n\r\n\r\n\r\nMed hjälp av den här tekniken blir det kortaste Exchange kodexemplet så här \"kort\":\r\n\r\n```prettyprint lang-c-sharp\r\nusing exchange; // your namespace to the webservice\r\nusing System.Security.Principal; \r\n\r\n// server = ex. https://exchange-server\r\n// exchangeCredentials är det konto som du vill hämta tasks från eller ett servicekonto – då anger du en mailbox i folders nedan\r\npublicList GetOutlookTasks(string serverUrl, System.Net.NetworkCredential exchangeCredentials)\r\n{\r\n\tExchangeServiceBinding esb = new ExchangeServiceBinding() { Credentials = exchangeCredentials, Url =string.Format(@\"{0}/EWS/Exchange.asmx\", serverUrl) }; // Tell it you only want to look in the tasks folder\r\n\tDistinguishedFolderIdType[] folders = { newDistinguishedFolderIdType() { Id = DistinguishedFolderIdNameType.tasks }}; // Form the FindItem request\r\n\tFindItemType findItemRequest = new FindItemType() { ItemShape = new ItemResponseShapeType() { BaseShape =DefaultShapeNamesType.AllProperties }, ParentFolderIds = folders }; // Send the request and get the response\r\n\tFindItemResponseType findItemResponse = esb.FindItem(findItemRequest);\r\n\tif (findItemResponse.ResponseMessages.Items.Length > 0)\r\n\t{\r\n\t\t// Detta skulle man gärna slippa...\r\n\t\tArrayOfRealItemsType realItems = ((FindItemResponseMessageType)(findItemResponse.ResponseMessages.Items[0])).RootFolder.Itemas ArrayOfRealItemsType;\r\n\t\tList outlookTasks = new List();\r\n\t\tforeach (TaskType task in realItems.Items)\r\n\t\t{\r\n\t\t\t// smidigt att kunna anropa fälten direkt mha Intellisence och utan krångliga schemanamn etc\r\n\t\t\tConsole.WriteLine(\"Task: {0} Duration: {1}-{2} \\n\", task.Subject, task.StartDate, task.DueDate);\r\n\t\t\toutlookTasks.Add(task);\r\n\t\t}\r\n\t\treturn outlookTasks;\r\n\t\t}\r\n\treturn null;\r\n}\r\n\r\n```\r\n", + "html": "

Ursäkta för det dåliga bildskämtet – initiera en klass = första dagen i en skolklass.. ;-)


För en tid sedan skrev jag en blogg om det enklaste exemplet för integration mot Exchange. Då hade jag ännu inte lärt mig en ny teknik i C# 3.0 som heter Object initializer. Object initializer gör att man kan både initiera ett objekt och tilldela dess egenskaper på samma rad, detta är en gammal nyhet egentligen men många känner inte till den så här kommer lite bakgrundsinformation om varför den är så bra att känna till. Med hjälp av den tekniken så slipper man initiera temporära variabler för alla initieringsobjekt. Koden som produceras liknar ganska mycket JavaScript där man ofta använder detta för att skicka parametrar till metoder med hjälp av temporära objekt.


Du intierar objektet genom att lägga till {} efter din objektintiering ().



Störst effekt gör detta när man använder sig av Web Services, för problemet med SOAP Web Services är att det inte går att definiera konstruktorer på serversidan. Man måste manuellt skapa temporära objekt vilket i tidigare versioner av C# behövde göras på flera rader vilket tog lite mycket visuell plats i koden. Exchange Web Service är typiskt exempel där det här ger enorm effekt.


Exempel på kod som initieras på flera rader:



Kan nu skrivas såhär:



Dessutom får man ypperlig hjälp av Intellisence som också kommer ihåg vilka objekt du redan har angett. Lägg också märke till att du kan intiera fler objekt inne i initieraren.



Med hjälp av den här tekniken blir det kortaste Exchange kodexemplet så här \"kort\":

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Initiera objekt på en rad - Object initializer", + "meta_description": "t på en rad med denna teknik.", + "author_id": 1087, + "created_at": 1234526292000, + "created_by": 1087, + "updated_at": 1234526292000, + "updated_by": 1087, + "published_at": 1234526292000, + "published_by": 1087 + }, + { + "id": 276, + "title": "A tribute", + "slug": "a-tribute", + "markdown": "\r\n\r\nI  C# 3.0 kan man låta kompilatorn automatiskt deklarera sitt privata fält för enklare properties med hjälp av följande syntax:\r\n\r\n![Bild](http://tekniken.nu/uploads/633707275772893788-image001.jpg@01C991B6.C5B6B290__image001.jpg)\r\n```prettyprint lang-c-sharp\r\npublic string Property\r\n{\r\n get;\r\n set;\r\n}\r\n\r\n```\r\n\r\n\r\nDetta innebär att man slipper skapa och hålla koll på de interna fälten och koden blir snyggare. Dock har vi ofta saknat att kunna sätta ett defaultvärde på dessa och i slutändan blir det därför oftast att man ändå konverterar om denna automatiska egenskap till manuell hantering på det gamla sättet. Därför kommer här ett litet tips som gör att du kan fortsätta använda dina automatiska properties därför att det finns ett attribut som du kan lägga till din automatiska egenskap som sätter standardvärdet:\r\n\r\n```prettyprint lang-c-sharp\r\n///\r\n/// Get or sets the delimiter character sequence. Default is ;\r\n/// \r\n[DefaultValue(\";\")]\r\npublic string Delimiter\r\n{\r\n get;\r\n set;\r\n}\r\n```\r\n", + "html": "

I  C# 3.0 kan man låta kompilatorn automatiskt deklarera sitt privata fält för enklare properties med hjälp av följande syntax:



Detta innebär att man slipper skapa och hålla koll på de interna fälten och koden blir snyggare. Dock har vi ofta saknat att kunna sätta ett defaultvärde på dessa och i slutändan blir det därför oftast att man ändå konverterar om denna automatiska egenskap till manuell hantering på det gamla sättet. Därför kommer här ett litet tips som gör att du kan fortsätta använda dina automatiska properties därför att det finns ett attribut som du kan lägga till din automatiska egenskap som sätter standardvärdet:

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Hej swayze", + "meta_description": null, + "author_id": 4, + "created_at": 1269864125000, + "created_by": 4, + "updated_at": 1269864125000, + "updated_by": 4, + "published_at": 1269864125000, + "published_by": 4 + }, + { + "id": 279, + "title": "Method extensions för Episerver", + "slug": "method-extensions-for-episerver", + "markdown": "\r\n\r\nNär C# 3.0 släpptes i samband med dotnet 3.5 i november 2007 kom så många nya bra grejer, t.ex. LINQ, att det var lätt att missa andra små godbitar som method extensions. Method extensions är ett sätt att lägga till nya metoder i en klass, utan att ändra i klassens egen cs-fil eller blanda in partiella klasser eller något sånt.\r\n\r\nVi tar ett exempel: Episerver har många bra funktioner, men definitivt inte alla man önskar sig och inte heller alltid där man vill ha dom.\r\n\r\nIstället för att t.ex skriva DataFactory.Instance.GetChildren(page) skulle vi vilja skriva page.GetChildren() och vi vill också kunna skriva page.GetSiblings(). Inte för att det tillför ny funktionalitet, men för att det vore praktiskt. En lösning skulle kunna vara att göra en egen subklass till PageData med de här metoderna, men det betyder att man måste instantiera din egen klass varenda gång du ska använda t.ex. CurrentPage-objektet. Att istället använda method extensions för att få till den här lösningen tar bara några minuter och ger garanterat en liten endorfinkick (samt att du kommer att spendera hela eftermiddan med att skapa alla de nya metoder du drömt om skulle finnas på de klasser du använder).\r\n\r\nHittills har vi implementerat funktionalitet som GetSiblings som en metod i ett klassbibliotek, men det är lätt att glömma bort vad dom heter, och var metoderna finns.\r\n\r\nMed hjälp av extension methods så får vi direkt hjälp av Intellisense - det räcker med att skriva CurrentPage, trycka punkt och få upp en fin lista där metoden GetSiblings dyker upp precis som dom inbyggda metoderna (med en liten ikon förstås). Anropet blir då ”CurrentPage.GetSiblings();” - mycket stiligt!\r\n\r\nDet som behövs för att skapa en method extension är att metoden måste vara statisk och ligga i en statisk klass. Före den första parametern i den statiska metodenlägger man till ordet this (se exempel i koden nedan). Detta gör att den här metoden kommer att dyka upp på alla objekt av den klassen, i detta fallet PageData.\r\n\r\nFör att få tillgång till de nya metoderna krävs att man ”når” klassen, enklast med att lägga till dess namespace med using längst upp i filen precis som när man använder LINQ (där man skriver using System.Linq). Tyvärr så går det inte att göra extension properties som skulle göra det möjligt att t.ex skriva CurrentPage.Children för att komma åt alla undersidor. Vi hoppas på att detta kommer i C# 4.0 (det finns dock mängder av diskussioner varför det inte är möjligt eller en bra idé - men vi gillar tanken).\r\n\r\nHär kommer GetSiblings i komplett form med hjälpfunktion för GetChildren, samt som bonus en generisk metod som underlättar när man har properties som pekar på andra sidor och man vill hämta ut dessa relaterade värden - alltså en sorts indirekt property. Om du inte stött på generics tidigare så har du nåt att sätta tänderna i så du slipper metoder som returnerar object som måste konverteras och castas.\r\n\r\n![Bild](http://tekniken.nu/uploads/102-0205_IMG.jpg)\r\n```prettyprint lang-c-sharp\r\n///\r\n/// Get siblings for page\r\n///\r\n///\r\n///\r\npublic static PageDataCollection GetSiblings(thisPageData page)\r\n{\r\n return new PageDataCollection(page.ParentLink.GetChildren().Where(p => p.PageLink.ID != page.PageLink.ID));\r\n}\r\n\r\npublic static PageDataCollection GetChildren(thisPageReference pageReference)\r\n{\r\n return PageFunctions.GetChildren(pageReference,false);\r\n}\r\n\r\n///\r\n/// Returns a typed property from the page the relatedPageProperty points to.\r\n/// Example usagepage.GetRelatedPropertyValue(“relatedPage”,”relatedPropertyValue”);\r\n///\r\n///\r\n///\r\n///Which property points to the related page\r\n///Which property do you want from the related page\r\n///\r\npublic static T GetRelatedPropertyValue(this PageData page, string relatedPageProperty,string relatedProperty)\r\n{\r\n PageReference relatedPageReference = (PageReference)page[relatedPageProperty];\r\n if (PageReference.IsNullOrEmpty(relatedPageReference))\r\n returndefault(T);\r\n PageData relatedPage = GetPage(relatedPageReference);\r\n if (relatedPage ==null)\r\n returndefault(T);\r\n return (T)relatedPage[relatedProperty]; \r\n}\r\n```\r\n", + "html": "

När C# 3.0 släpptes i samband med dotnet 3.5 i november 2007 kom så många nya bra grejer, t.ex. LINQ, att det var lätt att missa andra små godbitar som method extensions. Method extensions är ett sätt att lägga till nya metoder i en klass, utan att ändra i klassens egen cs-fil eller blanda in partiella klasser eller något sånt.

Vi tar ett exempel: Episerver har många bra funktioner, men definitivt inte alla man önskar sig och inte heller alltid där man vill ha dom.

Istället för att t.ex skriva DataFactory.Instance.GetChildren(page) skulle vi vilja skriva page.GetChildren() och vi vill också kunna skriva page.GetSiblings(). Inte för att det tillför ny funktionalitet, men för att det vore praktiskt. En lösning skulle kunna vara att göra en egen subklass till PageData med de här metoderna, men det betyder att man måste instantiera din egen klass varenda gång du ska använda t.ex. CurrentPage-objektet. Att istället använda method extensions för att få till den här lösningen tar bara några minuter och ger garanterat en liten endorfinkick (samt att du kommer att spendera hela eftermiddan med att skapa alla de nya metoder du drömt om skulle finnas på de klasser du använder).

Hittills har vi implementerat funktionalitet som GetSiblings som en metod i ett klassbibliotek, men det är lätt att glömma bort vad dom heter, och var metoderna finns.

Med hjälp av extension methods så får vi direkt hjälp av Intellisense - det räcker med att skriva CurrentPage, trycka punkt och få upp en fin lista där metoden GetSiblings dyker upp precis som dom inbyggda metoderna (med en liten ikon förstås). Anropet blir då ”CurrentPage.GetSiblings();” - mycket stiligt!

Det som behövs för att skapa en method extension är att metoden måste vara statisk och ligga i en statisk klass. Före den första parametern i den statiska metodenlägger man till ordet this (se exempel i koden nedan). Detta gör att den här metoden kommer att dyka upp på alla objekt av den klassen, i detta fallet PageData.

För att få tillgång till de nya metoderna krävs att man ”når” klassen, enklast med att lägga till dess namespace med using längst upp i filen precis som när man använder LINQ (där man skriver using System.Linq). Tyvärr så går det inte att göra extension properties som skulle göra det möjligt att t.ex skriva CurrentPage.Children för att komma åt alla undersidor. Vi hoppas på att detta kommer i C# 4.0 (det finns dock mängder av diskussioner varför det inte är möjligt eller en bra idé - men vi gillar tanken).

Här kommer GetSiblings i komplett form med hjälpfunktion för GetChildren, samt som bonus en generisk metod som underlättar när man har properties som pekar på andra sidor och man vill hämta ut dessa relaterade värden - alltså en sorts indirekt property. Om du inte stött på generics tidigare så har du nåt att sätta tänderna i så du slipper metoder som returnerar object som måste konverteras och castas.

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Method extensions för EPiServer", + "meta_description": " andras klasser!", + "author_id": 1089, + "created_at": 1236334121000, + "created_by": 1089, + "updated_at": 1236334121000, + "updated_by": 1089, + "published_at": 1236334121000, + "published_by": 1089 + }, + { + "id": 280, + "title": "Undvik fallgropar vid positionering i CSS", + "slug": "undvik-fallgropar-vid-positionering-i-css", + "markdown": "\r\n\r\nFör att undvika strul mellan webbläsare, använd alltid följande ordning när du vill positionera element i din HTML layout:\r\n\r\nAnvänd helst padding för att positionera element, texter etcOm inte 1 går, använd hellre margin än position relativeFör att lägga på skuggor etc och slippa lägga på margins på andra element så använd hellre minusmargin (t ex margin-right: -4px) än position relative, right: -4px\r\n\r\nPå det hela taget, så fort du börjar skriva position:relative eller z-index: så har du (oftast) valt fel lösning – följ ovanstående lista.\r\n\r\nFaktiskt så är det så bra att padding och border har fungerat klockrent i alla browsers sen IE6 med margin ibland ”puttar” på andra element och därmed agerar olika i olika browsers. IE7 är bättre än IE6 men är fortfarande annorlunda än Firefox och Chrome/Safari.\r\n\r\nBehöver du ändå använda margins så finns det ett hack som gör att IE6 hanteras separat och det är att skriva _margin: (dvs understreck innan), då reagerar endast IE6 och inte andra browsers. (tack Ola för tipset!)\r\n\r\nBehöver du göra undantag för IE7 så är trixet att skriva !important! (dvs ett extra utropstecken efter !important!)\r\n\r\n![Bild](http://tekniken.nu/uploads/633722937858308533-image001.gif@01C9A178.68C52DB0__image001.gif)", + "html": "

För att undvika strul mellan webbläsare, använd alltid följande ordning när du vill positionera element i din HTML layout:

  1. Använd helst padding för att positionera element, texter etc
  2. Om inte 1 går, använd hellre margin än position relative
  3. För att lägga på skuggor etc och slippa lägga på margins på andra element så använd hellre minusmargin (t ex margin-right: -4px) än position relative, right: -4px

På det hela taget, så fort du börjar skriva position:relative eller z-index: så har du (oftast) valt fel lösning – följ ovanstående lista.

Faktiskt så är det så bra att padding och border har fungerat klockrent i alla browsers sen IE6 med margin ibland ”puttar” på andra element och därmed agerar olika i olika browsers. IE7 är bättre än IE6 men är fortfarande annorlunda än Firefox och Chrome/Safari.

Behöver du ändå använda margins så finns det ett hack som gör att IE6 hanteras separat och det är att skriva _margin: (dvs understreck innan), då reagerar endast IE6 och inte andra browsers. (tack Ola för tipset!)

Behöver du göra undantag för IE7 så är trixet att skriva !important! (dvs ett extra utropstecken efter !important!)

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Undvik fallgropar vid positionering i CSS", + "meta_description": " du bäst positionerar element i CSS.", + "author_id": 1087, + "created_at": 1236696984000, + "created_by": 1087, + "updated_at": 1236696984000, + "updated_by": 1087, + "published_at": 1236696984000, + "published_by": 1087 + }, + { + "id": 283, + "title": "Silverlight ur kundens synvinkel", + "slug": "silverlight-ur-kundens-synvinkel", + "markdown": "\r\n\r\nSom drivna utvecklare är vi alltid sugna på att lära oss nya och bättre sätt att utveckla applikationer och sajter åt våra kunder. Vi har sneglat på Silverlight i ett helt år nu och nu börjar det verkligen bli dags att börja utveckla på allvar i Silverlight - men hur förklarar man nyttan av Silverlight för en kund? Kunderna måste ju ändå våga chansa på den här nya tekniken för att den ska få genomslagskraft.\r\n\r\nDet är inte svårt att förklara nyttan av Silverlight för en utvecklare. Bara att nämna C# och en enda miljö att testa mot istället för minst 3 olika webbläsare (ännu fler om man räknar att alla inte kör senaste versionen) med sina egna brister, gör att dom flesta webbutvecklare spetsar öronen lite extra.\r\n\r\nDen mer konstnärliga utvecklaren och designern är inte heller svår att få med på banan genom att visa hur enkelt det är att göra snygga och mjuka animeringar. I Silverlight 3 (som släpps om några månader) är det också enkelt att rotera alla element i 3 dimensioner samt att använda grafiska effekter kallade shaders (som traditionellt sett används i 3D-spel för effekter som t.ex. oskärpa, brus, färgtoningar osv.) för att göra det mesta du bara kan göra i Photoshop idag.\r\n\r\nFör kunden räcker det dock inte att vi är lyriska över de tekniska möjligheterna - de vill veta vad de får som inte HTML kan ge dem och den biten har alltid varit svårare att förklara men här kommer ett försök.\r\n## Rika formulär och webbapplikationer\r\nVill du ha en dropdown-lista med ikoner? Det går inte att göra alls i HTML utan att kasta på mängder av Javascript som kommer ge en längre laddningstid tillsammans med flimmer och eventuella buggar beroende på exakt vilken webbläsarversion besökaren har (samt att utvecklingstiden flerdubblas). I Silverlight kan du t.o.m. få ikonen animerad och varför inte med en skugga och lite reflektioner (kanske inte bör men du kan).Du kan t.ex. ge användaren en känsla av kontroll genom att låta dem dra och släppa ikoner istället för att hoppa runt mellan sidor och för att göra det snyggt(?) kan du låta ikonerna få en skugga och kanske röra sig som om de vore gjorda av gummi!Riktiga applikationer. I Silverlight 3 kommer möjligheten att köra en Silverlight-applikation på skrivbordet som vilken applikation som helst d.v.s. det är möjligt att t.ex. flytta ut chatfönstret från sajten till att fungera som Live Messenger utan att kunden behöver öppna webbläsaren. Dessa applikationer kan dessutom köras utan nätverkskoppling (om de är kodade för det förstås) så det är alltså möjligt att göra en kalender, komihåglista eller spel som fortfarande fungerar när du sitter på tåget utan nätverkskoppling.Vill du göra tydliga meddelanden till användaren, t.ex. om att en produkten har tagits bort eller ett meddelande har skickats? Störande dialogrutor eller saker som blinkar eller tonar fram/bort är ungefär de enda sätten som finns i HTML-världen (att göra mer komplicerade saker kräver oftast feta Javascript-bibliotek och då är man oftast begränsad till de fåtal effekter som följer med). I en Silverlight-applikation kan du t.ex. låta det du klickade på skrumpna ihop till en liten boll som brinner upp (ännu en grej man kanske inte bör göra...).\r\nHD och 3D\r\nSömlöst integrera videosnuttar i HD-upplösning samt använda ljudeffekter eller varför inte använda deep zoom så att användaren kan se detaljer i t.ex. klädesplagg i en bild som är så högupplöst att det vore opraktiskt att låta användarna ladda ner hela bilden.Film behöver inte längre vara något som sticker ut från en annars statisk sajt utan kan vara en naturlig del av flödet, varför inte presentera den nya produkten med hjälp av en reklamfilm som smälter in i sajten precis som om det bara vore ännu en bild. Den behöver inte heller längre vara helt fyrkantig, det går utmärkt att lägga lite grafiskt lullull över kanterna om man vill för att ytterligare bryta sig ur det traditionella webbsida/spelare-maneret.Du kan använda effekter som hittills bara gått att göra i Photoshop. Du kan t.ex. göra hela applikationen oskarp och i gråskala för att dialogrutan du presenterar ska synas tydligare. Du kan lägga på effekter för syns skull utan att riskera att just det grafiskatricket råkar förstöra funktionaliteten i en viss webbläsare (vi sneglar på dig IE6 även om alla andra webbläsare också har sina egenheter).Bilder, texter och listor kan roteras i 3D så att t.ex. ”baksidan” av en bild kan innehålla kommentarer om bilden. Detta är enkelt i Silverlight 3 även om det finns lösningar i Silverlight 2 också.Äkta 3D med modeller, texturer och ljussättning finns inte än, inte ens i Silverlight 3, men när det kommer (vi säger när istället för om eftersom det är oundvikligt) så är resten av sajten redan förberedd och det går då att använda 3d lika naturligt som att idag lägga ut en textruta.## Skalar bra på både stora och små skärmarSilverlight är gjord för vektorgrafik (men det går förstås utmärkt att använda bilder och fotografier) vilket gör att sajten(om det går att kalla det en sajt längre) ser lika imponerande skarp och fräsch ut när du kör i fullskärm på 1080p-projektorn framför 1000 personer på kickoffen som när du kör den i din netbook på kaféet.Snart går det också att använda Silverlight i mobilen (Windows Mobile, Nokia och Android men iPhone kommer säkert också så småningom) utan att behöva skriva om en enda rad kod. För maximal coolhet bör man förstås lägga till några rader kod för att utnyttja GPS och accelerometern (skaka mobilen för att tömma varukorgen t.ex). Det finns inte ens några rykten om när det ska släppas till mobilen men en rimlig gissning är innan årets slut.## Inte bara bacon\r\nDet kan förstås låta som om Silverlight är det bästa som hänt sen bacon och inte har några som helst nackdelar men det är förstås (tyvärr) inte så (även om Silverlight är lika mångsidigt som bacon :) och passar till det mesta). Här kommer några saker man måste stå ut med för att få alla godsaker:\r\n\r\nJust nu (april 2009) så har bara ca 20% av webbanvändarna Silverlight installerat på sin dator. Det är en snabb nerladdning och kräver ingen kunskap att installera men det är ändå ett litet motstånd man måste över. Detta är dock ett mindre problem på t.ex. intranät eller sajter där användaren räknar med att använda under en tid t.ex communties, dejtingsajter och spelsajter då den förväntade vinsten för användaren är värd besväret.Designers som hittills gjort ikoner och skisser enbart i Photoshop måste lära sig jobba med vektorgrafik och framförallt animering för att utnyttja Silverlight maximalt.Silverlight är en relativt ung teknik vilket gör att utvecklarna inte lika lång erfarenhet och inte heller samma enorma bibliotek över färdiga lösningar som vid ”vanlig” webbutveckling. Följden blir att vissa saker som gått snabbt att göra förut tar längre tid med Silverlight (även om det motsatta gäller i många fall).Textkvalitén har alltid varit lite lidande jämfört med HTML då Silverlight använder antialiasing istället för cleartype (windows standard). Detta ska dock lösas i Silverlight 3 (dock ej den beta som är ute idag men det kommer i skarpa versionen).Sökmotoroptimering är något som kräver trixande och oftast speciella sitemaps även om det i Silverlight 3 finns bra inbyggt stöd för djuplänkningar t.ex. (så att sökmotorer kan länka till rätt del av applikationen)\r\n\r\n## Konkurrerande tekniker\r\nI dagsläget är det lite snårigt om man vill bygga snygga funktionella sajter som också har en teknisk struktur. Det är en salig blandning av många olika tekniker som alla funkar lite olika på olika webbläsare och plattformar. Med Silverlight kan man bygga allt från applikationer till video- och inspirationssajter med samma verktyg och kan testa i en homogen miljö. Dock måste kunderna våga satsa på tekniken för att den ska göra någon nytta. Om de inte vågar finns följande konkurrerande tekniker:\r\n\r\nFlash: beprövad konkurrent men kräver dedikerade flashutvecklare. Närmaste konkurrenten med Silverlight om man kollar på tekniska möjligheter.Javascript-baserade sajter: tungladdade, kräver ingen installation, använder HTML i bakgrunden och lider av mängden webbläsare, beroende av tredjepartsbibliotek t.ex. Extjs, prototype, jquery så det är en ganska splittrad miljö.HTML-sajt med lite AJAX: funktionell, relativt snabbt utvecklad (layouttestning i multipla webbläsare står för en stor del av utvecklingstiden) men lite tråkig och mest begränsad.Vi som utvecklare har en hel lista med anledningar till varför vi hellre använder Silverlight och C# än HTML och Javascript och mer detaljer kring det kommer i en framtida blogg. Det viktigaste för oss är dock att vi får en enhetlig utvecklingsmiljö för alla typer av projekt där all källkod kan hanteras och byggas på ett gemensamt sätt och där kodbibliotek som byggs upp för servern också kan användas till klienten samt att testning kan ske för alla plattformar samtidigt.\r\n\r\n![Bild](http://tekniken.nu/uploads/633743470786394990-silverlight.png)", + "html": "

Som drivna utvecklare är vi alltid sugna på att lära oss nya och bättre sätt att utveckla applikationer och sajter åt våra kunder. Vi har sneglat på Silverlight i ett helt år nu och nu börjar det verkligen bli dags att börja utveckla på allvar i Silverlight - men hur förklarar man nyttan av Silverlight för en kund? Kunderna måste ju ändå våga chansa på den här nya tekniken för att den ska få genomslagskraft.

Det är inte svårt att förklara nyttan av Silverlight för en utvecklare. Bara att nämna C# och en enda miljö att testa mot istället för minst 3 olika webbläsare (ännu fler om man räknar att alla inte kör senaste versionen) med sina egna brister, gör att dom flesta webbutvecklare spetsar öronen lite extra.

Den mer konstnärliga utvecklaren och designern är inte heller svår att få med på banan genom att visa hur enkelt det är att göra snygga och mjuka animeringar. I Silverlight 3 (som släpps om några månader) är det också enkelt att rotera alla element i 3 dimensioner samt att använda grafiska effekter kallade shaders (som traditionellt sett används i 3D-spel för effekter som t.ex. oskärpa, brus, färgtoningar osv.) för att göra det mesta du bara kan göra i Photoshop idag.

För kunden räcker det dock inte att vi är lyriska över de tekniska möjligheterna - de vill veta vad de får som inte HTML kan ge dem och den biten har alltid varit svårare att förklara men här kommer ett försök.

Rika formulär och webbapplikationer

  • Vill du ha en dropdown-lista med ikoner? Det går inte att göra alls i HTML utan att kasta på mängder av Javascript som kommer ge en längre laddningstid tillsammans med flimmer och eventuella buggar beroende på exakt vilken webbläsarversion besökaren har (samt att utvecklingstiden flerdubblas). I Silverlight kan du t.o.m. få ikonen animerad och varför inte med en skugga och lite reflektioner (kanske inte bör men du kan).
  • Du kan t.ex. ge användaren en känsla av kontroll genom att låta dem dra och släppa ikoner istället för att hoppa runt mellan sidor och för att göra det snyggt(?) kan du låta ikonerna få en skugga och kanske röra sig som om de vore gjorda av gummi!
  • Riktiga applikationer. I Silverlight 3 kommer möjligheten att köra en Silverlight-applikation på skrivbordet som vilken applikation som helst d.v.s. det är möjligt att t.ex. flytta ut chatfönstret från sajten till att fungera som Live Messenger utan att kunden behöver öppna webbläsaren. Dessa applikationer kan dessutom köras utan nätverkskoppling (om de är kodade för det förstås) så det är alltså möjligt att göra en kalender, komihåglista eller spel som fortfarande fungerar när du sitter på tåget utan nätverkskoppling.
  • Vill du göra tydliga meddelanden till användaren, t.ex. om att en produkten har tagits bort eller ett meddelande har skickats? Störande dialogrutor eller saker som blinkar eller tonar fram/bort är ungefär de enda sätten som finns i HTML-världen (att göra mer komplicerade saker kräver oftast feta Javascript-bibliotek och då är man oftast begränsad till de fåtal effekter som följer med). I en Silverlight-applikation kan du t.ex. låta det du klickade på skrumpna ihop till en liten boll som brinner upp (ännu en grej man kanske inte bör göra...).

HD och 3D

  • Sömlöst integrera videosnuttar i HD-upplösning samt använda ljudeffekter eller varför inte använda deep zoom så att användaren kan se detaljer i t.ex. klädesplagg i en bild som är så högupplöst att det vore opraktiskt att låta användarna ladda ner hela bilden.
  • Film behöver inte längre vara något som sticker ut från en annars statisk sajt utan kan vara en naturlig del av flödet, varför inte presentera den nya produkten med hjälp av en reklamfilm som smälter in i sajten precis som om det bara vore ännu en bild. Den behöver inte heller längre vara helt fyrkantig, det går utmärkt att lägga lite grafiskt lullull över kanterna om man vill för att ytterligare bryta sig ur det traditionella webbsida/spelare-maneret.
  • Du kan använda effekter som hittills bara gått att göra i Photoshop. Du kan t.ex. göra hela applikationen oskarp och i gråskala för att dialogrutan du presenterar ska synas tydligare. Du kan lägga på effekter för syns skull utan att riskera att just det grafiskatricket råkar förstöra funktionaliteten i en viss webbläsare (vi sneglar på dig IE6 även om alla andra webbläsare också har sina egenheter).
  • Bilder, texter och listor kan roteras i 3D så att t.ex. ”baksidan” av en bild kan innehålla kommentarer om bilden. Detta är enkelt i Silverlight 3 även om det finns lösningar i Silverlight 2 också.
  • Äkta 3D med modeller, texturer och ljussättning finns inte än, inte ens i Silverlight 3, men när det kommer (vi säger när istället för om eftersom det är oundvikligt) så är resten av sajten redan förberedd och det går då att använda 3d lika naturligt som att idag lägga ut en textruta.

Skalar bra på både stora och små skärmar

  • Silverlight är gjord för vektorgrafik (men det går förstås utmärkt att använda bilder och fotografier) vilket gör att sajten(om det går att kalla det en sajt längre) ser lika imponerande skarp och fräsch ut när du kör i fullskärm på 1080p-projektorn framför 1000 personer på kickoffen som när du kör den i din netbook på kaféet.
  • Snart går det också att använda Silverlight i mobilen (Windows Mobile, Nokia och Android men iPhone kommer säkert också så småningom) utan att behöva skriva om en enda rad kod. För maximal coolhet bör man förstås lägga till några rader kod för att utnyttja GPS och accelerometern (skaka mobilen för att tömma varukorgen t.ex). Det finns inte ens några rykten om när det ska släppas till mobilen men en rimlig gissning är innan årets slut.

Inte bara bacon

Det kan förstås låta som om Silverlight är det bästa som hänt sen bacon och inte har några som helst nackdelar men det är förstås (tyvärr) inte så (även om Silverlight är lika mångsidigt som bacon :) och passar till det mesta). Här kommer några saker man måste stå ut med för att få alla godsaker:

  • Just nu (april 2009) så har bara ca 20% av webbanvändarna Silverlight installerat på sin dator. Det är en snabb nerladdning och kräver ingen kunskap att installera men det är ändå ett litet motstånd man måste över. Detta är dock ett mindre problem på t.ex. intranät eller sajter där användaren räknar med att använda under en tid t.ex communties, dejtingsajter och spelsajter då den förväntade vinsten för användaren är värd besväret.
  • Designers som hittills gjort ikoner och skisser enbart i Photoshop måste lära sig jobba med vektorgrafik och framförallt animering för att utnyttja Silverlight maximalt.
  • Silverlight är en relativt ung teknik vilket gör att utvecklarna inte lika lång erfarenhet och inte heller samma enorma bibliotek över färdiga lösningar som vid ”vanlig” webbutveckling. Följden blir att vissa saker som gått snabbt att göra förut tar längre tid med Silverlight (även om det motsatta gäller i många fall).
  • Textkvalitén har alltid varit lite lidande jämfört med HTML då Silverlight använder antialiasing istället för cleartype (windows standard). Detta ska dock lösas i Silverlight 3 (dock ej den beta som är ute idag men det kommer i skarpa versionen).
  • Sökmotoroptimering är något som kräver trixande och oftast speciella sitemaps även om det i Silverlight 3 finns bra inbyggt stöd för djuplänkningar t.ex. (så att sökmotorer kan länka till rätt del av applikationen)

Konkurrerande tekniker

I dagsläget är det lite snårigt om man vill bygga snygga funktionella sajter som också har en teknisk struktur. Det är en salig blandning av många olika tekniker som alla funkar lite olika på olika webbläsare och plattformar. Med Silverlight kan man bygga allt från applikationer till video- och inspirationssajter med samma verktyg och kan testa i en homogen miljö. Dock måste kunderna våga satsa på tekniken för att den ska göra någon nytta. Om de inte vågar finns följande konkurrerande tekniker:

  • Flash: beprövad konkurrent men kräver dedikerade flashutvecklare. Närmaste konkurrenten med Silverlight om man kollar på tekniska möjligheter.
  • Javascript-baserade sajter: tungladdade, kräver ingen installation, använder HTML i bakgrunden och lider av mängden webbläsare, beroende av tredjepartsbibliotek t.ex. Extjs, prototype, jquery så det är en ganska splittrad miljö.
  • HTML-sajt med lite AJAX: funktionell, relativt snabbt utvecklad (layouttestning i multipla webbläsare står för en stor del av utvecklingstiden) men lite tråkig och mest begränsad.
Vi som utvecklare har en hel lista med anledningar till varför vi hellre använder Silverlight och C# än HTML och Javascript och mer detaljer kring det kommer i en framtida blogg. Det viktigaste för oss är dock att vi får en enhetlig utvecklingsmiljö för alla typer av projekt där all källkod kan hanteras och byggas på ett gemensamt sätt och där kodbibliotek som byggs upp för servern också kan användas till klienten samt att testning kan ske för alla plattformar samtidigt.

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Silverlight ur kundens synvinkel", + "meta_description": " vi att tiden är mogen! ", + "author_id": 1089, + "created_at": 1238750277000, + "created_by": 1089, + "updated_at": 1238750277000, + "updated_by": 1089, + "published_at": 1238750277000, + "published_by": 1089 + }, + { + "id": 287, + "title": "Gratistjänst testar om din webbplats klarar av vad den lovar", + "slug": "gratistjanst-testar-om-din-webbplats-klarar-av-vad-den-lovar", + "markdown": "\r\n\r\nNär man utvecklar en avancerad webbtjänst kan det vara väldigt svårt att sia om hur bra den kommer fungera när det väl kommer många användare samtidigt. Det finns många verktyg och system att installera för att simulera tusentals användare men gemensamt för alla dessa är att det krävs väldigt mycket erfarenhet och bra hårdvara för att kunna få en rimlig miljö som liknar riktiga användare. Till exempel finns det Test Load Agent inbyggt i Visual Studio 2005 Team Suite och 2008. Nagios finns också som är en open source plattform men efter test av dessa system visade det sig att vi hade begränsningar i vår egen brandvägg som gjorde att trafiken stryps redan innan den kommer ut på internet, plus att vi har inget annat att jämföra med vilket gör det svårt att ge rekommendationer eller dra slutsatser.\r\n\r\nDå är det kanon att få reda på att det finns gratistjänster som direkt och helt gratis kan göra ett standardtest av din webbplats och simulera upp till 50 samtidiga användare vilket är perfekt för nystartade bloggar osv. För större webbplatser finns självklart större paket att köpa med flera användare och övervakning osv. Dessutom finns det färdiga mallar att jämföra med så att man får hjälp att tolka siffrorna och graferna. I de mer avancerade paketen kan man även spela in en vanlig användare som går runt på din sajt och sen simulera denna användare gånger några hundra.\r\n\r\nKul är också att LoadImpact drivs av ett svenskt företag vilket känns både tryggt och roligt.\r\n\r\nTesta din egen sajt här: http://loadimpact.com/\r\n\r\n![Bild](http://tekniken.nu/uploads/633753951109157976-loadimpact-screenshot3[1].png)", + "html": "

När man utvecklar en avancerad webbtjänst kan det vara väldigt svårt att sia om hur bra den kommer fungera när det väl kommer många användare samtidigt. Det finns många verktyg och system att installera för att simulera tusentals användare men gemensamt för alla dessa är att det krävs väldigt mycket erfarenhet och bra hårdvara för att kunna få en rimlig miljö som liknar riktiga användare. Till exempel finns det Test Load Agent inbyggt i Visual Studio 2005 Team Suite och 2008. Nagios finns också som är en open source plattform men efter test av dessa system visade det sig att vi hade begränsningar i vår egen brandvägg som gjorde att trafiken stryps redan innan den kommer ut på internet, plus att vi har inget annat att jämföra med vilket gör det svårt att ge rekommendationer eller dra slutsatser.

Då är det kanon att få reda på att det finns gratistjänster som direkt och helt gratis kan göra ett standardtest av din webbplats och simulera upp till 50 samtidiga användare vilket är perfekt för nystartade bloggar osv. För större webbplatser finns självklart större paket att köpa med flera användare och övervakning osv. Dessutom finns det färdiga mallar att jämföra med så att man får hjälp att tolka siffrorna och graferna. I de mer avancerade paketen kan man även spela in en vanlig användare som går runt på din sajt och sen simulera denna användare gånger några hundra.

Kul är också att LoadImpact drivs av ett svenskt företag vilket känns både tryggt och roligt.

Testa din egen sajt här: http://loadimpact.com/

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Gratistjänst testar om din webbplats klarar av vad den lovar", + "meta_description": "", + "author_id": 1087, + "created_at": 1239798310000, + "created_by": 1087, + "updated_at": 1239798310000, + "updated_by": 1087, + "published_at": 1239798310000, + "published_by": 1087 + }, + { + "id": 288, + "title": "LINQ för att enkelt generera XML", + "slug": "linq-for-att-enkelt-generera-xml", + "markdown": "\r\n\r\nAtt generera XML har tidigare alltid varit lite trixigt men med LINQ är det hur enkelt som helst.\r\n\r\nVi vill skapa en XML-fil med struktur enligt nedan:\r\n\r\n![Bild](http://tekniken.nu/uploads/links.png)\r\n```prettyprint lang-xml\r\n\r\n \r\n #111410\r\n \r\n\r\n\r\n```\r\n\r\n\r\nC#-koden som behövs:\r\n\r\n```prettyprint lang-c-sharp\r\nXElement xml = new XElement(\"colors\", from page in colorPages\r\n select new XElement(\"color\", \r\n new XAttribute(\"name\", page.PageName), \r\n new XAttribute(\"id\", page.PageLink.ID),\r\n new XElement(\"rgb\", Convert.ToString(page[\"hex\"])))\r\n);\r\n```\r\n\r\n\r\n\r\nI exemplet är colorPages en PageDataCollection från Episerver men det kunde förstås lika gärna vara t.ex. en lista, array eller dataset av valfri sort.\r\n\r\nFör att sedan plocka ut xmldokumentet som text och skriva ut den till t.ex en websida räcker det med att skriva:\r\n\r\n\r\n```prettyprint lang-c-sharp\r\nResponse.ContentType =\"text/xml\";\r\nResponse.Write(xml.ToString());\r\n```\r\n", + "html": "

Att generera XML har tidigare alltid varit lite trixigt men med LINQ är det hur enkelt som helst.

Vi vill skapa en XML-fil med struktur enligt nedan:



C#-koden som behövs:



I exemplet är colorPages en PageDataCollection från Episerver men det kunde förstås lika gärna vara t.ex. en lista, array eller dataset av valfri sort.

För att sedan plocka ut xmldokumentet som text och skriva ut den till t.ex en websida räcker det med att skriva:

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "LINQ för att enkelt generera XML", + "meta_description": "", + "author_id": 1089, + "created_at": 1239990891000, + "created_by": 1089, + "updated_at": 1239990891000, + "updated_by": 1089, + "published_at": 1239990891000, + "published_by": 1089 + }, + { + "id": 290, + "title": "Google Analytics API ", + "slug": "google-analytics-api-", + "markdown": "\r\n\r\nNu börjar det hända saker, Google har äntligen släppt en publik beta av Analytics API:et. Det har pratats om det en tid och vissa utvalda har fått en tidig version av det men nu är det äntligen mera publikt vilket kommer göra att utvecklingen tar ordentlig fart.\r\n\r\nTänk bara på vilka sköna stats apps man kan bygga nu, ha koll via din desktop/iphone/webben/any gör ju att detta verktyg blir lika användbart som webben i övrigt varit så länge.\r\n\r\nLäs mer på Google Analytics-bloggen:http://analytics.blogspot.com/2009/04/attention-developers-google-analytics.html\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/633760114203038111-gears.jpg)", + "html": "

Nu börjar det hända saker, Google har äntligen släppt en publik beta av Analytics API:et. Det har pratats om det en tid och vissa utvalda har fått en tidig version av det men nu är det äntligen mera publikt vilket kommer göra att utvecklingen tar ordentlig fart.

Tänk bara på vilka sköna stats apps man kan bygga nu, ha koll via din desktop/iphone/webben/any gör ju att detta verktyg blir lika användbart som webben i övrigt varit så länge.

Läs mer på Google Analytics-bloggen:
http://analytics.blogspot.com/2009/04/attention-developers-google-analytics.html


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Google släpper publik beta av Analytics API ", + "meta_description": "", + "author_id": 1091, + "created_at": 1240414619000, + "created_by": 1091, + "updated_at": 1240414619000, + "updated_by": 1091, + "published_at": 1240414619000, + "published_by": 1091 + }, + { + "id": 291, + "title": "Spritegenerator", + "slug": "spritegenerator", + "markdown": "\r\n\r\nFör att öka prestandan på en webbplats är ett effektivt sätt att skapa sprites av alla bilder som används. Detta är ett ganska tidsödande jobb om man ska göra det manuellt. Som tur är finns det en gratistjänst som hjälper dig på traven!\r\n\r\nhttp://spritegen.website-performance.org/\r\n\r\nBörja först med att spara ner dina bilder och zippa ihop dem:\r\n\r\n\r\n\r\nGå sedan in på http://spritegen.website-performance.org/ och ladda upp, se till att namnge dina bilder på ett förståeligt sätt så att du hittar dem senare. Sajten genererar ett css och en sammanslagen png bild!\r\n\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/633761611936512681-image001.png@01C9C36B.71EF1260__image001.png)", + "html": "

För att öka prestandan på en webbplats är ett effektivt sätt att skapa sprites av alla bilder som används. Detta är ett ganska tidsödande jobb om man ska göra det manuellt. Som tur är finns det en gratistjänst som hjälper dig på traven!

http://spritegen.website-performance.org/

Börja först med att spara ner dina bilder och zippa ihop dem:

Gå sedan in på http://spritegen.website-performance.org/ och ladda upp, se till att namnge dina bilder på ett förståeligt sätt så att du hittar dem senare. Sajten genererar ett css och en sammanslagen png bild!

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Spritegenerator på nätet", + "meta_description": "d att man klarar sig med en enda uppkoppling. Nu finns en bra spritegenerator som webbtjänst!", + "author_id": 1087, + "created_at": 1240564393000, + "created_by": 1087, + "updated_at": 1240564393000, + "updated_by": 1087, + "published_at": 1240564393000, + "published_by": 1087 + }, + { + "id": 293, + "title": "Bästa Photoshop-lösningen för utvecklare", + "slug": "basta-photoshop-losningen-for-utvecklare", + "markdown": "\r\n\r\nSom webbutvecklare har man ofta ett stort behov av Photoshop. De formgivare man arbetar med levererar så gott som alltid i Photoshop-format, och även om de kan spara ut materialet som PNG eller liknande så är det skönt att ha kvar lager och liknande när man ska omvandla form till webb. Samtidigt känns det lite tungt att som utvecklare lägga hutlösa 11 300 SEK (inklusive moms) på ett program som man kommer använda bara i read only-läge.\r\n\r\nDet finns en massa bildbehandlingsprogram som är billiga eller gratis som klarar av att läsa PSD-filer, men i praktiken är min erfarenhet att de inte räcker till. Det finns alltid en massa specialfall i PSD-filerna som gör att just den fil man vill öppna inte fungerar (här är en ledtråd till varför det är så) i något annat än Photoshop.\r\n\r\nJag har dock en bra lösning som jag själv har använt och kan gå i god för: Photoshop Elements på steroider.\r\n\r\nPhotoshop Elements är Adobes egen budgetversion av Photoshop, så man kan vara trygg i att alla konstiga specialvarianter av PSD hanteras och fungerar. Det enda (en webbutvecklare behöver) som Elements saknar är stöd för grupper av lager, det som visas som mappar i vanliga Photoshop. Elements klarar att öppna filer med grupperade lager, men man kan inte komma åt de enskilda underlagren. Som tur är finns en lösning: Elements+. Elements+ (som alltså är steroiderna) är ett tredjepartstillägg som ”låser upp” funktioner i Elements. En sådan är funktionen att lösa upp grupper av lager. Man kan inte öppna och stänga grupper som i Photoshop, men man kan splittra grupperna till enskilda lager. Som webbutvecklare är man mest intresserad av att komma åt enskilda element, inte så mycket att fortsätta arbeta med filen, så det är i regel inget hinder att man inte gruppera ihop lagren igen.\r\n\r\nMed Photoshop Elements och Elements+ så har man en fullt fungerande Photoshop-lösning för webbutvecklare som kostar mindre än 1000 SEK inklusive moms.\r\n\r\n![Bild](http://tekniken.nu/uploads/633770284244053722-480px-Photoshop_CS4.svg.png)", + "html": "

Som webbutvecklare har man ofta ett stort behov av Photoshop. De formgivare man arbetar med levererar så gott som alltid i Photoshop-format, och även om de kan spara ut materialet som PNG eller liknande så är det skönt att ha kvar lager och liknande när man ska omvandla form till webb. Samtidigt känns det lite tungt att som utvecklare lägga hutlösa 11 300 SEK (inklusive moms) på ett program som man kommer använda bara i read only-läge.

Det finns en massa bildbehandlingsprogram som är billiga eller gratis som klarar av att läsa PSD-filer, men i praktiken är min erfarenhet att de inte räcker till. Det finns alltid en massa specialfall i PSD-filerna som gör att just den fil man vill öppna inte fungerar (här är en ledtråd till varför det är så) i något annat än Photoshop.

Jag har dock en bra lösning som jag själv har använt och kan gå i god för: Photoshop Elements på steroider.

Photoshop Elements är Adobes egen budgetversion av Photoshop, så man kan vara trygg i att alla konstiga specialvarianter av PSD hanteras och fungerar. Det enda (en webbutvecklare behöver) som Elements saknar är stöd för grupper av lager, det som visas som mappar i vanliga Photoshop. Elements klarar att öppna filer med grupperade lager, men man kan inte komma åt de enskilda underlagren. Som tur är finns en lösning: Elements+. Elements+ (som alltså är steroiderna) är ett tredjepartstillägg som ”låser upp” funktioner i Elements. En sådan är funktionen att lösa upp grupper av lager. Man kan inte öppna och stänga grupper som i Photoshop, men man kan splittra grupperna till enskilda lager. Som webbutvecklare är man mest intresserad av att komma åt enskilda element, inte så mycket att fortsätta arbeta med filen, så det är i regel inget hinder att man inte gruppera ihop lagren igen.

Med Photoshop Elements och Elements+ så har man en fullt fungerande Photoshop-lösning för webbutvecklare som kostar mindre än 1000 SEK inklusive moms.

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Bästa Photoshop-lösningen för utvecklare", + "meta_description": "", + "author_id": 6, + "created_at": 1241431623000, + "created_by": 6, + "updated_at": 1241431623000, + "updated_by": 6, + "published_at": 1241431623000, + "published_by": 6 + }, + { + "id": 310, + "title": "SQL-tilldelning av variabel med select utan resultat", + "slug": "sql-tilldelning-av-variabel-med-select-utan-resultat", + "markdown": "\r\n\r\nNär man använder en selectfråga för att sätta värden på variabler så finns en fallgrop man får se upp med!\r\n\r\nNär frågan inte returnerar nån rad så behåller variabeln sitt värde och sätts inte till null vilket man skulle kunna tro utan den ignorerar helt resultatet och gör ingen tilldelning alls.\r\n\r\nExempel 1:\r\n\r\n![Bild](http://tekniken.nu/uploads/633815429208225555-microsoft-sql-server-2008-logo.jpg)\r\n```prettyprint lang-sql\r\ndeclare @match float\r\nSELECT @match = mv_matchvalue FROM match_values WHERE 1=2\r\nselect @match\r\n```\r\n\r\n\r\n@match innehåller null som förväntat eftersom det inte finns några såna rader.\r\n\r\nExempel 2:\r\n\r\n```prettyprint lang-sql\r\ndeclare @match float\r\nSET @match = 2\r\nSELECT @match = mv_matchvalue FROM match_values WHERE 1=2\r\nselect @match\r\n```\r\n\r\n\r\n@match innehåller 2 och och inte null, d.v.s. den tilldelas inte alls.\r\n\r\nUtan stöd av den utmärkta debugfunktionen som finns i SQL Server 2008 så hade jag nog felsökt detta fenomen flera timmar!\r\n", + "html": "

När man använder en selectfråga för att sätta värden på variabler så finns en fallgrop man får se upp med!

När frågan inte returnerar nån rad så behåller variabeln sitt värde och sätts inte till null vilket man skulle kunna tro utan den ignorerar helt resultatet och gör ingen tilldelning alls.

Exempel 1:



@match innehåller null som förväntat eftersom det inte finns några såna rader.

Exempel 2:



@match innehåller 2 och och inte null, d.v.s. den tilldelas inte alls.

Utan stöd av den utmärkta debugfunktionen som finns i SQL Server 2008 så hade jag nog felsökt detta fenomen flera timmar!

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "SQL-tilldelning av variabel med select utan resultat", + "meta_description": "", + "author_id": 1089, + "created_at": 1245946120000, + "created_by": 1089, + "updated_at": 1245946120000, + "updated_by": 1089, + "published_at": 1245946120000, + "published_by": 1089 + }, + { + "id": 330, + "title": "Snabbstarta med jQuery", + "slug": "snabbstarta-med-jquery", + "markdown": "\r\n\r\nJQuery är ett ramverk som får javascript att helt plötsligt bli ett smidigt programspråk och underlättar enormt för ajax utvecklaren. Här har jag försökt sammanfatta det som behövs för att snabbt komma igång.\r\n\r\nFör att få intellisense att fungera så ladda ner denna patch för att få intellisense för jquery i visual studio 2008 med service pack 1.\r\n\r\nhttp://code.msdn.microsoft.com/KB958502/Release/ProjectReleases.aspx?ReleaseId=1736\r\n\r\nLadda ner jquery och intelllisense dokumentationen för visual studio härhttp://jquery.com/.  Där finns också  en väldigt bra dokumentation med exempelkod som är lätt att följa.\r\n\r\nLägg både jquery-1.3.2.js och jquery-1.3.2-vsdoc.js filerna i samma katalog.\r\n\r\n \r\n\r\nLänka in javascriptet som vanligt.\r\n\r\n\r\n\r\nFör att få intellisense även i externa javascriptfiler så kan du lägga denna rad längst upp, dvs på första raden js filen.\r\n\r\n///\r\n\r\nOm du vill skriva javascript i usercontrols så kan du lägga in en scripttag på detta sätt för att få intellisense fast slippa få med onödiga scriptfilsanrop i din renderade kod. Visual studio kommer att läsa skriptfilen men inte rendera ut denna.\r\n\r\n<%if(false){%>\r\n\r\n\r\n\r\n<%}%>\r\n\r\nNu kan du i kodeditorn få väldigt fin intellisense:\r\n\r\n \r\n\r\nLite exempel på hur jquery ser ut och hur man använder det\r\n\r\n    $(\"h1\").click(function() {//När man klickar på en h1 tag\r\n\r\n        $(this).toggleClass(\"highlight\");//lägg till eller ta bort css-klassen highlight på taggen man klickade på\r\n\r\n   });\r\n\r\nSträngen ”h1” är en selektor och styr vilka element du vill göra nånting med, t.ex. i exemplet ovan så läggs klick eventet på alla

taggar.\r\n\r\nSelektorn fungerar precis som css selektorer gör och du kan kombinera dom för att få väldigt specifika frågor, t.ex\r\n\r\n(”#ID .class1.class2 .class3, .class4”)\r\n\r\nDvs alla element med class3 som ligger under ett element med class1 och class2 som dessutom ligger under ett element med id #ID, samt alla element med class4.\r\n\r\nDet som står efter parentesen t.ex.  .click eller .change (för onchange på textboxar) eller .toggleClass(”klassnamn”) kommer att appliceras på alla elementen som passade. Detta gör det väldig enkelt att lägga på ett betende på flera olika element. Detta passar utmärkt för att göra t.ex ihopfällbara sektioner i ett dokument på ett väldigt rent och enkelt sätt .\r\n\r\nEtt komplett exempel hur man kan göra ihopfällbara sektioner\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/633876624103743716-oledata.mso)\r\n```prettyprint lang-javascript\r\n\r\n\r\n\r\n .panel h1 {cursor:pointer;margin: 0px; padding:5px 5px5px 25px; background-color: #9bb5e4; color: #FFF; font-size:14px; }\r\n\r\n .panel.closed h1 {font-weight:normal;}\r\n\r\n .panel.closed .content {display: none; }\r\n\r\n\r\n\r\n\r\n\r\n $(document).ready(function() {\r\n\r\n $(\".panel h1\").click(function() {\r\n\r\n $(this).closest(\".panel\").toggleClass(\"closed\");\r\n\r\n });\r\n\r\n });\r\n\r\n\r\n\r\n\r\n\r\n

Första sektionen

\r\n\r\n \r\n\r\n Lite innehåll som går att fälla ut här. Denna är utfälld när sidan laddas.\r\n\r\n

\r\n\r\n
\r\n\r\n\r\n\r\n

Andra sektionen

\r\n\r\n
\r\n\r\n Lite innehåll som går att fälla ut här. Denna är ihopfälld när sidan laddas.\r\n\r\n
\r\n\r\n\r\n```\r\n", + "html": "

JQuery är ett ramverk som får javascript att helt plötsligt bli ett smidigt programspråk och underlättar enormt för ajax utvecklaren. Här har jag försökt sammanfatta det som behövs för att snabbt komma igång.

För att få intellisense att fungera så ladda ner denna patch för att få intellisense för jquery i visual studio 2008 med service pack 1.

http://code.msdn.microsoft.com/KB958502/Release/ProjectReleases.aspx?ReleaseId=1736

Ladda ner jquery och intelllisense dokumentationen för visual studio härhttp://jquery.com/.  Där finns också  en väldigt bra dokumentation med exempelkod som är lätt att följa.

Lägg både jquery-1.3.2.js och jquery-1.3.2-vsdoc.js filerna i samma katalog.

Länka in javascriptet som vanligt.

<scripttype=\"text/javascript\"src='/Javascript/jQuery/jquery-1.3.2.js'></script>

För att få intellisense även i externa javascriptfiler så kan du lägga denna rad längst upp, dvs på första raden js filen.

///<reference path=\"jquery/jquery-1.3.2.js\" />

Om du vill skriva javascript i usercontrols så kan du lägga in en scripttag på detta sätt för att få intellisense fast slippa få med onödiga scriptfilsanrop i din renderade kod. Visual studio kommer att läsa skriptfilen men inte rendera ut denna.

<%if(false){%>

<scripttype=\"text/javascript\"src='/Javascript/jQuery/jquery-1.3.2.js'></script>

<%}%>

Nu kan du i kodeditorn få väldigt fin intellisense:

Lite exempel på hur jquery ser ut och hur man använder det

    $(\"h1\").click(function() {//När man klickar på en h1 tag

        $(this).toggleClass(\"highlight\");//lägg till eller ta bort css-klassen highlight på taggen man klickade på

   });

Strängen ”h1” är en selektor och styr vilka element du vill göra nånting med, t.ex. i exemplet ovan så läggs klick eventet på alla <H1> taggar.

Selektorn fungerar precis som css selektorer gör och du kan kombinera dom för att få väldigt specifika frågor, t.ex

(”#ID .class1.class2 .class3, .class4”)

Dvs alla element med class3 som ligger under ett element med class1 och class2 som dessutom ligger under ett element med id #ID, samt alla element med class4.

Det som står efter parentesen t.ex.  .click eller .change (för onchange på textboxar) eller .toggleClass(”klassnamn”) kommer att appliceras på alla elementen som passade. Detta gör det väldig enkelt att lägga på ett betende på flera olika element. Detta passar utmärkt för att göra t.ex ihopfällbara sektioner i ett dokument på ett väldigt rent och enkelt sätt .

Ett komplett exempel hur man kan göra ihopfällbara sektioner


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Snabbstarta med jQuery", + "meta_description": null, + "author_id": 1089, + "created_at": 1252065610000, + "created_by": 1089, + "updated_at": 1252065610000, + "updated_by": 1089, + "published_at": 1252065610000, + "published_by": 1089 + }, + { + "id": 334, + "title": "Äntligen C# på iPhone!", + "slug": "antligen-c-pa-iphone", + "markdown": "\r\n\r\nIdag presenterar Novell (som utvecklar open-source alternativet till Microsoft.NET, kallat Mono) Monotouch som är en kompilator och SDK för iPhone som lyckas kompilera applikationer skrivna i C# till körbara applikationer som inte kräver en Virtual Machine på telefonen eller intepretera kod i runtime vilka båda är förbjudna av Apples licensavtal.\r\n\r\nJust nu byggs alla exempelapplikationer som Apple har gjort om till C# och kodeditorn ska enligt uppgift integrera bra med iPhone simulatorn och Interface Builder. Monotouch har inte stöd för Winforms eller WPF/Silverlight vilket både är bra och dåligt. Bra för att då kommer applikationerna se ut som native-applikationer, dåligt för att man gärna gjort sina gränssnitt i XAML istället som man är van vid.\r\n\r\nNackdelen är att monotouch endast går att köra på en Mac just nu vilket inte är så konstigt eftersom Apple iPhone SDK också är ett krav för att kunna lansera, deploya sina applikationer.\r\n\r\nJag är väldigt glad idag för jag har verkligen velat börja programmera riktiga iPhone appar men det har tagit emot att lära sig Objective-c.\r\n\r\nKälla: http://arstechnica.com/open-source/news/2009/09/monotouch-drops-net-into-apples-walled-app-garden.ars\r\n\r\nLadda ner evalueringsversion här: http://monotouch.net\r\n\r\n![Bild](http://tekniken.nu/uploads/633887119016683311-monotouch.png)", + "html": "

Idag presenterar Novell (som utvecklar open-source alternativet till Microsoft.NET, kallat Mono) Monotouch som är en kompilator och SDK för iPhone som lyckas kompilera applikationer skrivna i C# till körbara applikationer som inte kräver en Virtual Machine på telefonen eller intepretera kod i runtime vilka båda är förbjudna av Apples licensavtal.

Just nu byggs alla exempelapplikationer som Apple har gjort om till C# och kodeditorn ska enligt uppgift integrera bra med iPhone simulatorn och Interface Builder. Monotouch har inte stöd för Winforms eller WPF/Silverlight vilket både är bra och dåligt. Bra för att då kommer applikationerna se ut som native-applikationer, dåligt för att man gärna gjort sina gränssnitt i XAML istället som man är van vid.

Nackdelen är att monotouch endast går att köra på en Mac just nu vilket inte är så konstigt eftersom Apple iPhone SDK också är ett krav för att kunna lansera, deploya sina applikationer.

Jag är väldigt glad idag för jag har verkligen velat börja programmera riktiga iPhone appar men det har tagit emot att lära sig Objective-c.

Källa: http://arstechnica.com/open-source/news/2009/09/monotouch-drops-net-into-apples-walled-app-garden.ars

Ladda ner evalueringsversion här: http://monotouch.net

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Äntligen C# på iPhone!", + "meta_description": "", + "author_id": 1087, + "created_at": 1253115100000, + "created_by": 1087, + "updated_at": 1253115100000, + "updated_by": 1087, + "published_at": 1253115100000, + "published_by": 1087 + }, + { + "id": 336, + "title": "Visste ni att img har en onload-event?", + "slug": "visste-ni-att-img-har-en-onload-event", + "markdown": "\r\n\r\n\r\n\r\n```prettyprint lang-html\r\n\r\n```\r\n\r\n\r\nTestar man ovanstående kod så inser man att trots att det inte finns med i HTML 4-standarden så har img-taggen ett onload-event och det verkar funka bra i alla moderna webbläsare och IE6, IE7. I HTML5 så har img ett onload-event vilket borde göra det safe att börja använda det redan nu.\r\n\r\nNär har man nytta av detta? Några exempel är att det är ett enkelt sätt att skapa png-hack, effekter, omskalning, lightboxes osv på bilder.\r\n\r\n\r\n", + "html": "




Testar man ovanstående kod så inser man att trots att det inte finns med i HTML 4-standarden så har img-taggen ett onload-event och det verkar funka bra i alla moderna webbläsare och IE6, IE7. I HTML5 så har img ett onload-event vilket borde göra det safe att börja använda det redan nu.

När har man nytta av detta? Några exempel är att det är ett enkelt sätt att skapa png-hack, effekter, omskalning, lightboxes osv på bilder.


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Visste du att img har ett onload-event?", + "meta_description": "", + "author_id": 1087, + "created_at": 1253532969000, + "created_by": 1087, + "updated_at": 1253532969000, + "updated_by": 1087, + "published_at": 1253532969000, + "published_by": 1087 + }, + { + "id": 337, + "title": "jQuery del 1: installation och Intellisense i Visual Studio", + "slug": "jquery-del-1-installation-och-intellisense-i-visual-studio", + "markdown": "\r\n## Med ramverket jQuery så är det faktiskt roligt att koda JavaScript och på köpet får man utmärkt stöd för AJAX och massa annat gott. Eftersom jQuery är ett så stort område har jag delat upp denna blog i 4 delar där första delen handlar om hur man får igång Intellisense-stöd för jQuery i Visual Studio.\r\nFör att få bättre Intellisense-stöd i Visual Studio för JavaScript, ladda ner och installera denna patch. Den kräver Visual Studio 2008 med service pack 1 eller Visual Web Developer 2008 Express Edition med SP1.\r\n\r\nhttp://code.msdn.microsoft.com/KB958502/Release/ProjectReleases.aspx?ReleaseId=1736\r\n\r\nLadda sedan ner jQuery och motsvarande vsdoc-fil som ger Visual Studio komplett Intelllisense-dokumentation här http://jquery.com/. Vsdoc-filen används av VS för att ge fullständig dokumentation utan att för den delen kräva att själva JavaScript-filen ska innehålla massa kommentarskod.\r\n\r\nLägg både jquery-1.3.2.js och jquery-1.3.2-vsdoc.js filerna i samma katalog, genom att de har samma grundnamn så kommer VS att automatiskt hitta dokumentationen. Då man oftast vill använda den minimerade varianten måste du döpa om någon av filerna.\r\n\r\n\r\n\r\nLänka in javascriptet som vanligt.\r\n\r\n![Bild](http://tekniken.nu/uploads/633891297704460061-JQuery-blog1.png)\r\n```prettyprint lang-html\r\n\r\n```\r\n\r\n\r\nFör att få intellisense även i externa javascriptfiler så kan du lägga denna rad längst upp, dvs på första raden js filen:\r\n\r\n```prettyprint lang-javascript\r\n///\r\n```\r\n\r\n\r\nOm du vill skriva javascript i en usercontrol så kan du lägga in en scripttag på detta sätt för att få full tillgång till intellisense utan att få med onödig kod till webbläsaren.\r\n\r\n```prettyprint lang-html\r\n<%if(false){%>\r\n\r\n<%}%>\r\n```\r\n\r\n\r\nOm du vill skriva JavaScript i en user control så kan du lägga in en script-tag på detta sätt för att få full tillgång till Intellisense utan att få med onödig kod till webbläsaren.\r\n", + "html": "

Med ramverket jQuery så är det faktiskt roligt att koda JavaScript och på köpet får man utmärkt stöd för AJAX och massa annat gott. Eftersom jQuery är ett så stort område har jag delat upp denna blog i 4 delar där första delen handlar om hur man får igång Intellisense-stöd för jQuery i Visual Studio.

För att få bättre Intellisense-stöd i Visual Studio för JavaScript, ladda ner och installera denna patch. Den kräver Visual Studio 2008 med service pack 1 eller Visual Web Developer 2008 Express Edition med SP1.

http://code.msdn.microsoft.com/KB958502/Release/ProjectReleases.aspx?ReleaseId=1736

Ladda sedan ner jQuery och motsvarande vsdoc-fil som ger Visual Studio komplett Intelllisense-dokumentation här http://jquery.com/. Vsdoc-filen används av VS för att ge fullständig dokumentation utan att för den delen kräva att själva JavaScript-filen ska innehålla massa kommentarskod.

Lägg både jquery-1.3.2.js och jquery-1.3.2-vsdoc.js filerna i samma katalog, genom att de har samma grundnamn så kommer VS att automatiskt hitta dokumentationen. Då man oftast vill använda den minimerade varianten måste du döpa om någon av filerna.

Länka in javascriptet som vanligt.



För att få intellisense även i externa javascriptfiler så kan du lägga denna rad längst upp, dvs på första raden js filen:



Om du vill skriva javascript i en usercontrol så kan du lägga in en scripttag på detta sätt för att få full tillgång till intellisense utan att få med onödig kod till webbläsaren.



Om du vill skriva JavaScript i en user control så kan du lägga in en script-tag på detta sätt för att få full tillgång till Intellisense utan att få med onödig kod till webbläsaren.

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "jQuery del 1: installation och Intellisense i Visual Studio", + "meta_description": "", + "author_id": 1089, + "created_at": 1253618100000, + "created_by": 1089, + "updated_at": 1253618100000, + "updated_by": 1089, + "published_at": 1253618100000, + "published_by": 1089 + }, + { + "id": 339, + "title": "jquery logo", + "slug": "jquery-logo", + "markdown": null, + "html": null, + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "jquery logo", + "meta_description": null, + "author_id": 1089, + "created_at": 1253878320000, + "created_by": 1089, + "updated_at": 1253878320000, + "updated_by": 1089, + "published_at": 1253878320000, + "published_by": 1089 + }, + { + "id": 340, + "title": "jQuery del 2: Ett praktiskt exempel på jQuery-kod", + "slug": "jquery-del-2-ett-praktiskt-exempel-pa-jquery-kod", + "markdown": "\r\n\r\nJQuery är ett ytterst kraftfullt ramverk som får tidigare svåra kodsnuttar att bli extremt enkla. Det är numera superenkelt att söka i och manipulera HTML. Här följer en snabb introduction till syntaxen och med ett praktiskt exempel som visar styrkan och enkelheten i jQuery.\r\n\r\nDu har väl läst Del 1. hur man får igång intellisense för jQuery i Visual Studio?\r\n\r\n![Bild](http://tekniken.nu/uploads/633894751341058311-jquerylogo.png)\r\n\r\nSå här ser ett typiskt (men enkelt) exempel ut på jQuerys struktur och syntax.\r\n\r\n```prettyprint lang-javascript\r\n$(\"h1\").click(function() {//När man klickar på en h1-tag\r\n $(this).toggleClass(\"highlight\");//lägg till eller ta bort css-klassen highlight på taggen man klickade på\r\n});\r\n```\r\n\r\n\r\n\r\n\r\nSträngen ”h1” är en selektor och styr vilket/vilka element du vill göra nånting med. I exemplet ovan så plockas alla h1-taggar ut i HTML-dokumentet och får ett onclick-event som lägger till alternativt tar bort klassen highlight på det klickade elementet (”this” i detta exemplet är alltså det element som användaren klickade på).\r\n\r\nSelektorn fungerar precis som vanliga CSS-selektorer, d.v.s. du kan kombinera taggar, klasser, attribut och id för att få väldigt specifika frågor, allt från ”h1” för alla h1, till ”h1.myClass” för alla h1 med klassen myClass till väldigt avancerade som t.ex. ”#ID .class1.class2 .class3, .class4” som då betyder alla element med class3 som ligger under ett element med class1 och class2 som dessutom ligger under ett element med id #ID, samt alla element med class4.\r\n\r\nDet som står efter parentesen, t.ex. .click eller .change (för onchange på textboxar) eller .toggleClass(”klassnamn”), kommer att appliceras på alla elementen som passade selektorn. Detta gör det väldig enkelt att lägga på ett betende på flera olika element vilket gör att man inte behöver skriva mängder med onclick=”blabla” på varenda element i HTML-koden. Man kan alltså använda JavaScript på samma sätt som man idag använder CSS, d.v.s. för att separera innehåll och struktur (HMTL) från layout (CSS) och interaktion och logik (JavaScript).\r\n\r\nHär följer ett komplett exempel hur man kan göra ihopfällbara sektioner med med pytteliten kod (för enkelhetens skull ligger all kod direkt i HTML-dokumentet).\r\n\r\n\r\n\r\n```prettyprint lang-html\r\n\r\n\r\n\r\n
\r\n

Första sektionen

\r\n
\r\n Lite innehåll som går att fälla ut här. Denna är utfälld när sidan laddas.\r\n
\r\n
\r\n\r\n

Andra sektionen

\r\n
\r\n Lite innehåll som går att fälla ut här. Denna är ihopfälld när sidan laddas.\r\n
\r\n\r\n```\r\n\r\n\r\n\r\nDet finns mängder av exempel och nästan exemplarisk dokumentation med kodexempel för varje liten funktion på jquery.com där du också hittar praktiska plug-ins som går från små praktiska hjälpfunktioner ända fram till anvancerade kontroller som kalendrar och redigerbara tabeller. Där finns också steg för steg-instruktioner som kan ta dig från att vara en absolut nybörjare till att bli ett fullblodsproffs.\r\n\r\nNästa del i serien kommer att handla om Ajax med jQuery och WCF (Windows Communication Foundation).\r\n\r\n", + "html": "

JQuery är ett ytterst kraftfullt ramverk som får tidigare svåra kodsnuttar att bli extremt enkla. Det är numera superenkelt att söka i och manipulera HTML. Här följer en snabb introduction till syntaxen och med ett praktiskt exempel som visar styrkan och enkelheten i jQuery.

Du har väl läst Del 1. hur man får igång intellisense för jQuery i Visual Studio?



Så här ser ett typiskt (men enkelt) exempel ut på jQuerys struktur och syntax.



Strängen ”h1” är en selektor och styr vilket/vilka element du vill göra nånting med. I exemplet ovan så plockas alla h1-taggar ut i HTML-dokumentet och får ett onclick-event som lägger till alternativt tar bort klassen highlight på det klickade elementet (”this” i detta exemplet är alltså det element som användaren klickade på).

Selektorn fungerar precis som vanliga CSS-selektorer, d.v.s. du kan kombinera taggar, klasser, attribut och id för att få väldigt specifika frågor, allt från ”h1” för alla h1, till ”h1.myClass” för alla h1 med klassen myClass till väldigt avancerade som t.ex. ”#ID .class1.class2 .class3, .class4” som då betyder alla element med class3 som ligger under ett element med class1 och class2 som dessutom ligger under ett element med id #ID, samt alla element med class4.

Det som står efter parentesen, t.ex. .click eller .change (för onchange på textboxar) eller .toggleClass(”klassnamn”), kommer att appliceras på alla elementen som passade selektorn. Detta gör det väldig enkelt att lägga på ett betende på flera olika element vilket gör att man inte behöver skriva mängder med onclick=”blabla” på varenda element i HTML-koden. Man kan alltså använda JavaScript på samma sätt som man idag använder CSS, d.v.s. för att separera innehåll och struktur (HMTL) från layout (CSS) och interaktion och logik (JavaScript).

Här följer ett komplett exempel hur man kan göra ihopfällbara sektioner med med pytteliten kod (för enkelhetens skull ligger all kod direkt i HTML-dokumentet).



Det finns mängder av exempel och nästan exemplarisk dokumentation med kodexempel för varje liten funktion på jquery.com där du också hittar praktiska plug-ins som går från små praktiska hjälpfunktioner ända fram till anvancerade kontroller som kalendrar och redigerbara tabeller. Där finns också steg för steg-instruktioner som kan ta dig från att vara en absolut nybörjare till att bli ett fullblodsproffs.

Nästa del i serien kommer att handla om Ajax med jQuery och WCF (Windows Communication Foundation).

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "jQuery del 2: Ett praktiskt exempel på jQuery-kod", + "meta_description": "", + "author_id": 1089, + "created_at": 1253878333000, + "created_by": 1089, + "updated_at": 1253878333000, + "updated_by": 1089, + "published_at": 1253878333000, + "published_by": 1089 + }, + { + "id": 344, + "title": "jQuery del 3: jQuery ajax med WCF", + "slug": "jquery-del-3-jquery-ajax-med-wcf", + "markdown": "\r\n\r\nKombinationen jQuery och WCF (Windows Communications Foundation) som AJAX-lösning fungerar alldeles utmärkt och ger enkel och ren kod på både klient och serversidan. Den här bloggen handlar om hur man sätter upp detta på ett enkelt och snabbt sätt.\r\n\r\nNär man skapar en WCF-service fylls web.config på massa onödigt som gör felsökning och ändring svårare än vad det behöver vara, så här följer ett exempel på det minsta behövs för att få AJAX-funktionaliteten att fungera. (Servicen kallas här \"Example\" och \"Namespace\" är servicens namespace)\r\n\r\n![Bild](http://tekniken.nu/uploads/633900796628809236-jquerylogo.png)\r\n```prettyprint lang-xml\r\n\r\n\t\r\n\t\r\n\t \r\n\t\t\r\n\t \r\n\t\r\n\t\r\n\t \r\n\t\t\r\n\t\t \r\n\t\t \r\n\t\t\r\n\t \r\n\t \r\n\t\t\r\n\t\t \r\n\t\t\r\n\t \r\n\t\r\n\r\n```\r\n\r\n\r\nJavascript-anropen ser då ut ungefär som nedan i sin enklaste form. Det enda kriteriet är att sidan länkat in den vanliga jQuery-filen (56 kb okomprimerad vilket kommer att cachas efter första sidladdningen), detta i motsats till många andra ramverk som kräver att det laddas in flera JavaScript-filer som sköter snacket med servern.\r\n\r\n```prettyprint lang-javascript\r\n$.getJSON(\"/WCF/Example.svc/ajax/GetItem?id=\" + id, null, function(data) {\r\n alert(data); //data är i detta fall en bool så svaret kommer att bli true\r\n});\r\n```\r\n\r\n\r\nI svc-filen så måste metoderna som skall användas taggas upp såhär så de serialiseras korrekt till och från json:\r\n\r\n```prettyprint lang-c-sharp\r\n[OperationContract]\r\n[WebInvoke(Method=\"GET\", BodyStyle=WebMessageBodyStyle.WrappedRequest, ResponseFormat=WebMessageFormat.Json)]\r\npublic bool GetItem(int id)\r\n{\r\n return true;\r\n}\r\n```\r\n\r\n\r\nGivetvis finns det saker som kan strula som t.ex. datum som får ett format som inte är JavaScript-kompatibelt. Lösningen på datumformatet är att man får konvertera detta manuellt innan man använder det.\r\n\r\n```prettyprint lang-javascript\r\nfunction parseNetDate(date) \r\n{\r\n if (date)\r\n return new Date(parseInt(date.slice(6, 19)));\r\n else\r\n return null;\r\n}\r\n```\r\n\r\n\r\nI nästa del, d.v.s. den sista, i jQuery-serien kommer jag att gå\r\nigenom några användbara plugins som jag funnit .\r\n\r\n", + "html": "

Kombinationen jQuery och WCF (Windows Communications Foundation) som AJAX-lösning fungerar alldeles utmärkt och ger enkel och ren kod på både klient och serversidan. Den här bloggen handlar om hur man sätter upp detta på ett enkelt och snabbt sätt.

När man skapar en WCF-service fylls web.config på massa onödigt som gör felsökning och ändring svårare än vad det behöver vara, så här följer ett exempel på det minsta behövs för att få AJAX-funktionaliteten att fungera. (Servicen kallas här \"Example\" och \"Namespace\" är servicens namespace)



Javascript-anropen ser då ut ungefär som nedan i sin enklaste form. Det enda kriteriet är att sidan länkat in den vanliga jQuery-filen (56 kb okomprimerad vilket kommer att cachas efter första sidladdningen), detta i motsats till många andra ramverk som kräver att det laddas in flera JavaScript-filer som sköter snacket med servern.



I svc-filen så måste metoderna som skall användas taggas upp såhär så de serialiseras korrekt till och från json:



Givetvis finns det saker som kan strula som t.ex. datum som får ett format som inte är JavaScript-kompatibelt. Lösningen på datumformatet är att man får konvertera detta manuellt innan man använder det.



I nästa del, d.v.s. den sista, i jQuery-serien kommer jag att gå
igenom några användbara plugins som jag funnit .

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "jQuery del 3: jQuery och AJAX med WCF", + "meta_description": "", + "author_id": 1089, + "created_at": 1254482862000, + "created_by": 1089, + "updated_at": 1254482862000, + "updated_by": 1089, + "published_at": 1254482862000, + "published_by": 1089 + }, + { + "id": 346, + "title": "tillägg till jQuery del 3", + "slug": "tillagg-till-jquery-del-3", + "markdown": "\r\nI nästa, dvs sista delen i jQuery serien kommer jag att gå igenom några användbara plugins som jag funnit .", + "html": "

I nästa, dvs sista delen i jQuery serien kommer jag att gå igenom några användbara plugins som jag funnit .", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "tillägg till jQuery del 3", + "meta_description": null, + "author_id": 1089, + "created_at": 1254740051000, + "created_by": 1089, + "updated_at": 1254740051000, + "updated_by": 1089, + "published_at": 1254740051000, + "published_by": 1089 + }, + { + "id": 348, + "title": "jQuery del 4: praktiska jQuery-plugins", + "slug": "jquery-del-4-praktiska-jquery-plugins", + "markdown": "\r\n\r\nDet finns mängder av sidoprojekt som bygger på jQuery i botten. Här går jag igenom några användbara plugins som vi redan använt i några av våra projekt.\r\n\r\nOm du är ny på jQuery eller behöver en liten uppfräshning kan du läsa de tidigare bloggarna här:\r\n\r\nDel 1: Installation och intellisense i Visual Studio\r\n\r\nDel 2: Ett praktiskt exempel på jQuery-kod\r\n\r\nDel 3: jQuery och AJAX med WCF\r\n\r\n\r\n## FancyBox –En enkel men kraftful lightbox\r\nhttp://fancybox.net/\r\n\r\nEn lightbox som inte bara är väldigt enkel att använda utan som också stöder flash, AJAX och iframe-innehåll - vilket är ett smidigt sätt att skapa en popup som inte stoppas av popup-blockers och som inte är fullt lika störande som ett eget fönster.\r\n\r\n\r\n## JQuery autocomplete – En sökbar AJAX-combobox\r\nhttp://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/\r\n\r\nEn autokompletterande listbox som hämtar data med AJAX-anrop i bakgrunden, perfekt när man vuxit ur en vanlig listbox och inte vill ha en mer komplicerad layout.\r\n\r\n \r\n## JQuery validate – Klientvalidering av formulär\r\nhttp://bassistance.de/jquery-plugins/jquery-plugin-validation/\r\n\r\nEn ren JavaScript-lösning för att validera formulär som i motsats till ASP.NET-valideraren fungerar på ren HTML. Den här lösningen fungerar alltså även till MVC-projekt och rena AJAX-formulär, dessutom verkar detta bli den ”officiella” klientvalideringslösningen som kommer att följa med MVC 2.0. En fördel jämfört med asp.net validerarna är att den validerar redan på knapptryckning istället för när man byter fält. Man får förstås validera allting på på serversidan också då detta är mer en guide för användaren än en garanti på att formuläret är korrekt ifyllt eftersom det går att passera spärren genom att slå av JavaScript i webbläsaren.\r\n\r\n \r\n\r\nHär är ett litet exempel på hur valideringskoden ser ut. Här har jag också sagt att den bara ska validera synliga element så att dolda fält inte fastnar i valideringen och dessutom lagt in lite logik för att den skall lägga ut valideringstexterna på olika ställen beroende på typ av element. Det behövs alltså ingen extra html kod och felmeddelanden hamnar som standard i en span med klassen error vilket gör det enkelt att sköta layouten med enbart CSS.\r\n\r\n![Bild](http://tekniken.nu/uploads/633904275594392418-image001.jpg@01CA45DB.CA3C3C20__image001.jpg)\r\n```prettyprint lang-javascript\r\n$(\"form\").validate({\r\n rules: { Firstname:\"required\", Lastname: \"required\", Email: { required: true, email:true },\r\n messages: { Firstname:\"Obligatoriskt fält\", Lastname: \"Obligatoriskt fält\", Email: \"Du måste ange en giltig e-postadress\"},\r\n ignore: \":hidden\",\r\n errorPlacement:function(error, element) {\r\n if (element.is(\":radio\") || element.is(\":checkbox\"))\r\n error.insertBefore(element);\r\n else\r\n error.insertAfter(element);\r\n }\r\n });\r\n```\r\n\r\n## QGrid – En redigerbar och paginerbar gridhttp://www.trirand.com/jqgridwiki/En snygg och funktionell grid som stöder paginering, sortering och inline editering och som dessutom är enkelt att koda för.## JQuery Form – Postar formulär utan att ladda om sidanhttp://malsup.com/jquery/form/Eftersom vi går mer och mer mot rena AJAX-lösningar vore det förstås kul att slippa posta vanliga tråkiga formulär också. Med den här pluginen så kan man med bara en rad kod publicera ett formulär till t.ex. en SVC metod (med parametrar som matchar formulärets parametrar).Såhär enkelt är det att skicka ett formulär utan att ladda om sidan (showResponse är alltså min kod som visar tackdelen av formuläret):\r\n```prettyprint lang-javascript\r\n$(\"form\").ajaxSubmit({\r\n url:\"/Ajax/Subscribe\",\r\n success: showResponse,\r\n type:\"GET\",\r\n dataType:\"json\"\r\n});\r\nfunction showResponse(responseText, statusText) {\r\n $(\"#MyForm\").addClass(\"complete\");\r\n}\r\n\r\n```\r\n\r\n\r\nDet här var sista delen i min bloggserie, men med största sannolikhet inte den sista bloggen om jQuery. Vi använder det i nästan alla våra projekt och hittar hela tiden nya problem där lösningen är några rader jQuery-kod.\r\n", + "html": "

Det finns mängder av sidoprojekt som bygger på jQuery i botten. Här går jag igenom några användbara plugins som vi redan använt i några av våra projekt.

Om du är ny på jQuery eller behöver en liten uppfräshning kan du läsa de tidigare bloggarna här:

Del 1: Installation och intellisense i Visual Studio

Del 2: Ett praktiskt exempel på jQuery-kod

Del 3: jQuery och AJAX med WCF

FancyBox –En enkel men kraftful lightbox

http://fancybox.net/

En lightbox som inte bara är väldigt enkel att använda utan som också stöder flash, AJAX och iframe-innehåll - vilket är ett smidigt sätt att skapa en popup som inte stoppas av popup-blockers och som inte är fullt lika störande som ett eget fönster.

JQuery autocomplete – En sökbar AJAX-combobox

http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/

En autokompletterande listbox som hämtar data med AJAX-anrop i bakgrunden, perfekt när man vuxit ur en vanlig listbox och inte vill ha en mer komplicerad layout.

JQuery validate – Klientvalidering av formulär

http://bassistance.de/jquery-plugins/jquery-plugin-validation/

En ren JavaScript-lösning för att validera formulär som i motsats till ASP.NET-valideraren fungerar på ren HTML. Den här lösningen fungerar alltså även till MVC-projekt och rena AJAX-formulär, dessutom verkar detta bli den ”officiella” klientvalideringslösningen som kommer att följa med MVC 2.0. En fördel jämfört med asp.net validerarna är att den validerar redan på knapptryckning istället för när man byter fält. Man får förstås validera allting på på serversidan också då detta är mer en guide för användaren än en garanti på att formuläret är korrekt ifyllt eftersom det går att passera spärren genom att slå av JavaScript i webbläsaren.

Här är ett litet exempel på hur valideringskoden ser ut. Här har jag också sagt att den bara ska validera synliga element så att dolda fält inte fastnar i valideringen och dessutom lagt in lite logik för att den skall lägga ut valideringstexterna på olika ställen beroende på typ av element. Det behövs alltså ingen extra html kod och felmeddelanden hamnar som standard i en span med klassen error vilket gör det enkelt att sköta layouten med enbart CSS.



QGrid – En redigerbar och paginerbar grid

http://www.trirand.com/jqgridwiki/
En snygg och funktionell grid som stöder paginering, sortering och inline editering och som dessutom är enkelt att koda för.

JQuery Form – Postar formulär utan att ladda om sidan

http://malsup.com/jquery/form/
Eftersom vi går mer och mer mot rena AJAX-lösningar vore det förstås kul att slippa posta vanliga tråkiga formulär också. Med den här pluginen så kan man med bara en rad kod publicera ett formulär till t.ex. en SVC metod (med parametrar som matchar formulärets parametrar).
Såhär enkelt är det att skicka ett formulär utan att ladda om sidan (showResponse är alltså min kod som visar tackdelen av formuläret):


Det här var sista delen i min bloggserie, men med största sannolikhet inte den sista bloggen om jQuery. Vi använder det i nästan alla våra projekt och hittar hela tiden nya problem där lösningen är några rader jQuery-kod.

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "jQuery del 4: praktiska jQuery-plugins", + "meta_description": "", + "author_id": 1089, + "created_at": 1254911640000, + "created_by": 1089, + "updated_at": 1254911640000, + "updated_by": 1089, + "published_at": 1254911640000, + "published_by": 1089 + }, + { + "id": 350, + "title": "Gör din egen IM bot", + "slug": "gor-din-egen-im-bot", + "markdown": "\r\n\r\nHar du länge velat skapa en egen Messenger-bot men orkar inte sätta dig in i alla SDKs och helst vill ha stöd för alla IM-nätverk och därmed gett upp? Då kan du bli glad av att veta att det finns ett open source-program som heter BitlBee som är en daemon som du installerar på Linux (eller Mac, Amiga (!)). Därefter agerar BitlBee som en IRC bot som levererar det du skriver till MSN Messenger, ICQ, AIM, Jabber, Google Talk o.s.v. och du slipper hantera dessa separat och kan skriva din kod väldigt enkelt men ändå nå samtliga nätverk.\r\n\r\nSom tur är finns det publika servrar (för er som saknar en Linux eller Amiga i garderoben). Det lämnas inga garantier på upptid - de verkar ha bra stabilitet men bygg inga kommersiella tjänster på dem.\r\n\r\nListan finns här:\r\n\r\nhttp://www.bitlbee.org/main.php/servers.html\r\n\r\nJag testade detta och körde med en IRC klient mot en av publika tjänsterna:\r\n\r\nim.bitlbee.org:6667\r\n\r\nSedan skrev jag:\r\n\r\nregister (nästa gång använder du identify )account add msn min@email.com password (ditt messenger användarnamn och lösenord, upprepa detta för alla dina konton på ICQ, AIM, Jabber osv)account on 0 (för att logga in på messenger, se hela listan av skapade konton med account list)blist all (får tillbaka en lista på alla användare som är offline och online)\r\n\r\nJag valde sedan ut en kollega och skrev:magnus_tjerneld: Hej, jag är en bot!\r\n\r\nVarpå jag fick svaret:magnus_tjerneld: Anna?\r\n\r\nNästa steg för att skapa en riktig bot är att göra ovanstående i kod och då finns det färdiga C#- implementationer av IRC vilket borde göra bottandet väldigt enkelt att implementera!\r\n\r\n![Bild](http://tekniken.nu/uploads/633905921722012782-Bitlbee_logo.png)", + "html": "

Har du länge velat skapa en egen Messenger-bot men orkar inte sätta dig in i alla SDKs och helst vill ha stöd för alla IM-nätverk och därmed gett upp? Då kan du bli glad av att veta att det finns ett open source-program som heter BitlBee som är en daemon som du installerar på Linux (eller Mac, Amiga (!)). Därefter agerar BitlBee som en IRC bot som levererar det du skriver till MSN Messenger, ICQ, AIM, Jabber, Google Talk o.s.v. och du slipper hantera dessa separat och kan skriva din kod väldigt enkelt men ändå nå samtliga nätverk.

Som tur är finns det publika servrar (för er som saknar en Linux eller Amiga i garderoben). Det lämnas inga garantier på upptid - de verkar ha bra stabilitet men bygg inga kommersiella tjänster på dem.

Listan finns här:

http://www.bitlbee.org/main.php/servers.html

Jag testade detta och körde med en IRC klient mot en av publika tjänsterna:

im.bitlbee.org:6667

Sedan skrev jag:

register <nytt lösenord> (nästa gång använder du identify <ditt lösenord>)
account add msn min@email.com password (ditt messenger användarnamn och lösenord, upprepa detta för alla dina konton på ICQ, AIM, Jabber osv)
account on 0 (för att logga in på messenger, se hela listan av skapade konton med account list)
blist all (får tillbaka en lista på alla användare som är offline och online)

Jag valde sedan ut en kollega och skrev:
magnus_tjerneld: Hej, jag är en bot!

Varpå jag fick svaret:
magnus_tjerneld: Anna?

Nästa steg för att skapa en riktig bot är att göra ovanstående i kod och då finns det färdiga C#- implementationer av IRC vilket borde göra bottandet väldigt enkelt att implementera!

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Gör din egen IM-bot", + "meta_description": " enkel lösning!", + "author_id": 1087, + "created_at": 1254995371000, + "created_by": 1087, + "updated_at": 1254995371000, + "updated_by": 1087, + "published_at": 1254995371000, + "published_by": 1087 + }, + { + "id": 353, + "title": "Testa olika webbläsare med overlay", + "slug": "testa-olika-webblasare-med-overlay", + "markdown": "\r\n\r\nDet finns ju många sätt att testa flera versioner av webbläsare, bland annat onlinetjänster så som BrowserShots.com och också program som IETester vilket vi bloggat tidigare om, men den snyggaste är faktiskt byggd av Microsoft och heter det fantasifulla namnet ”Microsoft Expression Web 3 SuperPreview for Internet Explorer”, man kan ju dock benämna det som SuperPreview för enkelhetens skull ;).\r\n\r\nDet finns väldigt många fina finesser så som att lägga overlay mellan olika webbläsare och bilder. Vi har dock inte fått detta att fungera med annat än IE browsers men det är ju där de flesta problemen uppstår ;-)\r\n\r\n\r\n\r\nTyvärr är inte ens Microsofts webbplats helt testad i IE6...\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/633907021839566632-image001.png@01CA48F9.723653A0__image001.png)", + "html": "

Det finns ju många sätt att testa flera versioner av webbläsare, bland annat onlinetjänster så som BrowserShots.com och också program som IETester vilket vi bloggat tidigare om, men den snyggaste är faktiskt byggd av Microsoft och heter det fantasifulla namnet ”Microsoft Expression Web 3 SuperPreview for Internet Explorer”, man kan ju dock benämna det som SuperPreview för enkelhetens skull ;).

Det finns väldigt många fina finesser så som att lägga overlay mellan olika webbläsare och bilder. Vi har dock inte fått detta att fungera med annat än IE browsers men det är ju där de flesta problemen uppstår ;-)

Tyvärr är inte ens Microsofts webbplats helt testad i IE6...

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Testa olika webbläsare med overlay", + "meta_description": "", + "author_id": 1087, + "created_at": 1255105382000, + "created_by": 1087, + "updated_at": 1255105382000, + "updated_by": 1087, + "published_at": 1255105382000, + "published_by": 1087 + }, + { + "id": 360, + "title": "Myten om den synliga ytan", + "slug": "myten-om-den-synliga-ytan", + "markdown": "\r\n\r\nInom tidningsformgivning har man länge pratat om ”above the fold”, alltså den del av tidningen som syns när den är vikt. Exponering på denna yta är extremt mycket värt. Detta tankesätt har följt med till webben, och här pratar man om den synliga ytan, alltså den del av webbplatsen som syns utan att besökaren behöver scrolla. En vedertagen ”sanning” är att det är dåligt med scrollande sidor och att de flesta besökarna missar innehåll ”below the fold”. Själv har jag alltid hävdat att det är otroligt dumt att dela in en sida i en massa delsidor där besökaren ska klicka sig vidare efter varje skärmlångt stycke och att de flesta surfare begriper sig på scroll baren. Nu verkar det som om jag får rätt!\r\n\r\nFöretaget CX Partners i England har gjort undersökningar av siter med hjälp av ögonavläsning. Deras undersökningar visar att det inte är något problem med att få besökarna att hitta material ”below the fold”. Det är till och med så att om man försöker pressa in för mycket ”above the fold” så fastnar blicken högt upp på sidan och drar uppmärksamhet till sidhuvudet och liknande icke-innehåll. Enda undantaget är om sidan ser ut som att den tar slut där den synliga ytan slutar, t.ex. om man har tydliga horisontella linjer som delar av innehållet.\r\n\r\nLäs mer här: http://www.cxpartners.co.uk/thoughts/the_myth_of_the_page_fold_evidence_from_user_testing.htm\r\n\r\n![Bild](http://tekniken.nu/uploads/633915544105142881-Heatmap.png)", + "html": "

Inom tidningsformgivning har man länge pratat om ”above the fold”, alltså den del av tidningen som syns när den är vikt. Exponering på denna yta är extremt mycket värt. Detta tankesätt har följt med till webben, och här pratar man om den synliga ytan, alltså den del av webbplatsen som syns utan att besökaren behöver scrolla. En vedertagen ”sanning” är att det är dåligt med scrollande sidor och att de flesta besökarna missar innehåll ”below the fold”. Själv har jag alltid hävdat att det är otroligt dumt att dela in en sida i en massa delsidor där besökaren ska klicka sig vidare efter varje skärmlångt stycke och att de flesta surfare begriper sig på scroll baren. Nu verkar det som om jag får rätt!

Företaget CX Partners i England har gjort undersökningar av siter med hjälp av ögonavläsning. Deras undersökningar visar att det inte är något problem med att få besökarna att hitta material ”below the fold”. Det är till och med så att om man försöker pressa in för mycket ”above the fold” så fastnar blicken högt upp på sidan och drar uppmärksamhet till sidhuvudet och liknande icke-innehåll. Enda undantaget är om sidan ser ut som att den tar slut där den synliga ytan slutar, t.ex. om man har tydliga horisontella linjer som delar av innehållet.

Läs mer här: http://www.cxpartners.co.uk/thoughts/the_myth_of_the_page_fold_evidence_from_user_testing.htm

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Myten om den synliga ytan", + "meta_description": "", + "author_id": 6, + "created_at": 1255957610000, + "created_by": 6, + "updated_at": 1255957610000, + "updated_by": 6, + "published_at": 1255957610000, + "published_by": 6 + }, + { + "id": 368, + "title": "Bättre String.Format med extension methods", + "slug": "battre-stringformat-med-extension-methods", + "markdown": "\r\n\r\nJag gillar inte hur String.Format fungerar. Man kommer ju oftast på att man behöver parametrar i strängen efter man börjat skriva den och då är det ”jobbigt” att gå tillbaka och lägga till String.Format innan strängen. Dagens i-landsproblem har en lösning i extensionmetoden nedan:\r\n\r\n![Bild](http://tekniken.nu/uploads/633924967723968753-string.jpg)\r\n```prettyprint lang-c-sharp\r\npublic static class Extension\r\n{\r\n\t/// \r\n\t/// With this extension method you can fill a string with its argument just the way \r\n\t/// you would if you would use the syntax String.Translate(\"Hi {0}!\", username) \r\n\t/// but instead use the syntax \"Hi {0}!\".Fill(username)\r\n\t/// \r\n\t/// String to format\r\n\t/// Arguments\r\n\t/// \r\n\tstatic public string Fill(this string format, params string[] args)\r\n\t{\r\n\t\treturn String.Format(format, args);\r\n\t}\r\n}\r\n```\r\n\r\n\r\n\r\n\r\nMed ovanstående extension-method med i sitt projekt kan man skriva såhär:\r\n\r\n\r\n\r\n```prettyprint lang-c-sharp\r\n\"country_code = '{0}'\".Fill(Trex.User.CountryCode)\r\n```\r\n\r\n\r\nVäldigt praktiskt!\r\n", + "html": "

Jag gillar inte hur String.Format fungerar. Man kommer ju oftast på att man behöver parametrar i strängen efter man börjat skriva den och då är det ”jobbigt” att gå tillbaka och lägga till String.Format innan strängen. Dagens i-landsproblem har en lösning i extensionmetoden nedan:



Med ovanstående extension-method med i sitt projekt kan man skriva såhär:



Väldigt praktiskt!

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Bättre String.Format med extension methods", + "meta_description": "", + "author_id": 1087, + "created_at": 1256899972000, + "created_by": 1087, + "updated_at": 1256899972000, + "updated_by": 1087, + "published_at": 1256899972000, + "published_by": 1087 + }, + { + "id": 370, + "title": "Posta stora filer till en .net sajt (med IIS7 eller nyare)", + "slug": "posta-stora-filer-till-en-net-sajt-med-iis7-eller-nyare", + "markdown": "\r\n\r\nNär man postar lite större filer till sin .NET-sajt kan man få detta felmeddelande:HTTP Error 404.13 – Not FoundThe request filtering module is configured to deny a requestthat exceeds the request content length.\r\n\r\nDetta beror på att default så har .NET begränsat hur stora filer man kan posta i ett svep (vilket är en ful begränsning som lagts in eftersom den tar emot hela filen i minnet på servern tills postningen är klar). Eftersom vi redan vet att vi vill kunna posta större filer så är den enkla lösningen att öka begränsningen.\r\n\r\nDen vanliga lösningen är att lägga till maxRequestLength=\"2097151\" i web.config enligt nedan:\r\n\r\n![Bild](http://tekniken.nu/uploads/633929468747975633-storaFiler.png)\r\n```prettyprint lang-xml\r\n\r\n \r\n\r\n```\r\n\r\n\r\nNär det gäller IIS7 och IIS7.5 så räcker dock inte detta utan kräver också att man kör över inställningar på servernivån. Enklast är att lägga till denna sektion i web.config:\r\n\r\n```prettyprint lang-xml\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n```\r\n\r\n\r\n\r\n\r\nSlutligen kör man denna kommandorad i en kommandotolk med administratörsrättighet. Detta eftersom man default inte får ta över denna inställning i web.config:\r\n\r\n%windir%\\system32\\inetsrv\\appcmd.exe unlock config-section:system.webServer/security/requestFiltering\r\n\r\n\r\n", + "html": "

När man postar lite större filer till sin .NET-sajt kan man få detta felmeddelande:
HTTP Error 404.13 – Not Found
The request filtering module is configured to deny a requestthat exceeds the request content length.

Detta beror på att default så har .NET begränsat hur stora filer man kan posta i ett svep (vilket är en ful begränsning som lagts in eftersom den tar emot hela filen i minnet på servern tills postningen är klar). Eftersom vi redan vet att vi vill kunna posta större filer så är den enkla lösningen att öka begränsningen.

Den vanliga lösningen är att lägga till maxRequestLength=\"2097151\" i web.config enligt nedan:



När det gäller IIS7 och IIS7.5 så räcker dock inte detta utan kräver också att man kör över inställningar på servernivån. Enklast är att lägga till denna sektion i web.config:



Slutligen kör man denna kommandorad i en kommandotolk med administratörsrättighet. Detta eftersom man default inte får ta över denna inställning i web.config:

%windir%\\system32\\inetsrv\\appcmd.exe unlock config-section:system.webServer/security/requestFiltering

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Posta stora filer till en .NET-sajt (med IIS7 eller senare)", + "meta_description": "", + "author_id": 1089, + "created_at": 1257350074000, + "created_by": 1089, + "updated_at": 1257350074000, + "updated_by": 1089, + "published_at": 1257350074000, + "published_by": 1089 + }, + { + "id": 371, + "title": "Trix för att få TFS 2008 att bete sig mer som SVN", + "slug": "trix-for-att-fa-tfs-2008-att-bete-sig-mer-som-svn", + "markdown": "\r\n\r\nNär man vant sig vid Tortoise och SVN så blir man lite besviken när man väl börjat med Microsoft Team Foundation Server och saknar många av dom små självklara sakerna man vant sig. Här finns några tips för att göra övergången enklare.\r\n\r\nOBS! Denna blog gäller TFS 2008 i kombination med Visual Studio 2008. Om samma problem finns med 2010 så kommer ett framtida inlägg om detta.\r\n\r\nGenom att installera TFS powertool så kan man få integration med Explorer så att man kan se vilka filer som ändrats och checka in eller hämta senaste versionerna. Detta är ovärdelig för den som använder andra program för att redigera filer som är incheckade i TFS.\r\n\r\nSå här ser ikonerna ut för icke ändrade och ändrade filer. Ikonerna är grötiga men det är bättre än inget.\r\n\r\n \r\n\r\nSå här ser då högerklicksmenyn ut om man klickar på en fil som har oincheckade ändringar.\r\n\r\n\r\n\r\nHär hittar du powertools för TFS som krävs för båda trixen i denna blogg.\r\n\r\nhttp://www.microsoft.com/downloads/details.aspx?FamilyId=FBD14EEA-781F-45A1-8C46-9F6BA2F68BF0&displaylang=en\r\n\r\nI motsats till SVN så markerar Team foundation system (TFS) alla filer som man ändrat som ”Pending changes” oavsett om man i editorn återställer filen så som den såg ut innan. Det är svårt att få en överblick över vad som faktiskt ändrats om den visar filer man bara tillfälligt ändrat för att sedan ändra tillbaka. Lyckligtvis finns det trix man kan ta till för att bli av med dessa filer även om det krävs att man manuellt startar ett rensingskommando.\r\n\r\nVälj Tools/External tools... Tryck add och fyll i dialogen enligt nedanTitle: Undo unchangedCommand: C:\\Program Files\\Microsoft Team Foundation Server 2008 Power Tools\\TFPT.exe\r\n\r\nEller denna för 64 bitars windowsC:\\Program Files (x86)\\Microsoft Team Foundation Server 2008 Power Tools\\TFPT.exe\r\n\r\nArguments: uu /rInitial directory: $(SolutionDir)Use output windows: X\r\n\r\n\r\n\r\nNu kan du välja ”Undo unchanged” under toolsmenyn för att bli av med alla falska ändringarna.\r\n\r\n![Bild](http://tekniken.nu/uploads/subversion.png)", + "html": "

När man vant sig vid Tortoise och SVN så blir man lite besviken när man väl börjat med Microsoft Team Foundation Server och saknar många av dom små självklara sakerna man vant sig. Här finns några tips för att göra övergången enklare.

OBS! Denna blog gäller TFS 2008 i kombination med Visual Studio 2008. Om samma problem finns med 2010 så kommer ett framtida inlägg om detta.

Genom att installera TFS powertool så kan man få integration med Explorer så att man kan se vilka filer som ändrats och checka in eller hämta senaste versionerna. Detta är ovärdelig för den som använder andra program för att redigera filer som är incheckade i TFS.

Så här ser ikonerna ut för icke ändrade och ändrade filer. Ikonerna är grötiga men det är bättre än inget.

 

Så här ser då högerklicksmenyn ut om man klickar på en fil som har oincheckade ändringar.

Här hittar du powertools för TFS som krävs för båda trixen i denna blogg.

http://www.microsoft.com/downloads/details.aspx?FamilyId=FBD14EEA-781F-45A1-8C46-9F6BA2F68BF0&displaylang=en

I motsats till SVN så markerar Team foundation system (TFS) alla filer som man ändrat som ”Pending changes” oavsett om man i editorn återställer filen så som den såg ut innan. Det är svårt att få en överblick över vad som faktiskt ändrats om den visar filer man bara tillfälligt ändrat för att sedan ändra tillbaka. Lyckligtvis finns det trix man kan ta till för att bli av med dessa filer även om det krävs att man manuellt startar ett rensingskommando.

Välj Tools/External tools... Tryck add och fyll i dialogen enligt nedan
Title: Undo unchanged
Command: C:\\Program Files\\Microsoft Team Foundation Server 2008 Power Tools\\TFPT.exe

Eller denna för 64 bitars windows
C:\\Program Files (x86)\\Microsoft Team Foundation Server 2008 Power Tools\\TFPT.exe

Arguments: uu /r
Initial directory: $(SolutionDir)
Use output windows: X

Nu kan du välja ”Undo unchanged” under toolsmenyn för att bli av med alla falska ändringarna.

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Trix för att få TFS 2008 att bete sig mer som SVN", + "meta_description": "", + "author_id": 1089, + "created_at": 1258018500000, + "created_by": 1089, + "updated_at": 1258018500000, + "updated_by": 1089, + "published_at": 1258018500000, + "published_by": 1089 + }, + { + "id": 374, + "title": "Tips för att lära sig Regular Expressions", + "slug": "tips-for-att-lara-sig-regular-expressions", + "markdown": "\r\n\r\n\r\n\r\nRegular Expressions är ett väldigt kraftfullt sätt att söka i text med ”mönster”. Det bästa sättet att lära sig detta är att laborera med det och det enklaste sättet att laborera är i programmet Expresso som också har en ypperligt bra 30 minuters tutorial i hjälpen (och även om man är erfaren systemutvecklare måste man ändå läsa den varje gång det gått några veckor mellan tillfällena)\r\n\r\nhttp://www.ultrapico.com/Expresso.htm\r\n", + "html": "

Regular Expressions är ett väldigt kraftfullt sätt att söka i text med ”mönster”. Det bästa sättet att lära sig detta är att laborera med det och det enklaste sättet att laborera är i programmet Expresso som också har en ypperligt bra 30 minuters tutorial i hjälpen (och även om man är erfaren systemutvecklare måste man ändå läsa den varje gång det gått några veckor mellan tillfällena)

http://www.ultrapico.com/Expresso.htm

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Tips för att lära sig Regular Expressions", + "meta_description": "", + "author_id": 1087, + "created_at": 1259057722000, + "created_by": 1087, + "updated_at": 1259057722000, + "updated_by": 1087, + "published_at": 1259057722000, + "published_by": 1087 + }, + { + "id": 378, + "title": "Checklista inför release av en sajt", + "slug": "checklista-infor-release-av-en-sajt", + "markdown": "\r\n\r\nNär man släpper nya sajter kan det vara bra med en checklista så man inte glömmer viktiga saker\r\n\r\n\r\n\r\nHär är en bra checklista för vad man bör gå igenom när det börjar närma sig släpp av en ny sajt och förstås gärna redan under utvecklingen.\r\n### Lägga in Google analytics (eller motsvarande)\r\nDet är ganska självklart att kunden (och vi själva) vill veta hur många besök sajten har, oftast får man frågan en månad eller två efter sajten är släppt eller ofta just efter t.ex. en tv-reklam i samband med en ny sajt. Har man glömt lägga in analyskoden har man inga siffror att ta fram i efterskott. Eftersom google analytics är gratis finns ingen anledning att vara utan denna statistik.\r\n### Skapa en favicon.ico\r\nDet är lätt att glömma denna lilla ikon under utvecklingen men den tillför mycket för den slutgiltiga känslan så lägg några minuter på att skapa en. Ladda upp loggan på http://www.favicon.cc/ så har du en bra start.\r\n\r\nLägga in felloggning på lagom nivå\r\n\r\nNär sajten väl är släppt så dyker ofta fel upp som man inte fått i utvecklingsmiljön eller ens testmiljön och att då ha en log som hjälper en att felsöka när något uppstått men minst lika viktigt, gör det möjligt att se hur ofta ett problem uppstått så man kan skilja nån som vid ett enda tillfälle gått in med en gammal browser eller gamla cachade javascript och ett fel som uppstår för varenda besökare. Man får heller inte glömma att sajten kanske får tusentals besökare om dan och då får man förstås inte logga alltför mycket heller.\r\n### DNS även utan www\r\nOvana användare skriver alltid addresser med www först, t.ex www.tekniken.nu, men vi vanare användare skriver gärna bara tekniken.nu och att då få DNS-fel gör att man lätt tror att man har fel adress.\r\n### Prestanda med fullt material och i servermiljö\r\nNär man utvecklar en sajt har man ofta bara en del av materialmängden som kommer finnas på sajten tiden efter release. Att testa sajten ganska tidigt med den mängden material som förväntas finnas där åtminstone närmaste åren kommer göra att man slipper i panik försöka fixa prestandaproblem med en sajt som är ute live och kanske dessutom har mängder av besökare. Det händer dessutom att saker som fungerar snabbt i en utvecklingsmiljö kan bli olidligt långsamt i livemiljön pga små saker som t.ex. pingtider. Märker man såna tendenser innan release finns det fortfarande möjligheter att lägga in cachningar och dylikt för att minimera problemen.\r\n### Testa i alla vanliga webbläsare\r\nDet är lätt att man gör ändringar sent i projektet (kanske sista minuten t.o.m) och glömmer testa i alla populära webbläsare. Vi utvecklare använder gärna de senaste versionern av alla webbläsare, men då missar man ofta de mest använda versionerna. Normalt sett fungerar internet explorer 8 ganska likt de andra stora webbläsarna och då glömmer man lätt att IE7 är mycket vanlig och i vissa kundgrupper även IE6. För att försvåra testningen ytterligare så beter sig IE8 i kompabilitetsläge inte helt och hållet som IE7. Lösningen på ie testning heter IE Tester http://my-debugbar.com/wiki/IETester/HomePage.\r\n### Testa med rätt version även på servern\r\nRedan under utvecklingstiden bör man förstås hålla koll på vilka versoner av allt som används på den server som sajten skall drivas på, men det är lätt att glömma att även små skillnader som t.ex servicepack och dylikt kan orsaka små subtila buggar som nästan är omöjliga att felsöka. Optimalt är att parallellt sätta upp en stage miljö på samma server som sajten skall driftas på så det finns några dagar där man kan testa den nya sajten i samma miljö som den senare skall användas i.\r\n### Hantera gamla länkar\r\nOfta skapar man inte en helt ny sajt utan en ny version av en redan befintlig sajt och då får man inte glömma att det ofta finns mängder av länkar på andra ställen som numera inte går till rätt ställe. Det går givetvis inte tvinga alla andra sajter och sökmotorer att länka rätt men man kan oftast se till att hantera gamla länkar snyggare än bara ett 404-felmeddelande. Uppdatera de länkar ni kan och för lägg till funktion som fångar upp de gamla adresserna och skickar vidare till motsvarande nya sida med en 301 redirect (dvs moved permanently) t.ex genom en smartare 404-sida. Genom detta får man dessutom behålla sökmotorpoäng t.ex Googles PageRank.\r\n### Känns sajten bra?\r\nOm sajten varit klar några dagar innan release så kommer ett lugn sprida sig när sajten går live. Om buggar fixas in i sista minuten så kommer det kännas som en sämre release även om antal buggar är samma. Om sajten får ”marinera” några dagar utan att nån hittar nån allvarlig bugg så blir alla gladare när den släpps.\r\n### Se sajten genom andras ögon\r\nNär utvecklare tittar på en sajt under utveckling så är det för att hitta och lösa problem. En vanlig användare tittar inte på marginaler och Javascript-funktioner utan försöker hitta information eller lösa en uppgift. Det är lätt att som utvecklare störa sig på småsaker som en vanlig användare aldrig skulle märka. Genom att antingen själv försöka använda sajten eller ännu hellre låta nån annan faktiskt använda den så får man ett annat perspektiv och oftast en mer positiv bild.\r\n\r\n![Bild](http://tekniken.nu/uploads/633960625984702545-check.png)", + "html": "

När man släpper nya sajter kan det vara bra med en checklista så man inte glömmer viktiga saker

Här är en bra checklista för vad man bör gå igenom när det börjar närma sig släpp av en ny sajt och förstås gärna redan under utvecklingen.

Lägga in Google analytics (eller motsvarande)

Det är ganska självklart att kunden (och vi själva) vill veta hur många besök sajten har, oftast får man frågan en månad eller två efter sajten är släppt eller ofta just efter t.ex. en tv-reklam i samband med en ny sajt. Har man glömt lägga in analyskoden har man inga siffror att ta fram i efterskott. Eftersom google analytics är gratis finns ingen anledning att vara utan denna statistik.

Skapa en favicon.ico

Det är lätt att glömma denna lilla ikon under utvecklingen men den tillför mycket för den slutgiltiga känslan så lägg några minuter på att skapa en. Ladda upp loggan på http://www.favicon.cc/ så har du en bra start.

Lägga in felloggning på lagom nivå

När sajten väl är släppt så dyker ofta fel upp som man inte fått i utvecklingsmiljön eller ens testmiljön och att då ha en log som hjälper en att felsöka när något uppstått men minst lika viktigt, gör det möjligt att se hur ofta ett problem uppstått så man kan skilja nån som vid ett enda tillfälle gått in med en gammal browser eller gamla cachade javascript och ett fel som uppstår för varenda besökare. Man får heller inte glömma att sajten kanske får tusentals besökare om dan och då får man förstås inte logga alltför mycket heller.

DNS även utan www

Ovana användare skriver alltid addresser med www först, t.ex www.tekniken.nu, men vi vanare användare skriver gärna bara tekniken.nu och att då få DNS-fel gör att man lätt tror att man har fel adress.

Prestanda med fullt material och i servermiljö

När man utvecklar en sajt har man ofta bara en del av materialmängden som kommer finnas på sajten tiden efter release. Att testa sajten ganska tidigt med den mängden material som förväntas finnas där åtminstone närmaste åren kommer göra att man slipper i panik försöka fixa prestandaproblem med en sajt som är ute live och kanske dessutom har mängder av besökare. Det händer dessutom att saker som fungerar snabbt i en utvecklingsmiljö kan bli olidligt långsamt i livemiljön pga små saker som t.ex. pingtider. Märker man såna tendenser innan release finns det fortfarande möjligheter att lägga in cachningar och dylikt för att minimera problemen.

Testa i alla vanliga webbläsare

Det är lätt att man gör ändringar sent i projektet (kanske sista minuten t.o.m) och glömmer testa i alla populära webbläsare. Vi utvecklare använder gärna de senaste versionern av alla webbläsare, men då missar man ofta de mest använda versionerna. Normalt sett fungerar internet explorer 8 ganska likt de andra stora webbläsarna och då glömmer man lätt att IE7 är mycket vanlig och i vissa kundgrupper även IE6. För att försvåra testningen ytterligare så beter sig IE8 i kompabilitetsläge inte helt och hållet som IE7. Lösningen på ie testning heter IE Tester http://my-debugbar.com/wiki/IETester/HomePage.

Testa med rätt version även på servern

Redan under utvecklingstiden bör man förstås hålla koll på vilka versoner av allt som används på den server som sajten skall drivas på, men det är lätt att glömma att även små skillnader som t.ex servicepack och dylikt kan orsaka små subtila buggar som nästan är omöjliga att felsöka. Optimalt är att parallellt sätta upp en stage miljö på samma server som sajten skall driftas på så det finns några dagar där man kan testa den nya sajten i samma miljö som den senare skall användas i.

Hantera gamla länkar

Ofta skapar man inte en helt ny sajt utan en ny version av en redan befintlig sajt och då får man inte glömma att det ofta finns mängder av länkar på andra ställen som numera inte går till rätt ställe. Det går givetvis inte tvinga alla andra sajter och sökmotorer att länka rätt men man kan oftast se till att hantera gamla länkar snyggare än bara ett 404-felmeddelande. Uppdatera de länkar ni kan och för lägg till funktion som fångar upp de gamla adresserna och skickar vidare till motsvarande nya sida med en 301 redirect (dvs moved permanently) t.ex genom en smartare 404-sida. Genom detta får man dessutom behålla sökmotorpoäng t.ex Googles PageRank.

Känns sajten bra?

Om sajten varit klar några dagar innan release så kommer ett lugn sprida sig när sajten går live. Om buggar fixas in i sista minuten så kommer det kännas som en sämre release även om antal buggar är samma. Om sajten får ”marinera” några dagar utan att nån hittar nån allvarlig bugg så blir alla gladare när den släpps.

Se sajten genom andras ögon

När utvecklare tittar på en sajt under utveckling så är det för att hitta och lösa problem. En vanlig användare tittar inte på marginaler och Javascript-funktioner utan försöker hitta information eller lösa en uppgift. Det är lätt att som utvecklare störa sig på småsaker som en vanlig användare aldrig skulle märka. Genom att antingen själv försöka använda sajten eller ännu hellre låta nån annan faktiskt använda den så får man ett annat perspektiv och oftast en mer positiv bild.

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Checklista inför release av en sajt", + "meta_description": "", + "author_id": 1089, + "created_at": 1260465797000, + "created_by": 1089, + "updated_at": 1260465797000, + "updated_by": 1089, + "published_at": 1260465797000, + "published_by": 1089 + }, + { + "id": 386, + "title": "Kraftfull kodnavigering i Visual Studio 2010", + "slug": "kraftfull-kodnavigering-i-visual-studio-2010", + "markdown": "\r\n\r\nEfter att ha kört Visual Studio 2010 RC1:an ett tag nu så skulle jag vilja dela med mig av ett par nya hjälpmedel för sökning som är mycket användbara:\r\n\r\n\"NavigateTo\" (Ctrl+comma) är ett nytt fönster där du kan söka på typer, klasser, variabler etc och direkt förflytta dig till det ställe där dom deklareras. Snyggt är att resultaten dyker upp och filtreras medan du skriver samt att du kan söka på versalerna i de fall namnet är skrivet i Pascal Casing (skriv till exempel TSO för att få upp TxSiteObject).\r\n\r\n\r\n\r\nNär du är ny i ett projekt och ännu inte har vant dig vid hur alla metoder och properties hänger ihop är det mycket användbart att plocka upp \"View Call Hierarchy\" (Ctrl+K, Ctrl+T). Det är en ny dialog som ger dig en bra överblick över bland annat varifrån en metod anropas och vilka andra metoder den i sin tur anropar.\r\n\r\nMer à http://weblogs.asp.net/scottgu/archive/2009/10/21/searching-and-navigating-code-in-vs-2010-vs-2010-and-net-4-0-series.aspx\r\n", + "html": "

Efter att ha kört Visual Studio 2010 RC1:an ett tag nu så skulle jag vilja dela med mig av ett par nya hjälpmedel för sökning som är mycket användbara:

\"NavigateTo\" (Ctrl+comma) är ett nytt fönster där du kan söka på typer, klasser, variabler etc och direkt förflytta dig till det ställe där dom deklareras. Snyggt är att resultaten dyker upp och filtreras medan du skriver samt att du kan söka på versalerna i de fall namnet är skrivet i Pascal Casing (skriv till exempel TSO för att få upp TxSiteObject).

När du är ny i ett projekt och ännu inte har vant dig vid hur alla metoder och properties hänger ihop är det mycket användbart att plocka upp \"View Call Hierarchy\" (Ctrl+K, Ctrl+T). Det är en ny dialog som ger dig en bra överblick över bland annat varifrån en metod anropas och vilka andra metoder den i sin tur anropar.

Mer à http://weblogs.asp.net/scottgu/archive/2009/10/21/searching-and-navigating-code-in-vs-2010-vs-2010-and-net-4-0-series.aspx

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Kraftfull kodnavigering i Visual Studio 2010", + "meta_description": "ick över ett projekt man är ny i!", + "author_id": 1093, + "created_at": 1266512205000, + "created_by": 1093, + "updated_at": 1266512205000, + "updated_by": 1093, + "published_at": 1266512205000, + "published_by": 1093 + }, + { + "id": 387, + "title": "De fem farligaste programmeringsfelen", + "slug": "de-fem-farligaste-programmeringsfelen", + "markdown": "\r\n\r\nDatorexperter från 30 kända organisationer sätter varje år ihop en lista över de farligaste programmeringsfelen. Farlighetsnivån är en sammanvägning av hur vanligt förekommande de är, hur lätta att utnyttja de är och hur stor skada de kan ställa till med. Bland de 25 farliga felen finns en kombination av gamla klassiska fel som kan uppstå i all form av utveckling och en uppsättning lite nyare som har med webbutveckling att göra. Här är topp tre:\r\n## 1. Cross-site scripting (XSS)\r\nOfficiell benämning: Failure to Preserve Web Page Structure\r\n\r\nBeskrivning: Cross-site scripting innebär att en angripare lyckas få in egen javascript-kod i HTML-koden för en sida på någon annans webbplats. För besökaren(s webbläsare) ser det ut som att all kod kommer från webbplatsen och på så sätt kan angriparen hämta ut t.ex. cookies med sparade lösenord och sessionsdata. Ett exempel är ett diskussionsforum som tillåter att man matar in HTML-taggar och scriptkod. Här är en ganska lång men bra animering som förklarar XSS: http://www.virtualforge.de/vmovie/xss_selling_platform_v1.0.php\r\n\r\nKända webbplatser som har råkat ut för XSS är Facebook, Myspace och Google.\r\n\r\nLösning/skydd: kontrollera alla indata. Bestäm vilka värden som är godkända, inte vilka som är otillåtna.\r\n## 2. SQL Injection\r\nOfficiell benämning: Improper Sanitization of Special Elements used in an SQL Command\r\n\r\nBeskrivning: SQL Injection innebär att en angripare lyckas skicka in egen kod som körs i en webbplats databas. Det vanligaste sättet är även här att man inte kontrollerar sina indata ordenligt. Det är väldigt vanligt att webbplatser inte har ett adekvat skydd mot detta.\r\n\r\nLösning/skydd: kontrollera alla indata. Om man använder .NET så ska man alltid använda de metoder som har SQL-parametrar (särskilda .NET-klasser) när man skapar SQL-frågor, aldrig skarva ihop egna strängar (särskilt inte med indata från användare) till SQL-frågor.\r\n## 3. Classic buffer overflow\r\nOfficiell benämning: Buffer Copy without Checking Size of Input\r\n\r\nBeskrivning: Buffer overflow är den mest klassiska av alla säkerhetsluckor och antagligen den första. Om man lägger ett för stort värde i en variabel (t.ex. fler tecken än som ryms i en sträng) så kan de överskjutande tecknen skriva över minne som hör till andra variabler. På så sätt kan en skicklig angripare skriva över till exempel variabeln som innehåller inloggad användares säkerhetsnivå, och plötsligt bli administratör genom att bara ange ett för långt användarnamn som är konstruerat på rätt sätt. Det kan tyckas svårt att konstruera en sån sträng utan stora kunskaper om exakt hur applikationen är konstruerad, men sen man först kom på idén 1972 har extremt många attacker gjorts på detta sätt. Några av de kändaste är IIS 5-masken Code red, och SQL 2000-viruset SQL Slammer. Det är också buffer overlow som har använts för att hacka XBOX, PSP och iPhone för att tillåta att användare kan köra egna program, trots att plattformarna egentligen inte tillåter det.\r\n\r\nLösning/skydd: kontrollera alltid storleken på de värden som läggs i variabler. I s.k. managed languages som C# där systemet själv hanterar minnet så finns inbyggda skydd mot buffer overflow, det vanligaste är att attacker görs mot språk som C och C++ där programmeraren själv hanterar minnet i applikationskoden.\r\n\r\nResten av listan finns här: http://cwe.mitre.org/top25/index.html\r\n\r\nVia The Register, via slashdot.\r\n\r\n![Bild](http://tekniken.nu/uploads/634021881114491632-injection.png)", + "html": "

Datorexperter från 30 kända organisationer sätter varje år ihop en lista över de farligaste programmeringsfelen. Farlighetsnivån är en sammanvägning av hur vanligt förekommande de är, hur lätta att utnyttja de är och hur stor skada de kan ställa till med. Bland de 25 farliga felen finns en kombination av gamla klassiska fel som kan uppstå i all form av utveckling och en uppsättning lite nyare som har med webbutveckling att göra. Här är topp tre:

1. Cross-site scripting (XSS)

Officiell benämning: Failure to Preserve Web Page Structure

Beskrivning: Cross-site scripting innebär att en angripare lyckas få in egen javascript-kod i HTML-koden för en sida på någon annans webbplats. För besökaren(s webbläsare) ser det ut som att all kod kommer från webbplatsen och på så sätt kan angriparen hämta ut t.ex. cookies med sparade lösenord och sessionsdata. Ett exempel är ett diskussionsforum som tillåter att man matar in HTML-taggar och scriptkod. Här är en ganska lång men bra animering som förklarar XSS: http://www.virtualforge.de/vmovie/xss_selling_platform_v1.0.php

Kända webbplatser som har råkat ut för XSS är Facebook, Myspace och Google.

Lösning/skydd: kontrollera alla indata. Bestäm vilka värden som är godkända, inte vilka som är otillåtna.

2. SQL Injection

Officiell benämning: Improper Sanitization of Special Elements used in an SQL Command

Beskrivning: SQL Injection innebär att en angripare lyckas skicka in egen kod som körs i en webbplats databas. Det vanligaste sättet är även här att man inte kontrollerar sina indata ordenligt. Det är väldigt vanligt att webbplatser inte har ett adekvat skydd mot detta.

Lösning/skydd: kontrollera alla indata. Om man använder .NET så ska man alltid använda de metoder som har SQL-parametrar (särskilda .NET-klasser) när man skapar SQL-frågor, aldrig skarva ihop egna strängar (särskilt inte med indata från användare) till SQL-frågor.

3. Classic buffer overflow

Officiell benämning: Buffer Copy without Checking Size of Input

Beskrivning: Buffer overflow är den mest klassiska av alla säkerhetsluckor och antagligen den första. Om man lägger ett för stort värde i en variabel (t.ex. fler tecken än som ryms i en sträng) så kan de överskjutande tecknen skriva över minne som hör till andra variabler. På så sätt kan en skicklig angripare skriva över till exempel variabeln som innehåller inloggad användares säkerhetsnivå, och plötsligt bli administratör genom att bara ange ett för långt användarnamn som är konstruerat på rätt sätt. Det kan tyckas svårt att konstruera en sån sträng utan stora kunskaper om exakt hur applikationen är konstruerad, men sen man först kom på idén 1972 har extremt många attacker gjorts på detta sätt. Några av de kändaste är IIS 5-masken Code red, och SQL 2000-viruset SQL Slammer. Det är också buffer overlow som har använts för att hacka XBOX, PSP och iPhone för att tillåta att användare kan köra egna program, trots att plattformarna egentligen inte tillåter det.

Lösning/skydd: kontrollera alltid storleken på de värden som läggs i variabler. I s.k. managed languages som C# där systemet själv hanterar minnet så finns inbyggda skydd mot buffer overflow, det vanligaste är att attacker görs mot språk som C och C++ där programmeraren själv hanterar minnet i applikationskoden.

Resten av listan finns här: http://cwe.mitre.org/top25/index.html

Via The Register, via slashdot.

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "De 25 farligaste programmeringsfelen", + "meta_description": "", + "author_id": 6, + "created_at": 1266591311000, + "created_by": 6, + "updated_at": 1266591311000, + "updated_by": 6, + "published_at": 1266591311000, + "published_by": 6 + }, + { + "id": 388, + "title": "CSS-tricks: Förkorta rubriker med \"...\"", + "slug": "css-tricks-forkorta-rubriker-med-", + "markdown": "\r\n\r\nEn dold feature i CSS standarden är ”text-overflow: ellipsis” som låter en text förkortas med overflow:hidden, men som också automatiskt lägger till tre punkter som markerar att texten är avkortad. På engelska heter detta ellipsis.\r\n\r\nEn lustig detalj är att denna standard finns och fungerar redan från IE6 och uppåt.\r\n\r\nAnvänd följande syntax:\r\ntext-overflow: ellipsis;\r\neller\r\ntext-overflow: ellipsis-word;                     \r\n\r\n\r\nLäs mer här:\r\n\r\nhttp://www.w3.org/TR/2001/WD-css3-text-20010517/#text-overflow-props\r\n\r\noch se exempel här:\r\n\r\nhttp://www.css3.info/preview/text-overflow/\r\n", + "html": "

En dold feature i CSS standarden är ”text-overflow: ellipsis” som låter en text förkortas med overflow:hidden, men som också automatiskt lägger till tre punkter som markerar att texten är avkortad. På engelska heter detta ellipsis.

En lustig detalj är att denna standard finns och fungerar redan från IE6 och uppåt.

Använd följande syntax:

text-overflow: ellipsis;

eller

text-overflow: ellipsis-word;                     

Läs mer här:

http://www.w3.org/TR/2001/WD-css3-text-20010517/#text-overflow-props

och se exempel här:

http://www.css3.info/preview/text-overflow/

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "CSS-tricks: Förkorta rubriker med \"...\"", + "meta_description": "", + "author_id": 1087, + "created_at": 1267029600000, + "created_by": 1087, + "updated_at": 1267029600000, + "updated_by": 1087, + "published_at": 1267029600000, + "published_by": 1087 + }, + { + "id": 391, + "title": "Så hackades Time.coms omröstning om viktigaste person 2009", + "slug": "sa-hackades-timecoms-omrostning-om-viktigaste-person-2009", + "markdown": "\r\n\r\nVi har tidigare skrivit webbsäkerhet, bland annat om faran med att inte kontrollera indata och följderna det kan få (bl.a. SQL Injection). Några som nyligen har råkat ut för detta är Time Magazine som hade en omröstning om världens mest inflytelserika personen. Otippad vinnare blev moot, som slog både Barack Obama, Oprah och Vladimir Putin. Moot är knappast känd för allmänheten, men han har grundat webbplatsen 4chan som är en av de mest inflytelserika (och samtidigt urballade) på internet när det gäller webbkultur och att skapa nya uttryck som sprids som vinden. Från 4chan kommer memes som Rickrolling, Lolcats, Chocolate Rain och många andra. Inte nog med att moot vann omröstningen, i topplistan döljer sig dessutom ett budskap:\r\n\r\n\r\n\r\nVar detta en osannolik slump? Marblecake är ett uttryck som används av hackergruppen som har jagat Scientologerna – så självklart inte. Allt är resultatet av mycket nedlagd tid och flera hackningar av Time.coms röstningsfunktion. Såhär såg stegen ut översiktligt:\r\nNär någon röstade på time.com så skickade röstningsvärdena som en vanlig GET: http://www.timepolls.com/contentpolls/Vote.do?pollName=time100_2009&id=1883924&rating=1. Det gjorde det väldigt lätt att skapa ett script som bara kör samma röst om och om igen i rasande takt. Medlemmarna på 4chan började sprida ut addresser i diskussionsforum som automatisk röstade 100 eller 1000 gånger på moot. Bland annat gjorde man det på forum för en av moots största konkurrenter, Koreanska popstjärnan Rain, där medlemmarna trodde att de röstade på sin favorit.Efter ett tag upptäckte någon att det inte fanns någon kontroll av värdet på rating. Snart började automatröstningscripten skicka in värden på 300 på moot och negativa värden på konkurrenterna.Time.com upptäckte problemen och raderade miljoner med röster som man bedömde komma från automatröstare. Man försökte täppa till hålet genom att kryptera värdet som skickades in. Hackarna lyckades dock fiska upp lösenordet till krypteringen ur flashfilen som röstningen gjordes via, så snart var alla autovoter-scripts igång igen.Time.com införde också en spärr som gjorde det omöjligt att rösta för många gånger och i för snabb följd från samma dator. Hackarna upptäckte dock att om datorn körde Ipv6 så fungerade inte spärren, så autoröstningarna fortsatte i ännu högre tempo.\r\nTime.com själva verkar ta det hela med jämmod. Själv tänker jag att det är ett erkännande i sig att ha så många fans som moot som lägger ner så mycket tid på att manipulera en sån här omröstning, men det kanske inte gör honom till världens mest inflytelserika.\r\n\r\nSensmoralen är att en bättre koll på indata hade räddat Time.com från flera av hackningarna. I slutänden är det dock nästan omöjligt att skydda en publik webbplats eller funktion från angrepp när webbens skarpaste hackare lägger manken till. Absolut säkerhet är omöjligt, man måste alltid göra en riskbedömning – både sannolikheten för angrepp, men även följderna ifall angrepp skulle ske – och anpassa eventuella ytterligare (kostsamma) säkerhetsinsatser efter den. Time.com gjorde uppenbarligen en felbedömning av risken för angrepp.\r\n\r\nLäs hela den långa och välförklarade bloggposten om hacket på Music Machinery.\r\n\r\n![Bild](http://tekniken.nu/uploads/634032136791261551-image001.jpg)", + "html": "

Vi har tidigare skrivit webbsäkerhet, bland annat om faran med att inte kontrollera indata och följderna det kan få (bl.a. SQL Injection). Några som nyligen har råkat ut för detta är Time Magazine som hade en omröstning om världens mest inflytelserika personen. Otippad vinnare blev moot, som slog både Barack Obama, Oprah och Vladimir Putin. Moot är knappast känd för allmänheten, men han har grundat webbplatsen 4chan som är en av de mest inflytelserika (och samtidigt urballade) på internet när det gäller webbkultur och att skapa nya uttryck som sprids som vinden. Från 4chan kommer memes som Rickrolling, Lolcats, Chocolate Rain och många andra. Inte nog med att moot vann omröstningen, i topplistan döljer sig dessutom ett budskap:

Var detta en osannolik slump? Marblecake är ett uttryck som används av hackergruppen som har jagat Scientologerna – så självklart inte. Allt är resultatet av mycket nedlagd tid och flera hackningar av Time.coms röstningsfunktion. Såhär såg stegen ut översiktligt:

  1. När någon röstade på time.com så skickade röstningsvärdena som en vanlig GET: http://www.timepolls.com/contentpolls/Vote.do?pollName=time100_2009&id=1883924&rating=1. Det gjorde det väldigt lätt att skapa ett script som bara kör samma röst om och om igen i rasande takt. Medlemmarna på 4chan började sprida ut addresser i diskussionsforum som automatisk röstade 100 eller 1000 gånger på moot. Bland annat gjorde man det på forum för en av moots största konkurrenter, Koreanska popstjärnan Rain, där medlemmarna trodde att de röstade på sin favorit.
  2. Efter ett tag upptäckte någon att det inte fanns någon kontroll av värdet på rating. Snart började automatröstningscripten skicka in värden på 300 på moot och negativa värden på konkurrenterna.
  3. Time.com upptäckte problemen och raderade miljoner med röster som man bedömde komma från automatröstare. Man försökte täppa till hålet genom att kryptera värdet som skickades in. Hackarna lyckades dock fiska upp lösenordet till krypteringen ur flashfilen som röstningen gjordes via, så snart var alla autovoter-scripts igång igen.
  4. Time.com införde också en spärr som gjorde det omöjligt att rösta för många gånger och i för snabb följd från samma dator. Hackarna upptäckte dock att om datorn körde Ipv6 så fungerade inte spärren, så autoröstningarna fortsatte i ännu högre tempo.

Time.com själva verkar ta det hela med jämmod. Själv tänker jag att det är ett erkännande i sig att ha så många fans som moot som lägger ner så mycket tid på att manipulera en sån här omröstning, men det kanske inte gör honom till världens mest inflytelserika.

Sensmoralen är att en bättre koll på indata hade räddat Time.com från flera av hackningarna. I slutänden är det dock nästan omöjligt att skydda en publik webbplats eller funktion från angrepp när webbens skarpaste hackare lägger manken till. Absolut säkerhet är omöjligt, man måste alltid göra en riskbedömning – både sannolikheten för angrepp, men även följderna ifall angrepp skulle ske – och anpassa eventuella ytterligare (kostsamma) säkerhetsinsatser efter den. Time.com gjorde uppenbarligen en felbedömning av risken för angrepp.

Läs hela den långa och välförklarade bloggposten om hacket på Music Machinery.

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Så hackades Time.coms omröstning om viktigaste person 2009", + "meta_description": "ackningar.", + "author_id": 6, + "created_at": 1267616878000, + "created_by": 6, + "updated_at": 1267616878000, + "updated_by": 6, + "published_at": 1267616878000, + "published_by": 6 + }, + { + "id": 392, + "title": "Automatisk screenshot i TFS", + "slug": "automatisk-screenshot-i-tfs", + "markdown": "\r\n\r\nDet absolut bästa sättet att rapportera buggar är att bifoga en screenshot. Det är enormt kraftfullt och effektivt både för den som rapporterar buggen och den som tar emot och ska fixa buggen (för att en bild säger mer än tusen ord ;). I TFS (Microsoft Team Foundation Server) finns det möjlighet att bifoga bilder och filer och därmed kan man bifoga en screenshot. Samtidigt är det relativt omständigt att spara ner en screenshot till skrivbordet och sedan leta upp samma fil, vilket gör det oftast enklare att klistra in bilden i ett mail, vilket leder till att man inte får allt på samma ställe. Men idag lärde jag mig ett jättebra knep som jag gärna delar med mig av och det är att man (i alla fall i Team Explorer i Visual Studio 2010) klistra in en screenshot direkt i dialogen som då automatiskt bifogas som en ”screenshot.png”:\r\n## Gör så här för att rapportera en bugg:\r\nAnvänd Snipping tool (eller tryck CTRL-PrintScreen):Tryck på CTRL-C i Snipping tool.Skapa en ny bugg i TFS:Gå till fliken File Attachments/Screenshots och tryck CTRL-V och vips kommer bilden upp med namnet Screenshot.png!\r\n\r\n![Bild](http://tekniken.nu/uploads/634037563988935779-image005.jpg@01CABF68.16874BF0__image005.jpg)", + "html": "

Det absolut bästa sättet att rapportera buggar är att bifoga en screenshot. Det är enormt kraftfullt och effektivt både för den som rapporterar buggen och den som tar emot och ska fixa buggen (för att en bild säger mer än tusen ord ;). I TFS (Microsoft Team Foundation Server) finns det möjlighet att bifoga bilder och filer och därmed kan man bifoga en screenshot. Samtidigt är det relativt omständigt att spara ner en screenshot till skrivbordet och sedan leta upp samma fil, vilket gör det oftast enklare att klistra in bilden i ett mail, vilket leder till att man inte får allt på samma ställe. Men idag lärde jag mig ett jättebra knep som jag gärna delar med mig av och det är att man (i alla fall i Team Explorer i Visual Studio 2010) klistra in en screenshot direkt i dialogen som då automatiskt bifogas som en ”screenshot.png”:

Gör så här för att rapportera en bugg:

  1. Använd Snipping tool (eller tryck CTRL-PrintScreen):
  2. Tryck på CTRL-C i Snipping tool.
  3. Skapa en ny bugg i TFS:
  4. Gå till fliken File Attachments/Screenshots och tryck CTRL-V och vips kommer bilden upp med namnet Screenshot.png!

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Automatisk screenshot i TFS", + "meta_description": "", + "author_id": 1087, + "created_at": 1268217900000, + "created_by": 1087, + "updated_at": 1268217900000, + "updated_by": 1087, + "published_at": 1268217900000, + "published_by": 1087 + }, + { + "id": 394, + "title": "Bygg om dina NUnit-tester till Visual Studio-tester", + "slug": "bygg-om-dina-nunit-tester-till-visual-studio-tester", + "markdown": "\r\n\r\nUnder tiden vi nu använt och testat Visual Studio 2010 har vi även passat på att konvertera ett testprojekt från NUnit till ett Test Project i VS 2010. Redan Visual Studio 2005 hade stöd för Test projects om än inte i lika hög grad som nu. Därför är det kanske inte konstigt att vi inte tagit steget tidigare, speciellt med tanke på hur komplett NUnit är för testutveckling. En av nyheterna i VS 2010 Test Project är möjligheten att ange kategorier för testerna.\r\n\r\nOm man googlar lite snabbt på konvertering från NUnit till Visual Studio Test Project hittar man att gäng guider och även program som kan göra jobbet åt dig. Jag valde att göra det själv pga att det projekt som jag skulle konvertera var ganska enkelt samt att jag hade ganska liten kännedom om testerna i sig, förutom att jag gillar att veta vad som händer ”på riktigt”!\r\n\r\nDen konverteringsprocess jag använde var väldigt enkel och skedde i ett par steg:\r\nKonvertering av projektfilReferenser till VS test-library och ändring av attributEtt par förändringar i användningen av Assert-metoder, mer specifikt Assert.GreaterOrEqual och Assert.AreEqual för kollektioner.## ## 1. Konvertering av projektfil\r\nTa bort det NUnit-projekt du ska konvertera från din solution och öppna projektfilen (.csproj) med en texteditor. Det du behöver göra är att lägga till en tagg för att markera projektfilen som Test Project så att Visual Studio känner igen den. Lägg till taggen {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} överst i . Lägg sedan till projektet i din solution igen.\r\n## 2. Referenser till VS test-library och ändring av attribut\r\nTa bort alla referenser till NUnit och referera istället in using Microsoft.VisualStudio.TestTools.UnitTesting;\r\n\r\nErsätt NUnit-attribut med motsvarande Test Project-attribut:\r\n\r\n[TestFixture] med [TestClass][Test] med [TestProject][SetUp] med [TestInitialize][TearDown] med [TestCleanup][Category] med [TestCategory] nytt i Visual Studio 2010!\r\n\r\nDet finns naturligtvis ett flertal attribut till som du kan behöva byta ut, men de här borde vara de vanligaste.\r\n## 3. Kodändringar\r\nDe flesta av våra test gick sedan att köra rakt av men jag stötte på två problem, nämligen Assert.GreaterOrEqual och Assert.AreEqual för kollektioner.\r\n\r\nI VS Test Project verkar det inte finnas någon direkt motsvarighet till Assert.GreaterOrEqual så de testerna fick jag helt enkelt skriva om men det kändes faktiskt inte som en en förlust att prata om.\r\n\r\nNär det gäller Assert.AreEqual så ska ett varningens finger lyftas eftersom den skiljer sig åt i utförande men på grund av att metoden tar två likadana parametrar så kommer du inte att få ett kompileringsfel. I NUnit så gör den helt enkelt en jämförelse av varje objekt i kollektionen men det som händer i VS Test Project är att den bara göra en collection1.Equals(collection2), alltså aldrig en jämförelse av de object som finns i kollektionen. Assert.AreEqual ska i det här fallet ersättas med CollectionAssert.AreEqual som gör samma jobb i VS Test Project som NUnit gör.\r\n\r\nJag utgår ifrån att antalet metoder som skiljer sig åt mellan NUnit och VS Test Project är fler om du har mer komplexa tester från början!\r\n\r\n![Bild](http://tekniken.nu/uploads/634039023579397181-image001.jpg@01CAC075.A95E5A00__image001.jpg)", + "html": "

Under tiden vi nu använt och testat Visual Studio 2010 har vi även passat på att konvertera ett testprojekt från NUnit till ett Test Project i VS 2010. Redan Visual Studio 2005 hade stöd för Test projects om än inte i lika hög grad som nu. Därför är det kanske inte konstigt att vi inte tagit steget tidigare, speciellt med tanke på hur komplett NUnit är för testutveckling. En av nyheterna i VS 2010 Test Project är möjligheten att ange kategorier för testerna.

Om man googlar lite snabbt på konvertering från NUnit till Visual Studio Test Project hittar man att gäng guider och även program som kan göra jobbet åt dig. Jag valde att göra det själv pga att det projekt som jag skulle konvertera var ganska enkelt samt att jag hade ganska liten kännedom om testerna i sig, förutom att jag gillar att veta vad som händer ”på riktigt”!

Den konverteringsprocess jag använde var väldigt enkel och skedde i ett par steg:

  1. Konvertering av projektfil
  2. Referenser till VS test-library och ändring av attribut
  3. Ett par förändringar i användningen av Assert-metoder, mer specifikt Assert.GreaterOrEqual och Assert.AreEqual för kollektioner.


1. Konvertering av projektfil

Ta bort det NUnit-projekt du ska konvertera från din solution och öppna projektfilen (.csproj) med en texteditor. Det du behöver göra är att lägga till en tagg för att markera projektfilen som Test Project så att Visual Studio känner igen den. Lägg till taggen <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> överst i <PropertyGroup>. Lägg sedan till projektet i din solution igen.

2. Referenser till VS test-library och ändring av attribut

Ta bort alla referenser till NUnit och referera istället in using Microsoft.VisualStudio.TestTools.UnitTesting;

Ersätt NUnit-attribut med motsvarande Test Project-attribut:

[TestFixture] med [TestClass]
[Test] med [TestProject]
[SetUp] med [TestInitialize]
[TearDown] med [TestCleanup]
[Category] med [TestCategory] nytt i Visual Studio 2010!

Det finns naturligtvis ett flertal attribut till som du kan behöva byta ut, men de här borde vara de vanligaste.

3. Kodändringar

De flesta av våra test gick sedan att köra rakt av men jag stötte på två problem, nämligen Assert.GreaterOrEqual och Assert.AreEqual för kollektioner.

I VS Test Project verkar det inte finnas någon direkt motsvarighet till Assert.GreaterOrEqual så de testerna fick jag helt enkelt skriva om men det kändes faktiskt inte som en en förlust att prata om.

När det gäller Assert.AreEqual så ska ett varningens finger lyftas eftersom den skiljer sig åt i utförande men på grund av att metoden tar två likadana parametrar så kommer du inte att få ett kompileringsfel. I NUnit så gör den helt enkelt en jämförelse av varje objekt i kollektionen men det som händer i VS Test Project är att den bara göra en collection1.Equals(collection2), alltså aldrig en jämförelse av de object som finns i kollektionen. Assert.AreEqual ska i det här fallet ersättas med CollectionAssert.AreEqual som gör samma jobb i VS Test Project som NUnit gör.

Jag utgår ifrån att antalet metoder som skiljer sig åt mellan NUnit och VS Test Project är fler om du har mer komplexa tester från början!

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Bygg om dina NUnit-tester till Visual Studio-tester", + "meta_description": "", + "author_id": 1093, + "created_at": 1268305556000, + "created_by": 1093, + "updated_at": 1268305556000, + "updated_by": 1093, + "published_at": 1268305556000, + "published_by": 1093 + }, + { + "id": 400, + "title": "Paginering är död?", + "slug": "paginering-ar-dod", + "markdown": "\r\n\r\nEtt intressant fenomen på Internet är det som kallas paginering (kommer från engelskans paging) och innebär i princip att ett längre flöde delas upp i sidor och längst nere på varje sida finns en sidnumrering som gör att man kan klicka sig vidare till valfri sida i ordningen. Skälet från början till att införa paginering är att webbläsaren för länge sedan hade problem att hantera för mycket information och att bandbredden var begränsad. Numera finns det dock andra förutsättningar och egentligen borde det inte krävas paginering förrän några hundra sökträffar.\r\n\r\nSen länge har jag stört mig på detta för jag anser inte att det är anpassat till hur användaren uppfattar flödet och från ett tekniskt perspektiv gör pagineringen att man oftast måste slå upp all information från samtliga sidor trots att 99% av alla ändå bara är intresserad av innehållet på första och eventuellt andra sidan.\r\n\r\nDen största nackdelen med paginering som jag ser det är att man inte kan jämföra de träffar som finns på sida två med sida ett. Ett konkret exempel på detta är t ex en möbelfirma som säljer soffor på nätet visar vissa soffor på sida ett och andra på sida två. Varför ska man inte kunna jämföra alla soffor utan att behöva öppna flera fönster?\r\n\r\nEtt annat exempel på dålig användning av paginering är fastighetsmäklares hemsidor som har ”Interiörbilder” och ”Exteriörbilder” som olika sidor. Varför vill man inte se alla samtidigt? (Hur många klickar inte på ”Visa alla bilder” knappen?)\r\n\r\nTänk efter om du inte också alltid väljer ”Visa alla” eller så många träffar som möjligt genom en ”100 sökträffar per sida”? Vore det inte bra att det var standard med 500 träffar per sida?\r\n\r\nNackdelar med paginering:\r\nAnvändaren kan inte jämföra träffar på första och andra sidanSidan laddas om och man kommer tillbaka längst upp till menyn och flödet försvinnerServern måste bearbeta onödig informationLayouten kan bli väldigt tråkig vid för många sidor\r\nI och med inträdet av iPhone har nu dock fler webbplatser förstått att det finns alternativ till traditionell paginering. Istället för en numrerad lista finns det ibland en ny typ av paginering ”Nästa 25” knapp längst nere i listan och då fylls listan på med fler 25 träffar. Jag kallar denna paginering för ”visa fler-paginering”\r\n\r\nFördelar med ”visa fler-paginering”:\r\nAnvändaren kan få en komplett listaFlödet är kvar – man fortsätter bara läsa och man kan fortsätta hur länge man villLayouten blir inte förstörd av massor av knappar och siffrorServern kan ställa väldigt enkla frågor och kan strunta i all information som kommer efter de första 100 träffarna\r\nMan kan ju självklart komplettera ”visa fler-paginering” med en siffra på totalt antal träffar och eventuellt en ”Visa alla” knapp.\r\n\r\nOm du också tycker att paginering ska dö så kan du pusha på knappen här bredvid så att fler utvecklare och designers ser detta!\r\n\r\n![Bild](http://tekniken.nu/uploads/bild.jpg)", + "html": "

Ett intressant fenomen på Internet är det som kallas paginering (kommer från engelskans paging) och innebär i princip att ett längre flöde delas upp i sidor och längst nere på varje sida finns en sidnumrering som gör att man kan klicka sig vidare till valfri sida i ordningen. Skälet från början till att införa paginering är att webbläsaren för länge sedan hade problem att hantera för mycket information och att bandbredden var begränsad. Numera finns det dock andra förutsättningar och egentligen borde det inte krävas paginering förrän några hundra sökträffar.

Sen länge har jag stört mig på detta för jag anser inte att det är anpassat till hur användaren uppfattar flödet och från ett tekniskt perspektiv gör pagineringen att man oftast måste slå upp all information från samtliga sidor trots att 99% av alla ändå bara är intresserad av innehållet på första och eventuellt andra sidan.

Den största nackdelen med paginering som jag ser det är att man inte kan jämföra de träffar som finns på sida två med sida ett. Ett konkret exempel på detta är t ex en möbelfirma som säljer soffor på nätet visar vissa soffor på sida ett och andra på sida två. Varför ska man inte kunna jämföra alla soffor utan att behöva öppna flera fönster?

Ett annat exempel på dålig användning av paginering är fastighetsmäklares hemsidor som har ”Interiörbilder” och ”Exteriörbilder” som olika sidor. Varför vill man inte se alla samtidigt? (Hur många klickar inte på ”Visa alla bilder” knappen?)

Tänk efter om du inte också alltid väljer ”Visa alla” eller så många träffar som möjligt genom en ”100 sökträffar per sida”? Vore det inte bra att det var standard med 500 träffar per sida?

Nackdelar med paginering:

  1. Användaren kan inte jämföra träffar på första och andra sidan
  2. Sidan laddas om och man kommer tillbaka längst upp till menyn och flödet försvinner
  3. Servern måste bearbeta onödig information
  4. Layouten kan bli väldigt tråkig vid för många sidor

I och med inträdet av iPhone har nu dock fler webbplatser förstått att det finns alternativ till traditionell paginering. Istället för en numrerad lista finns det ibland en ny typ av paginering ”Nästa 25” knapp längst nere i listan och då fylls listan på med fler 25 träffar. Jag kallar denna paginering för ”visa fler-paginering”

Fördelar med ”visa fler-paginering”:

  1. Användaren kan få en komplett lista
  2. Flödet är kvar – man fortsätter bara läsa och man kan fortsätta hur länge man vill
  3. Layouten blir inte förstörd av massor av knappar och siffror
  4. Servern kan ställa väldigt enkla frågor och kan strunta i all information som kommer efter de första 100 träffarna

Man kan ju självklart komplettera ”visa fler-paginering” med en siffra på totalt antal träffar och eventuellt en ”Visa alla” knapp.

Om du också tycker att paginering ska dö så kan du pusha på knappen här bredvid så att fler utvecklare och designers ser detta!

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Paginering är död?", + "meta_description": "", + "author_id": 1087, + "created_at": 1269616347000, + "created_by": 1087, + "updated_at": 1269616347000, + "updated_by": 1087, + "published_at": 1269616347000, + "published_by": 1087 + }, + { + "id": 405, + "title": "Bästa tipsen för en lyckad leverans", + "slug": "basta-tipsen-for-en-lyckad-leverans", + "markdown": "\r\n\r\nEn viktigt del i varje leverantörs och beställares vardag är att utbyta material som den andra ska använda. Här är mina bästa tips för att få en snygg och lyckad leverans.\r\n\r\n\r\nSom teknikbyrå är vi oftast beroende av att andra byråer skickar oss grafisk design, färdiga bilder för ikoner och bakgrunder men också flashar och xml-filer. För att minimera strul, och dyra men onödiga misstag så finns det några saker för varje typ av partner i ett projektsamarbete att tänka på. Här är några vanliga problem som ofta uppstår och undviker man dom här problemen är ett bra resultat nästan garanterat.\r\n\r\n## Leveranser av bildmaterial och design\r\n\r\nDet är alltför vanligt att man som slutresultat får en tillplattad bild som inte går att plocka element från och där fontval är upp till utvecklaren att gissa.\r\n\r\n\r\nGIF-formatet hör till 90-talet, speciellt om den inte animeras. Genom att välja 8-bitars PNG så är det enkelt att senare gå över till full färg och full transparens utan att behöva ändra i koden överallt.\r\n\r\n\r\nVi gillar PSD, ge oss en PSD-fil så kan vi själv plocka ut delar, vi kan välja en text och se vilket teckensnitt och vilken storlek texten är gjord i. Vi kan dessutom enkelt plocka ut element från bilden utan att behöva be en designer om en utklippt ikon. Självklart så blir vi glada om nån annan skapar ikoner men bara om dom är sparade i PNG och är transparanta på rätt ställen.\r\n\r\n\r\nOrdning och reda på leveranserna. Ofta får vi flera leveranser på sidor där gemensamma element är ändrade. Det är lätt att man plockar element från den filen man just nu arbetar i och ska man hålla koll på vilken av dom dussin filerna som har rätt sidomeny är det lätt att det blir fel.\r\n\r\n\r\nNär vi får en ny leverans på en befintlig design, speciellt om den redan är delvis implementerad så är det bra för oss att veta vad som är nytt i den leveransen, t.ex att högermenyn har fått en annan skuggning. Detta gör det lättare för oss att veta att om vi påbörjat utveckling av den så måste den utvecklaren utgå från det nya materialet.\r\n\r\n\r\nGärna en enda fil med allt än 100 filer där olika versioner av menyer och andra gemensama element finns. För att hålla ordning på filen utan att duplicera menylager för varje sida använd gärna ”Layer Comps”. Layer Comps dök upp i Photoshop CS2 och bygger på att man i Photoshop kan skapa en namngiven komposition när man väljer vilka lager som ska vara vara synliga per komposition. Man kan t.ex. ha en komposition som heter ”Förstasidan oinloggad” där inloggningsrutan visas. Döp gärna alla lager snyggt också eftersom när man plockar ut designen så vill man ofta dölja textboxar och knappar.\r\n\r\n## Leverans av Flash\r\n\r\nJag använder ordet Flash här men det gäller såklart också Silverlight och andra pluginlösningar också.\r\n\r\n\r\nOfta är det webbredaktörer som lägger in material och vi försöker då bygga mallar och verktyg där man laddar upp och fyller i egenskaper för t.ex flashar som ska visas. Genom att bygga flasharna så att dom konfigureras med XML och som bara kräver en enda parameter (som givetvis är sökvägen till XML-filen) så blir det enkelt för oss att byta flash/XML direkt utan att behöva skriva ny specialiserad kod för varje flash.\r\n\r\n\r\nOm nåt går snett i flashen, t.ex att den inte hittar xml filen eller om den i filen förväntar sig ett värde av en viss typ så ge nån typ av felmeddelande och inte bara en blank Flash.\r\n\r\n\r\nOm det är möjligt av licensskäl, skicka med källkoden till flashen. Förutom att det hjälper oss att felsöka så är det ännu viktigare när vi långt senare får i uppdrag att ändra nån del i sajten som påverkar flashen. Det har hänt flera gånger att det inte går att få tag i de som gjort flashen från början och ingen längre kan hitta källkoden - då måste hela flashen skrivas om av någon annan.\r\n\r\n\r\nTänk på filstorleken och prestandan! En häftig flash på 1mb kanske känns smidigt när man surfar lokalt med sin quadcore-processor men när man har lite långsammare uppkoppling och den där flashen tar 10 sekunder att ladda och går ryckigt är det inte alls lika roligt. Glöm inte att testa på sämre uppkoppling och långsammare datorer – och även med wmode transparent om flashen ska visas så, eftersom det sänker prestandan.\r\n\r\n\r\nTesta flashen i en ”riktig” miljö, d.v.s. på en webserver där flashen inte ligger direkt i roten utan längre ner i sökvägen. Det är ganska vanligt att flashutvecklare testar lokalt i en HTML-fil och missar då knepigheter som relativa sökvägar och diverse rättighetsproblem. Anta inte heller att det är ok att lägga saker i roten av sajten, det orsakar både en rörig struktur och stor risk för konflikter.\r\n\r\n## Leverans av dokumentation för API:er som t.ex webservices och XML\r\n\r\nDet är ganska vanligt att främst äldre API:er har dokumentation som inte längre är helt aktuell och ibland helt felaktig, se till att hålla dokumentationen aktuell i samband med att API:t ändras.\r\n\r\n\r\nExempelkod är nästan viktigare än dokumentation. Kod kan man köra och enkelt verifiera att API:t fortfarande fungerar som det ska. Om kodexemplet inte fungerar så är det lätt att säga till leverantören att detta är fel och då är det lätt för dem att felsöka också. Om exempelkoden fungerar men våran kod inte fungerar så har vi nått att jämföra med. Att jämföra sin kod med en dokumentation som dessutom kan vara fel är inte alls lika hjälpsamt.\r\n\r\n\r\nOm det finns speciella krav på parametrarna, t.ex att strängen som heter id måste vara formaterad som en guid eller bara innehålla siffror eller nästan vanligare att telefonnummer måste innehålla landskod, bör detta finnas dokumenterat och givetvis med som ett exempel i koden.\r\n\r\n\r\nOm ert företag har som affärsidé att tillhandahålla API-lösningar så se till att det finns bra exempel i alla vanliga språk så får ni inte bara mindre supportsamtal utan också möjlighet att förbättra API:t genom att göra det mer kompatibelt med omvärlden.\r\n\r\n## Att ta emot en leverans\r\n\r\nDet finns förstås också saker man som mottagare måste tänka på för att avsändaren ska bli nöjd. En av dom viktigaste är att testa det levererade materialet direkt och inte först när det är panik, ingen gillar att sitta på julafton och lösa problem som borde upptäckts flera månader tidigare. Testa ordentligt så att du kan lämna en detaljerad felrapport, ”det fungerar inte” är inte godtagbart som felbeskrivning.\r\n\r\n\r\nTänk på att den som levererat materialet ofta är beroende av sina egna samarbetspartners också. En ändring som behöver göras kan ofta gå igenom flera företag och flera personer på varje företag. Genom att snabbt skicka tillbaka ändringsfrågor istället för att vänta några dagar/veckor så är chansen större att alla är på plats och har projektet i färskt minne.\r\n\r\n\r\nÄven om leverantören har som jobb att lösa problem så är det bara människor ändå och ibland kan det kännas som att allt man gör är fel. Säg gärna nåt positivt mitt allt tråkigt så kan du rädda dagen istället för att bli den där typen som bara kommer med problem. Ett tack för hjälpen när allt är klart gör att nästa gång du ringer så får du en glad person i andra änden som gärna hjälper till. Det är förstås trist att det är fel, men om båda känner att dom hjälps åt för att lösa problemet blir det en mer positiv stämning.\r\n\r\n## Slutord\r\n\r\nAtt leverera materialet på ett mer strukturerat sätt kan öka arbetsbördan något men kommer också ge nöjdare samarbetspartners, färre supportsamtal och ett bättre samarbete både externt och internt.\r\n\r\n![Bild](http://tekniken.nu/uploads/634075324177259232-paket.png)", + "html": "

En viktigt del i varje leverantörs och beställares vardag är att utbyta material som den andra ska använda. Här är mina bästa tips för att få en snygg och lyckad leverans.


Som teknikbyrå är vi oftast beroende av att andra byråer skickar oss grafisk design, färdiga bilder för ikoner och bakgrunder men också flashar och xml-filer. För att minimera strul, och dyra men onödiga misstag så finns det några saker för varje typ av partner i ett projektsamarbete att tänka på. Här är några vanliga problem som ofta uppstår och undviker man dom här problemen är ett bra resultat nästan garanterat.


Leveranser av bildmaterial och design


Det är alltför vanligt att man som slutresultat får en tillplattad bild som inte går att plocka element från och där fontval är upp till utvecklaren att gissa.


GIF-formatet hör till 90-talet, speciellt om den inte animeras. Genom att välja 8-bitars PNG så är det enkelt att senare gå över till full färg och full transparens utan att behöva ändra i koden överallt.


Vi gillar PSD, ge oss en PSD-fil så kan vi själv plocka ut delar, vi kan välja en text och se vilket teckensnitt och vilken storlek texten är gjord i. Vi kan dessutom enkelt plocka ut element från bilden utan att behöva be en designer om en utklippt ikon. Självklart så blir vi glada om nån annan skapar ikoner men bara om dom är sparade i PNG och är transparanta på rätt ställen.


Ordning och reda på leveranserna. Ofta får vi flera leveranser på sidor där gemensamma element är ändrade. Det är lätt att man plockar element från den filen man just nu arbetar i och ska man hålla koll på vilken av dom dussin filerna som har rätt sidomeny är det lätt att det blir fel.


När vi får en ny leverans på en befintlig design, speciellt om den redan är delvis implementerad så är det bra för oss att veta vad som är nytt i den leveransen, t.ex att högermenyn har fått en annan skuggning. Detta gör det lättare för oss att veta att om vi påbörjat utveckling av den så måste den utvecklaren utgå från det nya materialet.


Gärna en enda fil med allt än 100 filer där olika versioner av menyer och andra gemensama element finns. För att hålla ordning på filen utan att duplicera menylager för varje sida använd gärna ”Layer Comps”. Layer Comps dök upp i Photoshop CS2 och bygger på att man i Photoshop kan skapa en namngiven komposition när man väljer vilka lager som ska vara vara synliga per komposition. Man kan t.ex. ha en komposition som heter ”Förstasidan oinloggad” där inloggningsrutan visas. Döp gärna alla lager snyggt också eftersom när man plockar ut designen så vill man ofta dölja textboxar och knappar.


Leverans av Flash


Jag använder ordet Flash här men det gäller såklart också Silverlight och andra pluginlösningar också.


Ofta är det webbredaktörer som lägger in material och vi försöker då bygga mallar och verktyg där man laddar upp och fyller i egenskaper för t.ex flashar som ska visas. Genom att bygga flasharna så att dom konfigureras med XML och som bara kräver en enda parameter (som givetvis är sökvägen till XML-filen) så blir det enkelt för oss att byta flash/XML direkt utan att behöva skriva ny specialiserad kod för varje flash.


Om nåt går snett i flashen, t.ex att den inte hittar xml filen eller om den i filen förväntar sig ett värde av en viss typ så ge nån typ av felmeddelande och inte bara en blank Flash.


Om det är möjligt av licensskäl, skicka med källkoden till flashen. Förutom att det hjälper oss att felsöka så är det ännu viktigare när vi långt senare får i uppdrag att ändra nån del i sajten som påverkar flashen. Det har hänt flera gånger att det inte går att få tag i de som gjort flashen från början och ingen längre kan hitta källkoden - då måste hela flashen skrivas om av någon annan.


Tänk på filstorleken och prestandan! En häftig flash på 1mb kanske känns smidigt när man surfar lokalt med sin quadcore-processor men när man har lite långsammare uppkoppling och den där flashen tar 10 sekunder att ladda och går ryckigt är det inte alls lika roligt. Glöm inte att testa på sämre uppkoppling och långsammare datorer – och även med wmode transparent om flashen ska visas så, eftersom det sänker prestandan.


Testa flashen i en ”riktig” miljö, d.v.s. på en webserver där flashen inte ligger direkt i roten utan längre ner i sökvägen. Det är ganska vanligt att flashutvecklare testar lokalt i en HTML-fil och missar då knepigheter som relativa sökvägar och diverse rättighetsproblem. Anta inte heller att det är ok att lägga saker i roten av sajten, det orsakar både en rörig struktur och stor risk för konflikter.


Leverans av dokumentation för API:er som t.ex webservices och XML


Det är ganska vanligt att främst äldre API:er har dokumentation som inte längre är helt aktuell och ibland helt felaktig, se till att hålla dokumentationen aktuell i samband med att API:t ändras.


Exempelkod är nästan viktigare än dokumentation. Kod kan man köra och enkelt verifiera att API:t fortfarande fungerar som det ska. Om kodexemplet inte fungerar så är det lätt att säga till leverantören att detta är fel och då är det lätt för dem att felsöka också. Om exempelkoden fungerar men våran kod inte fungerar så har vi nått att jämföra med. Att jämföra sin kod med en dokumentation som dessutom kan vara fel är inte alls lika hjälpsamt.


Om det finns speciella krav på parametrarna, t.ex att strängen som heter id måste vara formaterad som en guid eller bara innehålla siffror eller nästan vanligare att telefonnummer måste innehålla landskod, bör detta finnas dokumenterat och givetvis med som ett exempel i koden.


Om ert företag har som affärsidé att tillhandahålla API-lösningar så se till att det finns bra exempel i alla vanliga språk så får ni inte bara mindre supportsamtal utan också möjlighet att förbättra API:t genom att göra det mer kompatibelt med omvärlden.


Att ta emot en leverans


Det finns förstås också saker man som mottagare måste tänka på för att avsändaren ska bli nöjd. En av dom viktigaste är att testa det levererade materialet direkt och inte först när det är panik, ingen gillar att sitta på julafton och lösa problem som borde upptäckts flera månader tidigare. Testa ordentligt så att du kan lämna en detaljerad felrapport, ”det fungerar inte” är inte godtagbart som felbeskrivning.


Tänk på att den som levererat materialet ofta är beroende av sina egna samarbetspartners också. En ändring som behöver göras kan ofta gå igenom flera företag och flera personer på varje företag. Genom att snabbt skicka tillbaka ändringsfrågor istället för att vänta några dagar/veckor så är chansen större att alla är på plats och har projektet i färskt minne.


Även om leverantören har som jobb att lösa problem så är det bara människor ändå och ibland kan det kännas som att allt man gör är fel. Säg gärna nåt positivt mitt allt tråkigt så kan du rädda dagen istället för att bli den där typen som bara kommer med problem. Ett tack för hjälpen när allt är klart gör att nästa gång du ringer så får du en glad person i andra änden som gärna hjälper till. Det är förstås trist att det är fel, men om båda känner att dom hjälps åt för att lösa problemet blir det en mer positiv stämning.


Slutord


Att leverera materialet på ett mer strukturerat sätt kan öka arbetsbördan något men kommer också ge nöjdare samarbetspartners, färre supportsamtal och ett bättre samarbete både externt och internt.

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Bästa tipsen för en lyckad leverans", + "meta_description": "", + "author_id": 1089, + "created_at": 1271935616000, + "created_by": 1089, + "updated_at": 1271935616000, + "updated_by": 1089, + "published_at": 1271935616000, + "published_by": 1089 + }, + { + "id": 407, + "title": "Använd DESC som standardsortering", + "slug": "anvand-desc-som-standardsortering", + "markdown": "\r\n\r\nEtt tips till alla utvecklare är att sortera alla listor i fallande ordning som standard. Vanligtvis använder man standardsorteringsordningen (ASC) och det känns på något sätt rätt men det är enligt mig oftare intressant att se det största värdet i listor:\r\n\r\n\r\nFöljande exempel är man mest intresserad av att se sorterade i fallande ordning\r\n\r\n\r\nDe flesta numeriska värdena – (t.ex. besök, tidinloggningar, saldo, ålder, timmar)\r\nIdentitetsfält (id) – Senast är mer intressant än äldre\r\nArtiklar (datum) – Senast är mer intressant än äldre\r\nJa/Nej fält (bool) – Ja är mer intressant än nej\r\n\r\n\r\nUndantag:\r\n\r\n\r\nAlfabetiska listor vill man läsa från A-Ö (t ex Namn)\r\nSortering på pris (Billigast är oftast det man är ute efter)\r\n\r\n\r\nEtt bra tips för att optimera en databas är faktiskt att ändra defaultsorteringen på alla identity index från ASC till DESC för det är samma sak där – det är troligare att en ny användare loggar in än en äldre och då hittar SQL Server snabbare upp den användaren om indexvärdet är sorterat i omvänd ordning.\r\n\r\n\r\nObservera att jag inte menar att alltid vill sortera fallande men kan man låta användaren byta så är det oftare mer rätt att sortera listor i omvänd ordning som standard.\r\n\r\n\r\nJag tar gärna emot kommentarer om detta – det finns säkert många fler undantag ? ;)\r\n\r\n![Bild](http://tekniken.nu/uploads/634085782513020632-image001.png@01CAE7C5.4D105510__image001.png)", + "html": "

Ett tips till alla utvecklare är att sortera alla listor i fallande ordning som standard. Vanligtvis använder man standardsorteringsordningen (ASC) och det känns på något sätt rätt men det är enligt mig oftare intressant att se det största värdet i listor:


Följande exempel är man mest intresserad av att se sorterade i fallande ordning



  1. De flesta numeriska värdena – (t.ex. besök, tidinloggningar, saldo, ålder, timmar)

  2. Identitetsfält (id) – Senast är mer intressant än äldre

  3. Artiklar (datum) – Senast är mer intressant än äldre

  4. Ja/Nej fält (bool) – Ja är mer intressant än nej



Undantag:



  1. Alfabetiska listor vill man läsa från A-Ö (t ex Namn)

  2. Sortering på pris (Billigast är oftast det man är ute efter)


Ett bra tips för att optimera en databas är faktiskt att ändra defaultsorteringen på alla identity index från ASC till DESC för det är samma sak där – det är troligare att en ny användare loggar in än en äldre och då hittar SQL Server snabbare upp den användaren om indexvärdet är sorterat i omvänd ordning.


Observera att jag inte menar att alltid vill sortera fallande men kan man låta användaren byta så är det oftare mer rätt att sortera listor i omvänd ordning som standard.


Jag tar gärna emot kommentarer om detta – det finns säkert många fler undantag ? ;)

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Använd DESC som standardsortering", + "meta_description": "", + "author_id": 1087, + "created_at": 1273056900000, + "created_by": 1087, + "updated_at": 1273056900000, + "updated_by": 1087, + "published_at": 1273056900000, + "published_by": 1087 + }, + { + "id": 408, + "title": "Fallgropar med veckonummer", + "slug": "fallgropar-med-veckonummer", + "markdown": "\r\n\r\nPå grund av total förvirring kring veckonummer i världen kan jag tipsa om att SQL kan enkelt leverera rätt veckonummer enligt ISO standard (som självklart Sverige redan använder).\r\n\r\n\r\nSyntaxen är:\r\n\r\n\r\nDATEPART(iso_week, GETDATE())\r\n\r\n\r\nDvs, använd aldrig WEEK(getdate())  - även om det kanske funkar just nu så kan det bara vara en olyckligt sammanträffande och ett annat år så slutar ditt system att fungera efter nyår.\r\n\r\n\r\nLäs mer om veckor på Wikipedia:\r\n\r\n\r\nhttp://sv.wikipedia.org/wiki/Vecka\r\n\r\n\r\nISO-standarden säger att en vecka alltid måste börja på en måndag (vilket på något sätt är rimligast) och för att det ska räknas som en vecka måste den ha minst fyra dagar, dvs den första veckan på året blir den första veckan som har sin torsdag på det nya året! Enkelt och självklart.  Däremot blir det lite märkligt när nyårsafton infaller just på en torsdag för då går den första veckan av det nya året under numret 53 på föregående år, det är en nödvändig konsekvens av ISO standarden men det betyder alltså att man måste tänka på följande:\r\n\r\n\r\nUtgå inte från att veckans år alltid är nuvarande år (du kan alltså inte räkna med att köra WHERE week= DATEPART(ISO_WEEK, getdate()) AND year=year(getdate())\r\nRäkna inte med att det bara är 52 veckor på ett år\r\nTesta! (det är svårt att få sitt huvud runt detta och pröva genom att ställa fram klockan några år)\r\n\r\n\r\nDetta året ger till exempel SQL Servern följande veckonummer för i fredags:\r\n\r\n\r\n\r\n\r\n\r\nNär det korrekta värdet egentligen är:\r\n\r\n\r\n\r\n\r\n\r\nJag personligen skulle vara glad om SQL Server var konfigurerad till att alltid ange ISO standarder på alla värden men det kanske går att ställa in?\r\n\r\n![Bild](http://tekniken.nu/uploads/634096901816946003-image001.png@01CAF363.EC6033C0__image001.png)", + "html": "

På grund av total förvirring kring veckonummer i världen kan jag tipsa om att SQL kan enkelt leverera rätt veckonummer enligt ISO standard (som självklart Sverige redan använder).


Syntaxen är:


DATEPART(iso_week, GETDATE())


Dvs, använd aldrig WEEK(getdate())  - även om det kanske funkar just nu så kan det bara vara en olyckligt sammanträffande och ett annat år så slutar ditt system att fungera efter nyår.


Läs mer om veckor på Wikipedia:


http://sv.wikipedia.org/wiki/Vecka


ISO-standarden säger att en vecka alltid måste börja på en måndag (vilket på något sätt är rimligast) och för att det ska räknas som en vecka måste den ha minst fyra dagar, dvs den första veckan på året blir den första veckan som har sin torsdag på det nya året! Enkelt och självklart.  Däremot blir det lite märkligt när nyårsafton infaller just på en torsdag för då går den första veckan av det nya året under numret 53 på föregående år, det är en nödvändig konsekvens av ISO standarden men det betyder alltså att man måste tänka på följande:



  1. Utgå inte från att veckans år alltid är nuvarande år (du kan alltså inte räkna med att köra WHERE week= DATEPART(ISO_WEEK, getdate()) AND year=year(getdate())

  2. Räkna inte med att det bara är 52 veckor på ett år

  3. Testa! (det är svårt att få sitt huvud runt detta och pröva genom att ställa fram klockan några år)


Detta året ger till exempel SQL Servern följande veckonummer för i fredags:



När det korrekta värdet egentligen är:



Jag personligen skulle vara glad om SQL Server var konfigurerad till att alltid ange ISO standarder på alla värden men det kanske går att ställa in?

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Fallgropar med veckonummer", + "meta_description": "", + "author_id": 1087, + "created_at": 1274093380000, + "created_by": 1087, + "updated_at": 1274093380000, + "updated_by": 1087, + "published_at": 1274093380000, + "published_by": 1087 + }, + { + "id": 410, + "title": "Windows 7 långsamt mot localhost", + "slug": "windows-7-langsamt-mot-localhost", + "markdown": "\r\n\r\nNär du utvecklar mot din lokala dator och tycker att det går långsamt att ladda bilder o.s.v. så kan det bero på andra orsaker än att din dator är långsam eller har för lite minne. Sedan införandet av IPv6 i Windows Vista har det blivit lite inkörningsproblem där bland annat namnet ”localhost” har hamnat mellan stolarna.\r\n\r\n\r\nTidigare i Windows gjordes uppslagningen av namnet localhost i filen ”hosts” som ligger under Windows\\System32\\Drivers\\etc  - men från och med Windows 7 står det följande rader i hosts filen:\r\n\r\n\r\n# localhost name resolution is handled within DNS itself.#   127.0.0.1 localhost#   ::1 localhost\r\n\r\n\r\nEnligt IPv6-standarden skall alla uppslag av IP-adresser skötas av DNS-servern, men om du har en DNS-leverantör som inte stöder detta eller har en äldre router som inte stöder IPv6 så innebär detta att varje anrop innebär en timeout i uppslagningen tills din webbläsare byter till IPv4. Detta gör att sidan upplevs väldigt långsam. Det är viktigt att saker och ting görs på rätt sätt för att standarden ska bli så bra som möjligt men för dig som utvecklare är det också viktigt att snabbt kunna testa resultatet av din kod. Som tur är finns det en lösning på problemet:\r\n\r\n\r\nLösningen är att antingen stänga av Ipv6 (inte rekommenderat)\r\n\r\n\r\n\r\n\r\n\r\neller ta bort # tecknet i hosts filen på ipv4-adressen vilket kommer göra att uppslagningen av localhost kommer att gå direkt i din datorn utan DNS-uppslag och kommer välja ipv4 framför IPv6 för localhost-adresser. Detta gör också att du kan fortsätta utveckla trots att du är offline.\r\n\r\n\r\n# localhost name resolution is handled within DNS itself.   127.0.0.1 localhost#   ::1 localhost\r\n\r\n\r\nObs, för att redigera i hosts filen så behöver du starta Notepad som Administratör.\r\n\r\n\r\nSkillnad:\r\n\r\n\r\n\r\n\r\n\r\nMed localhost IPv4 påslaget i hosts filen:\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/634104061416166182-image001.png@01CAFB2F.749AB0D0__image001.png)", + "html": "

När du utvecklar mot din lokala dator och tycker att det går långsamt att ladda bilder o.s.v. så kan det bero på andra orsaker än att din dator är långsam eller har för lite minne. Sedan införandet av IPv6 i Windows Vista har det blivit lite inkörningsproblem där bland annat namnet ”localhost” har hamnat mellan stolarna.


Tidigare i Windows gjordes uppslagningen av namnet localhost i filen ”hosts” som ligger under Windows\\System32\\Drivers\\etc  - men från och med Windows 7 står det följande rader i hosts filen:


# localhost name resolution is handled within DNS itself.
#   127.0.0.1 localhost
#   ::1 localhost


Enligt IPv6-standarden skall alla uppslag av IP-adresser skötas av DNS-servern, men om du har en DNS-leverantör som inte stöder detta eller har en äldre router som inte stöder IPv6 så innebär detta att varje anrop innebär en timeout i uppslagningen tills din webbläsare byter till IPv4. Detta gör att sidan upplevs väldigt långsam. Det är viktigt att saker och ting görs på rätt sätt för att standarden ska bli så bra som möjligt men för dig som utvecklare är det också viktigt att snabbt kunna testa resultatet av din kod. Som tur är finns det en lösning på problemet:


Lösningen är att antingen stänga av Ipv6 (inte rekommenderat)



eller ta bort # tecknet i hosts filen på ipv4-adressen vilket kommer göra att uppslagningen av localhost kommer att gå direkt i din datorn utan DNS-uppslag och kommer välja ipv4 framför IPv6 för localhost-adresser. Detta gör också att du kan fortsätta utveckla trots att du är offline.


# localhost name resolution is handled within DNS itself.
   127.0.0.1 localhost
#   ::1 localhost


Obs, för att redigera i hosts filen så behöver du starta Notepad som Administratör.


Skillnad:



Med localhost IPv4 påslaget i hosts filen:


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Windows 7 långsamt mot localhost", + "meta_description": "", + "author_id": 1087, + "created_at": 1274810520000, + "created_by": 1087, + "updated_at": 1274810520000, + "updated_by": 1087, + "published_at": 1274810520000, + "published_by": 1087 + }, + { + "id": 411, + "title": "Hur du skapar Routing till mappar i .NET 4 Classic mode", + "slug": "hur-du-skapar-routing-till-mappar-i-net-4-classic-mode", + "markdown": "\r\n\r\nNär man skriver ett REST-API till en applikation vill man gärna stödja en syntax utan filändelser: t ex\r\n\r\nhttp://yourdomain.com/xml/users\r\n\r\nTidigare fanns det massor av trix för IIS6 för att åstadkomma detta, de flesta byggde på 404-ompekning, ISAPI filter, egenskrivna HttpModules eller UrlRewriting. Alla dessa trix förstör dock informationen på vägen, framför allt HttpMethod som alltid blir GET trots att originalmetoden var POST, DELETE eller PUT. \r\n\r\nSedan IIS7 finns det fina lösningar för att hantera detta i web.config om man kör applikationen i s.k Integrated Mode, men kör man Classic Mode fungerar inte denna mappning utan att man pekar om alla anrop till .NET-motorn i IIS. Detta skapar skalbarhetsproblem för bilder och statiska filer som då börjar äta av App poolens resurser istället för att hanteras direkt av IIS.\r\n\r\nFrån och med .NET 3.5 SP1 finns det stöd för Routing som från början var en del av MVC, men som från och med .NET 4.0 finns tillgängligt för alla typer av ASP.NET- applikationer. Som en del av denna uppdatering kom också stöd för att peka en handler som registreras på path ”*.” (d.v.s. sökvägar) och pekar in dessa till ASP.NET. Detta möjliggör att anrop direkt till mappar skickas in till ASP.NET men övriga anrop (t. ex. bilder, javascript, css o.s.v.) lämnas orörda och hanteras som vanligt av IIS utan inblandning av ASP.NET.\r\n\r\nFöljande blog beskriver hur du gör:\r\n\r\nhttp://blogs.msdn.com/tmarq/archive/2010/04/01/asp-net-4-0-enables-routing-of-extensionless-urls-without-impacting-static-requests.aspx\r\n\r\nEssensen är att lägga till följande block i din web.config:\r\n\r\n```prettyprint lang-html\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n```\r\n\r\n\r\nSamt att skapa en egen route till din handler i Global.asax:\r\n\r\nSamt att skapa en egen route till din handler i Global.asax:\r\n\r\n```prettyprint lang-c-sharp\r\nRouteTable.Routes.Add(\"Table\",new Route(\"xml/{table}\",new ApiRouteHandler()));\r\n```\r\n\r\n\r\nOch din egen IRouteHandler som pekar på din IHttphandler:\r\n\r\nOch din egen IRouteHandler som pekar på din IHttphandler:\r\n\r\n```prettyprint lang-c-sharp\r\npublic class ApiRouteHandler :IRouteHandler\r\n{\r\n\t#region IRouteHandler Members\r\n\tpublic IHttpHandler GetHttpHandler(RequestContext requestContext)\r\n\t{\r\n\t var handler = newApiHttpHandler();\r\n\t return handler;\r\n\t}\r\n\t#endregion\r\n}\r\n```\r\n\r\n\r\nOch installera följande hotfix (kräver omstart):\r\n\r\nhttp://support.microsoft.com/kb/980368\r\n", + "html": "

När man skriver ett REST-API till en applikation vill man gärna stödja en syntax utan filändelser: t ex

http://yourdomain.com/xml/users

Tidigare fanns det massor av trix för IIS6 för att åstadkomma detta, de flesta byggde på 404-ompekning, ISAPI filter, egenskrivna HttpModules eller UrlRewriting. Alla dessa trix förstör dock informationen på vägen, framför allt HttpMethod som alltid blir GET trots att originalmetoden var POST, DELETE eller PUT.

Sedan IIS7 finns det fina lösningar för att hantera detta i web.config om man kör applikationen i s.k Integrated Mode, men kör man Classic Mode fungerar inte denna mappning utan att man pekar om alla anrop till .NET-motorn i IIS. Detta skapar skalbarhetsproblem för bilder och statiska filer som då börjar äta av App poolens resurser istället för att hanteras direkt av IIS.

Från och med .NET 3.5 SP1 finns det stöd för Routing som från början var en del av MVC, men som från och med .NET 4.0 finns tillgängligt för alla typer av ASP.NET- applikationer. Som en del av denna uppdatering kom också stöd för att peka en handler som registreras på path ”*.” (d.v.s. sökvägar) och pekar in dessa till ASP.NET. Detta möjliggör att anrop direkt till mappar skickas in till ASP.NET men övriga anrop (t. ex. bilder, javascript, css o.s.v.) lämnas orörda och hanteras som vanligt av IIS utan inblandning av ASP.NET.

Följande blog beskriver hur du gör:

http://blogs.msdn.com/tmarq/archive/2010/04/01/asp-net-4-0-enables-routing-of-extensionless-urls-without-impacting-static-requests.aspx

Essensen är att lägga till följande block i din web.config:



Samt att skapa en egen route till din handler i Global.asax:


Samt att skapa en egen route till din handler i Global.asax:



Och din egen IRouteHandler som pekar på din IHttphandler:


Och din egen IRouteHandler som pekar på din IHttphandler:



Och installera följande hotfix (kräver omstart):

http://support.microsoft.com/kb/980368

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Hur du skapar Routing till mappar i .NET 4 Classic mode", + "meta_description": "", + "author_id": 1087, + "created_at": 1274962380000, + "created_by": 1087, + "updated_at": 1274962380000, + "updated_by": 1087, + "published_at": 1274962380000, + "published_by": 1087 + }, + { + "id": 414, + "title": "Profile i Web Application Projects", + "slug": "profile-i-web-application-projects", + "markdown": "\r\n\r\nI ett pågående projekt där vi implementerar en custom membership provider stötte jag på ett problem som först verkade helt irrationellt men som sedan visade sig vara fullt logiskt och försvarbart (som vanligt). Uppgiften vid tillfället var att skapa ett par egna properties för ASP.NET Profile, som adress och flagga för nyhetsbrev. Så jag satte upp detta efter konstens alla regler men upptäckte direkt att något inte stämde.  Min förvirring visade sig bero på olikheter i de två projekttyperna Web Application Project och Web Site i Visual Studio - mer specifikt att en Web Site gör en dynamisk kompilering medan ett Web Application Project inte gör det.\r\n\r\nOm du jobbar med en Web Site så definieras egna egenskaper i profilen  i Web.config och Visual Studio skapar metoden GetProfile() i klassen Profile, vilken kommer att returnera ett ProfileCommon-objekt (nedärvt från ProfileBase) som innehåller alla dina nya properties. Det var detta jag försökte göra, men med ett Web Application Project!\r\n\r\nHur yttrade sig då mitt problem? Jo, Profile hade ingen GetProfile(). Detta kan också vara ett symptom på att du satt upp dina properties felaktigt för Web Site-lösningen ovan, men så var det inte i detta fallet.\r\n\r\n\r\n\r\nEn vanlig lösning i äldre versioner av Visual Studio (2005) verkar vara att leta upp ett plugin till Visual Studio som löser problemet åt dig. Men nog så enkelt, och dessutom snyggt och prydligt, är att skapa en proxyklass för dina properties och skippa hela definitionen i web.config. Dessutom har du i en egen klass möjligheten att lägga in annan logik för att hantera andra krav på din profil, vilket du saknar vid definition i web.config. Värt att nämna är att den här metoden fungerar utmärkt också om du har en Web Site men vill lägga logiken för Profile i ett separat klassbibliotek.\r\n\r\nDin klass kan t ex se ut så här:\r\n\r\n![Bild](http://tekniken.nu/uploads/634105483746223782-image001.png@01CAFCBE.2C2FDB00__image001.png)\r\n```prettyprint lang-c-sharp\r\npublic class MyCustomProfile : ProfileBase\r\n{\r\n\tpublic string Address\r\n\t{\r\n\t\tget\r\n\t\t{\r\n\t\t\treturn (string)GetPropertyValue(\"Address\");\r\n\t\t}\r\n\t\tset\r\n\r\n\t\t{\r\n\r\n\t\t\tSetPropertyValue(\"Address\", value);\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tpublic bool NewsletterSubscription\r\n\t{\r\n\t\tget\r\n\t\t{\r\n\t\t\treturn (bool)GetPropertyValue(\"NewsletterSubscription\");\r\n\t\t}\r\n\t\tset\r\n\t\t{\r\n\t\t\tSetPropertyValue(\"NewsletterSubscription\", value);\r\n\t\t}\r\n\t}\r\n\r\n\t/// \r\n\t/// Gets the profile of the current user\r\n\t/// \r\n\t/// \r\n\tpublic static MyCustomProfile GetProfile()\r\n\t{\r\n\t\treturn (MyCustomProfile)HttpContext.Current.Profile;\r\n\t}\r\n\r\n\t/// \r\n\t/// Gets the profile of a specific user\r\n\t/// \r\n\t/// User name of the profile to get\r\n\t/// \r\n\tpublic static MyCustomProfile GetProfile(string userName)\r\n\t{\r\n\t\treturn (MyCustomProfile)Create(userName);\r\n\t}\r\n}\r\n```\r\n\r\n\r\nSom du ser ovan har jag lagt till en property för Address som kommer att hålla adressinformation för profilen samt en NewsletterSubscription som är en enkel flagga för att hålla koll på om användaren vill ha nyhetsbrev eller inte. På samma vis hanterar du övrig information som din Profile ska hålla. Klassen har även två metoder:\r\n\r\n\r\nGetProfile() – returnerar den nuvarande användarens profil. Det som sker är att den gör en cast på HttpContext.Current.Profile till en MyCustomProfile och returnerar den.GetProfile(string userName) – returnerar en profil med ett specifikt användarnamn (userName). Den använder sig av basklassens (ProfileBase) metod Create() och castar resultatet (ProfileBase) till MyCustomProfile.\r\n\r\n\r\nDin proxyklass lägger du sedan till i web.config för att profilhanteringen i ASP.NET ska hitta den.\r\n\r\n```prettyprint lang-sql\r\n\r\n \r\n \r\n \r\n \r\n\r\n\r\n```\r\n\r\n\r\n\r\n\r\n\r\n\r\nI MyCustomProfile har vi nu tillgång till våra custom properties samt den vanliga Profile-funktionaliteten såsom Save().\r\n\r\n\r\nLänktips (på engelska):\r\nEn bra genomgång av Profile i .NET: http://odetocode.com/articles/440.aspxWeb Application Projects vs. Web sites: http://msdn.microsoft.com/en-us/library/aa730880%28VS.80%29.aspxUnderstanding .NET Dynamic Compilation: http://msdn.microsoft.com/en-us/library/ms366723.aspxExempel på proxyklass, mer beskrivet i detalj: http://leedumond.com/blog/asp-net-profiles-in-web-application-projects/\r\n\r\n", + "html": "

I ett pågående projekt där vi implementerar en custom membership provider stötte jag på ett problem som först verkade helt irrationellt men som sedan visade sig vara fullt logiskt och försvarbart (som vanligt). Uppgiften vid tillfället var att skapa ett par egna properties för ASP.NET Profile, som adress och flagga för nyhetsbrev. Så jag satte upp detta efter konstens alla regler men upptäckte direkt att något inte stämde.  Min förvirring visade sig bero på olikheter i de två projekttyperna Web Application Project och Web Site i Visual Studio - mer specifikt att en Web Site gör en dynamisk kompilering medan ett Web Application Project inte gör det.

Om du jobbar med en Web Site så definieras egna egenskaper i profilen  i Web.config och Visual Studio skapar metoden GetProfile() i klassen Profile, vilken kommer att returnera ett ProfileCommon-objekt (nedärvt från ProfileBase) som innehåller alla dina nya properties. Det var detta jag försökte göra, men med ett Web Application Project!

Hur yttrade sig då mitt problem? Jo, Profile hade ingen GetProfile(). Detta kan också vara ett symptom på att du satt upp dina properties felaktigt för Web Site-lösningen ovan, men så var det inte i detta fallet.

En vanlig lösning i äldre versioner av Visual Studio (2005) verkar vara att leta upp ett plugin till Visual Studio som löser problemet åt dig. Men nog så enkelt, och dessutom snyggt och prydligt, är att skapa en proxyklass för dina properties och skippa hela definitionen i web.config. Dessutom har du i en egen klass möjligheten att lägga in annan logik för att hantera andra krav på din profil, vilket du saknar vid definition i web.config. Värt att nämna är att den här metoden fungerar utmärkt också om du har en Web Site men vill lägga logiken för Profile i ett separat klassbibliotek.

Din klass kan t ex se ut så här:



Som du ser ovan har jag lagt till en property för Address som kommer att hålla adressinformation för profilen samt en NewsletterSubscription som är en enkel flagga för att hålla koll på om användaren vill ha nyhetsbrev eller inte. På samma vis hanterar du övrig information som din Profile ska hålla. Klassen har även två metoder:


  • GetProfile() – returnerar den nuvarande användarens profil. Det som sker är att den gör en cast på HttpContext.Current.Profile till en MyCustomProfile och returnerar den.
  • GetProfile(string userName) – returnerar en profil med ett specifikt användarnamn (userName). Den använder sig av basklassens (ProfileBase) metod Create() och castar resultatet (ProfileBase) till MyCustomProfile.


Din proxyklass lägger du sedan till i web.config för att profilhanteringen i ASP.NET ska hitta den.





I MyCustomProfile har vi nu tillgång till våra custom properties samt den vanliga Profile-funktionaliteten såsom Save().


Länktips (på engelska):


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Så använder man ASP.NET Profile i Web Application Projects", + "meta_description": "r manuellt.", + "author_id": 1093, + "created_at": 1274955720000, + "created_by": 1093, + "updated_at": 1274955720000, + "updated_by": 1093, + "published_at": 1274955720000, + "published_by": 1093 + }, + { + "id": 416, + "title": "Visual Studio Team Explorer 2010 finns här", + "slug": "visual-studio-team-explorer-2010-finns-har", + "markdown": "\r\n\r\nOm man vill komma åt Team Foundation Server från sin egen dator men inte är utvecklare finns det ett installationspaket som installerar en lightversion av Visual Studio och Team Explorer, Office-integrationsdelarna och .NET Framework 4.\r\n\r\n\r\n\r\n\r\n\r\nLadda ner här:\r\n\r\nhttp://www.microsoft.com/downloads/details.aspx?FamilyID=fe4f9904-0480-4c9d-a264-02fedd78ab38&displaylang=en\r\n\r\n![Bild](http://tekniken.nu/uploads/634106359688940281-image001.png@01CAFE45.D7927A60__image001.png)", + "html": "

Om man vill komma åt Team Foundation Server från sin egen dator men inte är utvecklare finns det ett installationspaket som installerar en lightversion av Visual Studio och Team Explorer, Office-integrationsdelarna och .NET Framework 4.

Ladda ner här:

http://www.microsoft.com/downloads/details.aspx?FamilyID=fe4f9904-0480-4c9d-a264-02fedd78ab38&displaylang=en

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Visual Studio Team Explorer 2010 finns här", + "meta_description": "", + "author_id": 1087, + "created_at": 1275039168000, + "created_by": 1087, + "updated_at": 1275039168000, + "updated_by": 1087, + "published_at": 1275039168000, + "published_by": 1087 + }, + { + "id": 417, + "title": "Bra Chrome-extensions för webbutvecklare samlade", + "slug": "bra-chrome-extensions-for-webbutvecklare-samlade", + "markdown": "\r\n\r\nChrome Extension Gallery har samlat ihop en massa bra extensions för webbutvecklare. Det finns ingen Firebug, men vad sägs om extensions som kan:\r\n\r\nVisa källkod för markerad textVisa CSS-egenskaper för ett markerat element som ett hover-lagerVisa/dölja bilderTesta siten i olika upplösningarTesta prestandaSkapa lorem ipsum-textPipett för att plocka färger\r\n\r\n...och mycket mer!\r\n\r\nAlla extensions hittar du på https://chrome.google.com/extensions/featured/web_dev.\r\n\r\n![Bild](http://tekniken.nu/uploads/634106461427610831-google-chrome.png)", + "html": "

Chrome Extension Gallery har samlat ihop en massa bra extensions för webbutvecklare. Det finns ingen Firebug, men vad sägs om extensions som kan:

  • Visa källkod för markerad text
  • Visa CSS-egenskaper för ett markerat element som ett hover-lager
  • Visa/dölja bilder
  • Testa siten i olika upplösningar
  • Testa prestanda
  • Skapa lorem ipsum-text
  • Pipett för att plocka färger

...och mycket mer!

Alla extensions hittar du på https://chrome.google.com/extensions/featured/web_dev.

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Bra Chrome-extensions för webbutvecklare samlade", + "meta_description": "", + "author_id": 6, + "created_at": 1275049342000, + "created_by": 6, + "updated_at": 1275049342000, + "updated_by": 6, + "published_at": 1275049342000, + "published_by": 6 + }, + { + "id": 418, + "title": "Att ta bort gömt workspace i TFS", + "slug": "att-ta-bort-gomt-workspace-i-tfs", + "markdown": "\r\n\r\nNär du försöker använda kommandot ”Map folder” i TFS till en mapp som tidigare varit mappad av en annan användare eller till en annan server så kan det vara svårt att hitta var du ska ta bort den gamla mappningen som då ligger cachad på din dator. Det kan ju till och med vara så att den gamla servern är avstängd och går inte att nå.\r\n\r\nI detta fall får du felmeddelandet:\r\n\r\nThe working folder is already in use by another workspace on this computer\r\n\r\nAtt ta bort mappen hjälper inte utan du måste ta bort mappningen med kommandot TF som du kan köra om du startar kommandoprompten med hjälp av ”Visual Studio Command Prompt” (finns genväg i startmenyn).\r\n\r\nFörst kan du kolla om du ser ditt workspace med kommandot:\r\n\r\nTF workspaces\r\n\r\nI så fall kan du ta bort dem med kommandot:\r\n\r\nTF workspaces /remove:*\r\n\r\nI vissa fall går det inte ändå och då kan du manuellt ta bort mappningen med kommandot:\r\n\r\nTF workspace /delete YOURCOMPUTERNAME;YOURDOMAIN\\YOURUSERNAME\r\n\r\n![Bild](http://tekniken.nu/uploads/634110116112959081-image001.png@01CB01B2.D451ACC0__image001.png)", + "html": "

När du försöker använda kommandot ”Map folder” i TFS till en mapp som tidigare varit mappad av en annan användare eller till en annan server så kan det vara svårt att hitta var du ska ta bort den gamla mappningen som då ligger cachad på din dator. Det kan ju till och med vara så att den gamla servern är avstängd och går inte att nå.

I detta fall får du felmeddelandet:

The working folder is already in use by another workspace on this computer

Att ta bort mappen hjälper inte utan du måste ta bort mappningen med kommandot TF som du kan köra om du startar kommandoprompten med hjälp av ”Visual Studio Command Prompt” (finns genväg i startmenyn).

Först kan du kolla om du ser ditt workspace med kommandot:

TF workspaces

I så fall kan du ta bort dem med kommandot:

TF workspaces /remove:*

I vissa fall går det inte ändå och då kan du manuellt ta bort mappningen med kommandot:

TF workspace /delete YOURCOMPUTERNAME;YOURDOMAIN\\YOURUSERNAME

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Att ta bort gömt workspace i TFS", + "meta_description": "", + "author_id": 1087, + "created_at": 1275414809000, + "created_by": 1087, + "updated_at": 1275414809000, + "updated_by": 1087, + "published_at": 1275414809000, + "published_by": 1087 + }, + { + "id": 419, + "title": "TFS 2010 & Scrum", + "slug": "tfs-2010--scrum", + "markdown": "\r\n\r\nNär man kör TFS 2010 och vill använda projektmetodiken Scrum så finns det en mycket bra template att använda.\r\n\r\n”Scrum for team system” är ett tillägg till TFS som finns att ta del av på http://scrumforteamsystem.com/\r\n\r\nNär man har installerat den så finns det helt plötsligt möjlighet att fullt ut använda sig av Scrum även i TFS 2010.\r\n\r\nMycket bra för oss som tycker att Scrum är en bra metod!\r\n\r\nFöljande statusar finns sedan att ta del av på ett krav (User story) och en uppgift (task), helt enligt Scrum!\r\n\r\n\r\n\r\nDenna mall gör även det som TFS missat att göra i sitt grundutförande d.v.s. att summera ihop alla fält. Konstigt men sant är att inte TFS själv kan räkna ut antal timmar som är kvar på alla uppgifter tillhörande ett krav och summera ihop dem någonstans.\r\n\r\nDet finns mycket mer att ta del av med denna mall så klart så mitt tips är att installera den om du gillar TFS och Scrum!\r\n\r\n![Bild](http://tekniken.nu/uploads/634110116118427831-image003.jpg@01CB01B2.C3F32750__image003.jpg)", + "html": "

När man kör TFS 2010 och vill använda projektmetodiken Scrum så finns det en mycket bra template att använda.

”Scrum for team system” är ett tillägg till TFS som finns att ta del av på http://scrumforteamsystem.com/

När man har installerat den så finns det helt plötsligt möjlighet att fullt ut använda sig av Scrum även i TFS 2010.

Mycket bra för oss som tycker att Scrum är en bra metod!

Följande statusar finns sedan att ta del av på ett krav (User story) och en uppgift (task), helt enligt Scrum!

Denna mall gör även det som TFS missat att göra i sitt grundutförande d.v.s. att summera ihop alla fält. Konstigt men sant är att inte TFS själv kan räkna ut antal timmar som är kvar på alla uppgifter tillhörande ett krav och summera ihop dem någonstans.

Det finns mycket mer att ta del av med denna mall så klart så mitt tips är att installera den om du gillar TFS och Scrum!

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "TFS 2010 & Scrum", + "meta_description": "", + "author_id": 1094, + "created_at": 1275414811000, + "created_by": 1094, + "updated_at": 1275414811000, + "updated_by": 1094, + "published_at": 1275414811000, + "published_by": 1094 + }, + { + "id": 421, + "title": "Använd flera parametrar i MatchEvaluator", + "slug": "anvand-flera-parametrar-i-matchevaluator", + "markdown": "\r\n\r\nFör att enkelt skicka in parametrar till MatchEvaluator så använder man bäst lambda-uttryck. Såhär gör man:\r\n\r\nNär man använder RegEx för att ersätta delar i en text så använder man ofta MatchEvaluator för att modifiera den nya strängen. Det kan handla om allt från enkla ändringar som t.ex stor bokstav i början av ett ord till mer komplexa ändringar som att byta ut markeringstext mot dynamiskt genererat innehåll eller att byta ut Youtube-länkar mot embedkod som visar en filmspelare.\r\n\r\nProblemet är att den vanliga delegate-typen för MatchEvaluator bara tar en enda parameter och för att komma runt denna begränsning måste man skapa en egen delegate, vilket känns omständigt. Med hjälp av lambda-uttryck så går det dock enkelt och man får en snygg och tydlig kod.\r\n\r\nSåhär ser själva anropet och metoden som hanterar logiken ut. I exemplet så är HTML ett stycke HTML-kod, imageRegex ett utryck som hämtar ut bildtaggar i HTML och pageData en EPiServer-sida som innehåller värden som jag behöver för att ersätta bildtaggen med en korrekt ny bildtagg.\r\n\r\n```prettyprint lang-c-sharp\r\nRegex.Replace(html, imageRegex, match => ImageReplacer(match, pageData));\r\n\r\nprotected string ImageReplacer(Match match,PageData pageData)\r\n\r\n{\r\n //TODO: Use pagedata to lookup new value for this match\r\n return match.Value;\r\n}\r\n```\r\n", + "html": "

För att enkelt skicka in parametrar till MatchEvaluator så använder man bäst lambda-uttryck. Såhär gör man:

När man använder RegEx för att ersätta delar i en text så använder man ofta MatchEvaluator för att modifiera den nya strängen. Det kan handla om allt från enkla ändringar som t.ex stor bokstav i början av ett ord till mer komplexa ändringar som att byta ut markeringstext mot dynamiskt genererat innehåll eller att byta ut Youtube-länkar mot embedkod som visar en filmspelare.

Problemet är att den vanliga delegate-typen för MatchEvaluator bara tar en enda parameter och för att komma runt denna begränsning måste man skapa en egen delegate, vilket känns omständigt. Med hjälp av lambda-uttryck så går det dock enkelt och man får en snygg och tydlig kod.

Såhär ser själva anropet och metoden som hanterar logiken ut. I exemplet så är HTML ett stycke HTML-kod, imageRegex ett utryck som hämtar ut bildtaggar i HTML och pageData en EPiServer-sida som innehåller värden som jag behöver för att ersätta bildtaggen med en korrekt ny bildtagg.

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Använd flera parametrar i MatchEvaluator", + "meta_description": "", + "author_id": 1089, + "created_at": 1275476439000, + "created_by": 1089, + "updated_at": 1275476439000, + "updated_by": 1089, + "published_at": 1275476439000, + "published_by": 1089 + }, + { + "id": 422, + "title": "TFS 2010 & Excel", + "slug": "tfs-2010--excel", + "markdown": "\r\n\r\nSom vi har skrivit om tidigare så finns det en Office-integration för TFS 2010. Vi har även tagit upp TFS 2010 & Scrum.\r\n\r\nDet jag vill fördjupa mig i lite grann från Office-integrationen och tipsa extra mycket om är Excel-integrationen. Excel-integrationen är en otroligt uppskattad integration. När man slutfört installationen, då har man tillgång till en ny flik i Excel som heter ”Team”.\r\n\r\nMed den fliken har man helt plötsligt tillgång till alla befintliga vyer som är skapade för ett projekt i TFS 2010.\r\n\r\nDet betyder att man som projektledare kan administrera ett projekt eller en sprint via Excel istället för i webbgränsnittet i TFS. Fördelen med detta är att man kan sköta allt i ett och samma Excel-ark, mycket smidigt! Där kan man göra nästan allt man kan göra i webbgränsnittet dvs. lägga till nya krav (user story) eller uppgifter (task) samt modifera alla värden för dessa typer.\r\n\r\nDet betyder att det är ett otroligt smidigt verktyg att använda dagligen både för projektledaren men även för produktägaren. Produktägaren kan på samma sätt arbeta med sin Product backlog (lista med krav) i ett och samma Excel-ark och på ett smidigt sätt förbereda sina sprintar. Vi använder det även som underlag för våra dagliga statusmöten (daily scrum).\r\n\r\nSå här kan Excel-integrationen mot TFS se ut\r\n\r\n\r\n\r\nSå tips, om du gillar TFS så är det nu dags att utforska Excel-integrationen. Jag använder den själv varje dag!\r\n\r\n![Bild](http://tekniken.nu/uploads/634110751330637181-office.PNG)", + "html": "

Som vi har skrivit om tidigare så finns det en Office-integration för TFS 2010. Vi har även tagit upp TFS 2010 & Scrum.

Det jag vill fördjupa mig i lite grann från Office-integrationen och tipsa extra mycket om är Excel-integrationen. Excel-integrationen är en otroligt uppskattad integration. När man slutfört installationen, då har man tillgång till en ny flik i Excel som heter ”Team”.

Med den fliken har man helt plötsligt tillgång till alla befintliga vyer som är skapade för ett projekt i TFS 2010.

Det betyder att man som projektledare kan administrera ett projekt eller en sprint via Excel istället för i webbgränsnittet i TFS. Fördelen med detta är att man kan sköta allt i ett och samma Excel-ark, mycket smidigt! Där kan man göra nästan allt man kan göra i webbgränsnittet dvs. lägga till nya krav (user story) eller uppgifter (task) samt modifera alla värden för dessa typer.

Det betyder att det är ett otroligt smidigt verktyg att använda dagligen både för projektledaren men även för produktägaren. Produktägaren kan på samma sätt arbeta med sin Product backlog (lista med krav) i ett och samma Excel-ark och på ett smidigt sätt förbereda sina sprintar. Vi använder det även som underlag för våra dagliga statusmöten (daily scrum).

Så här kan Excel-integrationen mot TFS se ut

Så tips, om du gillar TFS så är det nu dags att utforska Excel-integrationen. Jag använder den själv varje dag!

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "TFS 2010 & Excel", + "meta_description": "t.", + "author_id": 1094, + "created_at": 1275478332000, + "created_by": 1094, + "updated_at": 1275478332000, + "updated_by": 1094, + "published_at": 1275478332000, + "published_by": 1094 + }, + { + "id": 423, + "title": "Hantera buggar i TFS 2010 med Scrum-mallen", + "slug": "hantera-buggar-i-tfs-2010-med-scrum-mallen", + "markdown": "\r\n\r\nVi har tidigare nämnt den Scrum-mall som vi använder oss av i TFS 2010.\r\n\r\nDet har varit lite klurigt att veta hur man ska hantera och rapportera buggar när man använder sig av Scrum-mallen.\r\n\r\nProblemet har varit att få dessa rapporterade buggar i samma lista som de övriga kraven (user story) och uppgifter (tasks) i Visual Studio, webbgränsnittet och Excel. Man har tidigare fått välja mellan buggar och övrigt i listor.\r\n\r\nProblemet är att Scrum-mallen använder sig av begreppet ”implemented by” och använder man inte denna mall så används begreppet ”child” överallt.\r\n\r\nDet enda sättet att lyckas med att lösa problemet är att rapportera sina buggar på följande sätt:\r\n\r\nGå in på ”all links” för ett krav (user story) eller en uppgift (task)Klicka på ikonen längst till höger som heter ”add new linked work item…”Välj ”implemented by” och type ”bug”.\r\n\r\nSå här ska det sedan se ut för att det ska fungera: (buggen ska alltså vara rapporterad som ”implemented by bug” och inte som ”child”.)\r\n\r\n\r\n\r\nMan kan alltså inte gå via fliken “implemented by” och där skapa buggen. Det är den logiska placeringen eftersom “implemented by” är en ny flik som man får när man installerar Scrum-mallen. \r\n\r\nKonstigt men sant!\r\n\r\n![Bild](http://tekniken.nu/uploads/634110805965949681-image001.png)", + "html": "

Vi har tidigare nämnt den Scrum-mall som vi använder oss av i TFS 2010.

Det har varit lite klurigt att veta hur man ska hantera och rapportera buggar när man använder sig av Scrum-mallen.

Problemet har varit att få dessa rapporterade buggar i samma lista som de övriga kraven (user story) och uppgifter (tasks) i Visual Studio, webbgränsnittet och Excel. Man har tidigare fått välja mellan buggar och övrigt i listor.

Problemet är att Scrum-mallen använder sig av begreppet ”implemented by” och använder man inte denna mall så används begreppet ”child” överallt.

Det enda sättet att lyckas med att lösa problemet är att rapportera sina buggar på följande sätt:

  1. Gå in på ”all links” för ett krav (user story) eller en uppgift (task)
  2. Klicka på ikonen längst till höger som heter ”add new linked work item…”
  3. Välj ”implemented by” och type ”bug”.

Så här ska det sedan se ut för att det ska fungera: (buggen ska alltså vara rapporterad som ”implemented by bug” och inte som ”child”.)

Man kan alltså inte gå via fliken “implemented by” och där skapa buggen. Det är den logiska placeringen eftersom “implemented by” är en ny flik som man får när man installerar Scrum-mallen.

Konstigt men sant!

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Hantera buggar i TFS 2010 med Scrum-mallen", + "meta_description": "", + "author_id": 1094, + "created_at": 1275483796000, + "created_by": 1094, + "updated_at": 1275483796000, + "updated_by": 1094, + "published_at": 1275483796000, + "published_by": 1094 + }, + { + "id": 424, + "title": "Få .NET Framework 4 att fungera på en IIS6", + "slug": "fa-net-framework-4-att-fungera-pa-en-iis6", + "markdown": "\r\n\r\nOm du försöker installera en ASP.NET-applikation som kräver .NET Framework 4 på en Windows 2003 server med II6 kommer du först behöva tillåta det nya aspnet_isapi-filtret, annars får du bara 404.2-fel när du försöker anropa aspx/ashx sidor.\r\n\r\n\r\n\r\nDet är lite märkligt att detta inte hanteras av installationsprogrammet eller beskrivs i installationsanvisningarna men så kan det vara när man lever on the ”bleeding edge”.\r\n\r\nFöljande eminenta blog beskriver hur du gör för att tillåta nya ASP.NET motorn:\r\n\r\nhttp://johan.driessen.se/archive/2010/04/13/getting-an-asp.net-4-application-to-work-on-iis6.aspx\r\n\r\nObservera att om du kör en 64-bitars version ligger isapi filtret i ”Framework64” mappen.\r\n\r\n![Bild](http://tekniken.nu/uploads/634115177025659681-image_thumb.png)", + "html": "

Om du försöker installera en ASP.NET-applikation som kräver .NET Framework 4 på en Windows 2003 server med II6 kommer du först behöva tillåta det nya aspnet_isapi-filtret, annars får du bara 404.2-fel när du försöker anropa aspx/ashx sidor.

Det är lite märkligt att detta inte hanteras av installationsprogrammet eller beskrivs i installationsanvisningarna men så kan det vara när man lever on the ”bleeding edge”.

Följande eminenta blog beskriver hur du gör för att tillåta nya ASP.NET motorn:

http://johan.driessen.se/archive/2010/04/13/getting-an-asp.net-4-application-to-work-on-iis6.aspx

Observera att om du kör en 64-bitars version ligger isapi filtret i ”Framework64” mappen.

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Få .NET Framework 4 att fungera på en IIS6", + "meta_description": "", + "author_id": 1087, + "created_at": 1275920901000, + "created_by": 1087, + "updated_at": 1275920901000, + "updated_by": 1087, + "published_at": 1275920901000, + "published_by": 1087 + }, + { + "id": 425, + "title": "Vilka grupper har rätt att läsa en EPiServer-sida?", + "slug": "vilka-grupper-har-ratt-att-lasa-en-episerver-sida", + "markdown": "\r\n\r\nAtt få ut en lista över vilka grupper som har rätt att läsa en specifik sida i EPiServer låter lätt som en plätt, och det är det också!\r\n\r\nJag bloggar om detta eftersom jag själv fick leta innan jag hittade en lösning. Vad jag ville göra var att kontrollera om mina användargrupper hade rätt att läsa en viss sida i EPiServer.\r\n\r\nDen klass du använder för att göra rättighetskontroller mot en sida i EPiServer är AccessControlList och den hittar du under egenskapen ACL på PageData.\r\n\r\nMed CurrentPage.ACL.QueryAccess och CurrentPage.ACL.QueryDistinctAccess kan du se vilken typ av rättighet en användare har på en specifik sida. Alltså läs, skriv, skapa osv. Så för att t ex se om den nuvarande användaren har läsrättigheter på den nuvarande sidan använder du QueryDisctinctAccess:\r\n\r\n```prettyprint lang-c-sharp\r\nbool iHaveReadAccess = CurrentPage.ACL.QueryDistinctAccess(EpiServer.Security.AccessLevel.Read);\r\n```\r\n\r\n\r\nDet var ju bra, men jag behövde en lista på alla användargrupper med rättigheter på en viss sida.\r\n\r\nAccessControlList har även ToRawACEArray, en metod som returnerar en array av EPiServer.Security.RawACE. RawACE har i sin tur egenskapen Access för att ange en viss typ av rättighet (läs, skriv osv) och Name för att ange användarnamn eller rollnamn:\r\n\r\n\r\n\r\nDet var ju bra, men jag behövde en lista på alla användargrupper med rättigheter på en viss sida.\r\n\r\nAccessControlList har även ToRawACEArray, en metod som returnerar en array av EPiServer.Security.RawACE. RawACE har i sin tur egenskapen Access för att ange en viss typ av rättighet (läs, skriv osv) och Name för att ange användarnamn eller rollnamn:\r\n\r\n```prettyprint lang-c-sharp\r\nusing System;\r\nnamespace EPiServer.Security\r\n{\r\n [Serializable]\r\n public class RawACE\r\n {\r\n public AccessLevel Access;\r\n public int SID;\r\n public RawACE();\r\n public SecurityEntityType AutomaticEntryType { get; }\r\n public string Name { get; set; }\r\n }\r\n}\r\n```\r\n\r\n\r\nSå, att få ut en lista på alla användare och grupper som har en viss rättighet på din sida för är ganska enkelt:\r\n\r\n```prettyprint lang-c-sharp\r\nEPiServer.Security.RawACE[] rawAceArray = CurrentPage.ACL.ToRawACEArray();\r\n```\r\n\r\n\r\nLätt som en plätt!\r\n", + "html": "

Att få ut en lista över vilka grupper som har rätt att läsa en specifik sida i EPiServer låter lätt som en plätt, och det är det också!

Jag bloggar om detta eftersom jag själv fick leta innan jag hittade en lösning. Vad jag ville göra var att kontrollera om mina användargrupper hade rätt att läsa en viss sida i EPiServer.

Den klass du använder för att göra rättighetskontroller mot en sida i EPiServer är AccessControlList och den hittar du under egenskapen ACL på PageData.

Med CurrentPage.ACL.QueryAccess och CurrentPage.ACL.QueryDistinctAccess kan du se vilken typ av rättighet en användare har på en specifik sida. Alltså läs, skriv, skapa osv. Så för att t ex se om den nuvarande användaren har läsrättigheter på den nuvarande sidan använder du QueryDisctinctAccess:



Det var ju bra, men jag behövde en lista på alla användargrupper med rättigheter på en viss sida.


AccessControlList har även ToRawACEArray, en metod som returnerar en array av EPiServer.Security.RawACE. RawACE har i sin tur egenskapen Access för att ange en viss typ av rättighet (läs, skriv osv) och Name för att ange användarnamn eller rollnamn:


Det var ju bra, men jag behövde en lista på alla användargrupper med rättigheter på en viss sida.

AccessControlList har även ToRawACEArray, en metod som returnerar en array av EPiServer.Security.RawACE. RawACE har i sin tur egenskapen Access för att ange en viss typ av rättighet (läs, skriv osv) och Name för att ange användarnamn eller rollnamn:



Så, att få ut en lista på alla användare och grupper som har en viss rättighet på din sida för är ganska enkelt:



Lätt som en plätt!

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Vilka grupper har rätt att läsa en EPiServer-sida?", + "meta_description": "", + "author_id": 1093, + "created_at": 1275920903000, + "created_by": 1093, + "updated_at": 1275920903000, + "updated_by": 1093, + "published_at": 1275920903000, + "published_by": 1093 + }, + { + "id": 426, + "title": "Post-back i ASP.NET och jQuery BlockUI plugin", + "slug": "post-back-i-aspnet-och-jquery-blockui-plugin", + "markdown": "\r\n\r\nNyligen så använde jag pluginet BlockUI för jQuery i ett projekt för att dimma sidan och visa upp ett textmeddelande och en inloggningsruta. Det fungerade efter förväntan bortsett från att post-backen för inloggningen som låg i rutan slutade fungera. Konstigt, tänkte jag, och började gräva.\r\n\r\njQuery BlockUI är ett utmärkt litet plugin för att visa ett lager över sajten och en ruta med information ovanpå. Oftast använt som väntmeddelande under tunga sökningar men ibland också som felmeddelande eller som effekt när fokus bara ska läggas på en liten del av sajten. En fördel med pluginet är att det även fungerar i IE6!\r\n\r\n\r\n\r\nDu hittar blockUI här: http://jquery.malsup.com/block \r\n\r\nSå till mitt problem med post-backs i rutan\r\n\r\nPost-backs är som vi alla vet beroende av att ligga inuti en form-tagg satt till runat=server. Vid implementation hade jag placerat den div som visar mitt inloggningsformulär dolt längst ner inuti form-taggen. Men, det BlockUI gör när lagret ritas upp och rutan visas är att flytta den definierade diven och lägga den utanför form-taggen, vilket gör att post-backen aldrig initieras! Detta är förmodligen ett sätt att få layoutstöd i alla webbläsare men ändå ett problem när man jobbar med ASP.NET.\r\n\r\nMin lösning blev tillslut att i onclick för min knapp först dölja lagret (så att pluginet flyttar tillbaka div:en in i form-taggen) och sedan köra post-backen. Kanske inte världens snyggaste lösning men den fungerar!\r\n\r\nHär är min kod:\r\n\r\n![Bild](http://tekniken.nu/uploads/634124539361108581-image001.png@01CB0972.8E08BC50__image001.png)\r\n```prettyprint lang-javascript\r\n//enable postback event for the login button even though ui is blocked for locked content\r\n$(\"#MyButton\").click(function () {\r\n\tif (Page_IsValid){\r\n\t\t$.unblockUI({\r\n\t\t\tonUnblock: function () {\r\n\t\t\t\t<%# Page.ClientScript.GetPostBackEventReference(MyButton, null) %> \r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n});\r\n```\r\n\r\n\r\nNyckeln till det hela ligger alltså i att börja med att köra unblockUI och att först efter det trigga knappens post-back. Referensen till post-backen hämtas upp med Page.ClientScript.GetPostBackEventReference.\r\n", + "html": "

Nyligen så använde jag pluginet BlockUI för jQuery i ett projekt för att dimma sidan och visa upp ett textmeddelande och en inloggningsruta. Det fungerade efter förväntan bortsett från att post-backen för inloggningen som låg i rutan slutade fungera. Konstigt, tänkte jag, och började gräva.

jQuery BlockUI är ett utmärkt litet plugin för att visa ett lager över sajten och en ruta med information ovanpå. Oftast använt som väntmeddelande under tunga sökningar men ibland också som felmeddelande eller som effekt när fokus bara ska läggas på en liten del av sajten. En fördel med pluginet är att det även fungerar i IE6!

Du hittar blockUI här: http://jquery.malsup.com/block

Så till mitt problem med post-backs i rutan

Post-backs är som vi alla vet beroende av att ligga inuti en form-tagg satt till runat=server. Vid implementation hade jag placerat den div som visar mitt inloggningsformulär dolt längst ner inuti form-taggen. Men, det BlockUI gör när lagret ritas upp och rutan visas är att flytta den definierade diven och lägga den utanför form-taggen, vilket gör att post-backen aldrig initieras! Detta är förmodligen ett sätt att få layoutstöd i alla webbläsare men ändå ett problem när man jobbar med ASP.NET.

Min lösning blev tillslut att i onclick för min knapp först dölja lagret (så att pluginet flyttar tillbaka div:en in i form-taggen) och sedan köra post-backen. Kanske inte världens snyggaste lösning men den fungerar!

Här är min kod:



Nyckeln till det hela ligger alltså i att börja med att köra unblockUI och att först efter det trigga knappens post-back. Referensen till post-backen hämtas upp med Page.ClientScript.GetPostBackEventReference.

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Post-back i ASP.NET och jQuery BlockUI plugin", + "meta_description": "", + "author_id": 1093, + "created_at": 1276857134000, + "created_by": 1093, + "updated_at": 1276857134000, + "updated_by": 1093, + "published_at": 1276857134000, + "published_by": 1093 + }, + { + "id": 429, + "title": "Automatisk Windows-inloggning med FireFox och Chrome", + "slug": "automatisk-windows-inloggning-med-firefox-och-chrome", + "markdown": "\r\n\r\nMed Internet Explorer kan man se till att användare automatiskt loggas i på en webbplats med sin vanliga Windows-inloggning. Det är praktiskt för framför allt intranät och har antagligen gjort att FireFox inte är så vanlig som plattform för intranät. Men funktionen finns faktiskt i FireFox!\r\n\r\nGör såhär:\r\n\r\n\r\nSkriv about:config i adressfältetLeta upp inställningen network.automatic-ntlm-auth.trusted-urisDubbelklicka på inställningen och mata in adressen till webbplatsen som du vill bli automatinloggad på, t.ex.http://intranet:8080\r\n\r\n\r\nOm detta kräver att din dator är medlem i domänen som webbservern är medlem i vet jag inte, men det är ju oftast så i intranätfallet.\r\n\r\nI Chrome är det ännu enklare - Chrome använder nämligen Windows inställningar för webbsäkerhet, så den delar inställningar med Internet Explorer. Man lägger helt enkelt in sina webbplatser där autoinloggning ska ske i säkerhetszonen Local Intranet Zone. För den som undrar hur detta går till så finns en instruktion här.\r\n\r\n![Bild](http://tekniken.nu/uploads/634133212085060234-Extra Firefox.png)", + "html": "

Med Internet Explorer kan man se till att användare automatiskt loggas i på en webbplats med sin vanliga Windows-inloggning. Det är praktiskt för framför allt intranät och har antagligen gjort att FireFox inte är så vanlig som plattform för intranät. Men funktionen finns faktiskt i FireFox!

Gör såhär:

  1. Skriv about:config i adressfältet
  2. Leta upp inställningen network.automatic-ntlm-auth.trusted-uris
  3. Dubbelklicka på inställningen och mata in adressen till webbplatsen som du vill bli automatinloggad på, t.ex.http://intranet:8080

Om detta kräver att din dator är medlem i domänen som webbservern är medlem i vet jag inte, men det är ju oftast så i intranätfallet.

I Chrome är det ännu enklare - Chrome använder nämligen Windows inställningar för webbsäkerhet, så den delar inställningar med Internet Explorer. Man lägger helt enkelt in sina webbplatser där autoinloggning ska ske i säkerhetszonen Local Intranet Zone. För den som undrar hur detta går till så finns en instruktion här.

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Automatisk Windows-inloggning med FireFox och Chrome", + "meta_description": "", + "author_id": 6, + "created_at": 1277724407000, + "created_by": 6, + "updated_at": 1277724407000, + "updated_by": 6, + "published_at": 1277724407000, + "published_by": 6 + }, + { + "id": 431, + "title": "Razor - ny renderingsmotor för MVC", + "slug": "razor---ny-renderingsmotor-for-mvc", + "markdown": "\r\n\r\nMicrosoft har presenterat en ny renderingsmotor för MVC som fokuserar på att behålla c#/vb som språk men minimera allt onödigt taggande och fokuserar på så ren kod + html som möjligt.\r\n\r\n\r\n\r\nMVC gör det enklare att få ren html än med klassiska webforms men har alltid lidit av att det ser ut som spagetti med procenttecken och pilar överallt runt all serverkod. Det har förstås funnits alternativa renderingsmotorer som t.ex spark som inte alls bygger på vanlig kod utan mer liknar xlst med egna taggar som sköter logiken.\r\n\r\nDen nya motorn Razor försöker lösa problemet genom att bli av med all överfödig taggning men utan att introducera ett helt nytt språk eller nya taggar utan återanvända den kunskapen c# kodaren redan har. Genom att endast använda @ som starttag och låta kompilatorn själv lista ut resten så hålls taggningen till det minimala.\r\n\r\nHär ser du ett exempel på syntaxen för Razor. Den första bilden visar klassiska motorn och andra motsvarande exempel i Razor och redan med detta lilla exempel har man sparat 13 tecken (och det är ju dessutom ganska jobbiga tecken man sparat in)\r\n\r\nKlassisk kod\r\n\r\n\r\n\r\nRazor-kod\r\n\r\n\r\n\r\nRazor ska också gå använda i vanliga klassiska webform på samma sätt som du idag kan skriva c#. De största fördelarna med razor framför andra motorer är att det inte finns nån inlärningströskel att ta hänsyn till och att allt man är van från vanliga c# går att använda för att generera html. En annan stor fördel är att intellisense tydligen ska fungera även inne i htmlattribut, man behöver alltså inte längre gå till kodvyn eller flytta sina taggar utanför attributet för att få intellisense!\r\n\r\nRazor är inte släppt ännu ens i betaform men det är definitivt nåt att se fram emot.\r\n\r\nLäs mer på Scott Gus blogg http://weblogs.asp.net/scottgu/archive/2010/07/02/introducing-razor.aspx\r\n\r\n![Bild](http://tekniken.nu/uploads/634169487161317598-image001.png)", + "html": "

Microsoft har presenterat en ny renderingsmotor för MVC som fokuserar på att behålla c#/vb som språk men minimera allt onödigt taggande och fokuserar på så ren kod + html som möjligt.

MVC gör det enklare att få ren html än med klassiska webforms men har alltid lidit av att det ser ut som spagetti med procenttecken och pilar överallt runt all serverkod. Det har förstås funnits alternativa renderingsmotorer som t.ex spark som inte alls bygger på vanlig kod utan mer liknar xlst med egna taggar som sköter logiken.

Den nya motorn Razor försöker lösa problemet genom att bli av med all överfödig taggning men utan att introducera ett helt nytt språk eller nya taggar utan återanvända den kunskapen c# kodaren redan har. Genom att endast använda @ som starttag och låta kompilatorn själv lista ut resten så hålls taggningen till det minimala.

Här ser du ett exempel på syntaxen för Razor. Den första bilden visar klassiska motorn och andra motsvarande exempel i Razor och redan med detta lilla exempel har man sparat 13 tecken (och det är ju dessutom ganska jobbiga tecken man sparat in)

Klassisk kod

Razor-kod

Razor ska också gå använda i vanliga klassiska webform på samma sätt som du idag kan skriva c#. De största fördelarna med razor framför andra motorer är att det inte finns nån inlärningströskel att ta hänsyn till och att allt man är van från vanliga c# går att använda för att generera html. En annan stor fördel är att intellisense tydligen ska fungera även inne i htmlattribut, man behöver alltså inte längre gå till kodvyn eller flytta sina taggar utanför attributet för att få intellisense!

Razor är inte släppt ännu ens i betaform men det är definitivt nåt att se fram emot.

Läs mer på Scott Gus blogg http://weblogs.asp.net/scottgu/archive/2010/07/02/introducing-razor.aspx

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Razor - ny renderingsmotor för MVC", + "meta_description": "", + "author_id": 1089, + "created_at": 1281454800000, + "created_by": 1089, + "updated_at": 1281454800000, + "updated_by": 1089, + "published_at": 1281454800000, + "published_by": 1089 + }, + { + "id": 437, + "title": "Nu kan man återigen släppa iPhone appar skrivna i C#", + "slug": "nu-kan-man-aterigen-slappa-iphone-appar-skrivna-i-c", + "markdown": "\r\n\r\nEfteren lång tid av osäkerhet kring om program skapade med utvecklingsverktygen Monotouch och Monodevelop har nu Apple släppt en pressrelease där de ändrar sin tidigare hållning kring att alla applikationer som tillåts på App Store måste vara skrivna i språket Objective-C. Det nya kravet är nu att applikationerna inte får hämta och exekvera kod från internet. Syftet är självklart att komma åt Flash men tillåta utvecklingsverktyg som Monodevelop.\r\n\r\nNu är det alltså återigen möjligt att utveckla med mitt favoritspråk C# och få applikationerna publicerade på App Store.\r\n\r\nHär är utdrag från pressmeddelandet:\r\n\r\nStatement by Apple on App Store Review Guidelines\r\nThe App Store℠ has revolutionized the way mobile applications are developed and distributed. With over 250,000 apps and 6.5 billion downloads, the App Store has become the world's largest mobile application platform and App Store developers have earned over one billiondollars from the sales of their apps.\r\n\r\nWe are continually trying to make the App Store even better. We have listened to our developers and taken much of their feedback to heart. Based on their input, today we are making some important changes to our iOS Developer Program license in sections 3.3.1, 3.3.2 and 3.3.9 to relax some restrictions we put in place earlier this year.\r\n\r\nIn particular, we are relaxing all restrictions onthe development tools used to create iOS apps, as long as the resulting apps do not download any code. This should give developers the flexibility they want, while preserving the security we need.\r\n\r\nIn addition, for the first time we are publishing the App Store Review Guidelines to help developers understand how we review submitted apps. We hope it will make us more transparent and help our developers create even more successful apps for the App Store.\r\n\r\nThe App Store is perhaps the most important milestone in the history of mobile software. Working together with our developers, we will continue to surprise and delight our users with innovative mobile apps.\r\n\r\nKälla: Engadget.com\r\n", + "html": "

Efteren lång tid av osäkerhet kring om program skapade med utvecklingsverktygen Monotouch och Monodevelop har nu Apple släppt en pressrelease där de ändrar sin tidigare hållning kring att alla applikationer som tillåts på App Store måste vara skrivna i språket Objective-C. Det nya kravet är nu att applikationerna inte får hämta och exekvera kod från internet. Syftet är självklart att komma åt Flash men tillåta utvecklingsverktyg som Monodevelop.

Nu är det alltså återigen möjligt att utveckla med mitt favoritspråk C# och få applikationerna publicerade på App Store.

Här är utdrag från pressmeddelandet:

Statement by Apple on App Store Review Guidelines

The App Store℠ has revolutionized the way mobile applications are developed and distributed. With over 250,000 apps and 6.5 billion downloads, the App Store has become the world's largest mobile application platform and App Store developers have earned over one billiondollars from the sales of their apps.

We are continually trying to make the App Store even better. We have listened to our developers and taken much of their feedback to heart. Based on their input, today we are making some important changes to our iOS Developer Program license in sections 3.3.1, 3.3.2 and 3.3.9 to relax some restrictions we put in place earlier this year.

In particular, we are relaxing all restrictions onthe development tools used to create iOS apps, as long as the resulting apps do not download any code. This should give developers the flexibility they want, while preserving the security we need.

In addition, for the first time we are publishing the App Store Review Guidelines to help developers understand how we review submitted apps. We hope it will make us more transparent and help our developers create even more successful apps for the App Store.

The App Store is perhaps the most important milestone in the history of mobile software. Working together with our developers, we will continue to surprise and delight our users with innovative mobile apps.

Källa: Engadget.com

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Nu kan man återigen släppa iPhone appar skrivna i C#", + "meta_description": "", + "author_id": 1087, + "created_at": 1284317041000, + "created_by": 1087, + "updated_at": 1284317041000, + "updated_by": 1087, + "published_at": 1284317041000, + "published_by": 1087 + }, + { + "id": 440, + "title": "Idag släpps IE 9 Beta med HTML5-stöd. Men vad är HTML5?", + "slug": "idag-slapps-ie-9-beta-med-html5-stod-men-vad-ar-html5", + "markdown": "\r\n\r\nI dag släpps Internet Explorer 9 Beta som är den första Microsoft-webbläsaren som har inbyggt stöd för många av de tekniker som benämns HTML 5.\r\n\r\nHTML 5 är en teknik dold i mystik då den inte är en officiellt godkänd standard. Det är många som tolkar och gör tillägg till standarden eftersom det kommer dröja länge innan den är fastställd. Det betyder dock inte att man behöver vänta så länge innan man börjar använda de nyheter den innehåller. I dag släpps IE 9 beta som kommer ha stöd för mycket av det som kommer i HTML 5 och som det redan finns stöd för i Firefox och Chrome m.fl.\r\n\r\nTyvärr fungerar inte IE9 i Windows XP och det kommer troligtvis göra att många kommer fortsätta använda IE6 ett tag till. För dessa kan jag tipsa om Chrome Frame om man har IE6 eller Windows XP och ändå vill njuta av de nyheter som HTML 5 redan har att erbjuda. Alla nedanstående nyheter finns redan i Chrome och Firefox. För att se exakt vad som stöds av vilken version av olika browsers samt fler exempel på vad HTML 5 kan erbjuda finnd i denna interaktiva guide.\r\n## Varför krångla med HTML 5? Flash funkar ju?\r\nUtvecklingen av HTML-standarden är efterlängtad – det har hänt en hel del med datorerna sedan HTML kom i början på 90 talet. De flesta begränsningarna i HTML- standarden har med åren fyllts igen med hjälp av tredjeparts JavaScript-ramverk (Jquery, ExtJs, Dojo, osv) och pluginverktyg som Flash och Silverlight. Dock finns det många argument för varför det vore bättre att HTML-standarden i stället höll måttet för moderna datorer:\r\nPlattformsoberoende – Flash finns numera i Linux men det dröjde många år. På iPhone och iPad går det fortfarande inte att använda Flash vilket är en stor anledning till det förnyade intresset för HTML 5.Sökmotoroptimering. Att gömma text och applikationer i pluginer som Flash och Silverlight gör att informationen och verktygen inte blir sökbara från sökmotorerTillgänglighet – En knapp i flash är enkel att klicka på om man har en mus och ser knappen, men är man blind eller bara har tangentbordet inkopplat är det svårare. Många hjälpmedel för handikappade går helt bet på Flash-innehåll.Framtidssäkerhet – Vem kommer ha flash installerat om tio år – vem kan då se ditt verk?  Kommer ni ihåg RealPlayer?Bakåtkompatibilitet – Allt innehåll som finns i en HTML 5-baserad webbtjänst går att läsa med en äldre webbläsare.\r\n## Vad är nytt i HTML 5?\r\nEftersom HTML 5 är ett samlingsnamn för en hel del nya tekniker inom flera områden så går det inte att säga exakt vad som är nytt och vad som kommer från andra standarder. Det finns även vissa förslag till standarder som säkerligen kommer att ratas eller förbättras innan de blir standarder. Så är det till exempel med videostödet som ännu inte har nått en enighet kring vilket videoformat som ska stödas.\r\n\r\nDärför har jag valt ut de delar som jag tycker ger mest värde och som är så standardiserade att de redan finns tillgänliga i flera moderna webbläsare och därmed kan börja användas. Nyheterna är uppdelade i tre delar, de som rör HTML, de som rör JavaScript och de som rör CSS.\r\n\r\nAlla följande exempel kan även testas här.\r\n## HTMLDet mest omtalade är inbyggt ljud- och bildstöd. Dock råder fortfarande ingen enighet om vilket format som ska gälla. Ogg Vorbis har varit det påbjudna valet från W3C men de stora kommersiella spelarna (Apple och Microsoft) har valt att undvika detta format på grund av misstankar om att det kan innehålla delar av patenterad kod och man vill undvika eventuella patentstrider. MPEG LA meddelade nyligen (i augusti 2010) att den tidigare licensierade standarden H.264 kommer vara royaltyfri för online-streaming för all framtid. Detta har gjort att IE9 kommer ha inbyggt stöd för H.264 vilket även Chrome och Safari har. Förhoppningsvis följer även Firefox med på H.264 och då har vi till slut en standard för video på nätet utan plugins. Såhär enkelt är det att använda det inbyggda mediestödet:Fler semantiska taggar:

Title

Massor av nya formtaggar. T ex standardtext/hjälptext i sökrutor. Autofokus för att automatiskt sätta markören på det viktigaste fältet:Nya input-typer (range, color, number, email, tel osv).Inbyggda validerare (required och input-typer)Ny enklare DOCTYPE : \r\n## Javascript\r\nNyheterna i Javascript gör att webbläsaren blir en fullvärdigt alternativ till en traditionell applikation.\r\nHämta din geografiska position:8.      Notifiering i operativsystemet. Utmärkt för t ex chat, intranät, realtidsövervakning, varningar, epostnotifieringar etc:Detta öppnar följande notifiering på mitt skrivbord:Effektiv tvåvägsrealtidskommunikation mellan klient och server med hjälp av Sockets. Väldigt smidigt för onlinespel, realtidstjänster som aktiekurser, sociala funktioner som chat och forum,Möjlighet att spara strukturerad data på klientsidan utan cookies:Nya selektorer (som jQuery men inbyggt):Canvas och SVG-vektorgrafik:\r\n## CSSStöd för typsnitt:Stöd för automatisk avklippning av för långa texter med ...Samt tekniker som vi redan skrivit om tidigare:a) Webb 2.0-effekter som: avrundade hörn, gradienter, reflections, skuggor, etc.b) Transformationer och animationer (rotera, mjuka övergångar, ease-in, ease-out, osv)\r\nLadda ner IE9 Beta redan idag och bygg om all gammal flash-kod till HTML 5 så att även dina barnbarn kan köra dina applikationer och läsa dina bloggar när dom blir gamla. ;)\r\n\r\nKällor:\r\n\r\nhttp://slides.html5rocks.comhttp://news.cnet.com/8301-30685_3-20014864-264.htmlhttp://en.wikipedia.org/wiki/HTML5_video\r\n\r\n![Bild](http://tekniken.nu/uploads/634202253995292446-image001.png@01CB5529.36EFDAE0__image001.png)", + "html": "

I dag släpps Internet Explorer 9 Beta som är den första Microsoft-webbläsaren som har inbyggt stöd för många av de tekniker som benämns HTML 5.

HTML 5 är en teknik dold i mystik då den inte är en officiellt godkänd standard. Det är många som tolkar och gör tillägg till standarden eftersom det kommer dröja länge innan den är fastställd. Det betyder dock inte att man behöver vänta så länge innan man börjar använda de nyheter den innehåller. I dag släpps IE 9 beta som kommer ha stöd för mycket av det som kommer i HTML 5 och som det redan finns stöd för i Firefox och Chrome m.fl.

Tyvärr fungerar inte IE9 i Windows XP och det kommer troligtvis göra att många kommer fortsätta använda IE6 ett tag till. För dessa kan jag tipsa om Chrome Frame om man har IE6 eller Windows XP och ändå vill njuta av de nyheter som HTML 5 redan har att erbjuda. Alla nedanstående nyheter finns redan i Chrome och Firefox. För att se exakt vad som stöds av vilken version av olika browsers samt fler exempel på vad HTML 5 kan erbjuda finnd i denna interaktiva guide.

Varför krångla med HTML 5? Flash funkar ju?

Utvecklingen av HTML-standarden är efterlängtad – det har hänt en hel del med datorerna sedan HTML kom i början på 90 talet. De flesta begränsningarna i HTML- standarden har med åren fyllts igen med hjälp av tredjeparts JavaScript-ramverk (Jquery, ExtJs, Dojo, osv) och pluginverktyg som Flash och Silverlight. Dock finns det många argument för varför det vore bättre att HTML-standarden i stället höll måttet för moderna datorer:

  1. Plattformsoberoende – Flash finns numera i Linux men det dröjde många år. På iPhone och iPad går det fortfarande inte att använda Flash vilket är en stor anledning till det förnyade intresset för HTML 5.
  2. Sökmotoroptimering. Att gömma text och applikationer i pluginer som Flash och Silverlight gör att informationen och verktygen inte blir sökbara från sökmotorer
  3. Tillgänglighet – En knapp i flash är enkel att klicka på om man har en mus och ser knappen, men är man blind eller bara har tangentbordet inkopplat är det svårare. Många hjälpmedel för handikappade går helt bet på Flash-innehåll.
  4. Framtidssäkerhet – Vem kommer ha flash installerat om tio år – vem kan då se ditt verk?  Kommer ni ihåg RealPlayer?
  5. Bakåtkompatibilitet – Allt innehåll som finns i en HTML 5-baserad webbtjänst går att läsa med en äldre webbläsare.

Vad är nytt i HTML 5?

Eftersom HTML 5 är ett samlingsnamn för en hel del nya tekniker inom flera områden så går det inte att säga exakt vad som är nytt och vad som kommer från andra standarder. Det finns även vissa förslag till standarder som säkerligen kommer att ratas eller förbättras innan de blir standarder. Så är det till exempel med videostödet som ännu inte har nått en enighet kring vilket videoformat som ska stödas.

Därför har jag valt ut de delar som jag tycker ger mest värde och som är så standardiserade att de redan finns tillgänliga i flera moderna webbläsare och därmed kan börja användas. Nyheterna är uppdelade i tre delar, de som rör HTML, de som rör JavaScript och de som rör CSS.

Alla följande exempel kan även testas här.

HTML

  1. Det mest omtalade är inbyggt ljud- och bildstöd. Dock råder fortfarande ingen enighet om vilket format som ska gälla. Ogg Vorbis har varit det påbjudna valet från W3C men de stora kommersiella spelarna (Apple och Microsoft) har valt att undvika detta format på grund av misstankar om att det kan innehålla delar av patenterad kod och man vill undvika eventuella patentstrider. MPEG LA meddelade nyligen (i augusti 2010) att den tidigare licensierade standarden H.264 kommer vara royaltyfri för online-streaming för all framtid. Detta har gjort att IE9 kommer ha inbyggt stöd för H.264 vilket även Chrome och Safari har. Förhoppningsvis följer även Firefox med på H.264 och då har vi till slut en standard för video på nätet utan plugins. Såhär enkelt är det att använda det inbyggda mediestödet:
    <audio src=”sound.mp3 controls></audio>
    <video src=”movie.mp4” autoplay controls></video>
  2. Fler semantiska taggar:
    <section>
    <article>
    <header>
    <h1>Title</h1>
  3. Massor av nya formtaggar. T ex standardtext/hjälptext i sökrutor. Autofokus för att automatiskt sätta markören på det viktigaste fältet:
  4. Nya input-typer (range, color, number, email, tel osv).
  5. Inbyggda validerare (required och input-typer)
  6. Ny enklare DOCTYPE : <!DOCTYPE html>

Javascript

Nyheterna i Javascript gör att webbläsaren blir en fullvärdigt alternativ till en traditionell applikation.

  1. Hämta din geografiska position:8.      
  2. Notifiering i operativsystemet. Utmärkt för t ex chat, intranät, realtidsövervakning, varningar, epostnotifieringar etc:
    Detta öppnar följande notifiering på mitt skrivbord:
  3. Effektiv tvåvägsrealtidskommunikation mellan klient och server med hjälp av Sockets. Väldigt smidigt för onlinespel, realtidstjänster som aktiekurser, sociala funktioner som chat och forum,
  4. Möjlighet att spara strukturerad data på klientsidan utan cookies:
  5. Nya selektorer (som jQuery men inbyggt):
  6. Canvas och SVG-vektorgrafik:

CSS

  1. Stöd för typsnitt:
  2. Stöd för automatisk avklippning av för långa texter med ...
  3. Samt tekniker som vi redan skrivit om tidigare:
    a) Webb 2.0-effekter som: avrundade hörn, gradienter, reflections, skuggor, etc.
    b) Transformationer och animationer (rotera, mjuka övergångar, ease-in, ease-out, osv)

Ladda ner IE9 Beta redan idag och bygg om all gammal flash-kod till HTML 5 så att även dina barnbarn kan köra dina applikationer och läsa dina bloggar när dom blir gamla. ;)

Källor:

http://slides.html5rocks.com
http://news.cnet.com/8301-30685_3-20014864-264.html
http://en.wikipedia.org/wiki/HTML5_video

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Idag släpps IE 9 Beta med HTML5-stöd. Men vad är HTML5?", + "meta_description": "", + "author_id": 1087, + "created_at": 1284628597000, + "created_by": 1087, + "updated_at": 1284628597000, + "updated_by": 1087, + "published_at": 1284628597000, + "published_by": 1087 + }, + { + "id": 442, + "title": "Anpassa ASP.NET Web Forms för MVC 2", + "slug": "anpassa-aspnet-web-forms-for-mvc-2", + "markdown": "\r\n\r\nSom utvecklare undviker jag gärna att blanda olika tekniker för mycket i en applikation, detta är förmodligen ett försök att hålla dem hyfsat strömlinjeformade och enkla att överblicka. ”För mycket” är förstås ett troll i resonemanget och relativt förutsättningar såsom inblandade tekniker, problemställning och tillgänglig tid.\r\n\r\nDetta var ett dilemma vårt team ställdes inför ganska nyligen när vi skulle bygga om ett av presentationslagren på en sajt och det passade bra att välja ASP.NET MVC som plattform. Presentationslagret och övriga delar av sajten var gjort i ASP.NET Web Forms, det var alltså en ganska stor teknikskillnad. Nästa gång vi behöver göra förändringar i ramverk och övriga delar av sajten kommer vi sannolikt att vilja göra det i MVC också men det passar helt enkelt inte att göra det just nu.\r\n\r\nSå hur löser vi det här? \r\n\r\nSka vi skapa ett nytt MVC-projekt och lyfta in äldre delar eller göra det möjligt att köra MVC i vårt befintliga projekt?\r\n\r\nVi valde att lägga till MVC i vårt Web Forms-projekt, framförallt på grund av att dom äldre delarna är långt mer omfattande än det som ska byggas om.\r\n## Kombinera ASP.NET Web Forms och ASP.NET MVC 2 i samma projekt\r\nEgentligen är det få saker som skiljer ett Web Forms-projekt från ett MVC 2-projekt. Det som skiljer dem åt är främst referenser, folderstruktur och routes som används för navigering.\r\n\r\n1) Visual Studios projekt-GUID för MVC 2\r\n\r\nFör att Visual Studio ska förstå att ditt Web Forms-projekt även kommer att innehålla MVC 2 behöver du lägga till ett GUID i din projektfil (.csproj, .vbproj eller något annat beroende på ditt språk). Det gör du i.Tänk på att att inte ta bort tidigare nycklar härifrån utan enbart lägga till GUID för MVC 2: F85E285D-A4E0-4152-9332-AB1D724D3325.\r\n\r\n2) MVC-relaterade referenser\r\n\r\nLägg till System.Web.Routing, System.Web.Abstractions och System.Web.Mvc bland dina referenser.\r\n\r\nGör följandetillägg i web.config:\r\n\r\n![Bild](http://tekniken.nu/uploads/634205863568951138-Webforms vs MVC.jpg)\r\n```prettyprint lang-xml\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n\r\n\r\n\r\n```\r\n\r\n\r\n3) Routings\r\n\r\nLägg till routings i Application_Start (global.asax).\r\n\r\n```prettyprint lang-c-sharp\r\nroutes.IgnoreRoute(\"{resource}.axd/{*pathInfo}\");\r\nroutes.IgnoreRoute(\"{resource}.aspx/{*pathInfo}\");\r\nroutes.MapRoute(\"Default\", // Route name\r\n \"{controller}/{action}/{id}\", // URL with parameters\r\n new { controller = \"Home\", action = \"Index\", id = \"\" } // Parameter defaults\r\n );\r\n```\r\n\r\n\r\n4) Folderstruktur\r\n\r\n\r\nLägg till de mappar som skapas automatiskt när man väljer ett nytt MVC-projekt i Visual Studio, nämligen: Controllers, Views och Views/Shared. I Views lägger du till en web.config för att hantera undantagsinställningarna för Views. Också detta är samma web.config som skapas automatiskt för nya MVC-projekt.\r\n\r\n```prettyprint lang-xml\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n```\r\n\r\n\r\n5) Kompilering av Views\r\n\r\n\r\nViews kompileras enbart vid första request, alltså inte när man kompilerar hela projektet i Visual Studio. Det här kan vara en klar fördel eftersom det går snabbare att kompilera och köra igång debuggern när du utvecklar. Nackdelen är förstås att du inte märker de kodfel som smugit sig in i dina Views förrän du är mitt i dina tester lokalt eller när du redan Release-kompilerat och lagt ut i din testmiljö.\r\n\r\n\r\nNaturligtvis är det möjligt att kompilera även Views samtidigt som du kompilerar projektet i Visual Studio, men om det passar dig och ditt projekt är alltså upp till dig!\r\n\r\n\r\nDet som krävs för att kompilera Views direkt är ett par ändringar i projektfilen (förhoppningsvis .csproj). I projektfilen finns ett par element för ProjectGroup () och i den du vill ändra lägger du tilltrue.Varje ProjectGroup har egna villkor som används t ex för att ange om inställningarna gäller Debug- eller Releasekompilering. Så om du vill kan du alltså lägga till MvcBuildViews enbart för Release.\r\n\r\n\r\nDin projektfil kan t ex se ut såhär:\r\n\r\n```prettyprint lang-xml\r\n\r\n\t\r\n\t...\r\n\t\ttrue\r\n\t...\r\n\t\r\n\r\n```\r\n\r\n\r\nKör hårt!\r\n", + "html": "

Som utvecklare undviker jag gärna att blanda olika tekniker för mycket i en applikation, detta är förmodligen ett försök att hålla dem hyfsat strömlinjeformade och enkla att överblicka. ”För mycket” är förstås ett troll i resonemanget och relativt förutsättningar såsom inblandade tekniker, problemställning och tillgänglig tid.

Detta var ett dilemma vårt team ställdes inför ganska nyligen när vi skulle bygga om ett av presentationslagren på en sajt och det passade bra att välja ASP.NET MVC som plattform. Presentationslagret och övriga delar av sajten var gjort i ASP.NET Web Forms, det var alltså en ganska stor teknikskillnad. Nästa gång vi behöver göra förändringar i ramverk och övriga delar av sajten kommer vi sannolikt att vilja göra det i MVC också men det passar helt enkelt inte att göra det just nu.

Så hur löser vi det här?

Ska vi skapa ett nytt MVC-projekt och lyfta in äldre delar eller göra det möjligt att köra MVC i vårt befintliga projekt?

Vi valde att lägga till MVC i vårt Web Forms-projekt, framförallt på grund av att dom äldre delarna är långt mer omfattande än det som ska byggas om.

Kombinera ASP.NET Web Forms och ASP.NET MVC 2 i samma projekt

Egentligen är det få saker som skiljer ett Web Forms-projekt från ett MVC 2-projekt. Det som skiljer dem åt är främst referenser, folderstruktur och routes som används för navigering.

1) Visual Studios projekt-GUID för MVC 2

För att Visual Studio ska förstå att ditt Web Forms-projekt även kommer att innehålla MVC 2 behöver du lägga till ett GUID i din projektfil (.csproj, .vbproj eller något annat beroende på ditt språk). Det gör du i<ProjectTypeGuids></ProjectTypeGuids>.Tänk på att att inte ta bort tidigare nycklar härifrån utan enbart lägga till GUID för MVC 2: F85E285D-A4E0-4152-9332-AB1D724D3325.

2) MVC-relaterade referenser

Lägg till System.Web.Routing, System.Web.Abstractions och System.Web.Mvc bland dina referenser.

Gör följandetillägg i web.config:



3) Routings

Lägg till routings i Application_Start (global.asax).



4) Folderstruktur


Lägg till de mappar som skapas automatiskt när man väljer ett nytt MVC-projekt i Visual Studio, nämligen: Controllers, Views och Views/Shared. I Views lägger du till en web.config för att hantera undantagsinställningarna för Views. Också detta är samma web.config som skapas automatiskt för nya MVC-projekt.



5) Kompilering av Views


Views kompileras enbart vid första request, alltså inte när man kompilerar hela projektet i Visual Studio. Det här kan vara en klar fördel eftersom det går snabbare att kompilera och köra igång debuggern när du utvecklar. Nackdelen är förstås att du inte märker de kodfel som smugit sig in i dina Views förrän du är mitt i dina tester lokalt eller när du redan Release-kompilerat och lagt ut i din testmiljö.


Naturligtvis är det möjligt att kompilera även Views samtidigt som du kompilerar projektet i Visual Studio, men om det passar dig och ditt projekt är alltså upp till dig!


Det som krävs för att kompilera Views direkt är ett par ändringar i projektfilen (förhoppningsvis .csproj). I projektfilen finns ett par element för ProjectGroup (<ProjectGroup>) och i den du vill ändra lägger du till<MvcBuildViews>true</MvcBuildViews>.Varje ProjectGroup har egna villkor som används t ex för att ange om inställningarna gäller Debug- eller Releasekompilering. Så om du vill kan du alltså lägga till MvcBuildViews enbart för Release.


Din projektfil kan t ex se ut såhär:



Kör hårt!

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Anpassa ASP.NET Web Forms för MVC 2", + "meta_description": "det till!", + "author_id": 1093, + "created_at": 1284989556000, + "created_by": 1093, + "updated_at": 1284989556000, + "updated_by": 1093, + "published_at": 1284989556000, + "published_by": 1093 + }, + { + "id": 443, + "title": "TFS, Subversion och Scrum - våra migreringsefarenheter", + "slug": "tfs-subversion-och-scrum---vara-migreringsefarenheter", + "markdown": "\r\n\r\nI ett års tid har vi på Iteam haft en pågående migrering från Subversion SVN till Microsoft Team Foundation Server (TFS). På vägen har vi gjort en hel del viktiga lärdomar som kanske kan underlätta för andra som ska genomgå samma resa.\r\n\r\nStrategiska val installation och arkitektur:\r\nBörja med att installera TFS och sätt upp en LabCollection där ni testar er fram till vilken mall ni ska använda. Gör detta ordentligt och grundligt innan ni bestämmer er för det är väldigt komplicerat att byta i efterhand (läs mer om det nedan). Vi valde mellan följande mallar:a) Microsoft Scrum 1.0 - vi valde denna på grund av att den är tillräckligt enkel att komma igång med och har färdiga fungerande mallar som är enkla att förklara även för kunder.b) EMC Scrum For Team Systems 3.0 - vi utvärderade denna men den var för krånglig och krävde tjänster som krånglade samt att de bytte namnstandard mellan betaversion och skarp version vilket tvingade oss att uppgradera alla projektenc) Microsoft Agile Template - denna var för enkel då den byggde mycket på att spara viktig data i Excelfiler som inte är integrerade i TFS.Installera helst Application Tier på en virtuell maskin för att underlätta uppgraderingar då du enkelt kan ta en snap-shot inför uppdateringar eller större konfigureringsändringar etcSQL Servern kan vara samma som ni redan använder i utvecklingsmiljönReporting Services kan ligga på SQL servernSkapa externa DNS-namn till och se till att referera till dessa istället för de interna datornamnen eftersom länkar ofta kan bli interna annars:a) tfs.companyname.seb) reports.companyname.sec) sharepoint.companyname.seAnvänd tre olika service-konton för alla tjänster om ni har eller tänker dela upp instanserna mellan olika maskiner. Använd inte NETWORK SERVICE någonstans även om det finns bloggar som hävdar annorlunda.Skapa ett Team Projekt för varje kund och ha skapa grupper i AD för kundens personal och lägg denna gruppen i Contributors för projektet i TFS\r\n## Strategiska val vid migrering SVN till TFSVälj ett migreringsverktyg. Vi valde TimelyMigration SVN2TFS.Se till att ha minst 8GB minne på servern som ska köra migreringen.Installera ”Forward Compatibility Update for Team  Foundation Server 2010” då produkten officiellt inte stöder TFS 2010 (än). Den är dock fullt kompatibel med hjälp av Forward Compatibility Pack.Migrera SVN-koden först i testläge till LabCollection då det kommer strula en HEL del på vägen:a) I SVN kan man göra en branch av ett helt träd utan att det ”kostar” någonting men i TFS görs detta annorlunda och i migreringen kommer dessa gigantiska branches äta upp minnet på servern som du använder.b) Mappa därför alla branches både som ni har idag och som ni haft tidigare mot Labels. Detta är väldigt svårt att få rätt utan att köra en hel del Trial and Error.Så fort ett fel uppstår avstannar hela processen och eftersom migreringen tar väldigt lång tid så se till att planera ett antal veckor för att hitta och lösa alla problem.När ett fel har uppstått och du behöver ändra i konfigurationen (oftast lägga in en cloak eller label) så behöver du starta om processen från början. Även om det är praktiskt möjligt att fortsätta processen där den avstannade så är det inte att rekommendera då det oftast uppstår följdfel senare i migreringen som inte uppstår om du börjar om från början.Gör först en torrkörning för att få passera alla viktiga fel i en LabCollection.\r\n## Viktiga skillnader mellan TFS och SVNBranch och Tags är annorlunda än i Subversion. I SVN är en Branch bara en enkel kopia av trunken, en tag är också en kopia av trunken. I TFS är en branch en ”genväg” till trunken – dvs du kommer alltid behöva spara originaltrunken för att inte förlora historik! Nu är detta inget man behöver tänka på i vanliga fall eftersom det som händer när du tar DELETE i TFS så göms bara din nod, men om du någon gång skulle ta bort det teamprojekt där din kod någon gång har legat så försvinner all historik efter detta datum. Farligt!Då konceptet kring Branch är annorlunda i sitt upplägg i TFS går det mycket lättare att merga skillnader fram och tillbaka mellan branches eftersom hierarkin är inbyggd i länkarna. I Subversion får man manuellt komma ihåg var saker hör hemma och vilka revisioner man vill överföra men i TFS sker detta automatiskt vilket är kanon.I Subversion finns det en Repository Browser där man kan göra strukturella förändringar direkt i databasen utan att hämta alla ändringar till sin lokala hårddisk. I TFS måste alla förändringar göras på riktiga objekt, dvs du måste alltid hämta alla filer lokalt innan du tar bort dem eller flyttar på dem.Det går inte att byta namn på ett Team Project när det väl är valt. Om du ändå vill byta namn genom att skapa ett nytt projekt och flytta källkoden till så får du inte ta bort ditt gamla projekt utan att kod-historiken försvinner (se punkt 1).TFS är inbyggt i Visual Studio på ett annat sätt än TortoiseSVN och VisualSVN vilket är både en fördel och nackdel. Vissa verktyg från TortoiseSVN är bättre (Framför allt Diff verktyget). Den största fördelen med TFS för utvecklare är att man har möjlighet att koppla uppgifter/tasks/stories direkt till incheckningar vilket gör det lättare att rapportera sin status och för projektledare att få en överblick över nuvarande läge.Den inbyggda buildmotorn i TFS är grym. Den klarar av att plocka ut hela din lösning från källkoden, pröva att kompilera, köra alla tester och publicera resultatet till er testserver eller bygga MSI paket automatiskt. Med lite justeringar går den även att få att uppdatera assemblyinformation till senaste revisionsnumret från byggmotorn vilket är väldigt bra för felsökning av releaser etc.Blame/Praise heter AnnotationsNytt koncept finns för tillfälliga branches som heter Shelfsets vilket är smidigt att använda då man ska göra kortare tester som ska föras tillbaka till trunken eller om man ska justera saker i livemiljö utifrån en tidigare release och sedan föra tillbaka dessa ändringar till trunken.En viktig skillnad för oss som utvecklar i .NET är att hela TFS motorn är möjlig att styra med webservices. Man kan dessutom prenumerera på händelser via webservices för att i kod få reda på när builds är klara, incheckningar sker för att logga eller automatisera andra flöden.SVN är gratis och TFS kostar rätt mycket pengar med alla licenser och tid för uppsättning.Färdiga rapporter finns tillgängliga för Burndown charts, release history, quality, bugs, etc. Väldigt smidigt för att automatisera delar av rapporteringsbehovet i projekt men också möjlighet att specialskriva egna rapporter med hjälp av Report Builder och Business Intelligence studio i Visual Studio.\r\nNu vet jag att många av ovanstående delar är möjliga med öppna alternativ så som Cruisecontrol etc och i efterhand kan jag inte säga att det har varit enklare att få Team Foundation Server att fungera jämfört med att sätta sig in i Cruise Control etc men den tekniska plattformen och de möjliga vägarna att fortsätta integrera med andra system är väldigt attraktiva i Team Foundation Server.  Målet är ju i längden att ha en saftblandare som blinkar rött om någon har checkat in kod som inte kompilerar i byggservern – eller hur? ;)\r\n\r\nFörhoppningsvis har du som läser detta fått en tankeställare som får dig att förstå att ett migreringsprojekt är inget man fixar på en kväll utan som kräver både planering och kunskap. Om du kör fast på vägen och vill ha hjälp i migreringen från SVN så kan du kontakta mig på Iteam eller vår partner som har varit ovärdelig hjälp i migreringen - Osiris Data.\r\n\r\nHar du som läser andra erfarenheter, fördelar och nackdelar att dela med dig av är jag intresserad av att få kommentarer nedan!\r\n", + "html": "

I ett års tid har vi på Iteam haft en pågående migrering från Subversion SVN till Microsoft Team Foundation Server (TFS). På vägen har vi gjort en hel del viktiga lärdomar som kanske kan underlätta för andra som ska genomgå samma resa.

Strategiska val installation och arkitektur:

  1. Börja med att installera TFS och sätt upp en LabCollection där ni testar er fram till vilken mall ni ska använda. Gör detta ordentligt och grundligt innan ni bestämmer er för det är väldigt komplicerat att byta i efterhand (läs mer om det nedan). Vi valde mellan följande mallar:
    a) Microsoft Scrum 1.0 - vi valde denna på grund av att den är tillräckligt enkel att komma igång med och har färdiga fungerande mallar som är enkla att förklara även för kunder.
    b) EMC Scrum For Team Systems 3.0 - vi utvärderade denna men den var för krånglig och krävde tjänster som krånglade samt att de bytte namnstandard mellan betaversion och skarp version vilket tvingade oss att uppgradera alla projekten
    c) Microsoft Agile Template - denna var för enkel då den byggde mycket på att spara viktig data i Excelfiler som inte är integrerade i TFS.
  2. Installera helst Application Tier på en virtuell maskin för att underlätta uppgraderingar då du enkelt kan ta en snap-shot inför uppdateringar eller större konfigureringsändringar etc
  3. SQL Servern kan vara samma som ni redan använder i utvecklingsmiljön
  4. Reporting Services kan ligga på SQL servern
  5. Skapa externa DNS-namn till och se till att referera till dessa istället för de interna datornamnen eftersom länkar ofta kan bli interna annars:
    a) tfs.companyname.se
    b) reports.companyname.se
    c) sharepoint.companyname.se
  6. Använd tre olika service-konton för alla tjänster om ni har eller tänker dela upp instanserna mellan olika maskiner. Använd inte NETWORK SERVICE någonstans även om det finns bloggar som hävdar annorlunda.
  7. Skapa ett Team Projekt för varje kund och ha skapa grupper i AD för kundens personal och lägg denna gruppen i Contributors för projektet i TFS

Strategiska val vid migrering SVN till TFS

  1. Välj ett migreringsverktyg. Vi valde TimelyMigration SVN2TFS.
  2. Se till att ha minst 8GB minne på servern som ska köra migreringen.
  3. Installera ”Forward Compatibility Update for Team  Foundation Server 2010” då produkten officiellt inte stöder TFS 2010 (än). Den är dock fullt kompatibel med hjälp av Forward Compatibility Pack.
  4. Migrera SVN-koden först i testläge till LabCollection då det kommer strula en HEL del på vägen:
    a) I SVN kan man göra en branch av ett helt träd utan att det ”kostar” någonting men i TFS görs detta annorlunda och i migreringen kommer dessa gigantiska branches äta upp minnet på servern som du använder.
    b) Mappa därför alla branches både som ni har idag och som ni haft tidigare mot Labels. Detta är väldigt svårt att få rätt utan att köra en hel del Trial and Error.
  5. Så fort ett fel uppstår avstannar hela processen och eftersom migreringen tar väldigt lång tid så se till att planera ett antal veckor för att hitta och lösa alla problem.
  6. När ett fel har uppstått och du behöver ändra i konfigurationen (oftast lägga in en cloak eller label) så behöver du starta om processen från början. Även om det är praktiskt möjligt att fortsätta processen där den avstannade så är det inte att rekommendera då det oftast uppstår följdfel senare i migreringen som inte uppstår om du börjar om från början.
  7. Gör först en torrkörning för att få passera alla viktiga fel i en LabCollection.

Viktiga skillnader mellan TFS och SVN

  1. Branch och Tags är annorlunda än i Subversion. I SVN är en Branch bara en enkel kopia av trunken, en tag är också en kopia av trunken. I TFS är en branch en ”genväg” till trunken – dvs du kommer alltid behöva spara originaltrunken för att inte förlora historik! Nu är detta inget man behöver tänka på i vanliga fall eftersom det som händer när du tar DELETE i TFS så göms bara din nod, men om du någon gång skulle ta bort det teamprojekt där din kod någon gång har legat så försvinner all historik efter detta datum. Farligt!
  2. Då konceptet kring Branch är annorlunda i sitt upplägg i TFS går det mycket lättare att merga skillnader fram och tillbaka mellan branches eftersom hierarkin är inbyggd i länkarna. I Subversion får man manuellt komma ihåg var saker hör hemma och vilka revisioner man vill överföra men i TFS sker detta automatiskt vilket är kanon.
  3. I Subversion finns det en Repository Browser där man kan göra strukturella förändringar direkt i databasen utan att hämta alla ändringar till sin lokala hårddisk. I TFS måste alla förändringar göras på riktiga objekt, dvs du måste alltid hämta alla filer lokalt innan du tar bort dem eller flyttar på dem.
  4. Det går inte att byta namn på ett Team Project när det väl är valt. Om du ändå vill byta namn genom att skapa ett nytt projekt och flytta källkoden till så får du inte ta bort ditt gamla projekt utan att kod-historiken försvinner (se punkt 1).
  5. TFS är inbyggt i Visual Studio på ett annat sätt än TortoiseSVN och VisualSVN vilket är både en fördel och nackdel. Vissa verktyg från TortoiseSVN är bättre (Framför allt Diff verktyget). Den största fördelen med TFS för utvecklare är att man har möjlighet att koppla uppgifter/tasks/stories direkt till incheckningar vilket gör det lättare att rapportera sin status och för projektledare att få en överblick över nuvarande läge.
  6. Den inbyggda buildmotorn i TFS är grym. Den klarar av att plocka ut hela din lösning från källkoden, pröva att kompilera, köra alla tester och publicera resultatet till er testserver eller bygga MSI paket automatiskt. Med lite justeringar går den även att få att uppdatera assemblyinformation till senaste revisionsnumret från byggmotorn vilket är väldigt bra för felsökning av releaser etc.
  7. Blame/Praise heter Annotations
  8. Nytt koncept finns för tillfälliga branches som heter Shelfsets vilket är smidigt att använda då man ska göra kortare tester som ska föras tillbaka till trunken eller om man ska justera saker i livemiljö utifrån en tidigare release och sedan föra tillbaka dessa ändringar till trunken.
  9. En viktig skillnad för oss som utvecklar i .NET är att hela TFS motorn är möjlig att styra med webservices. Man kan dessutom prenumerera på händelser via webservices för att i kod få reda på när builds är klara, incheckningar sker för att logga eller automatisera andra flöden.
  10. SVN är gratis och TFS kostar rätt mycket pengar med alla licenser och tid för uppsättning.
  11. Färdiga rapporter finns tillgängliga för Burndown charts, release history, quality, bugs, etc. Väldigt smidigt för att automatisera delar av rapporteringsbehovet i projekt men också möjlighet att specialskriva egna rapporter med hjälp av Report Builder och Business Intelligence studio i Visual Studio.

Nu vet jag att många av ovanstående delar är möjliga med öppna alternativ så som Cruisecontrol etc och i efterhand kan jag inte säga att det har varit enklare att få Team Foundation Server att fungera jämfört med att sätta sig in i Cruise Control etc men den tekniska plattformen och de möjliga vägarna att fortsätta integrera med andra system är väldigt attraktiva i Team Foundation Server.  Målet är ju i längden att ha en saftblandare som blinkar rött om någon har checkat in kod som inte kompilerar i byggservern – eller hur? ;)

Förhoppningsvis har du som läser detta fått en tankeställare som får dig att förstå att ett migreringsprojekt är inget man fixar på en kväll utan som kräver både planering och kunskap. Om du kör fast på vägen och vill ha hjälp i migreringen från SVN så kan du kontakta mig på Iteam eller vår partner som har varit ovärdelig hjälp i migreringen - Osiris Data.

Har du som läser andra erfarenheter, fördelar och nackdelar att dela med dig av är jag intresserad av att få kommentarer nedan!

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "TFS, Subversion och Scrum - våra migreringsefarenheter", + "meta_description": "", + "author_id": 1087, + "created_at": 1285086069000, + "created_by": 1087, + "updated_at": 1285086069000, + "updated_by": 1087, + "published_at": 1285086069000, + "published_by": 1087 + }, + { + "id": 445, + "title": "Reference Paths i byggdefinitioner för Visual Studio Team Foundation Server 2010", + "slug": "reference-paths-i-byggdefinitioner-for-visual-studio-team-foundation-server-2010", + "markdown": "\r\n\r\nAtt lägga till en Reference Path i en Build Definition är superenkelt, bara man vet hur man gör!\r\n\r\n\r\n\r\nVälj ”Edit Build Definition” om du ska lägga till det på en befintlig Build Definition (annars får du upp samma dialog när du skapar en ny). Under fliken ”Process” lägger du sedan till din reference path på MS Build Arguments enligt nedan (där sökväg är just en sökväg till den folder du vill lägga till som Reference Path):\r\n\r\n/p:\"ReferencePath=\"\r\n\r\n\r\n", + "html": "

Att lägga till en Reference Path i en Build Definition är superenkelt, bara man vet hur man gör!

Välj ”Edit Build Definition” om du ska lägga till det på en befintlig Build Definition (annars får du upp samma dialog när du skapar en ny). Under fliken ”Process” lägger du sedan till din reference path på MS Build Arguments enligt nedan (där sökväg är just en sökväg till den folder du vill lägga till som Reference Path):

/p:\"ReferencePath=<sökväg1;sökväg2;sökväg3>\"

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Reference Paths i byggdefinitioner för Visual Studio Team Foundation Server 2010", + "meta_description": "", + "author_id": 1093, + "created_at": 1285680069000, + "created_by": 1093, + "updated_at": 1285680069000, + "updated_by": 1093, + "published_at": 1285680069000, + "published_by": 1093 + }, + { + "id": 449, + "title": "Placeholder är det bästa stället hjälptexter för textfält i HTML 5", + "slug": "placeholder-ar-det-basta-stallet-hjalptexter-for-textfalt-i-html-5", + "markdown": "\r\n\r\nI HTML 5 finns det som vi tidigare har summerat många nya tillägg till HTML-standarden. Ett väldigt bra och smart tillägg är attributet placeholder som ger användaren en liten hjälptext som automatiskt försvinner när användaren ställer markören på inmatningsfältet. Detta har funnits länge i gränssnitten på webbplatser men alltid krävt Javascript. Även ett tag framöver behövs det javascript för att stödja äldre webbläsare men börja redan nu att lägga texten i attributet placeholder på följande sätt:\r\n\r\n```prettyprint lang-html\r\n
\r\n\t\r\n\t\r\n
\r\n```\r\n\r\n\r\nGer följande resultat i IE9, Chrome och Safari m.fl.:\r\n\r\n\r\n\r\nOch med följande fix så får du samma resultat med jQuery:\r\n\r\n\r\n\r\n\r\nOch med följande fix så får du samma resultat med jQuery:\r\n\r\n![Bild](http://tekniken.nu/uploads/634221253183756334-image001.png@01CB6646.AC012090__image001.png)\r\n```prettyprint lang-javascript\r\n$('[placeholder]').focus(function() {\r\n var input = $(this);\r\n if (input.val() == input.attr('placeholder')) {\r\n input.val('');\r\n input.removeClass('placeholder');\r\n }\r\n}).blur(function() {\r\n var input = $(this);\r\n if (input.val() == '') {\r\n input.addClass('placeholder');\r\n input.val(input.attr('placeholder'));\r\n }\r\n}).blur();\r\n```\r\n\r\n\r\nLäs mer om styling av placeholdern osv här:\r\n\r\nhttp://www.hagenburger.net/BLOG/HTML5-Input-Placeholder-Fix-With-jQuery.html\r\n\r\nLäs mer om styling av placeholdern o.s.v. här:http://www.hagenburger.net/BLOG/HTML5-Input-Placeholder-Fix-With-jQuery.html\r\n", + "html": "

I HTML 5 finns det som vi tidigare har summerat många nya tillägg till HTML-standarden. Ett väldigt bra och smart tillägg är attributet placeholder som ger användaren en liten hjälptext som automatiskt försvinner när användaren ställer markören på inmatningsfältet. Detta har funnits länge i gränssnitten på webbplatser men alltid krävt Javascript. Även ett tag framöver behövs det javascript för att stödja äldre webbläsare men börja redan nu att lägga texten i attributet placeholder på följande sätt:



Ger följande resultat i IE9, Chrome och Safari m.fl.:



Och med följande fix så får du samma resultat med jQuery:


Och med följande fix så får du samma resultat med jQuery:



Läs mer om styling av placeholdern osv här:


http://www.hagenburger.net/BLOG/HTML5-Input-Placeholder-Fix-With-jQuery.html


Läs mer om styling av placeholdern o.s.v. här:
http://www.hagenburger.net/BLOG/HTML5-Input-Placeholder-Fix-With-jQuery.html

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Placeholder är det bästa stället för hjälptexter för textfält i HTML 5", + "meta_description": "", + "author_id": 1087, + "created_at": 1286528517000, + "created_by": 1087, + "updated_at": 1286528517000, + "updated_by": 1087, + "published_at": 1286528517000, + "published_by": 1087 + }, + { + "id": 453, + "title": "Använd Excel 2007s databas-provider på dator med Office 2010", + "slug": "anvand-excel-2007s-databas-provider-pa-dator-med-office-2010", + "markdown": "\r\nOm man byggt en applikation som använder en OLE DB-anslutning till Excel, t.ex. för att läsa eller skapa en excelfil med hjälp av databasklasser, så ansluter den i regel till en provider för en specifik version av Excel. I mitt fall hade jag byggt en som använde Excel 2007, och efter uppgradering till Office 2010 blev testning av funktionen lokalt lite jobbig:\r\n\r\n”The ’Microsoft.ACE.OLEDB.12.0 provider is not registered on the local machine”\r\n\r\nSom tur är finns själva databaskopplingen för Excel 2007:\r\n\r\nhttp://www.microsoft.com/downloads/en/details.aspx?familyid=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=en\r\n\r\nGlöm inte att ställa om applikationspoolen till att köra 32-bitarsapplikationer (oavsett om du använder den här länken eller har Excel 2007 installerat) eftersom Microsoft tyvärr inte har orkat skriva en 64-bitarsversion av den här providern...\r\n![Bild](http://tekniken.nu/uploads/634236165947418134-recover_excel_logo.png)", + "html": "

Om man byggt en applikation som använder en OLE DB-anslutning till Excel, t.ex. för att läsa eller skapa en excelfil med hjälp av databasklasser, så ansluter den i regel till en provider för en specifik version av Excel. I mitt fall hade jag byggt en som använde Excel 2007, och efter uppgradering till Office 2010 blev testning av funktionen lokalt lite jobbig:

”The ’Microsoft.ACE.OLEDB.12.0 provider is not registered on the local machine”

Som tur är finns själva databaskopplingen för Excel 2007:

http://www.microsoft.com/downloads/en/details.aspx?familyid=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=en

Glöm inte att ställa om applikationspoolen till att köra 32-bitarsapplikationer (oavsett om du använder den här länken eller har Excel 2007 installerat) eftersom Microsoft tyvärr inte har orkat skriva en 64-bitarsversion av den här providern...", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Använd Excel 2007s databas-provider på dator med Office 2010", + "meta_description": "", + "author_id": 6, + "created_at": 1288019793000, + "created_by": 6, + "updated_at": 1288019793000, + "updated_by": 6, + "published_at": 1288019793000, + "published_by": 6 + }, + { + "id": 455, + "title": "Episerver Relate+ installerar en senare Episerver.Framework vilket skapar konflikter", + "slug": "episerver-relate-installerar-en-senare-episerverframework-vilket-skapar-konflikter", + "markdown": "\r\n\r\nHär är ett tips på orsaken till att du börjat få konflikter gällande olika versioner av Episerver Framework med felmeddelanden som:\r\n\r\n Could not load file or assembly 'EPiServer.Framework, Version=6.1.79.0\r\n\r\nDet kan bero på att någon i ditt team har installerat Episerver Relate+ på sin dator och att EPiServers installationsprogram därefter inkluderar den senaste versionen av Episerver.Framework i nya projekt även om inte Relate+ används vilket innebär att antingen behöver alla i teamet installera Relate+ eller den inkluderade installationsfilen Episerver.Framework.6.1.msi som finns i det installationspaketet.\r\n\r\nInstallationspaketet för Relate+ finns på Episerver World.\r\n", + "html": "

Här är ett tips på orsaken till att du börjat få konflikter gällande olika versioner av Episerver Framework med felmeddelanden som:

 Could not load file or assembly 'EPiServer.Framework, Version=6.1.79.0

Det kan bero på att någon i ditt team har installerat Episerver Relate+ på sin dator och att EPiServers installationsprogram därefter inkluderar den senaste versionen av Episerver.Framework i nya projekt även om inte Relate+ används vilket innebär att antingen behöver alla i teamet installera Relate+ eller den inkluderade installationsfilen Episerver.Framework.6.1.msi som finns i det installationspaketet.

Installationspaketet för Relate+ finns på Episerver World.

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Episerver Relate+ installerar version 6.1.79.0 av Episerver.Framework", + "meta_description": "", + "author_id": 1087, + "created_at": 1290007860000, + "created_by": 1087, + "updated_at": 1290007860000, + "updated_by": 1087, + "published_at": 1290007860000, + "published_by": 1087 + }, + { + "id": 456, + "title": "Skapa en snygg karta i din blogg med Bing Maps", + "slug": "skapa-en-snygg-karta-i-din-blogg-med-bing-maps", + "markdown": "\r\n\r\nNumera har Bing ett Javascript API som väldigt mycket påminner om Google Maps. Jag tycker att kartorna på Bing är snyggare än Google Maps och de växlar automatiskt mellan visningslägen på ett sätt som gör att man förstår vad som händer utan att ha massor av reglage. Däremot är de flesta exemplen ganska fula och innehåller för mycket extrafunktioner som inte behövs, dessutom är alla exempel med amerikanska exempel vilket gör det svårt att se hur det kan se ut i Stockholm.\r\n\r\nLänk till dokumentationen: http://msdn.microsoft.com/en-us/library/gg427610.aspx\r\n\r\nApi key skapar du så här: http://msdn.microsoft.com/en-us/library/ff428642.aspx\r\n\r\nTyvärr är dokumentationen väldigt svårnavigerad vilket gör det svårt att hitta bra exempel, därför kommer här ett litet exempel för att komma igång. Exemplet sätter ut en kartnål centrerad på en gata i Stockholm med lagom stor zoomnivå och gömmer så mycket verktygsfält och logotyper som möjligt.\r\n\r\nMen, när man kommit över dessa hinder blir resultatet väldigt fint tycker jag.\r\n\r\n function GetMap() { var map = new Microsoft.Maps.Map(document.getElementById(\"mapDiv\"), { showDashboard:false, showScalebar : false, showLogo:false, credentials: \"yourapikey\" }); var center =new Microsoft.Maps.Location(59.3404564801125, 18.049845556217); var pin = new Microsoft.Maps.Pushpin(center, { text:'1' }); map.entities.push(pin); map.setView({ center: center, zoom: 15 }); } $(this).ready(function(){ GetMap(); }); \r\n![Bild](http://tekniken.nu/uploads/634268924305679710-image001.png@01CB90FA.FEC5C9F0__image001.png)\r\n\r\n\r\n\r\n```prettyprint lang-javascript\r\n
\r\n\r\n \r\n\r\n \r\n```\r\n", + "html": "

Numera har Bing ett Javascript API som väldigt mycket påminner om Google Maps. Jag tycker att kartorna på Bing är snyggare än Google Maps och de växlar automatiskt mellan visningslägen på ett sätt som gör att man förstår vad som händer utan att ha massor av reglage. Däremot är de flesta exemplen ganska fula och innehåller för mycket extrafunktioner som inte behövs, dessutom är alla exempel med amerikanska exempel vilket gör det svårt att se hur det kan se ut i Stockholm.

Länk till dokumentationen: http://msdn.microsoft.com/en-us/library/gg427610.aspx

Api key skapar du så här: http://msdn.microsoft.com/en-us/library/ff428642.aspx

Tyvärr är dokumentationen väldigt svårnavigerad vilket gör det svårt att hitta bra exempel, därför kommer här ett litet exempel för att komma igång. Exemplet sätter ut en kartnål centrerad på en gata i Stockholm med lagom stor zoomnivå och gömmer så mycket verktygsfält och logotyper som möjligt.

Men, när man kommit över dessa hinder blir resultatet väldigt fint tycker jag.





", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Skapa en snygg karta i din blogg med Bing Maps", + "meta_description": "", + "author_id": 1087, + "created_at": 1291295629000, + "created_by": 1087, + "updated_at": 1291295629000, + "updated_by": 1087, + "published_at": 1291295629000, + "published_by": 1087 + }, + { + "id": 458, + "title": "Inställningar för TinyMCE i EPiServer 6", + "slug": "installningar-for-tinymce-i-episerver-6", + "markdown": "\r\n\r\nEPiServer använder sig av en HTML-editor från Tiny MCE för att redigera html-egenskaper och med TinyMCE finns det stora möjligheter att ändra vilka val och alternativ användaren ska få.\r\n\r\nGenom att använda EPiServers admin-gränssnitt kan man styra exakt vilka knappar och boxar som ska visas, både globalt och för varje sidegenskap. Men det går naturligtvis att göra ännu mer! Faktum är att du har tillgång till alla init-inställningar för TinyMCE även när du använder den i EPiServer CMS.\r\n## Att ändra init-inställningarna\r\nI normala fall skulle du tilldela TinyMCE sina inställningar med javascriptmetoden tinyMCE.init().\r\n\r\n![Bild](http://tekniken.nu/uploads/634275064046808370-logo_tinymce_2.gif)\r\n```prettyprint lang-javascript\r\ntinyMCE.init({\r\n paste_auto_cleanup_ on_paste : true,\r\n theme_advanced_styles : \"\"Tabellbeskrivning=table-description\"\",\r\n theme_advanced_resizing : true\r\n});\r\n```\r\n\r\n\r\nFör att göra samma sak i EPiServer CMS 6 skapar du en klass med valfritt namn och tilldelar den attributet TinyMCEPluginNonVisual. Med TinyMCEPluginNonVisual kan du sätta ett antal properties för att konfigurera TinyMCE.\r\n\r\n```prettyprint lang-c-sharp\r\n[TinyMCEPluginNonVisual( AlwaysEnabled = true,\r\n PlugInName = \"TinyMCE editor settings\",\r\n DisplayName = \"Init options\",\r\n Description = \"Init options for the HTML editor\",\r\n EditorInitConfigurationOptions = @\"{\r\n paste_auto_cleanup_on_paste : true,\r\n theme_advanced_styles : \"\"Tabellbeskrivning=table-description\"\",\r\n theme_advanced_resizing : true }\")] \r\n\r\n public class TinyMCESettings\r\n {\r\n\r\n }\r\n```\r\n\r\n\r\nI exemplet ovan har jag bland annat lagt till en cssklass som dyker upp i listan ”Stilar” i editorn och som användaren kan använda vid redigering av en text. TinyMCE erbjuder dock fler inställningar än de jag användar i exemplet ovan, här är en komplett lista: \r\n\r\nhttp://wiki.moxiecode.com/index.php/TinyMCE:Configuration.\r\n\r\nHär kan du läsa mer om TinyMCE:\r\n\r\nhttp://tinymce.moxiecode.com\r\n", + "html": "

EPiServer använder sig av en HTML-editor från Tiny MCE för att redigera html-egenskaper och med TinyMCE finns det stora möjligheter att ändra vilka val och alternativ användaren ska få.

Genom att använda EPiServers admin-gränssnitt kan man styra exakt vilka knappar och boxar som ska visas, både globalt och för varje sidegenskap. Men det går naturligtvis att göra ännu mer! Faktum är att du har tillgång till alla init-inställningar för TinyMCE även när du använder den i EPiServer CMS.

Att ändra init-inställningarna

I normala fall skulle du tilldela TinyMCE sina inställningar med javascriptmetoden tinyMCE.init().



För att göra samma sak i EPiServer CMS 6 skapar du en klass med valfritt namn och tilldelar den attributet TinyMCEPluginNonVisual. Med TinyMCEPluginNonVisual kan du sätta ett antal properties för att konfigurera TinyMCE.



I exemplet ovan har jag bland annat lagt till en cssklass som dyker upp i listan ”Stilar” i editorn och som användaren kan använda vid redigering av en text. TinyMCE erbjuder dock fler inställningar än de jag användar i exemplet ovan, här är en komplett lista:

http://wiki.moxiecode.com/index.php/TinyMCE:Configuration.

Här kan du läsa mer om TinyMCE:

http://tinymce.moxiecode.com

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Inställningar för TinyMCE i EPiServer 6", + "meta_description": "", + "author_id": 1093, + "created_at": 1291909603000, + "created_by": 1093, + "updated_at": 1291909603000, + "updated_by": 1093, + "published_at": 1291909603000, + "published_by": 1093 + }, + { + "id": 460, + "title": "Använd samma kod för flera domäner i Google Analytics", + "slug": "anvand-samma-kod-for-flera-domaner-i-google-analytics", + "markdown": "\r\n\r\nGoogle Analytics är ett vanligt verktyg för att spara statistik på trafiken på en webbplats. Med hjälp av en unik kod skickas anrop direkt från klienten till Google Analytics som sparar och sorterar informationen åt dig.\r\n\r\nFör att spåra trafiken för varje enskild domän med enklast möjliga uppsättning i Google Analytics så lägger du till en profil med en kod per domän. Men om du har en sajt som finns på flera språk så behöver du förmodligen skilja statistiken på dina olika marknader åt. Med grundinställningarna i Google Analytics skulle du i så fall behöva lägga upp flera profiler med en unik kod för varje profil.\r\n\r\nDet låter jobbigt och är framförallt väldigt onödigt med tanke på att det finns en filtreringsfunktion i Google Analytics profilhantering som kan fixa biffen åt dig!\r\n## Hur man lägger upp flera profiler med delad kod i Google Analytics\r\nDu skapar en profil för varje domän din sajt använder (t ex www.iteam.se, www.iteam.fi osv). Varje profil ska däremot dela ”domain” i Google Analytics (se Skapa dina profiler). Sedan lägger du till ett filter på varje profil som filtrerar på just domännamn (se Ange filter på profilerna).\r\n### Skapa dina profiler\r\nSkapa en ny profil och välj ”Add a Profile for a new domain” om du redan har en profil för din sajt eller ” Add a new profile for an existing domain” när du lägger till resten av profilerna.\r\n\r\n\r\n\r\nDin nya profil skapas upp med default-inställningar.\r\n### Ange filter på profilerna\r\nFör att lägga på ett filter på en profil väljer du ”Edit” i listan över profiler och sedan ”Add filter” längre ner på sidan.\r\n\r\n\r\n\r\nDu får upp en ny sida för att skapa ett filter och under ”Enter filter information” väljer du att definiera ett eget filter på baserat på domän enligt markeringarna på bilden. Under ”Filter pattern” anges ett Regular Expression som matchar den domän du ska filtrera på. I mitt fall har jag valt att filtrera alla besök mot iteam.fi (om vi nu skulle haft en sajt på finska) med följande regex: ”^iteam\\.fi|.iteam\\.fi”.\r\n\r\n\r\n\r\nMed dessa inställningar får du alltså en profil per domän men använder samma unika kod vid javascriptanropet som reggar besöken på sajten. I Google Analytics blir det så här fint:\r\n\r\n\r\n\r\nOch i koden använder du nu samma kod för att regga Google Analytics på alla språk!\r\n\r\n![Bild](http://tekniken.nu/uploads/634279291326265654-google-analytics-logo.png)", + "html": "

Google Analytics är ett vanligt verktyg för att spara statistik på trafiken på en webbplats. Med hjälp av en unik kod skickas anrop direkt från klienten till Google Analytics som sparar och sorterar informationen åt dig.

För att spåra trafiken för varje enskild domän med enklast möjliga uppsättning i Google Analytics så lägger du till en profil med en kod per domän. Men om du har en sajt som finns på flera språk så behöver du förmodligen skilja statistiken på dina olika marknader åt. Med grundinställningarna i Google Analytics skulle du i så fall behöva lägga upp flera profiler med en unik kod för varje profil.

Det låter jobbigt och är framförallt väldigt onödigt med tanke på att det finns en filtreringsfunktion i Google Analytics profilhantering som kan fixa biffen åt dig!

Hur man lägger upp flera profiler med delad kod i Google Analytics

Du skapar en profil för varje domän din sajt använder (t ex www.iteam.se, www.iteam.fi osv). Varje profil ska däremot dela ”domain” i Google Analytics (se Skapa dina profiler). Sedan lägger du till ett filter på varje profil som filtrerar på just domännamn (se Ange filter på profilerna).

Skapa dina profiler

Skapa en ny profil och välj ”Add a Profile for a new domain” om du redan har en profil för din sajt eller ” Add a new profile for an existing domain” när du lägger till resten av profilerna.


Din nya profil skapas upp med default-inställningar.

Ange filter på profilerna

För att lägga på ett filter på en profil väljer du ”Edit” i listan över profiler och sedan ”Add filter” längre ner på sidan.


Du får upp en ny sida för att skapa ett filter och under ”Enter filter information” väljer du att definiera ett eget filter på baserat på domän enligt markeringarna på bilden. Under ”Filter pattern” anges ett Regular Expression som matchar den domän du ska filtrera på. I mitt fall har jag valt att filtrera alla besök mot iteam.fi (om vi nu skulle haft en sajt på finska) med följande regex: ”^iteam\\.fi|.iteam\\.fi”.


Med dessa inställningar får du alltså en profil per domän men använder samma unika kod vid javascriptanropet som reggar besöken på sajten. I Google Analytics blir det så här fint:


Och i koden använder du nu samma kod för att regga Google Analytics på alla språk!

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Hur man använder samma kod för flera domäner i Google Analytics", + "meta_description": "", + "author_id": 1093, + "created_at": 1292332331000, + "created_by": 1093, + "updated_at": 1292332331000, + "updated_by": 1093, + "published_at": 1292332331000, + "published_by": 1093 + }, + { + "id": 476, + "title": "FW: 404 Page Not Found i IIS7 med ASP.NET 4 Classic Mode", + "slug": "fw-404-page-not-found-i-iis7-med-aspnet-4-classic-mode", + "markdown": "\r\n\r\n\r\nHär tar vi upp problemet och lösningen på ett intressant problem för dig som installerat IISefter .NET 4 Framework. Om du får ett 404 Page Not Found-fel i din IIS7 när du försöker surfa mot en WebSite som använder sig av en Application Pool med Managed Pipeline Mode:Classic så hittar du lösningen i detta inlägg.\r\n\r\nOm IIS installeras (aktiveras via Kontrollpanelen) efter du installerat .NET 4 Framework så kommer IIS:en inte veta om denna version av ramverket och hamna ur synk. För att lösa detta behövs två steg genomföras. Först måste den senaste versionen av ramverket registreras i IIS:en, men sedan måste man också, konstigt nog, tillåta ASP.NET 4 under ISAPI and CGI Restrictions.\r\n\r\nSteg 1, Registrera ASP.NET 4 i IIS\r\n\r\nÖppna ett kommandfönster och skriv in sökvägen till mappen för .NET 4 och kör sedan följande kommando i mappen:\r\n\r\naspnet_regiis -i\r\n\r\n32-bitars system:\r\n\r\n%windir%\\Microsoft.NET\\Framework\\v4.0.30319\r\n\r\n64-bitars system:\r\n\r\n%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\r\n\r\n\r\n\r\nSteg 2, Tillåt ASP.NET 4 under ISAPI and CGI Restrictions\r\n\r\nGå till översta noden, Home, i Internet Information Service (IIS) Manager och välja ISAPI and CGI Regristrations.\r\n\r\n\r\n\r\nHär ser vi problemet, nämligen att .NET 4:s ISAPI är satt till Not Allowed. Markera varje dessa rader och välj Allow.\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/634304442454179506-image001.jpg@01CBAE72.B3AD3990__image001.jpg)", + "html": "

Här tar vi upp problemet och lösningen på ett intressant problem för dig som installerat IISefter .NET 4 Framework. Om du får ett 404 Page Not Found-fel i din IIS7 när du försöker surfa mot en WebSite som använder sig av en Application Pool med Managed Pipeline Mode:Classic så hittar du lösningen i detta inlägg.

Om IIS installeras (aktiveras via Kontrollpanelen) efter du installerat .NET 4 Framework så kommer IIS:en inte veta om denna version av ramverket och hamna ur synk. För att lösa detta behövs två steg genomföras. Först måste den senaste versionen av ramverket registreras i IIS:en, men sedan måste man också, konstigt nog, tillåta ASP.NET 4 under ISAPI and CGI Restrictions.

Steg 1, Registrera ASP.NET 4 i IIS

Öppna ett kommandfönster och skriv in sökvägen till mappen för .NET 4 och kör sedan följande kommando i mappen:

aspnet_regiis -i

32-bitars system:

%windir%\\Microsoft.NET\\Framework\\v4.0.30319

64-bitars system:

%windir%\\Microsoft.NET\\Framework64\\v4.0.30319

Steg 2, Tillåt ASP.NET 4 under ISAPI and CGI Restrictions

Gå till översta noden, Home, i Internet Information Service (IIS) Manager och välja ISAPI and CGI Regristrations.

Här ser vi problemet, nämligen att .NET 4:s ISAPI är satt till Not Allowed. Markera varje dessa rader och välj Allow.

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "FW: 404 Page Not Found i IIS7 med ASP.NET 4 Classic Mode", + "meta_description": null, + "author_id": 1093, + "created_at": 1294847443000, + "created_by": 1093, + "updated_at": 1294847443000, + "updated_by": 1093, + "published_at": 1294847443000, + "published_by": 1093 + }, + { + "id": 477, + "title": "404 Page Not Found i IIS7 med ASP.NET 4 Classic Mode", + "slug": "404-page-not-found-i-iis7-med-aspnet-4-classic-mode", + "markdown": "\r\n\r\nHär tar vi upp problemet och lösningen på ett intressant problem för dig som installerat IIS efter .NET 4 Framework. Om du får ett 404 Page Not Found-fel i din IIS7 när du försöker surfa mot en WebSite som använder sig av en Application Pool med Managed Pipeline Mode:Classic så hittar du lösningen i detta inlägg.\r\n\r\nOm IIS installeras (aktiveras via Kontrollpanelen) efter att du installerat .NET 4 Framework så kommer IIS:en inte att känna till denna version av ramverket och hamna ur synk. För att lösa detta behöver två steg genomföras. Först måste den senaste versionen av ramverket registreras i IIS:en, sedan måste man också, konstigt nog, tillåta ASP.NET 4 under ISAPI and CGI Restrictions.\r\n## Steg 1, Registrera ASP.NET 4 i IIS\r\nÖppna ett kommandfönster och skriv in sökvägen till mappen för .NET 4 och kör sedan följande kommando i mappen:\r\n\r\naspnet_regiis -i\r\n\r\n32-bitars system:\r\n\r\n%windir%\\Microsoft.NET\\Framework\\v4.0.30319\r\n\r\n64-bitars system:\r\n\r\n%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\r\n\r\n\r\n## Steg 2, Tillåt ASP.NET 4 under ISAPI and CGI Restrictions\r\nGå till översta noden, Home, i Internet Information Service (IIS) Manager och välj ISAPI and CGI Regristrations.\r\n\r\n\r\n\r\nHär ser vi problemet, nämligen att .NET 4:s ISAPI är satt till Not Allowed. Markera dessa rader och välj Allow.\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/404.jpg)", + "html": "

Här tar vi upp problemet och lösningen på ett intressant problem för dig som installerat IIS efter .NET 4 Framework. Om du får ett 404 Page Not Found-fel i din IIS7 när du försöker surfa mot en WebSite som använder sig av en Application Pool med Managed Pipeline Mode:Classic så hittar du lösningen i detta inlägg.

Om IIS installeras (aktiveras via Kontrollpanelen) efter att du installerat .NET 4 Framework så kommer IIS:en inte att känna till denna version av ramverket och hamna ur synk. För att lösa detta behöver två steg genomföras. Först måste den senaste versionen av ramverket registreras i IIS:en, sedan måste man också, konstigt nog, tillåta ASP.NET 4 under ISAPI and CGI Restrictions.

Steg 1, Registrera ASP.NET 4 i IIS

Öppna ett kommandfönster och skriv in sökvägen till mappen för .NET 4 och kör sedan följande kommando i mappen:

aspnet_regiis -i

32-bitars system:

%windir%\\Microsoft.NET\\Framework\\v4.0.30319

64-bitars system:

%windir%\\Microsoft.NET\\Framework64\\v4.0.30319


Steg 2, Tillåt ASP.NET 4 under ISAPI and CGI Restrictions

Gå till översta noden, Home, i Internet Information Service (IIS) Manager och välj ISAPI and CGI Regristrations.


Här ser vi problemet, nämligen att .NET 4:s ISAPI är satt till Not Allowed. Markera dessa rader och välj Allow.


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "404 Page Not Found i IIS7 med ASP.NET 4 Classic Mode", + "meta_description": "", + "author_id": 1096, + "created_at": 1294847445000, + "created_by": 1096, + "updated_at": 1294847445000, + "updated_by": 1096, + "published_at": 1294847445000, + "published_by": 1096 + }, + { + "id": 478, + "title": "Rollback för borttagna filer i TFS", + "slug": "rollback-for-borttagna-filer-i-tfs", + "markdown": "\r\n\r\nI Subversion är man aldrig speciellt orolig eftersom man alltid kan ta ”rollback” eller ”revert changes from revision” men i TFS är det inte lika enkelt att återgå till en gammal revision av sin källkod. \r\n\r\nOm man t ex har tagit bort en hel trunk och vill återställa den kan man inte ta ”get version” och sedan checka in för att återgå till versionen innan borttagningen eftersom borttagningen inte uppfattas som en ändring. \r\n\r\nFör att ta tillbaka en borttagen fil eller trunk går det dock bra att använda kommandot ”tf undelete”.\r\n\r\nSå här gör du:\r\n\r\n1.      Starta Visual Studio Command prompt (2010)\r\n\r\n2.      Gå till den mapp där din fil eller mapp låg.\r\n\r\n3.      Kör kommandot ”tf undelete filnamn”, t ex ”tf undelete trunk”\r\n\r\n4.      Checka in.\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/634308563329108886-image001.png@01CBB328.E959EEC0__image001.png)", + "html": "

I Subversion är man aldrig speciellt orolig eftersom man alltid kan ta ”rollback” eller ”revert changes from revision” men i TFS är det inte lika enkelt att återgå till en gammal revision av sin källkod.

Om man t ex har tagit bort en hel trunk och vill återställa den kan man inte ta ”get version” och sedan checka in för att återgå till versionen innan borttagningen eftersom borttagningen inte uppfattas som en ändring.

För att ta tillbaka en borttagen fil eller trunk går det dock bra att använda kommandot ”tf undelete”.

Så här gör du:

1.      Starta Visual Studio Command prompt (2010)

2.      Gå till den mapp där din fil eller mapp låg.

3.      Kör kommandot ”tf undelete filnamn”, t ex ”tf undelete trunk”

4.      Checka in.



", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Rollback för borttagna filer i TFS", + "meta_description": "", + "author_id": 1087, + "created_at": 1295259531000, + "created_by": 1087, + "updated_at": 1295259531000, + "updated_by": 1087, + "published_at": 1295259531000, + "published_by": 1087 + }, + { + "id": 479, + "title": "Visa namnet på PageData-properties i editläget i EPiServer", + "slug": "visa-namnet-pa-pagedata-properties-i-editlaget-i-episerver", + "markdown": "\r\n\r\nHur många gånger har du sökt på namnet på en sidegenskap i xml-filen med översättningar bara för att hitta det riktiga namnet på en property? För min del, alldeles för många!\r\n\r\nMed en egen PageAdapter kan du skriva ut även det riktiga namnet i editeringsläget i EpiServer. I den här lösningen skrivs det riktiga namnet ut inom parentes efter egenskapens översättning, men bara för utvecklare! T ex Namn (PageName).\r\n## PageAdapter och ITemplate\r\nSkapa först och främst en ny klass som ärver PageAdapter. Där gör du en override på Init och tar fram den aktuella sidans PropertyDataForm (som hanterar edit-formuläret som visas i editläget). Skapa sedan en klass som ärver ITemplate där du lägger till det riktiga namnet i titeln för varje egenskap. En instans av din nya klass använder du för att sätta CaptureTemplate i sidans PropertyDataForm. \r\n\r\nFör att se till att det riktiga egenskapsnamnet inte visas för vanliga redaktörer kan man lägga in en koll på att användaren tillhör en viss grupp i EpiServer (t ex \"Developers\" som i exemplet nedan). Slutligen registrerar du din nya PageAdapter i relevant .browser-fil i ditt webbprojekt.\r\n\r\nKodexempel ser du här:\r\n\r\n```prettyprint lang-c-sharp\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Web;\r\nusing EPiServer.Web.WebControls;\r\nusing EPiServer.UI.WebControls;\r\nusing EPiServer;\r\nusing EPiServer.Web.PropertyControls;\r\nusing System.Web.UI;\r\nusing System.Web.UI.Adapters;\r\nusing System.Web.UI.WebControls;\r\nusing EPiServer.Core;\r\nusing System.Configuration;\r\nusing EPiServer.TaskManager;\r\nusing System.Web.Security;\r\n\r\nnamespace Iteam.EPiServer\r\n{\r\n public class PropertyDataFormAdapter : PageAdapter\r\n {\r\n #region Classes\r\n /// \r\n /// Custom captiontemplate to change the caption rendering for the properties\r\n /// \r\n protected class CaptionTemplate : ITemplate\r\n {\r\n public void InstantiateIn(Control container)\r\n {\r\n var label = new Label();\r\n PropertyData property = ((PropertyTemplateContainer)container).DataItem as PropertyData;\r\n if (Roles.IsUserInRole(\"Developers\"))\r\n label.Text = string.Format(\"{0} ({1})\", property.TranslateDisplayName(), property.Name);\r\n else\r\n label.Text = property.TranslateDisplayName();\r\n\r\n container.Controls.Add(label);\r\n }\r\n }\r\n #endregion\r\n\r\n #region Methods\r\n /// \r\n /// Finds the propertydataform and adds a custom Captiontemplate\r\n /// \r\n protected override void OnInit(EventArgs e)\r\n {\r\n var dataForm = FindControl(this.Page, null);\r\n\r\n if (dataForm != null)\r\n {\r\n dataForm.CaptionTemplate = new CaptionTemplate();\r\n }\r\n base.OnInit(e);\r\n }\r\n #endregion\r\n\r\n #region FindControl(s) methods\r\n\r\n protected T FindControl(Control control, string id) where T : Control\r\n {\r\n T controlTest = control as T;\r\n if (null != controlTest && (null == id || id.Equals(controlTest.ID)))\r\n return controlTest;\r\n foreach (Control c in control.Controls)\r\n {\r\n controlTest = FindControl(c, id);\r\n if (null != controlTest)\r\n return controlTest;\r\n }\r\n return null;\r\n }\r\n\r\n protected List FindControlsProperties(Control control)\r\n {\r\n List results = new List();\r\n FindControlsProperties(control, results);\r\n return results;\r\n }\r\n\r\n protected void FindControlsProperties(Control control, List results)\r\n {\r\n if (control is PropertyDataControl)\r\n {\r\n results.Add((control as PropertyDataControl));\r\n }\r\n else\r\n {\r\n foreach (Control c in control.Controls)\r\n {\r\n FindControlsProperties(c, results);\r\n }\r\n }\r\n }\r\n\r\n #endregion\r\n }\r\n}\r\n```\r\n\r\n\r\nGlöm inte registrera din PageAdapter i en .browser-fil:\r\n\r\n```prettyprint lang-xml\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n```\r\n\r\n\r\nTack Per Nergård för tipset! \r\n\r\nBesök hans blogg här (engelska): http://world.episerver.com/Blogs/Per-Nergard/Dates/2010/4/Display-the-property-name-for-developers-in-edit-mode/\r\n", + "html": "

Hur många gånger har du sökt på namnet på en sidegenskap i xml-filen med översättningar bara för att hitta det riktiga namnet på en property? För min del, alldeles för många!

Med en egen PageAdapter kan du skriva ut även det riktiga namnet i editeringsläget i EpiServer. I den här lösningen skrivs det riktiga namnet ut inom parentes efter egenskapens översättning, men bara för utvecklare! T ex Namn (PageName).

PageAdapter och ITemplate

Skapa först och främst en ny klass som ärver PageAdapter. Där gör du en override på Init och tar fram den aktuella sidans PropertyDataForm (som hanterar edit-formuläret som visas i editläget). Skapa sedan en klass som ärver ITemplate där du lägger till det riktiga namnet i titeln för varje egenskap. En instans av din nya klass använder du för att sätta CaptureTemplate i sidans PropertyDataForm.

För att se till att det riktiga egenskapsnamnet inte visas för vanliga redaktörer kan man lägga in en koll på att användaren tillhör en viss grupp i EpiServer (t ex \"Developers\" som i exemplet nedan). Slutligen registrerar du din nya PageAdapter i relevant .browser-fil i ditt webbprojekt.

Kodexempel ser du här:



Glöm inte registrera din PageAdapter i en .browser-fil:



Tack Per Nergård för tipset!

Besök hans blogg här (engelska): http://world.episerver.com/Blogs/Per-Nergard/Dates/2010/4/Display-the-property-name-for-developers-in-edit-mode/

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Visa namnet på PageData-properties i editläget i EPiServer", + "meta_description": "", + "author_id": 1093, + "created_at": 1295354781000, + "created_by": 1093, + "updated_at": 1295354781000, + "updated_by": 1093, + "published_at": 1295354781000, + "published_by": 1093 + }, + { + "id": 482, + "title": "SQL Azure har blivit moget för skarp drift? Del 1 av 2", + "slug": "sql-azure-har-blivit-moget-for-skarp-drift-del-1-av-2", + "markdown": "\r\n## Efterlängtad elastisk arkitektur\r\nInnan jul gjorde vi vårt första skarpa test av Microsofts Azure plattform. Vi gjorde enklare tester och blev väldigt imponerade över både enkelheten och skalbarheten. För till skillnad från Amazon och deras EC2 tjänst så har Microsoft gjort det som vi längtat efter – nämligen plockat bort själva operativsystemet från ekvationen. I Amazons molntjänst och de allra flesta andra tjänsterna behöver du som sajtägare planera din arkitektur på ett sätt så att du inte har någon enskild flaskhals. När man pratar webbservrar är detta inget större problem då de redan är parallella i sin uppbyggnad från början och har därmed inget större problem med att läggas på olika fysiska eller virtuella maskiner och kan därmed enkelt skalas upp och ner när belastningen kommer och går. Databaser är däremot inte lika enkla att skala eftersom de skriver och läser till samma datakälla och kan därför inte ligga på olika fysiska maskiner utan rätt mycket licenser, hårdvara och konfiguration vilket gör det väldigt svårt och dyrbart att ta från liten drift till stor drift. \r\n\r\nDet stora problemet med att skala arkitektur är att man oftast behöver dimensionera maskinerna till den maximala belastning som kan komma i samband med högtryck efter en lansering eller marknadssatsning, s.k. peak-hours.  \r\n\r\nHär kommer SQL Azure in i bilden – för istället för att skapa en windowsmaskin, fjärrstyra och installera SQL Server så kan du i Microsofts moln skapa en logisk SQL server som ligger virtuellt och tilldelas minne och CPU beroende på belastning. Du behöver inte själv ta hand om upp och framför allt nedskalning av din arkitektur – det sköter sig självt. Tekniken kallas elastisk arkitektur och i dagsläget är Microsoft SQL Azure det enda alternativet för denna typ av logisk virtualisering för SQL Server.\r\n\r\n\r\n\r\n\r\n## Endast de viktigaste funktionerna finns tillgängliga\r\nNackdelen med att använda denna elastiska SQL lösning är att man har fått skala bort mycket av den extra funktionalitet som finns i en vanlig SQL Server installation, till exempel kan du inte använda Fulltext index eller andra mer avancerade index, inga XP_ stored procedures finns kvar, de flestsa du inte har tillgång till alla avancerade funktioner i SQL Server utan får nöja dig med det enklaste från plattformen men 99% av alla webbtjänster använder endast de enklaste funktionerna ändå. \r\n\r\nOm ni är osäkra på vilka funktioner som finns och om er lösning går att köra i molnet så är det enklaste sättet att installera Microsoft Azure SDK som innehåller en virtuell maskin som simulerar molnets miljö lokalt i Visual Studio. Det gör att du kan utveckla, debugga och utvärdera lokalt utan att behöva ladda upp lösningen till molnet.\r\n\r\nVi gjorde ett test på en av våra utvecklade sajter och efter lite trial-and-error lyckades vi köra hela webbplatsen i molnet. De nackdelar vi då upplevde var:\r\n\r\n1.      Ingen möjlighet att använda fullständiga managementverktyg för att administrera databasen\r\n\r\n2.      För simpelt gränssnitt med bristande översikt över alla instanser, databaser osv.\r\n\r\n3.      Dålig dokumentation\r\n\r\n4.      Svårt att hitta rätt i djungeln mellan Microsofts tillgängliga webbplatser för Azure - portaler, azure sajter, partnersajter, osv.\r\n\r\n5.      Ingen möjlighet till backup/restore i gränssnittet\r\n\r\nAv ovanstående nackdelar har en hel del hänt bara den senaste månaden:\r\n\r\n1.      Numera finns det en webbaserat verktyg som är byggt i Silverlight och fungerar utmärkt bra för databasadministration. Verktyget hittar man på adressen:https://manage-db3.sql.azure.com/\r\n\r\n2.      För övrig administration av webbplatser, översikt av brandväggsregler, användare, connection-strings, vpn, virtuella servrar och logisk uppdelning av sql-databaser etc.https://windows.azure.com/. Lägg speciellt märke till den häftiga 3d-kuben som visar status på databasen just nu. ;)\r\n\r\n3.      Tyvärr är dokumentationen fortfarande ganska bristfällig men blir bättre varje dag\r\n\r\n4.      Det är fortfarande svårt att hitta rätt mellan Microsofts olika sajter men för billing och subscriptions är det denna som gäller just nu:https://mocp.microsoftonline.com och för alla övriga ärenden kan man börja medhttp://windows.azure.com \r\n\r\n5.      Backup finns inbyggt i tjänsten men endast för hårdvarufel och fel som uppstår på grund av Microsoft, det går inte att begära en backup ”från igår” om man har klantat sig själv eller har andra manuella behov av restore. För detta behöver man sätta upp en backup-strategi som antingen innebär en synkroniserad flytt till en annan virtuell databas eller synkronisera till en egen fysisk maskin och därifrån ta backup ”som vanligt”. Läs mer om backupstrategier här:http://social.technet.microsoft.com/wiki/contents/articles/sql-azure-backup-and-restore-strategy.aspx\r\n\r\nVi kommer återkomma till denna teknik i del 2 då vi avser göra test av prestanda och skalbarhet.\r\n\r\n![Bild](http://tekniken.nu/uploads/634326661753289186-image001.jpg@01CBC139.DD40CFE0__image001.jpg)", + "html": "

Efterlängtad elastisk arkitektur

Innan jul gjorde vi vårt första skarpa test av Microsofts Azure plattform. Vi gjorde enklare tester och blev väldigt imponerade över både enkelheten och skalbarheten. För till skillnad från Amazon och deras EC2 tjänst så har Microsoft gjort det som vi längtat efter – nämligen plockat bort själva operativsystemet från ekvationen. I Amazons molntjänst och de allra flesta andra tjänsterna behöver du som sajtägare planera din arkitektur på ett sätt så att du inte har någon enskild flaskhals. När man pratar webbservrar är detta inget större problem då de redan är parallella i sin uppbyggnad från början och har därmed inget större problem med att läggas på olika fysiska eller virtuella maskiner och kan därmed enkelt skalas upp och ner när belastningen kommer och går. Databaser är däremot inte lika enkla att skala eftersom de skriver och läser till samma datakälla och kan därför inte ligga på olika fysiska maskiner utan rätt mycket licenser, hårdvara och konfiguration vilket gör det väldigt svårt och dyrbart att ta från liten drift till stor drift.

Det stora problemet med att skala arkitektur är att man oftast behöver dimensionera maskinerna till den maximala belastning som kan komma i samband med högtryck efter en lansering eller marknadssatsning, s.k. peak-hours.  

Här kommer SQL Azure in i bilden – för istället för att skapa en windowsmaskin, fjärrstyra och installera SQL Server så kan du i Microsofts moln skapa en logisk SQL server som ligger virtuellt och tilldelas minne och CPU beroende på belastning. Du behöver inte själv ta hand om upp och framför allt nedskalning av din arkitektur – det sköter sig självt. Tekniken kallas elastisk arkitektur och i dagsläget är Microsoft SQL Azure det enda alternativet för denna typ av logisk virtualisering för SQL Server.


Endast de viktigaste funktionerna finns tillgängliga

Nackdelen med att använda denna elastiska SQL lösning är att man har fått skala bort mycket av den extra funktionalitet som finns i en vanlig SQL Server installation, till exempel kan du inte använda Fulltext index eller andra mer avancerade index, inga XP_ stored procedures finns kvar, de flestsa du inte har tillgång till alla avancerade funktioner i SQL Server utan får nöja dig med det enklaste från plattformen men 99% av alla webbtjänster använder endast de enklaste funktionerna ändå.

Om ni är osäkra på vilka funktioner som finns och om er lösning går att köra i molnet så är det enklaste sättet att installera Microsoft Azure SDK som innehåller en virtuell maskin som simulerar molnets miljö lokalt i Visual Studio. Det gör att du kan utveckla, debugga och utvärdera lokalt utan att behöva ladda upp lösningen till molnet.

Vi gjorde ett test på en av våra utvecklade sajter och efter lite trial-and-error lyckades vi köra hela webbplatsen i molnet. De nackdelar vi då upplevde var:

1.      Ingen möjlighet att använda fullständiga managementverktyg för att administrera databasen

2.      För simpelt gränssnitt med bristande översikt över alla instanser, databaser osv.

3.      Dålig dokumentation

4.      Svårt att hitta rätt i djungeln mellan Microsofts tillgängliga webbplatser för Azure - portaler, azure sajter, partnersajter, osv.

5.      Ingen möjlighet till backup/restore i gränssnittet

Av ovanstående nackdelar har en hel del hänt bara den senaste månaden:

1.      Numera finns det en webbaserat verktyg som är byggt i Silverlight och fungerar utmärkt bra för databasadministration. Verktyget hittar man på adressen:https://manage-db3.sql.azure.com/

2.      För övrig administration av webbplatser, översikt av brandväggsregler, användare, connection-strings, vpn, virtuella servrar och logisk uppdelning av sql-databaser etc.https://windows.azure.com/. Lägg speciellt märke till den häftiga 3d-kuben som visar status på databasen just nu. ;)

3.      Tyvärr är dokumentationen fortfarande ganska bristfällig men blir bättre varje dag

4.      Det är fortfarande svårt att hitta rätt mellan Microsofts olika sajter men för billing och subscriptions är det denna som gäller just nu:https://mocp.microsoftonline.com och för alla övriga ärenden kan man börja medhttp://windows.azure.com

5.      Backup finns inbyggt i tjänsten men endast för hårdvarufel och fel som uppstår på grund av Microsoft, det går inte att begära en backup ”från igår” om man har klantat sig själv eller har andra manuella behov av restore. För detta behöver man sätta upp en backup-strategi som antingen innebär en synkroniserad flytt till en annan virtuell databas eller synkronisera till en egen fysisk maskin och därifrån ta backup ”som vanligt”. Läs mer om backupstrategier här:http://social.technet.microsoft.com/wiki/contents/articles/sql-azure-backup-and-restore-strategy.aspx

Vi kommer återkomma till denna teknik i del 2 då vi avser göra test av prestanda och skalbarhet.

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Har SQL Azure blivit moget för skarp drift? Del 1 av 2", + "meta_description": "", + "author_id": 1087, + "created_at": 1298454600000, + "created_by": 1087, + "updated_at": 1298454600000, + "updated_by": 1087, + "published_at": 1298454600000, + "published_by": 1087 + }, + { + "id": 487, + "title": "IIS7 visar felsida innan du hinner logga felen", + "slug": "iis7-visar-felsida-innan-du-hinner-logga-felen", + "markdown": "\r\n\r\nI nästan alla de projekt jag jobbar med finns det en central plats där alla fel loggas, vanligtvis genom att lyssna på Application_Error i global.asax.\r\n\r\nEn potentiellt otrevlig nyhet i IIS 7 för websajter som körs i Integration Mode är att eventuella fel fångas upp av IIS som returnerar en egen felsida istället för att skicka dem vidare till ASP.NET-motorn. Men bara om man satt CustomErrors i web.config till On eller RemoteOnly och har en felsida definierad i IIS7, vilket du har per default.\r\n\r\nI de fall du t ex vill logga alla fel eller hantera dem på annat sätt innan felsidan visas för användaren kan detta bli ett problem när sajten läggs ut i en miljö där CustomErrors ska sättas till On eller RemoteOnly.\r\n\r\nSom tur är kom en förändring på System.Web.HttpResponse i .NET 3.5! Den ”nya” egenskapen är TrySkipIisCustomErrors och ska sättas till true för att låta även IIS 7 skicka vidare felen till ASP.NET så att du kan hantera dem som du vill.\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/634346555362313666-image003.png@01CBD836.4A1E1470__image003.png)", + "html": "

I nästan alla de projekt jag jobbar med finns det en central plats där alla fel loggas, vanligtvis genom att lyssna på Application_Error i global.asax.

En potentiellt otrevlig nyhet i IIS 7 för websajter som körs i Integration Mode är att eventuella fel fångas upp av IIS som returnerar en egen felsida istället för att skicka dem vidare till ASP.NET-motorn. Men bara om man satt CustomErrors i web.config till On eller RemoteOnly och har en felsida definierad i IIS7, vilket du har per default.

I de fall du t ex vill logga alla fel eller hantera dem på annat sätt innan felsidan visas för användaren kan detta bli ett problem när sajten läggs ut i en miljö där CustomErrors ska sättas till On eller RemoteOnly.

Som tur är kom en förändring på System.Web.HttpResponse i .NET 3.5! Den ”nya” egenskapen är TrySkipIisCustomErrors och ska sättas till true för att låta även IIS 7 skicka vidare felen till ASP.NET så att du kan hantera dem som du vill.

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "IIS7 visar felsida innan du hinner logga felen", + "meta_description": "", + "author_id": 1093, + "created_at": 1299058735000, + "created_by": 1093, + "updated_at": 1299058735000, + "updated_by": 1093, + "published_at": 1299058735000, + "published_by": 1093 + }, + { + "id": 488, + "title": "Ibland är lösningen enkel trots krångligt felmeddelande", + "slug": "ibland-ar-losningen-enkel-trots-krangligt-felmeddelande", + "markdown": "\r\n\r\nI en halv dag har jag nu kämpat med ett fel som visade sig vara ett väldigt enkelt fel. \r\n\r\nFelet som dök upp var:\r\n\r\n C:\\Program Files (x86)\\MSBuild\\Microsoft\\VisualStudio\\v10.0\\WebApplications\\Microsoft.WebApplication.targets (177): Unable to copy file \"bin\\XXXXXX.dll\" to \"D:\\TFS_Builds\\2\\XXX\\ZZZ\\Binaries\\_PublishedWebsites\\XXXX\\bin\\XXXX.dll\". Could not find a part of the path 'bin\\XXX.dll'.\r\n\r\nEftersom det inte dyker upp lokalt och endast på byggservern och att felet handlar om dll filer tänker man att det är fel i projektfilen, copy local på dll filer, active configuration, konflikter mellan 64 bitars dll, säkerhetsinställningar på servern, låsningar, solutionfilen eller build definitionen. Men nej, det visar sig helt enkelt vara att bin mappen ligger med i projektet i Source. Ta bort bin-mappen från projektet och försök igen så fungerar allt klockrent!\r\n\r\n![Bild](http://tekniken.nu/uploads/634347401526727154-image004.png@01CBD90E.06A50A40__image004.png)", + "html": "

I en halv dag har jag nu kämpat med ett fel som visade sig vara ett väldigt enkelt fel.

Felet som dök upp var:

C:\\Program Files (x86)\\MSBuild\\Microsoft\\VisualStudio\\v10.0\\WebApplications\\Microsoft.WebApplication.targets (177): Unable to copy file \"bin\\XXXXXX.dll\" to \"D:\\TFS_Builds\\2\\XXX\\ZZZ\\Binaries\\_PublishedWebsites\\XXXX\\bin\\XXXX.dll\". Could not find a part of the path 'bin\\XXX.dll'.

Eftersom det inte dyker upp lokalt och endast på byggservern och att felet handlar om dll filer tänker man att det är fel i projektfilen, copy local på dll filer, active configuration, konflikter mellan 64 bitars dll, säkerhetsinställningar på servern, låsningar, solutionfilen eller build definitionen. Men nej, det visar sig helt enkelt vara att bin mappen ligger med i projektet i Source. Ta bort bin-mappen från projektet och försök igen så fungerar allt klockrent!

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Ibland är lösningen enkel trots krångligt felmeddelande", + "meta_description": "", + "author_id": 1087, + "created_at": 1299145800000, + "created_by": 1087, + "updated_at": 1299145800000, + "updated_by": 1087, + "published_at": 1299145800000, + "published_by": 1087 + }, + { + "id": 492, + "title": "The HTML 5 Test", + "slug": "the-html-5-test", + "markdown": "\r\n\r\nUtvecklingen av HTML 5 går snabbt framåt och med lite hjälp av ett gammalt operativsystem i en virtuell maskin så kan man se riktiga siffror på hur snabbt det verkligen gått.\r\n\r\nEtt allmänt erkänt sätt att få en uppfattning vilket support en webläsare har för HTML 5 är att använda sig av websidan The HTML5 Test.\r\n\r\nDen absolut senaste versionen av Google Chrome, som man får om man går via Developer Channel (finns även för Mac), är version 11 och har det bästa resultatet jag har sett än så länge med 293 av 400 möjliga.\r\n\r\nDen senaste skarpa versionen av Firefox, som inte är en beta-version, är för tillfället 3.6.14 och den får ungefär hälften av Google Chromes poäng med 155.\r\n\r\nEfter en installation av en virtuell maskin för att testa på Windows XP och gamla versioner av webläsare så fick jag följande resultat:\r\n\r\n\r\n\r\nOperativsystem\r\nWebläsare\r\nHtml5Test poäng\r\n\r\n\r\nWindows 7\r\nGoogle Chrome 11\r\n293\r\n\r\nWindows 7\r\nFirefox 3.6.14\r\n155\r\n\r\nWindows 7\r\nInternet Explorer 8\r\n32\r\n\r\nWindows XP\r\nGoogle Chrome 9\r\nEj tillgänglig\r\n\r\nWindows XP\r\nFirefox 3.0\r\n57\r\n\r\nWindows XP\r\nInternet Explorer 7\r\n17\r\n\r\n\r\n\r\nDet är ingen större förvåning att de gamla versionerna av Internet Explorer ligger en rejäl bit efter, men det ska bli bättre i Internet Explorer 9.\r\n\r\nVad som kan noteras är att Google Chrome 9 under Windows XP i en Virtual PC hänger sig när den surfar mot The HTML5 Test.\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/634351712651424314-image001.png@01CBDCBF.03AE2600__image001.png)", + "html": "

Utvecklingen av HTML 5 går snabbt framåt och med lite hjälp av ett gammalt operativsystem i en virtuell maskin så kan man se riktiga siffror på hur snabbt det verkligen gått.

Ett allmänt erkänt sätt att få en uppfattning vilket support en webläsare har för HTML 5 är att använda sig av websidan The HTML5 Test.

Den absolut senaste versionen av Google Chrome, som man får om man går via Developer Channel (finns även för Mac), är version 11 och har det bästa resultatet jag har sett än så länge med 293 av 400 möjliga.

Den senaste skarpa versionen av Firefox, som inte är en beta-version, är för tillfället 3.6.14 och den får ungefär hälften av Google Chromes poäng med 155.

Efter en installation av en virtuell maskin för att testa på Windows XP och gamla versioner av webläsare så fick jag följande resultat:

































OperativsystemWebläsareHtml5Test poäng
Windows 7Google Chrome 11293
Windows 7Firefox 3.6.14155
Windows 7Internet Explorer 832
Windows XPGoogle Chrome 9Ej tillgänglig
Windows XPFirefox 3.057
Windows XPInternet Explorer 717

Det är ingen större förvåning att de gamla versionerna av Internet Explorer ligger en rejäl bit efter, men det ska bli bättre i Internet Explorer 9.

Vad som kan noteras är att Google Chrome 9 under Windows XP i en Virtual PC hänger sig när den surfar mot The HTML5 Test.


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "The HTML 5 Test", + "meta_description": "", + "author_id": 1096, + "created_at": 1299575400000, + "created_by": 1096, + "updated_at": 1299575400000, + "updated_by": 1096, + "published_at": 1299575400000, + "published_by": 1096 + }, + { + "id": 494, + "title": "Vilka CSS funktioner stöds av vilka webbläsare?", + "slug": "vilka-css-funktioner-stods-av-vilka-webblasare", + "markdown": "\r\n\r\nDet finns många bra tricks i CSS men vilka kan man använda? Här är en bra länk med översikt av alla funktioner och dessutom bra test och tydliga kodexempel:\r\n\r\nhttp://kimblim.dk/css-tests/selectors/\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/634369037309328866-image001.jpg@01CBEB0E.13FD2DA0__image001.jpg)", + "html": "

Det finns många bra tricks i CSS men vilka kan man använda? Här är en bra länk med översikt av alla funktioner och dessutom bra test och tydliga kodexempel:

http://kimblim.dk/css-tests/selectors/

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Vilka CSS funktioner stöds av vilka webbläsare?", + "meta_description": "", + "author_id": 1087, + "created_at": 1301571300000, + "created_by": 1087, + "updated_at": 1301571300000, + "updated_by": 1087, + "published_at": 1301571300000, + "published_by": 1087 + }, + { + "id": 495, + "title": "HTML 5 Audio-element för alla", + "slug": "html-5-audio-element-for-alla", + "markdown": "\r\n\r\nEtt gammalt sätt att bestämma hur ljud ska spelas upp hade varit det dåliga sättet genom Browser Detection, där man tittar vilken webläsare som används och därifrån bestämma hur man hanterar ljudet som ska spelas upp. Problemet med denna lösning är att webläsare utvecklas hela tiden, så om man ser att webläsaren t.ex. är Google Chrome och sätter i logiken att man vet att den inte stödjer t.ex. audio via WAV-formatet så kanske detta inte fortfarande stämmer om några versioner.\r\n\r\nDet moderna, rekommenderade sättet är att istället använda sig av Feature Detection. Det innebär att man istället för att se vilken webläsare som används istället frågar webläsaren om den stödjer viss funktionalitet.\r\n\r\nEtt populärt ramverk för att detektera vilka funktioner relaterade till HTML 5 som en browser stödjer är Modernizr. Då kan man skriva följande kod i sitt JavaScript:\r\n\r\n![Bild](http://tekniken.nu/uploads/634369037314328930-image001.png@01CBDD76.35859F20__image001.png)\r\n```prettyprint lang-javascript\r\nif (Modernizr.audio && Modernizr.audio.mp3){\r\n\r\n // Spela upp HTML 5-ljud\r\n\r\n} \r\n```\r\n\r\n\r\nI fallet med audio-taggen så behöver vi bara veta om en enda funtionalitet och att använda sig av ett helt ramverk känns lite onödigt. Då kan man istället vända sig till en referens på hur man detekterar individuell funktionalitet för HTML 5.\r\n\r\n\r\n\r\n\r\n\r\nFör att se om audio-taggen stöds, dessutom med ljudformatet mp3 så användes följande kod:\r\n\r\n```prettyprint lang-javascript\r\nvar a = document.createElement('audio');\r\n\r\nvar hasAudioMp3Support = (!!(a.canPlayType && a.canPlayType('audio/mpeg;').replace(/no/, '')));\r\n```\r\n\r\nVariabeln hasAudioMp3Support är en boolean som ärtrue om allt stöds som det ska i webläsaren. Detta kan sedan användas i Javascript-koden för att dela upp funktionalitet mellan webläsare som stödjer HTML 5 Audio och de som behöver t.ex. Flash för att spela upp ljud:\r\n\r\n```prettyprint lang-javascript\r\nif (hasAudioMp3Support) {\r\n// Hitta audio-taggen \r\n var audio = document.getElementById(\"audioElement\"); \r\n// Sätt ljud-källa\r\naudio.setAttribute(\"src\", soundUrl);\r\n audio.play();\r\n} else {\r\n // Ladda in en Flash-spelare istället\r\n}\r\n```\r\n", + "html": "

Ett gammalt sätt att bestämma hur ljud ska spelas upp hade varit det dåliga sättet genom Browser Detection, där man tittar vilken webläsare som används och därifrån bestämma hur man hanterar ljudet som ska spelas upp. Problemet med denna lösning är att webläsare utvecklas hela tiden, så om man ser att webläsaren t.ex. är Google Chrome och sätter i logiken att man vet att den inte stödjer t.ex. audio via WAV-formatet så kanske detta inte fortfarande stämmer om några versioner.

Det moderna, rekommenderade sättet är att istället använda sig av Feature Detection. Det innebär att man istället för att se vilken webläsare som används istället frågar webläsaren om den stödjer viss funktionalitet.

Ett populärt ramverk för att detektera vilka funktioner relaterade till HTML 5 som en browser stödjer är Modernizr. Då kan man skriva följande kod i sitt JavaScript:



I fallet med audio-taggen så behöver vi bara veta om en enda funtionalitet och att använda sig av ett helt ramverk känns lite onödigt. Då kan man istället vända sig till en referens på hur man detekterar individuell funktionalitet för HTML 5.




För att se om audio-taggen stöds, dessutom med ljudformatet mp3 så användes följande kod:



Variabeln hasAudioMp3Support är en boolean som ärtrue om allt stöds som det ska i webläsaren. Detta kan sedan användas i Javascript-koden för att dela upp funktionalitet mellan webläsare som stödjer HTML 5 Audio och de som behöver t.ex. Flash för att spela upp ljud:

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "HTML 5 Audio-element för alla", + "meta_description": "", + "author_id": 1096, + "created_at": 1301318100000, + "created_by": 1096, + "updated_at": 1301318100000, + "updated_by": 1096, + "published_at": 1301318100000, + "published_by": 1096 + }, + { + "id": 496, + "title": "Problem att logga på en webbplats från en Windows Server 2008?", + "slug": "problem-att-logga-pa-en-webbplats-fran-en-windows-server-2008", + "markdown": "\r\n\r\nOm du har problem att logga in på en sajt med Forms Authentication från IE8 eller IE7 på en Windows Server 2008 kan det bero på att standardinställningen för en server är inställd på över högsta säkerhetsnivå, även kallad Block All Cookies.\r\n\r\n\r\n\r\nDra ner reglaget ett steg så blir det därefter möjligt att logga in.\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/ie8-logo.png)", + "html": "

Om du har problem att logga in på en sajt med Forms Authentication från IE8 eller IE7 på en Windows Server 2008 kan det bero på att standardinställningen för en server är inställd på över högsta säkerhetsnivå, även kallad Block All Cookies.


Dra ner reglaget ett steg så blir det därefter möjligt att logga in.


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Problem att logga på en webbplats från en Windows Server 2008?", + "meta_description": "", + "author_id": 1087, + "created_at": 1301913300000, + "created_by": 1087, + "updated_at": 1301913300000, + "updated_by": 1087, + "published_at": 1301913300000, + "published_by": 1087 + }, + { + "id": 497, + "title": "Vad är Map/Reduce och hur använder man det i NoSQL?", + "slug": "vad-ar-mapreduce-och-hur-anvander-man-det-i-nosql", + "markdown": "\r\n## Först och främst, vad är NoSQL?\r\nInnan vi börjar prata om Map/Reduce behöver vi nämna några ord om NoSQL. Vi kommer återkomma till denna teknik i ett antal bloggar och beröra olika delar av denna nya spännande teknik. NoSQL är egentligen samlingsnamnet på en ny typ av databasmotor som förenklas till att bara handla om en nyckel och en datamängd. Den stora paradigmskillnaden är att NoSQL databaser har en dynamisk struktur som går att utöka till skillnad från SQL databaser som kräver en strukturell förändring för att kunna ta emot ny typ av data. De allra flesta NoSQL-databaser bygger på en enkel nyckel som identifierar det data som ska lagras, i övrigt skiljer sig NoSQL-databaser mycket åt.\r\n\r\nDen stora fördelen med traditionella SQL databaser är att de fungerar väldigt bra till de allra flesta typer av applikationer, men bara upp till en viss gräns då dess två största nackdelar tar vid – skalbarhet och prestanda.\r\n\r\nDen stora fördelen med NoSQL databaser är att de är snabba, klarar av väldigt stora datamängder och antal poster. De har en dynamisk struktur och kan därför utökas i takt med att det data som sparas förändras. Den stora nackdelen är att de inte hanterar relationer och kan därför inte hjälpa till med att verifiera att all data är konsistent, dvs det finns alltså inga kontroller på att data inte lagras dubbelt. För att underlätta i bearbetningen av data i NoSQL finns en effektiv teknik från Google som hjälper till: Map/Reduce.\r\n## Map/Reduce - en teknik från Google\r\n2004 lämnade Google in sin patentansökan för tekniken Map/Reduce som är en teknisk för att dela upp och distribuera arbetet med att bearbeta gigantiska mängder data. Map/Reduce används för att dela upp problem till mindre delar och sedan bearbeta och samla in svaren. Map/Reduce finns som ramverk till de flesta programspråk och används för att bryta ner allt ifrån matematiska beräkningar, bearbeta och förädla data, 3D renderingar och söka och sortera texter etc.\r\n### Tekniken är uppdelad i två steg\r\n1-     Map = Definiera en fast mängd data samt dela upp dessa i delsteg och distribuera\r\n\r\n2-     Reduce = Bearbeta delmängd och returnera ett bearbetat svar\r\n\r\nDen stora vinsten med att dela upp sitt problem på detta sätt är att det blir lätt att distribuera beräkningsuppgiften, först på flera processorkärnor på servern och därefter på flera datorer. Amazon hyr till exempel ut datorkraft med hjälp av denna teknik som de kallar Elastic MapReduce så att företag kan köpa datorkraft på detta vis.\r\n## Användning av Map/Reduce inom NoSQL\r\nInom NoSQL används Map/Reduce flitigt för att skapa delmängder av en datamängd till ett beräknat format. Om man jämför med en traditionell SQL databas kan man lättast jämföra det med en indexed view. Dvs, en vy som är sammanplockad av flera underliggande datakällor men där man lagt ett index som håller indexet uppdaterat vid förändringar.\r\n\r\nEtt problem inom NoSQL är att det inte finns relationer vilket gör det väldigt tidsödande att leta upp och sammanställa material som finns underliggande i sin datamängd.\r\n### Här följer ett par kodexempl som är förenklade men bygger på MongoDB syntax\r\nSäg att man har en lista av låtar med kopplingar till artister och album.  Inom SQL skulle detta sluta med tre tabeller med relationer till varandra. För att hämta en lista på alla artister i denna struktur ställs en enkel SQL-fråga:\r\n\r\nSELECT * FROM artists\r\n\r\neller:\r\n\r\nSELECT artistName FROM tracks GROUP BY artistName\r\n\r\nMen inom NoSQL är svaret inte alltid lika enkelt. Eftersom strukturen är dynamisk kan det bli så att man inte har en lista av artister utan behöver gå igenom varje låt för att hämta artisterna:\r\n\r\nvar tracks = db.Tracks.find();\r\n\r\nforeach (var track in tracks)\r\n\r\ntrack.Album.Artist\r\n\r\nDet behövs inte mer än några tusen rader i låtlistan innan detta blir långsamt. För att göra det snabbare så sätter vi upp ett index med Map/Reduce som genomför beräkningen i bakgrunden och förbereder en virtuell lista av artister som man sedan kan anropa direkt:\r\n\r\nvar artists = db.Artists.find();    \r\n\r\nHos RavenDB som är en .NET baserad NoSQL-databas finns det stöd för Map/Reduce med LINQ vilket är väldigt smidigt för oss C# utvecklare. Uppdelningen är väldigt tydlig:\r\n\r\n\r\n\r\nMan kan använda Map/Reduce på många sätt, antingen genom att skapa ny virtuell data, t ex som ovan sammanställa data från underliggande strukturer, föreslå vänner baserat på antalet gemensamma taggar, skapa topplistor baserat på försäljning etc, men också för att göra beräkningar (försäljningssiffror, statistik, sökningar osv). \r\n\r\nEftersom bara hälften av Map/Reduce indexet behöver köras för att avgöra om datan är invalid (Map) och eftersom endast den data som är förändrad behöver uppdateras (Reduce) sparas väldigt mycket resurser på detta sätt. Det är den stora vinsten med tekniken.\r\n\r\nLäs mer om Map/Reduce och RavenDB här:\r\n\r\nhttp://stackoverflow.com/questions/4253334/ravendb-map-reduce-example-using-net-client\r\n\r\noch lite mer avancerat exempel:http://ayende.com/Blog/archive/2010/03/14/map-reduce-ndash-a-visual-explanation.aspx\r\n## Mer läsning om NoSQL\r\nGlöm inte heller att testa MongoDB konsol, klicka på ”Try it out” och skriv ”help” för lite tips:http://www.mongodb.org/#shell\r\n\r\nOm du gillar C# och LINQ ska du definitivt ladda ner RavenDB:\r\n\r\nhttp://ravendb.net/download (tips: installera som service genom att köra raven.server.exe /install), administrera servern med ett fint Silverlight administrationsgränssnitt som kallas Raven Studio:http://localhost:8080 och titta på den ganska långa men informativa intervjun med Ayende Rahien: (spola till slutet för att se lite bra kodexempel).\r\n\r\n![Bild](http://tekniken.nu/uploads/634376769235732658-image002.jpg@01CBF3C8.4E048940__image002.jpg)", + "html": "

Först och främst, vad är NoSQL?

Innan vi börjar prata om Map/Reduce behöver vi nämna några ord om NoSQL. Vi kommer återkomma till denna teknik i ett antal bloggar och beröra olika delar av denna nya spännande teknik. NoSQL är egentligen samlingsnamnet på en ny typ av databasmotor som förenklas till att bara handla om en nyckel och en datamängd. Den stora paradigmskillnaden är att NoSQL databaser har en dynamisk struktur som går att utöka till skillnad från SQL databaser som kräver en strukturell förändring för att kunna ta emot ny typ av data. De allra flesta NoSQL-databaser bygger på en enkel nyckel som identifierar det data som ska lagras, i övrigt skiljer sig NoSQL-databaser mycket åt.

Den stora fördelen med traditionella SQL databaser är att de fungerar väldigt bra till de allra flesta typer av applikationer, men bara upp till en viss gräns då dess två största nackdelar tar vid – skalbarhet och prestanda.

Den stora fördelen med NoSQL databaser är att de är snabba, klarar av väldigt stora datamängder och antal poster. De har en dynamisk struktur och kan därför utökas i takt med att det data som sparas förändras. Den stora nackdelen är att de inte hanterar relationer och kan därför inte hjälpa till med att verifiera att all data är konsistent, dvs det finns alltså inga kontroller på att data inte lagras dubbelt. För att underlätta i bearbetningen av data i NoSQL finns en effektiv teknik från Google som hjälper till: Map/Reduce.

Map/Reduce - en teknik från Google

2004 lämnade Google in sin patentansökan för tekniken Map/Reduce som är en teknisk för att dela upp och distribuera arbetet med att bearbeta gigantiska mängder data. Map/Reduce används för att dela upp problem till mindre delar och sedan bearbeta och samla in svaren. Map/Reduce finns som ramverk till de flesta programspråk och används för att bryta ner allt ifrån matematiska beräkningar, bearbeta och förädla data, 3D renderingar och söka och sortera texter etc.

Tekniken är uppdelad i två steg

1-     Map = Definiera en fast mängd data samt dela upp dessa i delsteg och distribuera

2-     Reduce = Bearbeta delmängd och returnera ett bearbetat svar

Den stora vinsten med att dela upp sitt problem på detta sätt är att det blir lätt att distribuera beräkningsuppgiften, först på flera processorkärnor på servern och därefter på flera datorer. Amazon hyr till exempel ut datorkraft med hjälp av denna teknik som de kallar Elastic MapReduce så att företag kan köpa datorkraft på detta vis.

Användning av Map/Reduce inom NoSQL

Inom NoSQL används Map/Reduce flitigt för att skapa delmängder av en datamängd till ett beräknat format. Om man jämför med en traditionell SQL databas kan man lättast jämföra det med en indexed view. Dvs, en vy som är sammanplockad av flera underliggande datakällor men där man lagt ett index som håller indexet uppdaterat vid förändringar.

Ett problem inom NoSQL är att det inte finns relationer vilket gör det väldigt tidsödande att leta upp och sammanställa material som finns underliggande i sin datamängd.

Här följer ett par kodexempl som är förenklade men bygger på MongoDB syntax

Säg att man har en lista av låtar med kopplingar till artister och album.  Inom SQL skulle detta sluta med tre tabeller med relationer till varandra. För att hämta en lista på alla artister i denna struktur ställs en enkel SQL-fråga:

SELECT * FROM artists

eller:

SELECT artistName FROM tracks GROUP BY artistName

Men inom NoSQL är svaret inte alltid lika enkelt. Eftersom strukturen är dynamisk kan det bli så att man inte har en lista av artister utan behöver gå igenom varje låt för att hämta artisterna:

var tracks = db.Tracks.find();

foreach (var track in tracks)

track.Album.Artist

Det behövs inte mer än några tusen rader i låtlistan innan detta blir långsamt. För att göra det snabbare så sätter vi upp ett index med Map/Reduce som genomför beräkningen i bakgrunden och förbereder en virtuell lista av artister som man sedan kan anropa direkt:

var artists = db.Artists.find();   

Hos RavenDB som är en .NET baserad NoSQL-databas finns det stöd för Map/Reduce med LINQ vilket är väldigt smidigt för oss C# utvecklare. Uppdelningen är väldigt tydlig:


Man kan använda Map/Reduce på många sätt, antingen genom att skapa ny virtuell data, t ex som ovan sammanställa data från underliggande strukturer, föreslå vänner baserat på antalet gemensamma taggar, skapa topplistor baserat på försäljning etc, men också för att göra beräkningar (försäljningssiffror, statistik, sökningar osv).

Eftersom bara hälften av Map/Reduce indexet behöver köras för att avgöra om datan är invalid (Map) och eftersom endast den data som är förändrad behöver uppdateras (Reduce) sparas väldigt mycket resurser på detta sätt. Det är den stora vinsten med tekniken.

Läs mer om Map/Reduce och RavenDB här:

http://stackoverflow.com/questions/4253334/ravendb-map-reduce-example-using-net-client

och lite mer avancerat exempel:
http://ayende.com/Blog/archive/2010/03/14/map-reduce-ndash-a-visual-explanation.aspx

Mer läsning om NoSQL

Glöm inte heller att testa MongoDB konsol, klicka på ”Try it out” och skriv ”help” för lite tips:
http://www.mongodb.org/#shell

Om du gillar C# och LINQ ska du definitivt ladda ner RavenDB:

http://ravendb.net/download (tips: installera som service genom att köra raven.server.exe /install), administrera servern med ett fint Silverlight administrationsgränssnitt som kallas Raven Studio:http://localhost:8080 och titta på den ganska långa men informativa intervjun med Ayende Rahien:
(spola till slutet för att se lite bra kodexempel).

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Vad är Map/Reduce och hur använder man det i NoSQL?", + "meta_description": "", + "author_id": 1087, + "created_at": 1303121400000, + "created_by": 1087, + "updated_at": 1303121400000, + "updated_by": 1087, + "published_at": 1303121400000, + "published_by": 1087 + }, + { + "id": 498, + "title": "Textbox i HTML med fördröjd funktionalitet med jQuery och Timer", + "slug": "textbox-i-html-med-fordrojd-funktionalitet-med-jquery-och-timer", + "markdown": "\r\n\r\nI nedan kod hanterar vi knapptryckningar via jQuery och lägger på fördröjning via JavaScripts inbyggda setTimout-funktionalitet. Detta gör att textrutans funktionalitet bara kommer att exekveras efter en halv sekunds inaktivitet av användaren, istället för varje knapptryckning.\r\n\r\nFörst behövs en referens för att hantera Timout, både att aktivera, men också att avbryta den. Denna håller vi i filterTimeoutId.\r\n\r\nI funktionen textboxFunction, som även kan skrivas inline, direkt i setTimeout-funktionen, har vi logiken för vad som ska hända när Timeout:en har gått ut.\r\n\r\nVi hanterar även ett direkt Enter-slag att ignorer Timout:en för att direkt exekvera textboxens funktionalitet.\r\n\r\n![Bild](http://tekniken.nu/uploads/JQuery_logo_color_onwhite.png)\r\n```prettyprint lang-javascript\r\nvar filterTimeoutId = 0;\r\n\r\nvar textboxFunction = function() {\r\n\r\n // Funktionaliteten för textboxen\r\n\r\n Alert(' Textboxens funktionalitet exekverades!')\r\n\r\n};\r\n\r\n$('input#TextBox').keypress(function (e) {\r\n\r\n if (e.which === 13) { // Enter-knapp\r\n\r\n e.preventDefault(); // Stoppa sidans postback\r\n\r\n clearTimeout(filterTimeoutId);\r\n\r\n textboxFunction();\r\n\r\n return;\r\n\r\n }\r\n\r\n clearTimeout(filterTimeoutId);\r\n\r\n var timeout = 500; // Timeout i millisekunder\r\n\r\n filterTimeoutId = setTimeout(textboxFunction, timeout);\r\n\r\n});\r\n```\r\n", + "html": "

I nedan kod hanterar vi knapptryckningar via jQuery och lägger på fördröjning via JavaScripts inbyggda setTimout-funktionalitet. Detta gör att textrutans funktionalitet bara kommer att exekveras efter en halv sekunds inaktivitet av användaren, istället för varje knapptryckning.

Först behövs en referens för att hantera Timout, både att aktivera, men också att avbryta den. Denna håller vi i filterTimeoutId.

I funktionen textboxFunction, som även kan skrivas inline, direkt i setTimeout-funktionen, har vi logiken för vad som ska hända när Timeout:en har gått ut.

Vi hanterar även ett direkt Enter-slag att ignorer Timout:en för att direkt exekvera textboxens funktionalitet.

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Textbox i HTML med fördröjd funktionalitet med jQuery och Timer", + "meta_description": "", + "author_id": 1096, + "created_at": 1304331120000, + "created_by": 1096, + "updated_at": 1304331120000, + "updated_by": 1096, + "published_at": 1304331120000, + "published_by": 1096 + }, + { + "id": 500, + "title": "En varningsikon för JavaScript-fel i Chrome", + "slug": "en-varningsikon-for-javascript-fel-i-chrome", + "markdown": "\r\n\r\nEn sak som jag faktiskt saknar i Chrome som finns i både IE och FF är en liten indikation på att ett script på sidan man tittar på har gått sönder. \r\n\r\nMen självklart finns ett tillägg för det. Med den får man en liten röd varningsikon i adressfältet när det blir fel på sidans script.\r\n\r\n\r\n\r\nTillägget hittar du här: https://chrome.google.com/extensions/detail/jafmfknfnkoekkdocjiaipcnmkklaajd\r\n\r\n![Bild](http://tekniken.nu/uploads/634401145595704732-image001.png@01CC0A44.91493650__image001.png)", + "html": "

En sak som jag faktiskt saknar i Chrome som finns i både IE och FF är en liten indikation på att ett script på sidan man tittar på har gått sönder.

Men självklart finns ett tillägg för det. Med den får man en liten röd varningsikon i adressfältet när det blir fel på sidans script.


Tillägget hittar du här: https://chrome.google.com/extensions/detail/jafmfknfnkoekkdocjiaipcnmkklaajd

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "En varningsikon för JavaScript-fel i Chrome", + "meta_description": "", + "author_id": 6, + "created_at": 1305632100000, + "created_by": 6, + "updated_at": 1305632100000, + "updated_by": 6, + "published_at": 1305632100000, + "published_by": 6 + }, + { + "id": 501, + "title": "Byt språk med Google Maps API", + "slug": "byt-sprak-med-google-maps-api", + "markdown": "\r\n\r\nVid användande av Google Maps API så använder sig Google av användarens webläsares inställningar för att sätta vilket språk kartorna visas. Detta går även att manuellt sätta.\r\n\r\nDen automatiska detekteringen av språk kanske inte alltid ger dig som utvecklare det beteende som du behöver och därför kan man via argument i Javascript-referensen manuellt sätta det språket man vill ha.\r\n\r\nDet finns såklart en referenssida som listar alla tillgängliga språk.\r\n\r\nOm man t.ex. vill ha japanska som språk lägger man till argumentet language=ja:\r\n\r\n![Bild](http://tekniken.nu/uploads/google-Maps.png)\r\n```prettyprint lang-javascript\r\n\r\n\r\n \r\n\r\n \r\n\r\n```\r\n\r\n\r\nOch på servern (sparas somindex.js och körs med node.exe index.js):\r\n\r\n\r\n\r\n\r\n```prettyprint lang-javascript\r\nvar io = require('socket.io').listen(8080, { transports: [\"websocket\", \"flashsocket\", \"xhr-polling\"] });\r\n\r\nio.set('log level', 2);// reduce logging\r\n\r\nio.sockets.on('connection',function (socket) {\r\n\r\n // join to room and save the room name\r\n\r\n socket.on('checkin',function (data) {\r\n\r\n socket.join(data.room);// join a room\r\n\r\n });\r\n\r\n socket.on('volume',function (data) {\r\n\r\n// broadcast back this message to all listeners except the sender (which would prevent an endless loop)\r\n\r\n socket.broadcast.to(data.room).emit('onVolumeChange', data);\r\n\r\n });\r\n\r\n}\r\n```\r\n\r\n\r\nResultatet blir såhär: (använd Chrome eller Safari för att se volymkontrollerna)\r\n\r\n\r\n\r\n\r\n\r\nTesta själva på http://tekniken.nu/examples/socketio-range.htm \r\n\r\n\r\noch öppna därefter ytterligare ett fönster http://tekniken.nu/examples/socketio-range.htm\r\n\r\n## Hur kör man nu detta i en Windowsmiljö?\r\n\r\nNode.JS är från början byggt för Linux och länge behövde man installera Node i en Cygwin emulator för att kunna köra detta på en windowsmaskin. Numera är dock node portat till Windows och enklast laddar man ner det via NuGet:\r\n\r\n\r\nhttp://nuget.org/List/Packages/nodejs\r\n\r\n\r\nInnan du kan ladda ner Node.JS via nuget måste du först initiera ett lokalt maskin-knutet bibliotek för NuGet:\r\n\r\n\r\nKör i Package Manager Console:\r\n\r\nInitialize-Chocolatey\r\n\r\nDärefter:\r\n\r\nInstall-Package nodejs\r\n\r\nNu har du NodeJs lokalt på din maskin, antagligen i mappen C:\\NuGet\\lib\\nodejs.0.5.3\\tools\\node.exe\r\n\r\n\r\nFör att köra socket.io behöver du nu ladda ner socket.io från socket.io:\r\n\r\n\r\nhttps://github.com/learnboost/socket.io/\r\n\r\n\r\nEftersom NPM inte finns för Windows får du packa upp zipfilen och installera den manuellt i ditt projekt. Du placerar alltså socket.io på server-sidan och packar upp zip-filen i en mapp som heternode_modules:\r\n\r\n\r\n\r\n\r\n\r\nOm nu allt är uppsatt korrekt ska du kunna skriva:\r\n\r\n\r\nC:\\NuGet\\lib\\nodejs.0.5.3\\tools\\node.exe index.js\r\n\r\n\r\nFör att detta ska bli driftsäkert behöver du installera node att köras som en service. Det gör du enklast genom att använda det fånigt namngivna programmet NSSM (Non Sucking Service Manager):\r\n\r\n\r\nnssm install NodeExample C:\\NuGet\\lib\\nodejs.0.5.3\\tools\\node.exe d:\\path_to_your_project\\index.js\r\n\r\n\r\nNu kan du starta din första node tjänst\r\n\r\nNET START NodeExample\r\n\r\nOch kom ihåg att du behöver starta om servicen om du ändrar i koden. Och se till att din server som kör node.js står utanför brandväggen om du vill kunna tillåta riktigt långa connections och minska belastningen på din brandvägg ;)\r\n\r\n## Alternativt kan du köra node i IIS:\r\n\r\nDet finns även sätt att installera Node att köras som en del av IIS med IISNode(däremot är jag inte säker på att det är en bra idé att blanda in IIS av de anledningar som jag beskrev ovan men något konkret test av detta är inte genomfört än). Att utveckla med hjälp av IISNode är helt klart en fördel eftersom den startar om sig själv så fort någon av filerna ändras i projektet samt att den hanterar loggning.\r\n\r\n\r\nVi byggde resten av vår kod i .NET för så skoj är inte Javascript när det väl kommer till unittest, objektorienterad programmering osv, men för själva eventhanteringen sköts den nu med detta ramverk vilket gör att ASP.NET blir helt avlastad från dessa anrop och vi kan slösa på realtidsanrop utan att det (nästan inte) kostar något på servern. Enligt flera bloggar klarar en vanligt utrustad server med node.js av flera tiotusentals samtidiga connections vilket är enormt i förhållande till motsvarande lösning byggd med IhttpAsyncHandler (.NET).\r\n\r\n\r\nLäs även IBMs genomgång av NodeJs:\r\n\r\n\r\nhttp://www.ibm.com/developerworks/opensource/library/os-nodejs/\r\n", + "html": "

Vad är realtidswebben?

Tänk er att komma in på en sajt som säljer flygresor och när du knappat klart alla dina val kring flygtider, antal byten, barnstolar etc så kommer du till sidan ”Tyvärr finns det inga resor som matchar din sökning”. Om någon precis då avbokar sin resa finns det längre ingen möjlighet att kommunicera med dig, du har ju redan hämtat din sida. Om denna resesajt hade varit en realtidswebb –hade du kunnat få upp ett meddelande på skärmen: ”Helt otroligt! Vi har precis fått en avbokning– vill du se resan?”. Man kan jämföra det med nummerpresentation i telefonsystem – en realtidswebb gör det möjligt att ringa tillbaka till kunden, inte bara ta emot samtal.

En förutsättning för att en webbplats på riktigt ska vara en realtidswebb är att alla delar den pratar med ska vara asynkrona, dvs att saker kan hända utan att det sker enligt ett schema. En asynkron bank kan t ex skicka över pengar direkt mellan konton men en synkron bank måste vänta till efter midnatt innan överföringen kommer över. Andra exempel på asynkrona system är SMS och telefonsamtal. Microsoft hade i sin reklamfilm för Microsoft.NET 2003 en bra vision för ett helt asynkront beställningssystem där kunden kunde välja färg på sin bil och direkt när färgvalet gjordes av säljaren på handdatorn såg man hur roboten i bilfabriken bytte färg i färgsprutan. 

Google Docs är ett annat bra exempel på en realtidswebb. När någon ändrar i ett stycke, till och med bara en enskild bokstav uppdateras direkt allas webbläsare som tittar på samma dokument.

Hybrid synkron/asynkrona tekniker

Genom åren har det förekommit många försök till realtidskommunikation mellan server och klient. De vanligaste teknikerna som använts är (i kronologisk ordning):

1.      Iframe med javascript-kommandon som skickas från servern

2.      Pollning med hjälp av XMLHttpRequest

3.      Långa requests med XMLHttpRequest med XML resultat

4.      Långa requests med JsonP

5.      Separat flashkomponent som pratar med servern via sockets

Alla dessa tekniker (förutom kanske nr 1) brukar sammanfattas med förkortningen AJAX som står för Asynchronous Javascript with XML. AJAX har varit och är fortfarande en av de viktigaste komponenterna av det som kallas Web 2.0. Den största förändringen med AJAX var att man kunde uppdatera delar av skärmen utan att behöva ladda om hela sidan vilket gjorde att en webbsida känns mer som ett program på datorn. Nästa utmaning har varit att kunna skicka information som händer på servern till klienten utan att kräva omladdning av sidan och då har ovanstående tekniker använts – vanligtvis genom en timer som frågar med jämna mellanrum om det har hänt något på servern och i så fall uppdateras sidan från klienten.

När webbplatser växer och får fler användare uppstår dock två problem med dessa tekniker vilket gör att man ofta får begränsa realtidsdelarna på webbplatsen för att inte hela tjänsten ska upplevas som långsam:

A.      För många requests till webbservern gör att servern blir överbelastad. Tänk er 2000 webbläsare som ställer tre frågor per sekund till servern om något har hänt, det blir för mycket för att hantera av en vanlig webbserver. Om det dessutom innebär att servern ska kontrollera i databasen om något har hänt blir det ännu jobbigare att hantera.

B.      Klienten går långsamt för att en av de fåtal connections som finns tillgängliga i webbläsaren blir upptagna (förut var det max två connections per domänadress men nu är det ökat till runt fem-tio beroende på webbläsare )

Vad är lösningen? Websockets?

I och med införandet av HTML5 har det kommit nya sätt att kommunicera mer effektivt mellan server och klient i och med att webbläsaren numera har inbyggt stöd för att prata med WebSockets vilket är den enklaste formen av kommunikation på internet. Websockets kan liknas med en inbyggd Telnet klient i webbläsaren. Med websockets blir det därför möjligt att öppna en kanal för att skicka kommandon både till server och klient med samma teknik.

Tyvärr fungerar inte Websockets rakt av i alla webbläsare, till exempel har Firefox avaktiverat sitt websockets-stöd per default i alla senare versioner. En komplett lista på vilka webbläsare som stöder Websockets (eller andra bra HTML5 finesser) finns på den utmärkta sajten caniuse.com. För att ändå börja använda WebSockets finns det självklart ramverk som hanterar lösningen med äldre klienter med hjälp av ovanstående tekniker (iframe, ajax pollning eller flashfallback). Det ramverk vi har utvärderat och kan rekommendera heter socket.io men det finns andra t ex now.js. Socket.IO är javascriptbaserat och är ett ramverk som installeras ovanpå servern node.js.

Vad är felet på .NET?

Både Socket.IO och now.js bygger på webbservern node.js och varför det är bra ska jag snart berätta, men först måste jag förklara lite av vår tidigare erfarenhet av utveckling för större webbplatser.  Vi har på Iteam gjort en hel del webbplatser med AJAX och många har haft en s.k. eventhubb som i princip skapar en .NET baserad meddelandekö som tillåter att man kan skicka meddelanden direkt från .NET till klienten via långa AJAX-anrop (enligt princip 3 ovan). I de projekt där vi ligger på IDG:s Topp 100 lista med tusentals samtidiga användare skapar denna eventhubb en onödigt stor belastning på servern eftersom alla anrop hamnar i .NET-kärnan och varje connection tar en tråd av processorn. Varje tråd tar dessutom c:a 2 mb i minne. Detta gör att man måste balansera längden på varje anrop och antalet anrop per minut på ett sätt som gör att realtidskänslan blir mindre påtaglig när många användare är inne. Det kostar helt enkelt för mycket att ha serverkraft att hålla alla dessa uppkopplingar igång på servern. Dvs, problemet är att IIS och .NET har för stor overhead per tråd och connection för att kunna hantera detta på ett effektivt sätt.

Ok, vi fattar men kom till sak (node.js)

Node.JS är en HTTP-server byggd för att köra Javascript kod (!) väldigt effektivt och väldigt lightweight. Servern är byggd på Googles Javascriptmotor V8 som också används i Chrome. Den stora fördelen med att använda node.js är att den inte är trådad vilket gör att den kan hantera extrema mängder samtidiga uppkopplingar utan att det tar mer processorkraft eller minne av servern. När nya anrop kommer till Node.JS läggs de till i en intern buffer i node.js och skapar ingen ny tråd och tar därför i princip bara några bytes per anrop. Detta gör att Node.JS är optimal för att hantera långa asynkrona anrop och lämpar sig därför som central hubb för realtidssystem.

Singeltrådad webbserver låter dåligt tycker jag?

Parallell har alltid varit bättre än seriell tycker jag så det var för mig en gåta hur detta med ”inga trådar” kunde göras om till något positivt?

T ex skulle den här koden göra att servern hänger sig och inga anrop går igenom:




Men då tänker man fortfarande synkront. Flödet genom en kod ska inte byggas på det sättet. Istället skriver man sin kod så att långa anrop returnerar sitt resultat asynkront vilket inte hänger servern alls och tar varken cpu eller minne av det väntande anropet:







Fördjupa dig på asynkron programmering med Node.Js här:


http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/


Vad är då Socket.IO?


Så, node.JS är alltså en webbserver baserad på Javascript, perfekt för asynkrona realtidssystem men den är bara en effektiv webbserver, men för att enkelt kunna kommunicera med den behöver vi ett ramverk. Socket.IO valde vi eftersom det löser precis den uppgift vi behövde:


1.      Inkluderar både ramverk på server och på klienten


2.      Hanterar bakåtkompatibiliteten med äldre webbläsare (med hjälp av flash, XmlHttpRequests, iframe etc)


3.      Klarar att gruppera lyssnare i grupper och skicka broadcasts till alla eller urval av grupperna


4.      Använder JSON som bärare


För att testa detta valde vi att börja med en volymkontroll som skulle uppdateras direkt när man ändrar på den på någon av webbläsarna i ett rum. På servern vill vi ta emot ett kommando ”volume” med data om vilket rum som volymen har ändrats i och alla andra i samma ”rum” ska få reda på att volymen har ändrats:


På klientenhar vi en HTML5 volymkontroll (type=”range”). Observera också att klientfilerna för socket.io länkas från node.js och i vårt fall är node installerat på localhost på port 8080. Vi anger även vilken ordning vi vill använda transporterna med websockets först.





Och på servern (sparas somindex.js och körs med node.exe index.js):





Resultatet blir såhär: (använd Chrome eller Safari för att se volymkontrollerna)



Testa själva på http://tekniken.nu/examples/socketio-range.htm 


och öppna därefter ytterligare ett fönster http://tekniken.nu/examples/socketio-range.htm


Hur kör man nu detta i en Windowsmiljö?


Node.JS är från början byggt för Linux och länge behövde man installera Node i en Cygwin emulator för att kunna köra detta på en windowsmaskin. Numera är dock node portat till Windows och enklast laddar man ner det via NuGet:


http://nuget.org/List/Packages/nodejs


Innan du kan ladda ner Node.JS via nuget måste du först initiera ett lokalt maskin-knutet bibliotek för NuGet:


Kör i Package Manager Console:


Initialize-Chocolatey

Därefter:


Install-Package nodejs

Nu har du NodeJs lokalt på din maskin, antagligen i mappen C:\\NuGet\\lib\\nodejs.0.5.3\\tools\\node.exe


För att köra socket.io behöver du nu ladda ner socket.io från socket.io:


https://github.com/learnboost/socket.io/


Eftersom NPM inte finns för Windows får du packa upp zipfilen och installera den manuellt i ditt projekt. Du placerar alltså socket.io på server-sidan och packar upp zip-filen i en mapp som heternode_modules:



Om nu allt är uppsatt korrekt ska du kunna skriva:


C:\\NuGet\\lib\\nodejs.0.5.3\\tools\\node.exe index.js


För att detta ska bli driftsäkert behöver du installera node att köras som en service. Det gör du enklast genom att använda det fånigt namngivna programmet NSSM (Non Sucking Service Manager):


nssm install NodeExample C:\\NuGet\\lib\\nodejs.0.5.3\\tools\\node.exe d:\\path_to_your_project\\index.js


Nu kan du starta din första node tjänst


NET START NodeExample

Och kom ihåg att du behöver starta om servicen om du ändrar i koden. Och se till att din server som kör node.js står utanför brandväggen om du vill kunna tillåta riktigt långa connections och minska belastningen på din brandvägg ;)


Alternativt kan du köra node i IIS:


Det finns även sätt att installera Node att köras som en del av IIS med IISNode(däremot är jag inte säker på att det är en bra idé att blanda in IIS av de anledningar som jag beskrev ovan men något konkret test av detta är inte genomfört än). Att utveckla med hjälp av IISNode är helt klart en fördel eftersom den startar om sig själv så fort någon av filerna ändras i projektet samt att den hanterar loggning.


Vi byggde resten av vår kod i .NET för så skoj är inte Javascript när det väl kommer till unittest, objektorienterad programmering osv, men för själva eventhanteringen sköts den nu med detta ramverk vilket gör att ASP.NET blir helt avlastad från dessa anrop och vi kan slösa på realtidsanrop utan att det (nästan inte) kostar något på servern. Enligt flera bloggar klarar en vanligt utrustad server med node.js av flera tiotusentals samtidiga connections vilket är enormt i förhållande till motsvarande lösning byggd med IhttpAsyncHandler (.NET).


Läs även IBMs genomgång av NodeJs:


http://www.ibm.com/developerworks/opensource/library/os-nodejs/

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Så skapar du en äkta realtidswebb med Node.Js och Socket.io i Windowsmiljö", + "meta_description": "", + "author_id": 1087, + "created_at": 1314897145000, + "created_by": 1087, + "updated_at": 1314897145000, + "updated_by": 1087, + "published_at": 1314897145000, + "published_by": 1087 + }, + { + "id": 552, + "title": "Vad är NoSQL och RavenDB egentligen?", + "slug": "vad-ar-nosql-och-ravendb-egentligen", + "markdown": "\r\n\r\nUnder de senaste veckorna har vi börjat testa och labba med RavenDB på allvar för att kunna utvärdera och använda det som databas fullt ut även i skarpa kundprojekt. I den här bloggen går jag igenom hur vi byggt om en liten del av ett befintligt system med RavenDB som databas.\r\n## Hur ska man tänka med NoSQL?\r\nFörst och främst så är väl ett par ord om RavenDB på sin plats. RavenDB är en Open Source dokumentdatabas, eller en NoSQL-databas, byggd och använd primärt i .NET. RavenDB är gratis för Open Source-lösningar men kostar 25 USD per månad per instans för kommersiella projekt. En dokumentdatabas lagrar data som dokument istället för tabellrader och just RavenDB sparar JSON-objekt formaterade som strängar.\r\n\r\nMan skulle kunna säga att man i en relationsdatabas strävar efter att spara data så effektivt som möjligt, uppdelat i tabeller och väl normaliserat för att spara plats och för att kunna garantera konsistens, medan man i RavenDB och andra dokumentdatabaser istället strävar efter att hämta data så effektivt som möjligt och därmed ska försöka spara precis den information som man sedan kommer att vilja hämta upp samtidigt.\r\n## Vikten av index\r\nEn stor skillnad mellan relationsdatabaser och NoSQL är att man inte kan ställa beräkningsfrågor utan att använda ett index. I en relationsdatabas sker dynamisk beräkning när en fråga ställs medan NoSQL-databaser behöver ett index för att ställa samma fråga.  \r\n\r\nEn SQL Server kan alltså enkelt leverera svaret på följande fråga:\r\n\r\n![Bild](http://tekniken.nu/uploads/634505516508552034-image001.png@01CC694B.292E36E0__image001.png)\r\n```prettyprint lang-sql\r\nSELECT COUNT(*) FROM users WHERE userName = ’foo’\r\n```\r\n\r\n\r\nMed NoSQL måste man först definiera ett index som väljer ut och sorterar informationen på det sätt man vill fråga efter den. I andra NoSQL databaser än RavenDB är detta ett ganska tidskrävande arbete men RavenDB har en inbyggd analysdel som hjälper till att skapa dynamiska index i bakgrunden vilket gör arbetet väldigt mycket enklare, och startsträckan för att komma igång, kortare. I RavenDB skulle ovanstående fråga se ut så här (i LINQ):\r\n\r\n```prettyprint lang-c-sharp\r\nDB.Session.Query().Where(user=>user.UserName == ’foo’).Count();\r\n```\r\n\r\n\r\nFör den frågan skulle RavenDB skapa ett dynamiskt index i bakgrunden. Det namnges dessutom automatiskt till ett väldigt lättläst namn: Auto/Users/ByUserName\r\n\r\n```prettyprint lang-c-sharp\r\nfrom doc in docs.Users\r\nselect new { UserName = doc.UserName }\r\n```\r\n\r\n\r\nDen här skillnaden kan vara svår att förstå i början om man är van vid att snabbt få tillgång till sin data med t ex SQL Server, men just det här är den absolut största fördelen med NoSQL eftersom det är anledningen till att NoSQL-databaser både klarar av större datamängder och att skalas \"på bredden\". Man ska dock tänka på att RavenDB bara klarar av att skapa automatiska index för enkla frågor. För mer avancerade beräkningar behöver du skapa egna index!\r\n\r\n\r\nI RavenDB påverkar index inte prestandan när data sparas men i gengäld kan man få tillbaka ett resultat som inte är uppdaterat. När ett index skapas eller förändras, eller data förändras, ställs en fråga i bakgrunden för att hålla datan uppdaterad. Frågor du ställer mot ett index kommer att returneras direkt men om indexet samtidigt uppdateras av RavenDB kommer resultatet vara från ett tidigare indexeringstillfälle och markerat som Stale (vet du med dig att du bara vill ha fräscha resultat kan du förstås välja att vänta ut indexeringen med ett enkelt metodanrop).\r\n\r\n## Vår data\r\n\r\nI detta exempel kommer jag att visa hur man sparar och hämtar upp information om när en låt spelats i vår musikspelare Maestroo. Förutom att Maestroo behöver informationen för att veta vilka användare som gillar vilken musik och vilka låtar som spelats tillsammans  etc, så vill vi ha en egen sida för varje artist där det visas information om artisten och lite olika topplistor som senast spelade låtar och fans på Maestroo. Såhär:\r\n\r\n\r\n\r\n\r\n## Strukturen\r\n\r\nFör att uppnå detta sparar vi till RavenDB varje gång en låt spelas. Objektet TrackPlay håller reda på tid som låten spelades, användarnamn på den som spelade låten, rum som låten spelades i, själva låten som också är en egen entitet och i sin tur har ett namn, id, album och information om en artist osv.\r\n\r\n\r\n\r\n\r\n\r\nI en relationsdatabas skulle denna modell ha lagrats över flera huvudtabeller med nycklar och kopplingstabeller emellan för att knyta ihop informationen. I RavenDB ska vi istället spara modellen i ett dokument så att det blir lättare att plocka fram statistik i efterhand. T ex så här kan en TrackPlay med låt och allt se ut i Raven Studio (ni känner igen JSON-strukturen, eller hur?):\r\n\r\n\r\n\r\n\r\n\r\nSom ni ser i bilden ovan så finns alla objektens egenskaper representerade men jag har bara fyllt på objekten med den data som jag anser vara relevant att spara i detta läge (det ska alltså vara den information jag kommer att behöva när jag senare ritar upp topplistorna).\r\n\r\n## Det enkla indexet\r\n\r\nDet allra enklaste indexet är då det som används för att visa upp en lista på populäraste låtar för den här artisten. Det jag behöver i mitt index är tid som låten spelades (för att kunna sortera på senaste spelning) och artistnamn (för att kunna fråga efter en specifik artist).\r\n\r\n\r\n\r\n\r\n\r\nFör att hämta en lista över senast spelade Robynlåtar kan jag nu ställa följade fråga mot indexet TrackPlaysByPlayTimeAndArtist:\r\n\r\n\r\n\r\n\r\n\r\nOch ut kommer information för att visa denna lista:\r\n\r\n\r\n\r\n\r\n## Index enligt map/reduce-mönstret\r\n\r\nFör att hämta ut en lista på en artists största fans, alltså vilka som har spelat låtar av en viss artist flest gånger, så använder jag ett map/reduce-index. Tanken här är att indexet byggs upp i två steg. I första steget gör jag precis som i indexet ovan, alltså väljer ut vilken information som behövs för att begränsa urvalet senare. För det är egentligen det vi vill; begränsa urvalet i indexet så att det blir så litet som möjligt. I nästa steg så grupperas urvalet om och reduceras ytterligare.\r\n\r\n\r\n\r\n\r\n\r\nIndexet kan nu t ex användas på detta vis:\r\n\r\n\r\n\r\n\r\n\r\nI queryn returneras ett fan av en artist:\r\n\r\n\r\n\r\n\r\n\r\nOch resultatet används för att visa användare som gillar artisten i fråga:\r\n\r\n\r\n\r\n\r\n\r\nFler bloggar om RavenDB kommer sannolikt att dyka upp i framtiden. Under tiden, ta en titt på våra tidigare tips:\r\n\r\n\r\nhttp://tekniken.nu/utvecklingstips/vad-ar-mapreduce-och-hur-anvander-man-det-i-nosql\r\n\r\n\r\nhttp://tekniken.nu/utvecklingstips/ravendb-music-store\r\n", + "html": "

Under de senaste veckorna har vi börjat testa och labba med RavenDB på allvar för att kunna utvärdera och använda det som databas fullt ut även i skarpa kundprojekt. I den här bloggen går jag igenom hur vi byggt om en liten del av ett befintligt system med RavenDB som databas.

Hur ska man tänka med NoSQL?

Först och främst så är väl ett par ord om RavenDB på sin plats. RavenDB är en Open Source dokumentdatabas, eller en NoSQL-databas, byggd och använd primärt i .NET. RavenDB är gratis för Open Source-lösningar men kostar 25 USD per månad per instans för kommersiella projekt. En dokumentdatabas lagrar data som dokument istället för tabellrader och just RavenDB sparar JSON-objekt formaterade som strängar.

Man skulle kunna säga att man i en relationsdatabas strävar efter att spara data så effektivt som möjligt, uppdelat i tabeller och väl normaliserat för att spara plats och för att kunna garantera konsistens, medan man i RavenDB och andra dokumentdatabaser istället strävar efter att hämta data så effektivt som möjligt och därmed ska försöka spara precis den information som man sedan kommer att vilja hämta upp samtidigt.

Vikten av index

En stor skillnad mellan relationsdatabaser och NoSQL är att man inte kan ställa beräkningsfrågor utan att använda ett index. I en relationsdatabas sker dynamisk beräkning när en fråga ställs medan NoSQL-databaser behöver ett index för att ställa samma fråga.  

En SQL Server kan alltså enkelt leverera svaret på följande fråga:



Med NoSQL måste man först definiera ett index som väljer ut och sorterar informationen på det sätt man vill fråga efter den. I andra NoSQL databaser än RavenDB är detta ett ganska tidskrävande arbete men RavenDB har en inbyggd analysdel som hjälper till att skapa dynamiska index i bakgrunden vilket gör arbetet väldigt mycket enklare, och startsträckan för att komma igång, kortare. I RavenDB skulle ovanstående fråga se ut så här (i LINQ):



För den frågan skulle RavenDB skapa ett dynamiskt index i bakgrunden. Det namnges dessutom automatiskt till ett väldigt lättläst namn: Auto/Users/ByUserName



Den här skillnaden kan vara svår att förstå i början om man är van vid att snabbt få tillgång till sin data med t ex SQL Server, men just det här är den absolut största fördelen med NoSQL eftersom det är anledningen till att NoSQL-databaser både klarar av större datamängder och att skalas \"på bredden\". Man ska dock tänka på att RavenDB bara klarar av att skapa automatiska index för enkla frågor. För mer avancerade beräkningar behöver du skapa egna index!


I RavenDB påverkar index inte prestandan när data sparas men i gengäld kan man få tillbaka ett resultat som inte är uppdaterat. När ett index skapas eller förändras, eller data förändras, ställs en fråga i bakgrunden för att hålla datan uppdaterad. Frågor du ställer mot ett index kommer att returneras direkt men om indexet samtidigt uppdateras av RavenDB kommer resultatet vara från ett tidigare indexeringstillfälle och markerat som Stale (vet du med dig att du bara vill ha fräscha resultat kan du förstås välja att vänta ut indexeringen med ett enkelt metodanrop).


Vår data


I detta exempel kommer jag att visa hur man sparar och hämtar upp information om när en låt spelats i vår musikspelare Maestroo. Förutom att Maestroo behöver informationen för att veta vilka användare som gillar vilken musik och vilka låtar som spelats tillsammans  etc, så vill vi ha en egen sida för varje artist där det visas information om artisten och lite olika topplistor som senast spelade låtar och fans på Maestroo. Såhär:




Strukturen


För att uppnå detta sparar vi till RavenDB varje gång en låt spelas. Objektet TrackPlay håller reda på tid som låten spelades, användarnamn på den som spelade låten, rum som låten spelades i, själva låten som också är en egen entitet och i sin tur har ett namn, id, album och information om en artist osv.




I en relationsdatabas skulle denna modell ha lagrats över flera huvudtabeller med nycklar och kopplingstabeller emellan för att knyta ihop informationen. I RavenDB ska vi istället spara modellen i ett dokument så att det blir lättare att plocka fram statistik i efterhand. T ex så här kan en TrackPlay med låt och allt se ut i Raven Studio (ni känner igen JSON-strukturen, eller hur?):




Som ni ser i bilden ovan så finns alla objektens egenskaper representerade men jag har bara fyllt på objekten med den data som jag anser vara relevant att spara i detta läge (det ska alltså vara den information jag kommer att behöva när jag senare ritar upp topplistorna).


Det enkla indexet


Det allra enklaste indexet är då det som används för att visa upp en lista på populäraste låtar för den här artisten. Det jag behöver i mitt index är tid som låten spelades (för att kunna sortera på senaste spelning) och artistnamn (för att kunna fråga efter en specifik artist).




För att hämta en lista över senast spelade Robynlåtar kan jag nu ställa följade fråga mot indexet TrackPlaysByPlayTimeAndArtist:




Och ut kommer information för att visa denna lista:




Index enligt map/reduce-mönstret


För att hämta ut en lista på en artists största fans, alltså vilka som har spelat låtar av en viss artist flest gånger, så använder jag ett map/reduce-index. Tanken här är att indexet byggs upp i två steg. I första steget gör jag precis som i indexet ovan, alltså väljer ut vilken information som behövs för att begränsa urvalet senare. För det är egentligen det vi vill; begränsa urvalet i indexet så att det blir så litet som möjligt. I nästa steg så grupperas urvalet om och reduceras ytterligare.




Indexet kan nu t ex användas på detta vis:




I queryn returneras ett fan av en artist:




Och resultatet används för att visa användare som gillar artisten i fråga:




Fler bloggar om RavenDB kommer sannolikt att dyka upp i framtiden. Under tiden, ta en titt på våra tidigare tips:


http://tekniken.nu/utvecklingstips/vad-ar-mapreduce-och-hur-anvander-man-det-i-nosql


http://tekniken.nu/utvecklingstips/ravendb-music-store

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Vad är NoSQL och RavenDB egentligen?", + "meta_description": "", + "author_id": 1093, + "created_at": 1314954849000, + "created_by": 1093, + "updated_at": 1314954849000, + "updated_by": 1093, + "published_at": 1314954849000, + "published_by": 1093 + }, + { + "id": 557, + "title": "EPi-måste-ha: länk till sida i edit", + "slug": "epi-maste-ha-lank-till-sida-i-edit", + "markdown": "\r\n\r\nSå här länkar du direkt till en sida i EPiServers editgränssnitt.\r\n\r\nPerfekt när man skapat en ny sida automatiskt och vill låta redaktören se över innehåller eller från mailnotifiering när action krävs från redaktören.\r\n\r\n![Bild](http://tekniken.nu/uploads/episerver.jpg)\r\n```prettyprint lang-c-sharp\r\nstring baselink = UriSupport.AbsoluteUrlFromUIBySettings(\"edit/\");\r\n\r\nResponse.Redirect(baselink + \"default.aspx?id=\" + page.PageLink.ToString());\r\n```\r\n", + "html": "

Så här länkar du direkt till en sida i EPiServers editgränssnitt.

Perfekt när man skapat en ny sida automatiskt och vill låta redaktören se över innehåller eller från mailnotifiering när action krävs från redaktören.

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "EPi-måste-ha: länk till sida i edit", + "meta_description": "", + "author_id": 1093, + "created_at": 1315306260000, + "created_by": 1093, + "updated_at": 1315306260000, + "updated_by": 1093, + "published_at": 1315306260000, + "published_by": 1093 + }, + { + "id": 563, + "title": "Tankestreck i listor i HTML", + "slug": "tankestreck-i-listor-i-html", + "markdown": "\r\n\r\nDe inbyggda HTML koderna UL och LI har inte stöd för (det i svenskan vanligaste?) listformatet:\r\n\r\n- Åtgärd 1\r\n\r\n- Åtgärd 2\r\n\r\n- Åtgärd 3\r\n\r\n- Åtgärd 4\r\n\r\nDe val som finns i CSS för punktlistor är: ”Square”,  ”Circle”, ”Decimal” osv men inte ”Hyphen”.\r\n\r\nSå här skriver du för att få till detta i browsers som stöder Content i CSS (dvs från IE8 och framåt).  Och MÅSTE man stöda äldre versioner av IE finns det också ett hack för dessa.\r\n\r\n![Bild](http://tekniken.nu/uploads/634515259618941751-image001.png@01CC6EF7.703D3A20__image001.png)\r\n```prettyprint lang-c-sharp\r\n\r\n\r\n \r\n... \r\n
    \r\n
  • number 1 task
  • \r\n
  • number 2 task
  • \r\n
  • number 3 task
  • \r\n
  • number 4 task
  • \r\n
  • number 5 task
  • \r\n
  • number 6 task
  • \r\n
\r\n\r\n\r\n```\r\n\r\n\r\nGer:\r\n\r\n\r\n\r\nOm du vill använda ett långt tankestreck skriver du istället:\r\n\r\ncontent: \"\\2014\\a0\";\r\n\r\n\r\n", + "html": "

De inbyggda HTML koderna UL och LI har inte stöd för (det i svenskan vanligaste?) listformatet:

- Åtgärd 1

- Åtgärd 2

- Åtgärd 3

- Åtgärd 4

De val som finns i CSS för punktlistor är: ”Square”,  ”Circle”, ”Decimal” osv men inte ”Hyphen”.

Så här skriver du för att få till detta i browsers som stöder Content i CSS (dvs från IE8 och framåt).  Och MÅSTE man stöda äldre versioner av IE finns det också ett hack för dessa.



Ger:


Om du vill använda ett långt tankestreck skriver du istället:

content: \"\\2014\\a0\";


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Tankestreck i listor i HTML", + "meta_description": "", + "author_id": 1087, + "created_at": 1315929600000, + "created_by": 1087, + "updated_at": 1315929600000, + "updated_by": 1087, + "published_at": 1315929600000, + "published_by": 1087 + }, + { + "id": 565, + "title": "Ångra/ta bort en branch i TFS", + "slug": "angrata-bort-en-branch-i-tfs", + "markdown": "\r\nOm man råkar skapa en branch i TFS men på fel nivå kan man hamna i ett läge där det inte går att skapa ny branch på en högre nivå för den felaktiga branchen ”spärrar” hela trädet. Du får då en TF203071 fel:\r\n\r\n\r\n\r\nFör att lösa problemet måste först ta bort den felaktiga grenen (branch) permanent. Du måste ange hela sökvägen dvs börja med $/ och ange /startcleanup – annars händer inget.\r\n\r\ntf destroy $// /startcleanup\r\n\r\nNär du gjort detta och uppdaterar försvinner grenen från source control men stället du skapade grenen ifrån är fortfarande markerad som gren. För att ta bort denna markering väljer du mappen i Source Control Explorer och väljer Source Control, Branching and Merging, Convert To Folder.\r\n\r\n\r\n\r\n\r\n\r\nVoila, nu är du tillbaka där du var för en halvtimme sen, innan alla svordomar om TFS och hur mycket bättre Subversion och HG/Git är på detta ;) (för dom har andra problem, tro mig)\r\n![Bild](http://tekniken.nu/uploads/634520357523346735-image001.png@01CC7480.AAFA2D60__image001.png)", + "html": "

Om man råkar skapa en branch i TFS men på fel nivå kan man hamna i ett läge där det inte går att skapa ny branch på en högre nivå för den felaktiga branchen ”spärrar” hela trädet. Du får då en TF203071 fel:

För att lösa problemet måste först ta bort den felaktiga grenen (branch) permanent. Du måste ange hela sökvägen dvs börja med $/ och ange /startcleanup – annars händer inget.

tf destroy $/<team project>/<branch dir> /startcleanup

När du gjort detta och uppdaterar försvinner grenen från source control men stället du skapade grenen ifrån är fortfarande markerad som gren. För att ta bort denna markering väljer du mappen i Source Control Explorer och väljer Source Control, Branching and Merging, Convert To Folder.

Voila, nu är du tillbaka där du var för en halvtimme sen, innan alla svordomar om TFS och hur mycket bättre Subversion och HG/Git är på detta ;) (för dom har andra problem, tro mig)", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Ångra/ta bort en branch i TFS", + "meta_description": "", + "author_id": 1087, + "created_at": 1316439300000, + "created_by": 1087, + "updated_at": 1316439300000, + "updated_by": 1087, + "published_at": 1316439300000, + "published_by": 1087 + }, + { + "id": 570, + "title": "Snabbtips: Null-check på kollektioner i C#", + "slug": "snabbtips-null-check-pa-kollektioner-i-c", + "markdown": "\r\nHur många gånger har du gjort djupt nästlade if-satser för att göranull-check innan du loopar igenom en kollektion? Med detta snabbtips slipper du det.\r\n\r\nDetta är ett mönster du ofta ser i kod som hanterar kollektioner, som snabbt blir jobbigt att läsa p.g.a. onödigt djupt nästlade klammerparenteser:\r\n\r\npublic void LoopList(List list) {\r\n\r\n    // Logik som görs innan loop\r\n\r\n    if(list != null) {\r\n\r\n        foreach(var item in list) {\r\n\r\n            // Gör något\r\n\r\n        }\r\n\r\n    }\r\n\r\n    // Logik som görs efter loop\r\n\r\n}\r\n\r\nMed introduktionen av Extension Methods i LINQ så lades det till ny funktionalitet påIEnumerable, som används av alla kollektioner och allt som går att köraforeach över.\r\n\r\nOm du ser till att använda metoden DefaultIfEmpty som finns tillgängligt om du använder dig av namnrymdenSystem.Linq så kan du vara säker på att din loop inte kraschar hela applikationen:\r\n\r\npublic void LoopList(List list) {\r\n\r\n    // Logik som görs innan loop\r\n\r\n    foreach(var item in list.DefaultIfEmpty()) {\r\n\r\n        // Gör något\r\n\r\n    }\r\n\r\n    // Logik som görs efter loop\r\n\r\n}\r\n\r\nI vanliga fall hade en metod på ett objekt som är null kastat ettexception, men detta är en Extension Method, som kan kolla om objektet den tillhör ärnull eller inte, utan krasch.", + "html": "

Hur många gånger har du gjort djupt nästlade if-satser för att göranull-check innan du loopar igenom en kollektion? Med detta snabbtips slipper du det.

Detta är ett mönster du ofta ser i kod som hanterar kollektioner, som snabbt blir jobbigt att läsa p.g.a. onödigt djupt nästlade klammerparenteser:

public void LoopList(List<string> list) {

    // Logik som görs innan loop

    if(list != null) {

        foreach(var item in list) {

            // Gör något

        }

    }

    // Logik som görs efter loop

}

Med introduktionen av Extension Methods i LINQ så lades det till ny funktionalitet påIEnumerable<T>, som används av alla kollektioner och allt som går att köraforeach över.

Om du ser till att använda metoden DefaultIfEmpty som finns tillgängligt om du använder dig av namnrymdenSystem.Linq så kan du vara säker på att din loop inte kraschar hela applikationen:

public void LoopList(List<string> list) {

    // Logik som görs innan loop

    foreach(var item in list.DefaultIfEmpty()) {

        // Gör något

    }

    // Logik som görs efter loop

}

I vanliga fall hade en metod på ett objekt som är null kastat ettexception, men detta är en Extension Method, som kan kolla om objektet den tillhör ärnull eller inte, utan krasch.", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Snabbtips: Null-check på kollektioner i C#", + "meta_description": null, + "author_id": 1096, + "created_at": 1317741502000, + "created_by": 1096, + "updated_at": 1317741502000, + "updated_by": 1096, + "published_at": 1317741502000, + "published_by": 1096 + }, + { + "id": 571, + "title": "Tips till dig som skickar ut nyhetsbrev", + "slug": "tips-till-dig-som-skickar-ut-nyhetsbrev", + "markdown": "\r\n\r\nI dag fick jag ett nyhetsbrev som ser ut som de flesta nyhetsbrev jag får; inte bra alls!\r\n\r\n Det här nyhetsbrevet belyste extra tydligt de problem många har men inte tänker på när de skickar ut nyhetsbrev.  Det största problemet är att man inte testar hur nyhetsbrevet kommer se ut när det kommer fram utan bara godkänner korrektur utifrån en skiss eller möjligtvis en webbsida. Alla mailprogram tolkar HTML olika och anledningen till det är att man försöker städa bort potentiellt farlig kod och förhindra att privat information från mottagarens dator kommer tillbaka till avsändaren av mailet. Förr i tiden kunde man nämligen spåra vilka mail som kommit fram genom att lägga en liten gömd ”tracker-bild” som skickade tillbaka information till avsändarens server. \r\n\r\nDet mest åtsatta mailprogrammet är självklart Outlook som har haft många incidenter genom åren då hackare har lyckats skicka virus eller spam med skadlig kod som plockats upp och körts av Outlook. Därför är Outlook också den svåraste mailklienten att få ett nyhetsbrev att bli snyggt i.\r\n\r\n\r\n## Kontrollera nyhetsbrevet innan du trycker på Skicka\r\n- Räkna aldrig med att bilder är laddade, det är de inte.\r\n\r\n- Använd typografi, linjer, färger, tabeller men undvik bilder för annat än illustrationer.\r\n\r\n- Skriv ”Öppna brevet med bilder” istället för ”Ser mailet konstigt ut?”, utgå från att mailet ser konstigt ut :)\r\n\r\n- Testa testa testa! Det är tråkigt men du måste framför allt provläsa din mall i alla mailprogram och webbmailprogram. Helst ska du även testa alla enskilda utskick. Använd gärna onlinetjänster som t ex ”EmailOnAcid” som gör screenshots av ditt mail i alla kända mailprogram på både Mac, PC och Linux.\r\n\r\n- Använd ”gammal hederlig” HTML, inte ny modern CSS3 kod. Outlook använder nämligen Word som HTML rendrerare och den är kvar på Internet Explorer 4 nivå ungefär. Så tillbaka till tabeller, cellpadding, cellspacing, valign, halign, vspace, hspace osv.\r\n\r\n- Var pragmatisk, ibland kan man lägga tiotals timmar på att få till en exakt placering av en bild, utgå från hur det bli och jobba med designen därifrån. Det kan tyvärr ibland bli bättre resultat i slutändan.\r\n\r\n- Tänk att många numera läser mailet i sin smartphone. Länkar osv ska fungera även i mobilen!\r\n\r\n- Använd professionella utskickstjänster eller var extremt noggrann när du skriver koden som skickar ut mailet. Det kan skada ett varumärke väldigt mycket att skicka ut brev med fel innehåll, vid fel tid, till fel mottagare osv. Och det är väldigt lätt att göra fel, framför allt är det omöjligt att ta tillbaka ett skickat mail. Bra mailtjänster för utskick är Apsis (helhetsleverantör), \r\n\r\n- Om du ändå bestämmer dig för att bygga egen utskickslogik så bör du ändå använda en extern SMTP för att undvika att din server blir svartlistad. AuthSMTP är en bra leverantör för själva utskicket som hanterar allt arbete med att säkra sina servrar och plockar bort sig från eventuella svartlistor. De hanterar även greylisting och försöker skicka mail tills det kommer fram.\r\n\r\n- Spara läs-statistik. Genom att lägga in kod som spårar när mottagaren har öppnat mailet, antingen genom att klicka på ”Hämta alla bilder”, eller ”Öppna brevet med bilder”.\r\n\r\n- Avaktivera mottagare som har bytt emailadress, de påverkar statistiken negativt och tar bandbredd och resurser. Se till att kontinuerligt uppmana dina kunder/säljare att uppdatera epostadresserna.\r\n## Sen lite hygienfaktorer\r\n- Vad är budskapet? Vad ska hända när mottagaren tar emot brevet? Vad är avslutet?\r\n\r\n- Undvik att upplevas som spammare, erbjud riktigt innehåll som faktiskt är intressant för mottagaren – annars får du självklart en motsatt effekt\r\n\r\n- Erbjud en enkel ”Avregistrera mig från nyhetsbrevet” och kräv inget mer än ett godkännande av mottagaren. Att logga in på en sajt med lösenord osv för att avregistrera sig är inte speciellt bra kundvård. Det kommer bara öka frustrationen för mottagaren.\r\n\r\nHär kommer mailet jag fick i morse, det är tyvärr ett klockrent exempel på hur man inte har gjort något av ovanstående. De har inte testat, de utgår från att bilderna är laddade, budskapet är väldigt otydligt. Jag hoppas Kontorab läser det här och bättrar sig.\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/634533383027481919-image001.png@01CC79CE.442DAE10__image001.png)", + "html": "

I dag fick jag ett nyhetsbrev som ser ut som de flesta nyhetsbrev jag får; inte bra alls!

Det här nyhetsbrevet belyste extra tydligt de problem många har men inte tänker på när de skickar ut nyhetsbrev.  Det största problemet är att man inte testar hur nyhetsbrevet kommer se ut när det kommer fram utan bara godkänner korrektur utifrån en skiss eller möjligtvis en webbsida. Alla mailprogram tolkar HTML olika och anledningen till det är att man försöker städa bort potentiellt farlig kod och förhindra att privat information från mottagarens dator kommer tillbaka till avsändaren av mailet. Förr i tiden kunde man nämligen spåra vilka mail som kommit fram genom att lägga en liten gömd ”tracker-bild” som skickade tillbaka information till avsändarens server.

Det mest åtsatta mailprogrammet är självklart Outlook som har haft många incidenter genom åren då hackare har lyckats skicka virus eller spam med skadlig kod som plockats upp och körts av Outlook. Därför är Outlook också den svåraste mailklienten att få ett nyhetsbrev att bli snyggt i.

Kontrollera nyhetsbrevet innan du trycker på Skicka

- Räkna aldrig med att bilder är laddade, det är de inte.

- Använd typografi, linjer, färger, tabeller men undvik bilder för annat än illustrationer.

- Skriv ”Öppna brevet med bilder” istället för ”Ser mailet konstigt ut?”, utgå från att mailet ser konstigt ut :)

- Testa testa testa! Det är tråkigt men du måste framför allt provläsa din mall i alla mailprogram och webbmailprogram. Helst ska du även testa alla enskilda utskick. Använd gärna onlinetjänster som t ex ”EmailOnAcid” som gör screenshots av ditt mail i alla kända mailprogram på både Mac, PC och Linux.

- Använd ”gammal hederlig” HTML, inte ny modern CSS3 kod. Outlook använder nämligen Word som HTML rendrerare och den är kvar på Internet Explorer 4 nivå ungefär. Så tillbaka till tabeller, cellpadding, cellspacing, valign, halign, vspace, hspace osv.

- Var pragmatisk, ibland kan man lägga tiotals timmar på att få till en exakt placering av en bild, utgå från hur det bli och jobba med designen därifrån. Det kan tyvärr ibland bli bättre resultat i slutändan.

- Tänk att många numera läser mailet i sin smartphone. Länkar osv ska fungera även i mobilen!

- Använd professionella utskickstjänster eller var extremt noggrann när du skriver koden som skickar ut mailet. Det kan skada ett varumärke väldigt mycket att skicka ut brev med fel innehåll, vid fel tid, till fel mottagare osv. Och det är väldigt lätt att göra fel, framför allt är det omöjligt att ta tillbaka ett skickat mail. Bra mailtjänster för utskick är Apsis (helhetsleverantör),

- Om du ändå bestämmer dig för att bygga egen utskickslogik så bör du ändå använda en extern SMTP för att undvika att din server blir svartlistad. AuthSMTP är en bra leverantör för själva utskicket som hanterar allt arbete med att säkra sina servrar och plockar bort sig från eventuella svartlistor. De hanterar även greylisting och försöker skicka mail tills det kommer fram.

- Spara läs-statistik. Genom att lägga in kod som spårar när mottagaren har öppnat mailet, antingen genom att klicka på ”Hämta alla bilder”, eller ”Öppna brevet med bilder”.

- Avaktivera mottagare som har bytt emailadress, de påverkar statistiken negativt och tar bandbredd och resurser. Se till att kontinuerligt uppmana dina kunder/säljare att uppdatera epostadresserna.

Sen lite hygienfaktorer

- Vad är budskapet? Vad ska hända när mottagaren tar emot brevet? Vad är avslutet?

- Undvik att upplevas som spammare, erbjud riktigt innehåll som faktiskt är intressant för mottagaren – annars får du självklart en motsatt effekt

- Erbjud en enkel ”Avregistrera mig från nyhetsbrevet” och kräv inget mer än ett godkännande av mottagaren. Att logga in på en sajt med lösenord osv för att avregistrera sig är inte speciellt bra kundvård. Det kommer bara öka frustrationen för mottagaren.

Här kommer mailet jag fick i morse, det är tyvärr ett klockrent exempel på hur man inte har gjort något av ovanstående. De har inte testat, de utgår från att bilderna är laddade, budskapet är väldigt otydligt. Jag hoppas Kontorab läser det här och bättrar sig.


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Tips till dig som skickar ut nyhetsbrev", + "meta_description": "", + "author_id": 1087, + "created_at": 1317897060000, + "created_by": 1087, + "updated_at": 1317897060000, + "updated_by": 1087, + "published_at": 1317897060000, + "published_by": 1087 + }, + { + "id": 572, + "title": "Läs Dynamic Content-innehåll i EPiServer CMS utan att visa sidan", + "slug": "las-dynamic-content-innehall-i-episerver-cms-utan-att-visa-sidan", + "markdown": "\r\n\r\nHärom dagen behövde jag få fram hela textinnehållet på en sida i EPiServer för att indexera i en separat söktjänst. Det dynamiska innehåll som fanns på sidan kom först inte med alls eftersom det bara är sparat som placeholders i texten. Men med den här kodsnutten så är det inga problem att få ut det renderade innehållet i en kontrollen:\r\n\r\n![Bild](http://tekniken.nu/uploads/episerver.jpg)\r\n```prettyprint lang-c-sharp\r\npublic static string GetXHtmlPropertyContent(PageData page, string propertyName)\r\n{\r\n\t//create control for the page and property to use for rendering\r\n var control = new PropertyLongStringControl();\r\n\tcontrol.PropertyData = page.Property[propertyName];\r\n\tcontrol.SetupControl();\r\n //render the control\r\n var writer = new StringWriter();\r\n var htmlTextWriter = new HtmlTextWriter(writer);\r\n\tcontrol.RenderControl(htmlTextWriter);\r\n return writer.ToString();\r\n}\r\n```\r\n", + "html": "

Härom dagen behövde jag få fram hela textinnehållet på en sida i EPiServer för att indexera i en separat söktjänst. Det dynamiska innehåll som fanns på sidan kom först inte med alls eftersom det bara är sparat som placeholders i texten. Men med den här kodsnutten så är det inga problem att få ut det renderade innehållet i en kontrollen:

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Läs Dynamic Content-innehåll i EPiServer CMS utan att visa sidan", + "meta_description": "", + "author_id": 1093, + "created_at": 1318241838000, + "created_by": 1093, + "updated_at": 1318241838000, + "updated_by": 1093, + "published_at": 1318241838000, + "published_by": 1093 + }, + { + "id": 573, + "title": "Lös problem med log4net-loggning i EPiServer", + "slug": "los-problem-med-log4net-loggning-i-episerver", + "markdown": "\r\n\r\nLog4net är ett väldigt bra verktyg för att logga (framför allt fel) i sin webbapplikation. EPiServer har inbyggt stöd för log4net och bara genom att ta med en fil som heter EPiServerLog.config så kommer både din egen loggning och EPiServers inbyggda att hamna i en fil, via epost eller strömmas via UDP. Vi har dock haft väldigt mycket problem med loggningen i EPiServer som alla tar sin utgångspunkt i att loggningen helt enkelt inte fungerar. Olika typer av workarounds (som att mappa upp en separat loggfil för vår egen loggning) har bara skapat en massa andra problem, med prestanda bland annat.\r\n\r\nTed Nyberg, en av Sveriges namnkunnigaste EPiServer-utvecklare, har i en bloggpost upptäckt varför. Det är inte en av de vanliga orsakerna som att app poolens användare inte har skrivrättigheter i katalogen där loggfilen ska hamna – det är en bugg i EPiServer. Om man har ett klass-objekt för loggning i global.asax så går hela loggningen sönder!\r\n\r\nDet tråkiga är ju att det oftast är precis det man har. Ett klassiskt log4net-pattern ser ut såhär:\r\n\r\n![Bild](http://tekniken.nu/uploads/634540269003730948-river_log.jpg)\r\n```prettyprint lang-c-sharp\r\nnamespace MyNameSpace \r\n{\r\n\tpublic class MyClass \r\n\t{\r\n\t\tprivate static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);\r\n\r\n\t\tpublic void MyMethod() \r\n\t\t{\r\n\t\t\tlog.Warn(“Call to MyMethod!”);\r\n\t\t}\r\n\t}\r\n}\r\n```\r\n\r\n\r\nDet går bra att fortsätta göra så här i ditt EPiServer-projekt,men inte i global.asax.\r\n\r\n\r\nLäs mer i Ted Nybergs bloggpost som också innehåller en massa andra matnyttiga tips när det gäller loggning i EPiServer.\r\n", + "html": "

Log4net är ett väldigt bra verktyg för att logga (framför allt fel) i sin webbapplikation. EPiServer har inbyggt stöd för log4net och bara genom att ta med en fil som heter EPiServerLog.config så kommer både din egen loggning och EPiServers inbyggda att hamna i en fil, via epost eller strömmas via UDP. Vi har dock haft väldigt mycket problem med loggningen i EPiServer som alla tar sin utgångspunkt i att loggningen helt enkelt inte fungerar. Olika typer av workarounds (som att mappa upp en separat loggfil för vår egen loggning) har bara skapat en massa andra problem, med prestanda bland annat.

Ted Nyberg, en av Sveriges namnkunnigaste EPiServer-utvecklare, har i en bloggpost upptäckt varför. Det är inte en av de vanliga orsakerna som att app poolens användare inte har skrivrättigheter i katalogen där loggfilen ska hamna – det är en bugg i EPiServer. Om man har ett klass-objekt för loggning i global.asax så går hela loggningen sönder!

Det tråkiga är ju att det oftast är precis det man har. Ett klassiskt log4net-pattern ser ut såhär:



Det går bra att fortsätta göra så här i ditt EPiServer-projekt,men inte i global.asax.


Läs mer i Ted Nybergs bloggpost som också innehåller en massa andra matnyttiga tips när det gäller loggning i EPiServer.

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Lös problem med log4net-loggning i EPiServer", + "meta_description": "", + "author_id": 6, + "created_at": 1318850520000, + "created_by": 6, + "updated_at": 1318850520000, + "updated_by": 6, + "published_at": 1318850520000, + "published_by": 6 + }, + { + "id": 576, + "title": "Fungerar NuGet-paket på din byggserver?", + "slug": "fungerar-nuget-paket-pa-din-byggserver", + "markdown": "\r\n\r\nOm du inte börjat använda NuGet än bör du börja nu. NuGet är en pakethanterare som innehåller alla ramverk som du behöver i dina webbprojekt och hanterar allt från versioner, beroenden till andra paket, registrerar dll filer och referenser i ditt projekt, justerar web.config och framför allt – när det kommer nya versioner av ett paket kan du uppgradera till den nya versionen och NuGet kan hjälpa till att byta referenser.\r\n\r\n\r\n\r\nOm du använder NuGet och dessutom har en TFS build server som automatiskt bygger dina projekt (principen fungerar också bra om du t ex använder AppHarbor som byggserver), då kan du lägga in följande kodsnutt i din projektfil (redigera .csproj med notepad).\r\n\r\nInstallera först NuGet på din buildserver:\r\n\r\nhttp://visualstudiogallery.msdn.microsoft.com/27077b70-9dad-4c64-adcf-c7cf6bc9970c\r\n\r\nKlistra in denna i din .csproj fil (med notepad).\r\n\r\n\r\n\r\nNu hämtar din TFS server automatiskt alla nugetpaket som du refererar till och de behöver därmed inte längre checkas in för att fungera!\r\n\r\nKälla:\r\n\r\nhttp://blog.dantup.com/2011/05/setting-up-nuget-to-automatically-fetch-packages-when-deploying-to-appharbor-without-storing-binaries-in-source-control\r\n\r\n![Bild](http://tekniken.nu/uploads/nuget-229x64.png)", + "html": "

Om du inte börjat använda NuGet än bör du börja nu. NuGet är en pakethanterare som innehåller alla ramverk som du behöver i dina webbprojekt och hanterar allt från versioner, beroenden till andra paket, registrerar dll filer och referenser i ditt projekt, justerar web.config och framför allt – när det kommer nya versioner av ett paket kan du uppgradera till den nya versionen och NuGet kan hjälpa till att byta referenser.


Om du använder NuGet och dessutom har en TFS build server som automatiskt bygger dina projekt (principen fungerar också bra om du t ex använder AppHarbor som byggserver), då kan du lägga in följande kodsnutt i din projektfil (redigera .csproj med notepad).

Installera först NuGet på din buildserver:

http://visualstudiogallery.msdn.microsoft.com/27077b70-9dad-4c64-adcf-c7cf6bc9970c

Klistra in denna i din .csproj fil (med notepad).

<Target Name=\"BeforeBuild\">
<Exec Command=\"&quot;c:\\NuGet\\bin\\nuget.bat&quot; install &quot;$(ProjectDir)packages.config&quot; -o &quot;$(SolutionDir)packages&quot;\" />
</Target>

Nu hämtar din TFS server automatiskt alla nugetpaket som du refererar till och de behöver därmed inte längre checkas in för att fungera!

Källa:

http://blog.dantup.com/2011/05/setting-up-nuget-to-automatically-fetch-packages-when-deploying-to-appharbor-without-storing-binaries-in-source-control

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Fungerar NuGet-paket på din byggserver?", + "meta_description": "", + "author_id": 1087, + "created_at": 1319640900000, + "created_by": 1087, + "updated_at": 1319640900000, + "updated_by": 1087, + "published_at": 1319640900000, + "published_by": 1087 + }, + { + "id": 577, + "title": "Hur mår API:erna?", + "slug": "hur-mar-apierna", + "markdown": "\r\n\r\nDen sammankopplade världen där allt fler tjänster finns i molnet är fantastisk – men den ställer också krav på att allas API:er fungerar som de ska och är uppe. Om du undrar hur det står till med API:erna för de största och mest använda siterna finns den utmärkta tjänsten http://api-status.com/. Den visar både status just nu och en historik på ungefär en vecka bakåt.\r\n\r\n\r\n\r\nStatus just nu:\r\n\r\n\r\n\r\n\r\n\r\nHistorik (skärpning DropBox!):\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/634551516343694971-image001.png@01CC8E56.3C74F010__image001.png)", + "html": "

Den sammankopplade världen där allt fler tjänster finns i molnet är fantastisk – men den ställer också krav på att allas API:er fungerar som de ska och är uppe. Om du undrar hur det står till med API:erna för de största och mest använda siterna finns den utmärkta tjänsten http://api-status.com/. Den visar både status just nu och en historik på ungefär en vecka bakåt.

Status just nu:



Historik (skärpning DropBox!):


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Hur mår API:erna?", + "meta_description": "", + "author_id": 6, + "created_at": 1319554834000, + "created_by": 6, + "updated_at": 1319554834000, + "updated_by": 6, + "published_at": 1319554834000, + "published_by": 6 + }, + { + "id": 579, + "title": "Nu är det jättelätt med rundade hörn i HTML!", + "slug": "nu-ar-det-jattelatt-med-rundade-horn-i-html", + "markdown": "\r\n\r\nÄven de absolut enklaste rundade hörnen kan vara riktigt jobbiga att få snygga med HTML om du har höga krav på att det ska se bra ut även i äldre webbläsare.\r\n## Rundade hörn med CSS3\r\nI de allra senaste webbläsarna är det superenkelt att skapa rundade hörn. För att få dit dem i CSS3-webbläsare, Firefox och webbkit så lägger man till border-radius, -moz-border-radius respektive -webkit-border-radius i sitt stylesheet på det här viset:\r\n\r\n![Bild](http://tekniken.nu/uploads/634565154317503354-image002.png@01CC93FA.462E2C80__image002.png)\r\n```prettyprint lang-html\r\ndiv {\r\nbackground:#eeeeee;\r\nborder-radius:20px;\r\n-moz-border-radius:20px;\r\n-webkit-border-radius:20px;\r\n}\r\n```\r\n\r\n## Rundade hörn i Internet Explorer\r\nDet finns ett gäng olika sätt att få rundade hörn i äldre versioner av IE. Jag väntar precis som ni andra på att äldre versioner av IE ska gå ur tiden så att man kan känna sig säker med CSS3 men till dess får vi lösa det på annat sätt. Många väljer att trixa med bilder eller använder ett javascriptbibliotek för att sätta rundade hörn på vissa objekt. Det snyggaste sättet jag hittat är däremot att infoga en .htc-fil i stylesheetet!\r\n\r\nDu laddar ner en vältestad sådan från t ex http://css3pie.com.\r\n\r\nObjektet som ska få rundade hörn behöver följande värden:\r\nbehavior med url till .htc-filen (denna sökväg måste vara relativ den sida som stylesheetet läggs in på – säkrast är att göra den absolut).position:relative och zoom:1 för att hörnen ska kunna positioneras.ha dom vanliga inställningarna för border-radius (för att bättre webbläsare ska slippa använda .htc-filen).\r\n```prettyprint lang-html\r\ndiv {\r\nbackground:#eeeeee;\r\nbehavior:url(/Styles/Default/PIE.htc);\r\nborder-radius:20px;\r\n-moz-border-radius:20px;\r\n-webkit-border-radius:20px;\r\nposition:relative;\r\nzoom:1;\r\n}\r\n```\r\n\r\n\r\n\r\n## CSS3 Pie\r\nCSS3 Pie verkar också kunna även hjälpa dig med border-shadow och linear-gradient i Internet Explorer. Lysande!\r\n\r\n\r\n", + "html": "

Även de absolut enklaste rundade hörnen kan vara riktigt jobbiga att få snygga med HTML om du har höga krav på att det ska se bra ut även i äldre webbläsare.

Rundade hörn med CSS3

I de allra senaste webbläsarna är det superenkelt att skapa rundade hörn. För att få dit dem i CSS3-webbläsare, Firefox och webbkit så lägger man till border-radius, -moz-border-radius respektive -webkit-border-radius i sitt stylesheet på det här viset:



Rundade hörn i Internet Explorer

Det finns ett gäng olika sätt att få rundade hörn i äldre versioner av IE. Jag väntar precis som ni andra på att äldre versioner av IE ska gå ur tiden så att man kan känna sig säker med CSS3 men till dess får vi lösa det på annat sätt. Många väljer att trixa med bilder eller använder ett javascriptbibliotek för att sätta rundade hörn på vissa objekt. Det snyggaste sättet jag hittat är däremot att infoga en .htc-fil i stylesheetet!

Du laddar ner en vältestad sådan från t ex http://css3pie.com.

Objektet som ska få rundade hörn behöver följande värden:

  • behavior med url till .htc-filen (denna sökväg måste vara relativ den sida som stylesheetet läggs in på – säkrast är att göra den absolut).
  • position:relative och zoom:1 för att hörnen ska kunna positioneras.
  • ha dom vanliga inställningarna för border-radius (för att bättre webbläsare ska slippa använda .htc-filen).



CSS3 Pie

CSS3 Pie verkar också kunna även hjälpa dig med border-shadow och linear-gradient i Internet Explorer. Lysande!


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Nu är det jättelätt med rundade hörn i HTML!", + "meta_description": "", + "author_id": 1093, + "created_at": 1320923400000, + "created_by": 1093, + "updated_at": 1320923400000, + "updated_by": 1093, + "published_at": 1320923400000, + "published_by": 1093 + }, + { + "id": 581, + "title": "Behöver man skriva !! för att hantera en bool i Javascript?", + "slug": "behover-man-skriva--for-att-hantera-en-bool-i-javascript", + "markdown": "\r\n\r\nSvaret är nej (i 99% av fallen)\r\n\r\n\r\n\r\nMånga använder !! för att konvertera om en sträng till en bool i if-satser men det är inte nödvändigt för Javascript hanterar bool convertering i sig självt. !! är egentligen ingen egen operator utan endast två ! efter varandra. Dvs !true är false och !!true är true. Dock är syntaxen väldigt svårtolkad och eftersom den är onödig rekommenderar jag inte att man använder den alls.\r\n\r\nDvs du behöver inte skriva:\r\n\r\nif (!!user.password) return true;\r\n\r\ndet räcker med\r\n\r\nif (user.password) return true;\r\n\r\nDet finns dock ett fall där det är bra att konvertera en sträng till en bool och det är om du behöver skapa en ny variabel som innehåller en bool flagga:\r\n\r\nvar hasPassword = user.password;\r\n\r\nalert(hasPassword) // skriver ut lösenordet\r\n\r\nI detta fall skulle det vara önskvärt att byta till:\r\n\r\nvar hasPassword = !! user.password;\r\n\r\nalert(hasPassword) // skriver true\r\n\r\nEller nästan ännu hellre vända på problemet\r\n\r\nvar hasEmptyPassword = ! user.password;\r\n\r\nalert(!hasEmptyPassword) // skriver true\r\n\r\nEller:\r\n\r\nvar hasPassword = Boolean(user.password);\r\n\r\nalert(!hasPassword) // skriver true\r\n\r\nLäs fler reaktioner på detta:\r\n\r\nhttp://stackoverflow.com/questions/784929/what-is-the-operator-in-javascript\r\n\r\nOch tester på vilka värden som hanteras på vilket sätt med !!:\r\n\r\nhttp://jibbering.com/faq/notes/type-conversion/\r\n", + "html": "

Svaret är nej (i 99% av fallen)

Många använder !! för att konvertera om en sträng till en bool i if-satser men det är inte nödvändigt för Javascript hanterar bool convertering i sig självt. !! är egentligen ingen egen operator utan endast två ! efter varandra. Dvs !true är false och !!true är true. Dock är syntaxen väldigt svårtolkad och eftersom den är onödig rekommenderar jag inte att man använder den alls.

Dvs du behöver inte skriva:

if (!!user.password) return true;

det räcker med

if (user.password) return true;

Det finns dock ett fall där det är bra att konvertera en sträng till en bool och det är om du behöver skapa en ny variabel som innehåller en bool flagga:

var hasPassword = user.password;

alert(hasPassword) // skriver ut lösenordet

I detta fall skulle det vara önskvärt att byta till:

var hasPassword = !! user.password;

alert(hasPassword) // skriver true

Eller nästan ännu hellre vända på problemet

var hasEmptyPassword = ! user.password;

alert(!hasEmptyPassword) // skriver true

Eller:

var hasPassword = Boolean(user.password);

alert(!hasPassword) // skriver true

Läs fler reaktioner på detta:

http://stackoverflow.com/questions/784929/what-is-the-operator-in-javascript

Och tester på vilka värden som hanteras på vilket sätt med !!:

http://jibbering.com/faq/notes/type-conversion/

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Behöver man skriva !! för att hantera en bool i Javascript?", + "meta_description": "", + "author_id": 1087, + "created_at": 1322751600000, + "created_by": 1087, + "updated_at": 1322751600000, + "updated_by": 1087, + "published_at": 1322751600000, + "published_by": 1087 + }, + { + "id": 583, + "title": "Unminify Javascript", + "slug": "unminify-javascript", + "markdown": "\r\n\r\nOm du behöver ”packa upp” en javascriptfil som har ”minifierats” finns det en väldigt bra sajt som gör detta åt dig:\r\n\r\nhttp://jsbeautifier.org/\r\n\r\nDet är bara klistra in din javascriptkod och trycka ctrl-enter så får du fram en fin källkod.\r\n\r\nDen kan även användas för att snygga upp indenteringar och radbrytningar i din vanliga javascriptkod.\r\n\r\n![Bild](http://tekniken.nu/uploads/634612749867070257-image001.png@01CCBB25.94801DB0__image001.png)", + "html": "

Om du behöver ”packa upp” en javascriptfil som har ”minifierats” finns det en väldigt bra sajt som gör detta åt dig:

http://jsbeautifier.org/

Det är bara klistra in din javascriptkod och trycka ctrl-enter så får du fram en fin källkod.

Den kan även användas för att snygga upp indenteringar och radbrytningar i din vanliga javascriptkod.

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Unminify Javascript", + "meta_description": "", + "author_id": 1087, + "created_at": 1325678340000, + "created_by": 1087, + "updated_at": 1325678340000, + "updated_by": 1087, + "published_at": 1325678340000, + "published_by": 1087 + }, + { + "id": 587, + "title": "Vad är nytt i nästa version av TFS?", + "slug": "vad-ar-nytt-i-nasta-version-av-tfs", + "markdown": "\r\nNästa version av Microsoft TFS heter än så länge vNext / Team Foundation Server 11 och har en hel del goda nyheter.\r\nDet finns en testversion att ladda ner som HyperV testmaskin eller som separat installation, se länkarna längre ner. Här kommer en liten sammanställning av det nyheter vi på Tekniken gillar mest. Tidplanen enligt rykten är att denna kommer släppas skarpt i slutet av året. \r\n\r\nLayouten i både webgränssnittet och i Visual Studio är uppsnyggat och har mer luft och använder tydligare typografi.\r\n\r\n\r\n\r\nBland annat finns det en inbyggd Task Board så att man slipper köra en tredjepartsprodukt som t ex Urban Turtle när man jobbar i Scrum:\r\n\r\n\r\n\r\nEn av de viktigaste förbättringarna enligt mig ligger i källkodshanteringen som numera tillåter lokala ändringar offline och använder inte längre lås som tidigare vilket har förhindrat användningen av tredjepartsprogram, dvs samma upplägg som SVN. Tyvärr verkar det inte finnas lokala incheckningar och sammanslagningar mellan olika repositories som fortfarande är en av de stora anledningarna till att använda GIT eller Mercurial. Jobbar du lokalt och offline får du helt enkelt vänta med att checka in tills du blir online igen.  Eller som Brian Keller uttrycker det: När du är på stranden och kodar bör du ändå vara ledig.. :-(\r\n\r\nNytt är också ett nytt steg i utvecklingsprocessen som heter Code Review som kan kopplas samman med en incheckning och därmed begära att din incheckning ska granskas av en kollega innan den checkas in skarpt i repositoriet. Dessutom är det ofta hatade diffverktyget numera utbytt och integrerat med resten av editorn:\r\n\r\n\r\n\r\nÄven merge blir bättre:\r\n\r\n\r\n\r\n                             \r\n\r\nÄntligen kan man numera testa unittest som är skrivna i språket nUnit direkt inne i Visual Studio utan tredjepartsprodukter:\r\n\r\n\r\n\r\nHyperV image\r\n\r\nhttp://blogs.msdn.com/b/briankel/archive/2011/09/16/visual-studio-11-application-lifecycle-management-virtual-machine-and-hands-on-labs-demo-scripts.aspx\r\n\r\nWebInstaller\r\n\r\nhttp://www.microsoft.com/download/en/details.aspx?displaylang=en&id=27539\r\n\r\n![Bild](http://tekniken.nu/uploads/634625871816895557-image001.jpg@01CCD1FE.2AD17450__image001.jpg)", + "html": "

Nästa version av Microsoft TFS heter än så länge vNext / Team Foundation Server 11 och har en hel del goda nyheter.

Det finns en testversion att ladda ner som HyperV testmaskin eller som separat installation, se länkarna längre ner. Här kommer en liten sammanställning av det nyheter vi på Tekniken gillar mest. Tidplanen enligt rykten är att denna kommer släppas skarpt i slutet av året.

Layouten i både webgränssnittet och i Visual Studio är uppsnyggat och har mer luft och använder tydligare typografi.


Bland annat finns det en inbyggd Task Board så att man slipper köra en tredjepartsprodukt som t ex Urban Turtle när man jobbar i Scrum:


En av de viktigaste förbättringarna enligt mig ligger i källkodshanteringen som numera tillåter lokala ändringar offline och använder inte längre lås som tidigare vilket har förhindrat användningen av tredjepartsprogram, dvs samma upplägg som SVN. Tyvärr verkar det inte finnas lokala incheckningar och sammanslagningar mellan olika repositories som fortfarande är en av de stora anledningarna till att använda GIT eller Mercurial. Jobbar du lokalt och offline får du helt enkelt vänta med att checka in tills du blir online igen.  Eller som Brian Keller uttrycker det: När du är på stranden och kodar bör du ändå vara ledig.. :-(

Nytt är också ett nytt steg i utvecklingsprocessen som heter Code Review som kan kopplas samman med en incheckning och därmed begära att din incheckning ska granskas av en kollega innan den checkas in skarpt i repositoriet. Dessutom är det ofta hatade diffverktyget numera utbytt och integrerat med resten av editorn:


Även merge blir bättre:


                            

Äntligen kan man numera testa unittest som är skrivna i språket nUnit direkt inne i Visual Studio utan tredjepartsprodukter:


HyperV image

http://blogs.msdn.com/b/briankel/archive/2011/09/16/visual-studio-11-application-lifecycle-management-virtual-machine-and-hands-on-labs-demo-scripts.aspx

WebInstaller

http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=27539

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Vad är nytt i nästa version av TFS?", + "meta_description": "", + "author_id": 1087, + "created_at": 1327654140000, + "created_by": 1087, + "updated_at": 1327654140000, + "updated_by": 1087, + "published_at": 1327654140000, + "published_by": 1087 + }, + { + "id": 588, + "title": "Minitips om jQuery till WCF", + "slug": "minitips-om-jquery-till-wcf", + "markdown": "\r\n\r\nFör att skicka en array t ex int[] från jQuery till en WCF eller ASMX behöver man lägga till parametern traditional:true. Annars lägger jQuery till [] till parameternamnet och därmed hittar inte IIS till rätt metod och ger felet:\r\n\r\n\r\n\r\nSystem.InvalidOperationException: XXXX Web Service method name is not valid.\r\n\r\nLösningen är alltså att ange traditional:true och dataType : html.\r\n\r\n\r\n\r\nOch WCF skriver man såhär:\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/634636214500721107-image001.png@01CCDB43.FE472930__image001.png)", + "html": "

För att skicka en array t ex int[] från jQuery till en WCF eller ASMX behöver man lägga till parametern traditional:true. Annars lägger jQuery till [] till parameternamnet och därmed hittar inte IIS till rätt metod och ger felet:

System.InvalidOperationException: XXXX Web Service method name is not valid.

Lösningen är alltså att ange traditional:true och dataType : html.


Och WCF skriver man såhär:


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Minitips om jQuery till WCF", + "meta_description": "", + "author_id": 1087, + "created_at": 1328024647000, + "created_by": 1087, + "updated_at": 1328024647000, + "updated_by": 1087, + "published_at": 1328024647000, + "published_by": 1087 + }, + { + "id": 589, + "title": "Utnyttja internet i din kunds köpprocess", + "slug": "utnyttja-internet-i-din-kunds-kopprocess", + "markdown": "\r\n\r\nI den här bloggserien kommer vi att ge lite praktiska tips på hur du kan använda webbteknik för att hjälpa just dina potentiella kunder i rätt riktning – dvs att röra sig framåt i köpprocessen och bli en nöjd, långsiktigt och återköpande kund.\r\n# Steg 1, din tilltänkta kund upptäcker behovet\r\n\r\n\r\nGrundläggande bild av köpprocess.\r\n## Sverige har varit moget länge\r\nSedan 1995, när internet gjorde entré i företagsvärlden så har många företag insett potentialen i att synas och finnas på webben. I början bara som ett visitkort eller broschyr och senare som sätt att kommunicera sitt varumärke, som komplement till övriga informationskanaler. På senare år har många framgångsrika företag insett möjligheten att använda sin närvaro på Internet till att också kommunicera via webben, och även göra den faktiska affären online. De första och mest framgångsrika exemplen är inom områden med en ung och uppkopplad målgrupp med tydligt definierade produkter. T ex elektronik, vitvaror, böcker, cd-skivor, filmer, resor. Men nu är det dags att fler företag inser potentialen att använda webbens möjligheter för både fler områden men också för fler delar av köpprocessen.\r\n## Webbens köpkraft finns\r\nNumera är nästan alla hushåll i Sveriges uppkopplade och har bra förutsättningar med bra bredband, läsplattor, mobiltelefoner. Det innebär att fler företag har prövat och lyckats flytta sin affär till Internet. Bra exempel på detta är kommuner och myndigheter som gjort fler av sina tjänster tillgängliga dygnet runt och ökar sin kundservice och effektiviserar sin verksamhet på samma gång. Eftersom tekniken blir mer och mer standardiserad och därmed billigare kan numera även mindre företag och organisationer göra sina affärer tillgängliga.\r\n\r\n\r\n## Mobil explosion ökar möjligheterna\r\n87% av alla svenskar 2011 anger att de använder Internet till att söka fakta och produktinformation. 72% använder internet för att göra prisjämförelser, 78% för att köpa och betala varor. Över hälften använder sociala nätverk. 42% av alla i åldern 16-35 surfar mobilt dagligen 2011 vilket kan jämföras med 3-7% året innan. Hur kommer 2012 se ut?\r\n\r\n\r\nKälla: IIS 2011\r\n## 1995: Webben saknas i köpprocessen1. Upptäcka behovet\r\nTV/Radioreklam, annonsering, direktutskick, billboards, rekommendationer och säljare.\r\n2. Söka information\r\nKundtjänst, broschyrer, bibliotek, rådgivning i butik och över telefon.\r\n3. Jämför alternativ\r\nFråga vänner och familj, tidningar, undersökningar och konsumenttester.\r\n4. Genomför köp\r\nPostorder, köp i butik, telefonbeställning.\r\n5. Efterköpsbeteende\r\nFörklarar sitt beslut runt middagsbordet och i fikarummet på jobbet, visa fakta i broschyrer, visa produkten.\r\n## 2012: Webben bör på allvar utnyttjas i köpprocessen:1. Upptäcka behovet\r\nSe tips i sociala medier, banners, adwords i samband med sökningar, nyhetsbrev, QR koder i annonser.\r\n2. Söka information\r\nInformation på hemsida, wikipedia, nyhetsbrev, mobilsajter.\r\n3. Jämföra alternativ\r\nGoogla sökord, prisjämförelsesajter, testsajter, fråga på sociala nätverk, kommentarer på sajter.\r\n4. Genomföra köp\r\nWebbutik, QR-kod för beställning.\r\n5. Efterköpsbeteende\r\nSe instruktionsvideo och guider på YouTube, berätta om köpet för vänner på Facebook och Twitter, skicka länk/fakta via mail.\r\n## Upptäcker behovet - våra tips\r\nHär är 4 konkreta tips för hur du kan använda teknik för att stödja dina kunders köpprocess i steg 1 – upptäcka behovet:\r\n\r\n\r\n1. Upptäck\r\nTa din tilltänka kund från ögonblicket då behovet upptäcks till att direkt kunna köpa. Det går att göra med QR koder som bryggar från offline-medier så som annonser, broschyrer, tv-reklam till din mobila webbplats. Tänk bara på att dina besökare kommer använda mobilen när de scannat din QR kod vilket gör att du bör anpassa sidan till att fungera på en mobil skärm. Tänk också på att besökaren redan läst din annons och har därmed passerat steg 1 och är i steg 2 - så ta honom/henne till en sida som konkret presenterar information och ger möjlighet att även köpa.\r\n2. Dela\r\nMöjliggör för dina kunder att berätta om sina köp i sociala media. En ”Dela på Facebook”, eller ”Dela på Twitter” knapp kan göra att flera personer i din kunds vänkrets upptäcker att även dom har behov av din produkt eller tjänst.\r\n3. Sökmotoroptimera\r\nFörsök identifiera de nyckelord dina kunder använder. Tänk inte på vad dina produkter eller tjänster heter utan försök tänka mer generellt. Använd Google som inspiration. Börja skriva ett ord och se vad Google föreslår. De förslag Google visar upp är sådant som många söker på, det betyder att du ska ha just dessa kombinationer av ord på din sajt. T ex kanske du säljer ballongresor. Uppenbarligen kommer du skriva ballongresor många gånger på din sajt så det behöver du inte oroa dig för men det kanske inte är vad dina kunder först söker på. Testa att skriva upplevelser i Google så ser det ut som nedan. Om du nu har en sida på din sajt som heter Upplevelser för Två i Stockholm kommer din sida vara en av de få som får träff på både de mest populära sökningarna ”Upplevelser för två” och ”Upplevelser i Stockholm”. Går du sen vidare och skriver ”Upplevelser för två” kommer du se att de mest populära orterna är Malmö och Stockholm.\r\n4. Skicka nyhetsbrev\r\nSamla upp frågor från dina forum, visa populära eller nya produkter/tjänster. Ta upp aktuella händelser och knyt an till dessa händelser. Våga vara personlig och inkludera erbjudande samt uppmuntra mottagarna att skicka vidare nyhetsbrevet till kollegor och vänner. Skicka inte för ofta och gör det enkelt att avregistrera sig. Läs även vad vi tidigare skrivit om nyhetsbrev.\r\n### Har du andra tips eller andra erfarenheter? Kommentera gärna detta blogginlägg och sprid budskapet så lär vi oss alla mer och snabbare.\r\n![Bild](http://tekniken.nu/uploads/634650796912994107-image001.jpg@01CCEC00.D0F34220__image001.jpg)", + "html": "

I den här bloggserien kommer vi att ge lite praktiska tips på hur du kan använda webbteknik för att hjälpa just dina potentiella kunder i rätt riktning – dvs att röra sig framåt i köpprocessen och bli en nöjd, långsiktigt och återköpande kund.

Steg 1, din tilltänkta kund upptäcker behovet


Grundläggande bild av köpprocess.

Sverige har varit moget länge

Sedan 1995, när internet gjorde entré i företagsvärlden så har många företag insett potentialen i att synas och finnas på webben. I början bara som ett visitkort eller broschyr och senare som sätt att kommunicera sitt varumärke, som komplement till övriga informationskanaler. På senare år har många framgångsrika företag insett möjligheten att använda sin närvaro på Internet till att också kommunicera via webben, och även göra den faktiska affären online. De första och mest framgångsrika exemplen är inom områden med en ung och uppkopplad målgrupp med tydligt definierade produkter. T ex elektronik, vitvaror, böcker, cd-skivor, filmer, resor. Men nu är det dags att fler företag inser potentialen att använda webbens möjligheter för både fler områden men också för fler delar av köpprocessen.

Webbens köpkraft finns

Numera är nästan alla hushåll i Sveriges uppkopplade och har bra förutsättningar med bra bredband, läsplattor, mobiltelefoner. Det innebär att fler företag har prövat och lyckats flytta sin affär till Internet. Bra exempel på detta är kommuner och myndigheter som gjort fler av sina tjänster tillgängliga dygnet runt och ökar sin kundservice och effektiviserar sin verksamhet på samma gång. Eftersom tekniken blir mer och mer standardiserad och därmed billigare kan numera även mindre företag och organisationer göra sina affärer tillgängliga.


Mobil explosion ökar möjligheterna

87% av alla svenskar 2011 anger att de använder Internet till att söka fakta och produktinformation. 72% använder internet för att göra prisjämförelser, 78% för att köpa och betala varor. Över hälften använder sociala nätverk. 42% av alla i åldern 16-35 surfar mobilt dagligen 2011 vilket kan jämföras med 3-7% året innan. Hur kommer 2012 se ut?



Källa: IIS 2011

1995: Webben saknas i köpprocessen


1. Upptäcka behovet

TV/Radioreklam, annonsering, direktutskick, billboards, rekommendationer och säljare.

2. Söka information

Kundtjänst, broschyrer, bibliotek, rådgivning i butik och över telefon.

3. Jämför alternativ

Fråga vänner och familj, tidningar, undersökningar och konsumenttester.

4. Genomför köp

Postorder, köp i butik, telefonbeställning.

5. Efterköpsbeteende

Förklarar sitt beslut runt middagsbordet och i fikarummet på jobbet, visa fakta i broschyrer, visa produkten.

2012: Webben bör på allvar utnyttjas i köpprocessen:


1. Upptäcka behovet

Se tips i sociala medier, banners, adwords i samband med sökningar, nyhetsbrev, QR koder i annonser.

2. Söka information

Information på hemsida, wikipedia, nyhetsbrev, mobilsajter.

3. Jämföra alternativ

Googla sökord, prisjämförelsesajter, testsajter, fråga på sociala nätverk, kommentarer på sajter.

4. Genomföra köp

Webbutik, QR-kod för beställning.

5. Efterköpsbeteende

Se instruktionsvideo och guider på YouTube, berätta om köpet för vänner på Facebook och Twitter, skicka länk/fakta via mail.

Upptäcker behovet - våra tips

Här är 4 konkreta tips för hur du kan använda teknik för att stödja dina kunders köpprocess i steg 1 – upptäcka behovet:


1. Upptäck

Ta din tilltänka kund från ögonblicket då behovet upptäcks till att direkt kunna köpa. Det går att göra med QR koder som bryggar från offline-medier så som annonser, broschyrer, tv-reklam till din mobila webbplats. Tänk bara på att dina besökare kommer använda mobilen när de scannat din QR kod vilket gör att du bör anpassa sidan till att fungera på en mobil skärm. Tänk också på att besökaren redan läst din annons och har därmed passerat steg 1 och är i steg 2 - så ta honom/henne till en sida som konkret presenterar information och ger möjlighet att även köpa.

2. Dela

Möjliggör för dina kunder att berätta om sina köp i sociala media. En ”Dela på Facebook”, eller ”Dela på Twitter” knapp kan göra att flera personer i din kunds vänkrets upptäcker att även dom har behov av din produkt eller tjänst.

3. Sökmotoroptimera

Försök identifiera de nyckelord dina kunder använder. Tänk inte på vad dina produkter eller tjänster heter utan försök tänka mer generellt. Använd Google som inspiration. Börja skriva ett ord och se vad Google föreslår. De förslag Google visar upp är sådant som många söker på, det betyder att du ska ha just dessa kombinationer av ord på din sajt. T ex kanske du säljer ballongresor. Uppenbarligen kommer du skriva ballongresor många gånger på din sajt så det behöver du inte oroa dig för men det kanske inte är vad dina kunder först söker på. Testa att skriva upplevelser i Google så ser det ut som nedan. Om du nu har en sida på din sajt som heter Upplevelser för Två i Stockholm kommer din sida vara en av de få som får träff på både de mest populära sökningarna ”Upplevelser för två” och ”Upplevelser i Stockholm”. Går du sen vidare och skriver ”Upplevelser för två” kommer du se att de mest populära orterna är Malmö och Stockholm.

4. Skicka nyhetsbrev

Samla upp frågor från dina forum, visa populära eller nya produkter/tjänster. Ta upp aktuella händelser och knyt an till dessa händelser. Våga vara personlig och inkludera erbjudande samt uppmuntra mottagarna att skicka vidare nyhetsbrevet till kollegor och vänner. Skicka inte för ofta och gör det enkelt att avregistrera sig. Läs även vad vi tidigare skrivit om nyhetsbrev.

Har du andra tips eller andra erfarenheter? Kommentera gärna detta blogginlägg och sprid budskapet så lär vi oss alla mer och snabbare.

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Utnyttja internet i din kunds köpprocess", + "meta_description": " en nöjd, långsiktigt och återköpande kund.", + "author_id": 1087, + "created_at": 1330618440000, + "created_by": 1087, + "updated_at": 1330618440000, + "updated_by": 1087, + "published_at": 1330618440000, + "published_by": 1087 + }, + { + "id": 590, + "title": "Logga direkt till debug med Log4Net", + "slug": "logga-direkt-till-debug-med-log4net", + "markdown": "\r\n\r\nOm du kör Log4Net kan du lägga till denna rad i din log.config så får du din log synlig direkt i Visual Studio i Debug Output. Väldigt bra när man felsöker hastighet i applikationer då man kan se vad som händer när en sida tar för lång tid att ladda.\r\n\r\n```prettyprint lang-xml\r\n\r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n```\r\n", + "html": "

Om du kör Log4Net kan du lägga till denna rad i din log.config så får du din log synlig direkt i Visual Studio i Debug Output. Väldigt bra när man felsöker hastighet i applikationer då man kan se vad som händer när en sida tar för lång tid att ladda.

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Logga direkt till debug med Log4Net", + "meta_description": "", + "author_id": 1087, + "created_at": 1329482891000, + "created_by": 1087, + "updated_at": 1329482891000, + "updated_by": 1087, + "published_at": 1329482891000, + "published_by": 1087 + }, + { + "id": 592, + "title": "Rotsidan och papperskorgen ger 404-fel i EPiServer", + "slug": "rotsidan-och-papperskorgen-ger-404-fel-i-episerver", + "markdown": "\r\n\r\nEtt återkommande fel i EPiServer (särskilt efter uppgradering från version 4) är att klick på antingen rotsidan eller papperskorgen i redaktörsläget ger 404-fel. Det är ingen show stopper men ganska irriterande eftersom man tappar funktionen att tömma papperskorgen, och dessutom slutar hela redaktörsläget att fungera efter att ett sånt fel visas i högerpanelen.\r\n\r\nLösningen är väldigt enkel: peka sökvägen till sidtyperna SysRoot och SysRecyclebins mallar till korrekt plats. Det är ganska stor chans att t.ex. Recylce Bin innan uppgraderingen pekade på något i stil med ”/edit/wastebasketpage.aspx”. Från och med version 5 i EPiServer har ju sökvägen till redaktörsläget blivit annorlunda, bland annat måste man ju sätta en egen som en sorts ”security by obscurity”. Den nya sökvägen blir alltså istället något i stil med ”/my-custom-uipath/CMS/edit/wastebasketpage.aspx”.\r\n\r\nEfter att korrekta sökvägar är satta funkar både rotsidan och papperskorgen i redaktörsläget – största nyttan är att man då kan tömma papperskorgen på raderade sidor :-)                               \r\n\r\n![Bild](http://tekniken.nu/uploads/634674059915198957-trash-icon.png)", + "html": "

Ett återkommande fel i EPiServer (särskilt efter uppgradering från version 4) är att klick på antingen rotsidan eller papperskorgen i redaktörsläget ger 404-fel. Det är ingen show stopper men ganska irriterande eftersom man tappar funktionen att tömma papperskorgen, och dessutom slutar hela redaktörsläget att fungera efter att ett sånt fel visas i högerpanelen.

Lösningen är väldigt enkel: peka sökvägen till sidtyperna SysRoot och SysRecyclebins mallar till korrekt plats. Det är ganska stor chans att t.ex. Recylce Bin innan uppgraderingen pekade på något i stil med ”/edit/wastebasketpage.aspx”. Från och med version 5 i EPiServer har ju sökvägen till redaktörsläget blivit annorlunda, bland annat måste man ju sätta en egen som en sorts ”security by obscurity”. Den nya sökvägen blir alltså istället något i stil med ”/my-custom-uipath/CMS/edit/wastebasketpage.aspx”.

Efter att korrekta sökvägar är satta funkar både rotsidan och papperskorgen i redaktörsläget – största nyttan är att man då kan tömma papperskorgen på raderade sidor :-)                              

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Rotsidan och papperskorgen ger 404-fel i EPiServer", + "meta_description": "", + "author_id": 6, + "created_at": 1332947460000, + "created_by": 6, + "updated_at": 1332947460000, + "updated_by": 6, + "published_at": 1332947460000, + "published_by": 6 + }, + { + "id": 593, + "title": "Trix för att labba med jQuery eller CSS: jsFiddle", + "slug": "trix-for-att-labba-med-jquery-eller-css-jsfiddle", + "markdown": "\r\n\r\nFör dig som ofta brukar skapa en tom html sida för att lägga in lite html, lite CSS och/eller lite Javascript för att testa eller verifiera någonting kan jag rekommendera onlineverktyget jsfiddle.net.\r\n\r\n\r\n\r\nGanska ofta kan man ha en JSON-fil eller url som man vill presentera lite finare och då passar jsFiddle utmärkt:\r\n\r\n\r\n\r\n1. I det översta fältet kan du skriva din html inkl jQuery templates. JQuery är inkluderat som standard men du kan även välja andra ramverk, t ex ExtJs eller Dojo.\r\n\r\n2. I det nedre vänstra fältet kan du skriva in javascriptkoden. Här finns även en helt ok färgkodare som tolkar din javascriptkod. Tyvärr finns ingen intellisence än.\r\n\r\n3. I det högre övre fältet skriver du din CSS kod\r\n\r\n4. Längst till höger längst ner finns ditt resultat.\r\n\r\nOm du vill låta andra laborera med din kod kan du även spara din jsFiddle och skicka url:en. Du kan även labba vidare med min fiddle som hämtar issues från Github och rendrerar som en lista för att skapa en Changelog enkelt.Om du vill ändra i den kan du fork:a en egen gren av denna.\r\n\r\nAdressen till denna fiddle är: http://jsfiddle.net/dCdHT/8/\r\n\r\n![Bild](http://tekniken.nu/uploads/jsfiddle_logo.png)", + "html": "

För dig som ofta brukar skapa en tom html sida för att lägga in lite html, lite CSS och/eller lite Javascript för att testa eller verifiera någonting kan jag rekommendera onlineverktyget jsfiddle.net.


Ganska ofta kan man ha en JSON-fil eller url som man vill presentera lite finare och då passar jsFiddle utmärkt:


1. I det översta fältet kan du skriva din html inkl jQuery templates. JQuery är inkluderat som standard men du kan även välja andra ramverk, t ex ExtJs eller Dojo.

2. I det nedre vänstra fältet kan du skriva in javascriptkoden. Här finns även en helt ok färgkodare som tolkar din javascriptkod. Tyvärr finns ingen intellisence än.

3. I det högre övre fältet skriver du din CSS kod

4. Längst till höger längst ner finns ditt resultat.

Om du vill låta andra laborera med din kod kan du även spara din jsFiddle och skicka url:en. Du kan även labba vidare med min fiddle som hämtar issues från Github och rendrerar som en lista för att skapa en Changelog enkelt.Om du vill ändra i den kan du fork:a en egen gren av denna.

Adressen till denna fiddle är: http://jsfiddle.net/dCdHT/8/

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Trix för att labba med jQuery eller CSS: jsFiddle", + "meta_description": "", + "author_id": 1087, + "created_at": 1332348300000, + "created_by": 1087, + "updated_at": 1332348300000, + "updated_by": 1087, + "published_at": 1332348300000, + "published_by": 1087 + }, + { + "id": 594, + "title": "Utnyttja internet i din kunds köpprocess - del 2", + "slug": "utnyttja-internet-i-din-kunds-kopprocess---del-2", + "markdown": "\r\n\r\nI den här bloggserien ger vi praktiska tips på hur du kan använda webbteknik för att hjälpa just dina potentiella kunder i rätt riktning – dvs. att röra sig framåt i köpprocessen och bli en nöjd, långsiktigt och återköpande kund.\r\n# Steg 2, din tilltänkta kund söker information\r\nGrundläggande bild av köpprocess.\r\n## Bakgrund\r\nI den första bloggen i serien talade vi om köpkraften i Sverige och hur du kan stötta din besökare då hon eller han ska upptäcka att det finns ett köpbehov. \r\n\r\nLäs det tidigare inlägget här:\r\n\r\nUtnyttja internet i din kunds köpprocess\r\n\r\nHär är 7 konkreta tips för hur du kan använda teknik för att stödja dina kunders köpprocess i steg 2 – söker information:\r\n\r\n\r\n1. Aktuell information\r\nFör att se till att dina besökare hittar den information de behöver så skall du använd en CMS-produkt för din hemsida som gör det enkelt för dig och dina medarbetare att uppdatera och hålla färsk. Du skall snabbt kunna ändra själv om du ser att informationen är inkorrekt eller inaktuell. \r\n2. Hjälp besökarna att hitta rätt\r\nSe till att dina besökare kan söka - enkelt och tydligt på din sajt. Presentera sökresultaten i en bra sorterad vy, gärna med indelning i kategorier i de fall söket ger träff på flera olika produkt- eller tjänstekategorier.\r\n3. Gör din sajt tillgänglig\r\nMobilanpassa din webbplats, men överarbeta inte. Testa din webbplats i en mobil och se till att inte flash krävs på viktiga ställen och att navigationen går att använda i praktiken. Att göra för stor förändring från din vanliga webbplats mot din mobila webbplats bör man vara försiktig med för ofta behöver dina kunder hitta tillbaka till samma ställe där de tidigare hittat en information. Dessutom läser många mailen i mobilen när man har fått tips från någon och då vill man se sidan som den såg ut när avsändaren tryckte på skicka.\r\n4. Var närvarande på din sajt\r\nDu kan vara närvarande i din virtuella affär på samma sätt som om du driver en fysisk butik lätt kan ställa dig i bakgrunden och observera och lära av dina kunders beteende. I den fysiska butiken kan också gå fram till kunderna och fråga när det ser ut som om de har fastnat och behöver din hjälp. I din virtuella butik är det inte lika enkelt men det går. Det finns bra verktyg som t ex WhosOn kan du förutom att följa dina besökare även kan börja chatta med dina besökare. För att ytterligare få en känsla av din butik så kan du använda Clicky och Clicky Notifier som gör att du får notifieringar när du får nya besökare. Allt för att du ska bli mer närvarande i din affär.\r\n5. Lär av dina besökare\r\nDin försäljningsdatabas innehåller garanterat många intressanta samband som du kan fiska fram med lite klurigt funderande. Om du letar lite kanske du kan mäta hur lång tid en genomsnittlig fullständig köpprocess tar. Oftast genomgår dina potentiella kunder alla steg enligt ovan och det kan ibland ta flera månader. Om du analyserar köpmönstret kan du hitta sätt att snabba upp processen, t ex skicka ett litet nyhetsbrev till de kunder som har varit inne på dina beslutsunderlagssidor men ännu inte kommit till ett beslut. Du kan också använda Google Analytics, som numera har realtidsinformation vilket gör att du kan följa dina kunder genom din affär och se vart de just nu befinner sig. Det ger en bra indikation på var flaskhalsar finns.\r\n6. Korta ner vägarna\r\nAnvänd tumregeln att 50 % av dina besökare försvinner för varje moment eller klick som de tvingas gå igenom. Ta bort onödiga hierarkiska menynivåer, ta bort onödiga undermenyer och klickrutor.\r\n7. Enkelhet\r\n Ställ krav på att din teknikleverantör bygger en sajt som är dead simple att använda! Använd normalfördelningskurvan som argument. Om du har många potentiella kunder kommer de fördela sig som normalfördelningskurvan vilket innebär att om du gör dina tekniska lösningar så krångliga att man måste vara en early adopter för att ta sig igenom din sajt – och då kommer du aldrig få fler än det teoretiska maxtalet 13,5% att bli avslutas med köp. Läs mer om early adopters på Wikipedia.\r\n### Har du andra tips eller andra erfarenheter? Kommentera gärna detta blogginlägg och sprid budskapet så lär vi oss alla mer och snabbare.\r\n![Bild](http://tekniken.nu/uploads/634674059940823957-image001.jpg@01CCF7A1.34A78190__image001.jpg)", + "html": "

I den här bloggserien ger vi praktiska tips på hur du kan använda webbteknik för att hjälpa just dina potentiella kunder i rätt riktning – dvs. att röra sig framåt i köpprocessen och bli en nöjd, långsiktigt och återköpande kund.

Steg 2, din tilltänkta kund söker information


Grundläggande bild av köpprocess.

Bakgrund

I den första bloggen i serien talade vi om köpkraften i Sverige och hur du kan stötta din besökare då hon eller han ska upptäcka att det finns ett köpbehov.

Läs det tidigare inlägget här:

Utnyttja internet i din kunds köpprocess

Här är 7 konkreta tips för hur du kan använda teknik för att stödja dina kunders köpprocess i steg 2 – söker information:


1. Aktuell information

För att se till att dina besökare hittar den information de behöver så skall du använd en CMS-produkt för din hemsida som gör det enkelt för dig och dina medarbetare att uppdatera och hålla färsk. Du skall snabbt kunna ändra själv om du ser att informationen är inkorrekt eller inaktuell.

2. Hjälp besökarna att hitta rätt

Se till att dina besökare kan söka - enkelt och tydligt på din sajt. Presentera sökresultaten i en bra sorterad vy, gärna med indelning i kategorier i de fall söket ger träff på flera olika produkt- eller tjänstekategorier.

3. Gör din sajt tillgänglig

Mobilanpassa din webbplats, men överarbeta inte. Testa din webbplats i en mobil och se till att inte flash krävs på viktiga ställen och att navigationen går att använda i praktiken. Att göra för stor förändring från din vanliga webbplats mot din mobila webbplats bör man vara försiktig med för ofta behöver dina kunder hitta tillbaka till samma ställe där de tidigare hittat en information. Dessutom läser många mailen i mobilen när man har fått tips från någon och då vill man se sidan som den såg ut när avsändaren tryckte på skicka.

4. Var närvarande på din sajt

Du kan vara närvarande i din virtuella affär på samma sätt som om du driver en fysisk butik lätt kan ställa dig i bakgrunden och observera och lära av dina kunders beteende. I den fysiska butiken kan också gå fram till kunderna och fråga när det ser ut som om de har fastnat och behöver din hjälp. I din virtuella butik är det inte lika enkelt men det går. Det finns bra verktyg som t ex WhosOn kan du förutom att följa dina besökare även kan börja chatta med dina besökare. För att ytterligare få en känsla av din butik så kan du använda Clicky och Clicky Notifier som gör att du får notifieringar när du får nya besökare. Allt för att du ska bli mer närvarande i din affär.

5. Lär av dina besökare

Din försäljningsdatabas innehåller garanterat många intressanta samband som du kan fiska fram med lite klurigt funderande. Om du letar lite kanske du kan mäta hur lång tid en genomsnittlig fullständig köpprocess tar. Oftast genomgår dina potentiella kunder alla steg enligt ovan och det kan ibland ta flera månader. Om du analyserar köpmönstret kan du hitta sätt att snabba upp processen, t ex skicka ett litet nyhetsbrev till de kunder som har varit inne på dina beslutsunderlagssidor men ännu inte kommit till ett beslut. Du kan också använda Google Analytics, som numera har realtidsinformation vilket gör att du kan följa dina kunder genom din affär och se vart de just nu befinner sig. Det ger en bra indikation på var flaskhalsar finns.

6. Korta ner vägarna

Använd tumregeln att 50 % av dina besökare försvinner för varje moment eller klick som de tvingas gå igenom. Ta bort onödiga hierarkiska menynivåer, ta bort onödiga undermenyer och klickrutor.

7. Enkelhet

Ställ krav på att din teknikleverantör bygger en sajt som är dead simple att använda! Använd normalfördelningskurvan som argument. Om du har många potentiella kunder kommer de fördela sig som normalfördelningskurvan vilket innebär att om du gör dina tekniska lösningar så krångliga att man måste vara en early adopter för att ta sig igenom din sajt – och då kommer du aldrig få fler än det teoretiska maxtalet 13,5% att bli avslutas med köp. Läs mer om early adopters på Wikipedia.

Har du andra tips eller andra erfarenheter? Kommentera gärna detta blogginlägg och sprid budskapet så lär vi oss alla mer och snabbare.

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Utnyttja internet i din kunds köpprocess - del 2", + "meta_description": "", + "author_id": 1087, + "created_at": 1331810220000, + "created_by": 1087, + "updated_at": 1331810220000, + "updated_by": 1087, + "published_at": 1331810220000, + "published_by": 1087 + }, + { + "id": 595, + "title": "Så debuggar du ditt TFS-webbprojekt på en server", + "slug": "sa-debuggar-du-ditt-tfs-webbprojekt-pa-en-server", + "markdown": "\r\n\r\nOftast är det enklast att debugga problem i den lokala utvecklingsmiljön, men ibland stöter man på problem som bara finns i stagemiljön (eller – huga! – produktionsmiljön). Att kunna debugga koden som körs på servern från den lokala datorn kräver att ganska många steg genomförs, särskilt när man som vi bygger ut releaser med TFS. Såhär går det till:\r\n\r\n\r\n# Kompilering och bygge\r\n1) Se till att byggservern bygger Debug-version av projektet (i build definition).\r\n\r\n2) Aktivera Source Server i Visual Studio. Under Debugging->General finns en inställning som heter ”Enable Source Server Support”. Kryssa i den. Det låter som att man behöver en särskild server, men denna funktion är inbyggd i TFS. Den borde snarare heta ”Enable Server Source Support”.\r\n\r\n3) Skapa en nätverkskatalog för debuginformation (t.ex.\\\\server\\symbols). Fyll i sökvägen här i Visual Studio:\r\n\r\n\r\n\r\n4)     Aktivera lagring av debugsymboler i bygget i TFS (i Edit Build Definition). Sätt ”Index Sources” till true och ”Path to Publish Symbols” till nätverkssökvägen i förra punkten:\r\n\r\n\r\n# Servern\r\n1) Installera debuggern på servern. Sökvägen är \"C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\Common7\\IDE\\Remote Debugger\\x64\\msvsmon.exe\". Om Visual Studio finns installerat på servern så finns redan de filer du behöver, annars kan du kopiera dem från din lokala utvecklingsmiljö. \r\n\r\n2) Starta debuggern (msvsmon.exe):\r\n\r\n\r\n\r\n3) Öppna Tools -> Permissions och lägg till dig själv eller en grupp du är med i och ge rättigheter att debugga.\r\n# Starta debuggning\r\n1) På din utvecklingsdator, välj Debug -> Attach to process.\r\n\r\n2) I qualifier, skriv in det som står i servernamnet i debuggern (DOMAIN\\debuguser@SERVER ovan)\r\n\r\n3) Hitta rätt w3wp.exe, anslut och debugga!\r\n\r\n![Bild](http://tekniken.nu/uploads/634674059948011457-image001.png)", + "html": "

Oftast är det enklast att debugga problem i den lokala utvecklingsmiljön, men ibland stöter man på problem som bara finns i stagemiljön (eller – huga! – produktionsmiljön). Att kunna debugga koden som körs på servern från den lokala datorn kräver att ganska många steg genomförs, särskilt när man som vi bygger ut releaser med TFS. Såhär går det till:

Kompilering och bygge

1) Se till att byggservern bygger Debug-version av projektet (i build definition).

2) Aktivera Source Server i Visual Studio. Under Debugging->General finns en inställning som heter ”Enable Source Server Support”. Kryssa i den. Det låter som att man behöver en särskild server, men denna funktion är inbyggd i TFS. Den borde snarare heta ”Enable Server Source Support”.

3) Skapa en nätverkskatalog för debuginformation (t.ex.\\\\server\\symbols). Fyll i sökvägen här i Visual Studio:



4)     Aktivera lagring av debugsymboler i bygget i TFS (i Edit Build Definition). Sätt ”Index Sources” till true och ”Path to Publish Symbols” till nätverkssökvägen i förra punkten:



Servern

1) Installera debuggern på servern. Sökvägen är \"C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\Common7\\IDE\\Remote Debugger\\x64\\msvsmon.exe\". Om Visual Studio finns installerat på servern så finns redan de filer du behöver, annars kan du kopiera dem från din lokala utvecklingsmiljö.

2) Starta debuggern (msvsmon.exe):



3) Öppna Tools -> Permissions och lägg till dig själv eller en grupp du är med i och ge rättigheter att debugga.

Starta debuggning

1) På din utvecklingsdator, välj Debug -> Attach to process.

2) I qualifier, skriv in det som står i servernamnet i debuggern (DOMAIN\\debuguser@SERVER ovan)

3) Hitta rätt w3wp.exe, anslut och debugga!

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Så debuggar du ditt TFS-webbprojekt på en server", + "meta_description": "", + "author_id": 6, + "created_at": 1332233100000, + "created_by": 6, + "updated_at": 1332233100000, + "updated_by": 6, + "published_at": 1332233100000, + "published_by": 6 + }, + { + "id": 596, + "title": "Varför visar IE9 din webbplats i kompatibilitetsläge?", + "slug": "varfor-visar-ie9-din-webbplats-i-kompatibilitetslage", + "markdown": "\r\n\r\nKompatibilitetsläge är Microsofts lösning på att vissa webbplatser slutar fungera i nya versioner av Internet Explorer. Man kan helt enkelt få IE9 att bete sig (nästan) som en IE5, IE6, IE7 eller IE8. Det finns en uppsjö med olika villkor som avgör vilket läge IE9 automatiskt ska välja: http://en.wikipedia.org/wiki/Quirks_mode\r\n\r\nNormalt sett så ska en webbsida med doctype för HTML5 - - göra att IE9 väljer standardläget. Ibland blir det dock inte så. Det finns meta-taggar och response headers som ska tvinga fram standardläget, men ibland funkar inte de heller. Ännu konstigare är att det fungerar lokalt, på testservern blir det däremot fel.\r\n## Såhär upptäcker man att sidan renderas i fel läge\r\n1) Öppna IE Developer Tools med F12\r\n\r\n2) Två platser visar att allt inte är som det ska:Browsern har valt kompatibilitetsläge för IE7, och har åstadkommit detta genom att förvandla den korrekta doctypen till en HTML-kommentar.\r\n## Varför?\r\nEfter felsökning och testande kommer man på att det står något i konsollen:\r\n\r\n\r\n## Lösning\r\nGör en eller båda av följande:\r\nTa bort siten ur Intranet Zone (se särskilt upp med wildcards, typ *.iteam.se)Slå av funktionen ’Display intranet sites in Compatibility View’ (inte så lätt man kan tro): 1) Välj att visa toolbaren ”Command bar” i IE (dold som standard). 2) Välj menyvalet ”Page > Compatiblity View settings”. 3) Kryssa ur ruta 2 under sitelistan:\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/634685440832912207-image001.png@01CD02AF.5F30ABD0__image001.png)", + "html": "

Kompatibilitetsläge är Microsofts lösning på att vissa webbplatser slutar fungera i nya versioner av Internet Explorer. Man kan helt enkelt få IE9 att bete sig (nästan) som en IE5, IE6, IE7 eller IE8. Det finns en uppsjö med olika villkor som avgör vilket läge IE9 automatiskt ska välja: http://en.wikipedia.org/wiki/Quirks_mode

Normalt sett så ska en webbsida med doctype för HTML5 - <!DOCTYPE html> - göra att IE9 väljer standardläget. Ibland blir det dock inte så. Det finns meta-taggar och response headers som ska tvinga fram standardläget, men ibland funkar inte de heller. Ännu konstigare är att det fungerar lokalt, på testservern blir det däremot fel.

Såhär upptäcker man att sidan renderas i fel läge

1) Öppna IE Developer Tools med F12

2) Två platser visar att allt inte är som det ska:

Browsern har valt kompatibilitetsläge för IE7, och har åstadkommit detta genom att förvandla den korrekta doctypen till en HTML-kommentar.

Varför?

Efter felsökning och testande kommer man på att det står något i konsollen:


Lösning

Gör en eller båda av följande:

  • Ta bort siten ur Intranet Zone (se särskilt upp med wildcards, typ *.iteam.se)
  • Slå av funktionen ’Display intranet sites in Compatibility View’ (inte så lätt man kan tro): 1) Välj att visa toolbaren ”Command bar” i IE (dold som standard). 2) Välj menyvalet ”Page > Compatiblity View settings”. 3) Kryssa ur ruta 2 under sitelistan:



", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Varför visar IE9 din webbplats i kompatibilitetsläge?", + "meta_description": "", + "author_id": 6, + "created_at": 1333462320000, + "created_by": 6, + "updated_at": 1333462320000, + "updated_by": 6, + "published_at": 1333462320000, + "published_by": 6 + }, + { + "id": 597, + "title": "Encoding av Unicode till iso-8859-1 i C#", + "slug": "encoding-av-unicode-till-iso-8859-1-i-c", + "markdown": "\r\n\r\nNär man överför data mellan olika system hamnar man ibland i helvetet med gamla encodings. I .NET är alla strängar kodade i Unicode och så länge man ser till att underliggande system klarar av detta (rekommenderas!) behöver man inte tänka mer på det.\r\n\r\nNär man hamnar i situationen att man ändå behöver skicka något till en annan sajt som inte använder Unicode så brukar det i Sverige och Europa handla om Windows standardencoding, som här är iso-8859-1. Det finns som tur är bra verktyg i .NET som hjälper till men jag har suttit många timmar tidigare och ändå inte lyckats förstå hur det hela hänger ihop och måste erkänna att jag tidigare har gjort manuell replace mellan å och %e5 osv. \r\n\r\nJag tog mig nu tiden att reda ut vad det är som är anledningen till att det blir fel och kom fram till att jag i min iver att koda om strängarna hela tiden råkade ändå konvertera tillbaka dem till Unicode för som sagt, .NET kan bara koda interna strängar i Unicode och vill man hantera en annan encoding måste man använda en byte[] array under tiden man hanterar sin sträng. Och ska man koda om den till en URL så kan man inte gå via sträng utan måste bibehålla byte[] arrayen och använda de inbyggda funktionerna i .NET som kodar dessa arrayer till URL och först därefter begära att konvertera resultatet till en sträng.\r\n\r\nFör att ni ska slippa detta tråkiga arbete bjuder jag därför på en liten Extension Method.\r\n\r\nHåll till godo:\r\n\r\n\r\n```prettyprint lang-c-sharp\r\n/// \r\n/// Encodes a unicode formatted string into a iso-8859-1 latin 1 string encoded with urlencode. For example: rånövägen -> r%E5n%F6v%E4gen\r\n/// \r\n/// \r\n/// \r\npublic static string UrlEncodeLatinString(this string unicode)\r\n{\t\r\n\tvar encoding = Encoding.GetEncoding(\"iso-8859-1\");\r\n\tbytes = Encoding.Convert(Encoding.Default, encoding,Encoding.Default.GetBytes(unicode));\r\n\tEncoding.Default.GetString(HttpUtility.UrlEncodeToBytes(bytes));\r\n}\r\n```\r\n", + "html": "

När man överför data mellan olika system hamnar man ibland i helvetet med gamla encodings. I .NET är alla strängar kodade i Unicode och så länge man ser till att underliggande system klarar av detta (rekommenderas!) behöver man inte tänka mer på det.

När man hamnar i situationen att man ändå behöver skicka något till en annan sajt som inte använder Unicode så brukar det i Sverige och Europa handla om Windows standardencoding, som här är iso-8859-1. Det finns som tur är bra verktyg i .NET som hjälper till men jag har suttit många timmar tidigare och ändå inte lyckats förstå hur det hela hänger ihop och måste erkänna att jag tidigare har gjort manuell replace mellan å och %e5 osv.

Jag tog mig nu tiden att reda ut vad det är som är anledningen till att det blir fel och kom fram till att jag i min iver att koda om strängarna hela tiden råkade ändå konvertera tillbaka dem till Unicode för som sagt, .NET kan bara koda interna strängar i Unicode och vill man hantera en annan encoding måste man använda en byte[] array under tiden man hanterar sin sträng. Och ska man koda om den till en URL så kan man inte gå via sträng utan måste bibehålla byte[] arrayen och använda de inbyggda funktionerna i .NET som kodar dessa arrayer till URL och först därefter begära att konvertera resultatet till en sträng.

För att ni ska slippa detta tråkiga arbete bjuder jag därför på en liten Extension Method.

Håll till godo:

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Encoding av Unicode till iso-8859-1 i C#", + "meta_description": "", + "author_id": 1087, + "created_at": 1334744400000, + "created_by": 1087, + "updated_at": 1334744400000, + "updated_by": 1087, + "published_at": 1334744400000, + "published_by": 1087 + }, + { + "id": 599, + "title": "Tips för hantering av krav i Scrum", + "slug": "tips-for-hantering-av-krav-i-scrum", + "markdown": "\r\n## Vad är ett krav och hur bör det vara definierat?\r\n\r\nDet är inte alltid att det är så att beställaren/produktägaren tar fram kraven inför en sprint. Framförallt inte när det gäller teknik. Produktägaren ska självklart vara högst delaktig i detta arbete men kan behöva hjälp.\r\n\r\n\r\n\r\nDet viktigaste oavsett ven som skriver kraven är att den personen försöker se det ur beställarens synvinkel. Vad är det som är behovet? Det är väldigt vanligt att man börjar fokusera på lösning istället för att fokusera på behov och resultat.\r\n\r\n\r\nDet är skillnad på:\r\n\r\n”Vi har ett behov av att få ut rapporter från vårt ekonomisystem. En rapport som vi behöver är att se hur mycket som är fakturerat per månad per projekt”\r\n\r\n\r\n”Vi har ett behov av att få ut rapporter från vårt ekonomisystem. En rapport som vi behöver är att se hur mycket som är fakturerat per månad per projekt . För detta måste vi öppna i brandväggen, göra en .NET sida och använda ekonomi APIet.”\r\n\r\n\r\n\r\nÅterigen, se kraven ur beställarens perspektiv. Om det finns krav på att det ska göras i .NET så absolut, men det kanske inte är ett krav att t.ex. öppna upp brandväggen utan det kanske visar sig att man måste göra det för att få det att fungera. Det är heller inte omöjligt att det visar sig att man inte behövde göra något i brandväggen eller att det löste sig på annat sätt.\r\n\r\n\r\n\r\nVi arbetar ofta med webbyråer som partners och de arbetar inte agilt och framförallt inte i gemensamma sprintar. Det betyder att de oftast levererar form eller även HTML/CSS innan en sprint. Kraven på utseendet är därför oftast väldigt tydliga och detaljerade. Det som behöver redas ut är oftast att förtydliga scenarier.\r\n\r\n\r\n\r\nKrav är väldigt olika beroende beroende på hur projektet ser ut.\r\n\r\n\r\n## Dela upp krav i flera krav\r\n\r\nDet man också bör tänka på är att dela upp sitt innehåll i kraven som gör att det går att prioritera mellan dem. Om man har en jättestort krav som innehåller väldigt mycket kan det vara läge att dela upp kravet i flera krav. På det sättet blir det möjligt att prioritera mellan eller välja bort vissa delar. Här är det bra att ha lite framförhållning för om man som beställare kommer på sent att vissa delar av ett krav ska falla bort så leder det ofta till ny planering då kravet ändrats och vissa uppgifter måste korrigeras.\r\n\r\n\r\n## Hur många krav bör man ha i en sprint?\r\n\r\n\r\n\r\nFörutom att dela upp ett krav i flera för att underlätta prioritering i sprinten finns det så klart fler anledningar.\r\n\r\n\r\n\r\nEn anledning till att det inte bör vara för få krav i en sprint är att om man t.ex. har 3 krav i en sprint och det inte går som planerat. Sprinten har en hastighet på ca 60% mot uppskattningarna den uppskattade hastigheten. I det läget blir bara 1 av 3 krav leverade i sprinten. Detta eftersom tanken är att allt som levereras ska vara komplett för att kunna lanseras. Självklart kan man säkert sänka ambitionsnivån i krav nummer 2 för att få det ”klart”.\r\n\r\n\r\n\r\nDet är heller inte bra att ha för många krav i en sprint då erfarenheten säger att det blir väldigt mycket testning som behöver utföras. Vi har som rutin att för varje krav ha ett acceptanstest när alla uppgifter är klara inom ett krav. Ju fler krav desto fler timmar till testning. Självklart behöver inte alla krav ha lika mycket testning men min erfarenhet säger att det gäller att hitta en balans mellan för få krav och för många.\r\n\r\n\r\n## Gå igenom kraven innan sprinten\r\n\r\nAv erfarenhet har det visat sig att oavsett vem som skrivit kraven så behövs ett möte innan sprintplaneringen då kraven gås igenom med delar av teamet och produktägaren för att så tidigt som möjligt reda ut stora risker, utmaningar, förändra kraven något för att få ut så mycket värde som möjligt under sprinten.\r\n\r\n\r\n## Summering\r\n\r\nVi har följt denna process nu ett bra tag och sett att det är ett lyckat koncept. Förbereder man sig på detta sätt så minskar man risken för ineffektivet, tar beslut enklare under sprintens gång och resultatet blir bättre. Det är win-win för alla involverade.\r\n\r\n![Bild](http://tekniken.nu/uploads/634707942306836457-image001.png@01CD17F1.5CCE3EF0__image001.png)", + "html": "

Vad är ett krav och hur bör det vara definierat?


Det är inte alltid att det är så att beställaren/produktägaren tar fram kraven inför en sprint. Framförallt inte när det gäller teknik. Produktägaren ska självklart vara högst delaktig i detta arbete men kan behöva hjälp.



Det viktigaste oavsett ven som skriver kraven är att den personen försöker se det ur beställarens synvinkel. Vad är det som är behovet? Det är väldigt vanligt att man börjar fokusera på lösning istället för att fokusera på behov och resultat.



Det är skillnad på:


”Vi har ett behov av att få ut rapporter från vårt ekonomisystem. En rapport som vi behöver är att se hur mycket som är fakturerat per månad per projekt”


”Vi har ett behov av att få ut rapporter från vårt ekonomisystem. En rapport som vi behöver är att se hur mycket som är fakturerat per månad per projekt . För detta måste vi öppna i brandväggen, göra en .NET sida och använda ekonomi APIet.”



Återigen, se kraven ur beställarens perspektiv. Om det finns krav på att det ska göras i .NET så absolut, men det kanske inte är ett krav att t.ex. öppna upp brandväggen utan det kanske visar sig att man måste göra det för att få det att fungera. Det är heller inte omöjligt att det visar sig att man inte behövde göra något i brandväggen eller att det löste sig på annat sätt.



Vi arbetar ofta med webbyråer som partners och de arbetar inte agilt och framförallt inte i gemensamma sprintar. Det betyder att de oftast levererar form eller även HTML/CSS innan en sprint. Kraven på utseendet är därför oftast väldigt tydliga och detaljerade. Det som behöver redas ut är oftast att förtydliga scenarier.



Krav är väldigt olika beroende beroende på hur projektet ser ut.



Dela upp krav i flera krav


Det man också bör tänka på är att dela upp sitt innehåll i kraven som gör att det går att prioritera mellan dem. Om man har en jättestort krav som innehåller väldigt mycket kan det vara läge att dela upp kravet i flera krav. På det sättet blir det möjligt att prioritera mellan eller välja bort vissa delar. Här är det bra att ha lite framförhållning för om man som beställare kommer på sent att vissa delar av ett krav ska falla bort så leder det ofta till ny planering då kravet ändrats och vissa uppgifter måste korrigeras.



Hur många krav bör man ha i en sprint?




Förutom att dela upp ett krav i flera för att underlätta prioritering i sprinten finns det så klart fler anledningar.



En anledning till att det inte bör vara för få krav i en sprint är att om man t.ex. har 3 krav i en sprint och det inte går som planerat. Sprinten har en hastighet på ca 60% mot uppskattningarna den uppskattade hastigheten. I det läget blir bara 1 av 3 krav leverade i sprinten. Detta eftersom tanken är att allt som levereras ska vara komplett för att kunna lanseras. Självklart kan man säkert sänka ambitionsnivån i krav nummer 2 för att få det ”klart”.



Det är heller inte bra att ha för många krav i en sprint då erfarenheten säger att det blir väldigt mycket testning som behöver utföras. Vi har som rutin att för varje krav ha ett acceptanstest när alla uppgifter är klara inom ett krav. Ju fler krav desto fler timmar till testning. Självklart behöver inte alla krav ha lika mycket testning men min erfarenhet säger att det gäller att hitta en balans mellan för få krav och för många.



Gå igenom kraven innan sprinten


Av erfarenhet har det visat sig att oavsett vem som skrivit kraven så behövs ett möte innan sprintplaneringen då kraven gås igenom med delar av teamet och produktägaren för att så tidigt som möjligt reda ut stora risker, utmaningar, förändra kraven något för att få ut så mycket värde som möjligt under sprinten.



Summering


Vi har följt denna process nu ett bra tag och sett att det är ett lyckat koncept. Förbereder man sig på detta sätt så minskar man risken för ineffektivet, tar beslut enklare under sprintens gång och resultatet blir bättre. Det är win-win för alla involverade.

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Tips för hantering av krav i Scrum", + "meta_description": "", + "author_id": 1094, + "created_at": 1337644800000, + "created_by": 1094, + "updated_at": 1337644800000, + "updated_by": 1094, + "published_at": 1337644800000, + "published_by": 1094 + }, + { + "id": 607, + "title": "Hur många dagar är det kvar till dina medarbetares födelsedagar?", + "slug": "hur-manga-dagar-ar-det-kvar-till-dina-medarbetares-fodelsedagar", + "markdown": "\r\n\r\nDet är en fråga som ställs på många intranät! Det är ju inte så svårt att räkna ut, men det är lätt att glömma bort att skottår kan ställa till det, både på själva skottdagen och om man skulle ha en medarbetare som är född på en skottdag.\r\n\r\nPå morgonen den 29:e februari i år så krashade funktionen som tar fram en lista på de medarbetare som fyller år under veckan för en av våra kunder. Jag såg tidigt var felet inträffade, programmeraren före mig hade försökt skapa en DateTime för dagens datum (som då var den 29:e februari), fast det år som medarbetaren var född:\r\n\r\n![Bild](http://tekniken.nu/uploads/634720665750377957-tårta.gif)\r\n```prettyprint lang-c-sharp\r\nprotected int GetDaysUntilBirthDay(DateTime birthday)\r\n\r\n {\r\n\r\n DateTime compareDate = new DateTime(birthday.Year, DateTime.Now.Month, DateTime.Now.Day);\r\n\r\n return (birthday - compareDate).Days;\r\n\r\n }\r\n```\r\n\r\n\r\nVad är då best practice för det här? Stack overflow borde ha lösningen. En snabb googling visade att så inte var fallet. Alla kodexempel jag hittade hade detta tankefelet eller det lika felaktiga (som dock bara skulle gett fel på medarbetare födda den 29:e februari): att skapa en DateTime i år med utgångspunkt från medarbetarens födelsedag.\r\n\r\n\r\nMin lösning på problemet blev följande:\r\n\r\n```prettyprint lang-c-sharp\r\nprotected int GetDaysUntilBirthDay(DateTime birthday)\r\n\r\n {\r\n\r\n DateTime compareDate = DateTime.Now.AddYears(-(DateTime.Now.Year - birthday.Year));\r\n\r\n return (birthday.Date - compareDate.Date).Days;\r\n\r\n }\r\n```\r\n\r\n\r\nHur har du löst det?\r\n", + "html": "

Det är en fråga som ställs på många intranät! Det är ju inte så svårt att räkna ut, men det är lätt att glömma bort att skottår kan ställa till det, både på själva skottdagen och om man skulle ha en medarbetare som är född på en skottdag.

På morgonen den 29:e februari i år så krashade funktionen som tar fram en lista på de medarbetare som fyller år under veckan för en av våra kunder. Jag såg tidigt var felet inträffade, programmeraren före mig hade försökt skapa en DateTime för dagens datum (som då var den 29:e februari), fast det år som medarbetaren var född:



Vad är då best practice för det här? Stack overflow borde ha lösningen. En snabb googling visade att så inte var fallet. Alla kodexempel jag hittade hade detta tankefelet eller det lika felaktiga (som dock bara skulle gett fel på medarbetare födda den 29:e februari): att skapa en DateTime i år med utgångspunkt från medarbetarens födelsedag.


Min lösning på problemet blev följande:



Hur har du löst det?

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Hur många dagar är det kvar till dina medarbetares födelsedagar?", + "meta_description": "edarbetare som är född på en skottdag.", + "author_id": 1093, + "created_at": 1336469774000, + "created_by": 1093, + "updated_at": 1336469774000, + "updated_by": 1093, + "published_at": 1336469774000, + "published_by": 1093 + }, + { + "id": 608, + "title": "Massor av kod på Devsum 2012", + "slug": "massor-av-kod-pa-devsum-2012", + "markdown": "\r\n\r\nTvå dagars fun fun fun! Devsum blev kul, inspirerande och hemtrevligt med fantastiska talare i trånga lokaler på Nalen.\r\nÅrets keynotes var riktigt bra! Martin Laforest talade om kvantdatorer och möjligheterna med tillämpad kvantfysik. Över iallafall mitt huvud stundtals men ämnet var jätteintressant och Martin är en riktigt inspirerande talare. Ett tag trodde jag att jag valt fel bana och borde ha läst fysik som morfar. Experience Design med Aral Balkan inspirerade istället i en helt annan riktning. Han hade bra poänger runt användbarhet och hur ett bra system ska KÄNNAS men han inspirerade framförallt till att applicera glädje och skönhet på system, jag drar det ett steg till och vill se mer glädje i kodande och våra processer. Jag tror starkt att bra verktyg och snygg kod skapar lycka och trivsel även för utvecklare.\r\n## Höjdpunkter\r\nRavenDB - Amazing feats, Ayende Rahien. Man kan inte låta bli att älska RavenDB och Ayendes approach på utveckling.Modern technologies for web-based-gaming, Rob Ashton. Så jäkla kul kille!Modern Javascript, Scott Allen. Starstruck? Japp. Glasklart hur man skriver stabil kod i Javascript.An architecture remake, Jimmy Nilsson. Jag gillar skarpt att ta del av andra teams resor.\r\n## Hetast just nu\r\nJavascriptNode.jsRealtimeNoSQLResponsive designWindows 8Back to basics\r\n## Alla dessa män\r\n40 talare och 38 män. Det är självklart svårt att inte lägga märke till det. Jag drömmer om framtiden.\r\n\r\n![Bild](http://tekniken.nu/uploads/devsum.png)", + "html": "

Två dagars fun fun fun! Devsum blev kul, inspirerande och hemtrevligt med fantastiska talare i trånga lokaler på Nalen.

Årets keynotes var riktigt bra! Martin Laforest talade om kvantdatorer och möjligheterna med tillämpad kvantfysik. Över iallafall mitt huvud stundtals men ämnet var jätteintressant och Martin är en riktigt inspirerande talare. Ett tag trodde jag att jag valt fel bana och borde ha läst fysik som morfar. Experience Design med Aral Balkan inspirerade istället i en helt annan riktning. Han hade bra poänger runt användbarhet och hur ett bra system ska KÄNNAS men han inspirerade framförallt till att applicera glädje och skönhet på system, jag drar det ett steg till och vill se mer glädje i kodande och våra processer. Jag tror starkt att bra verktyg och snygg kod skapar lycka och trivsel även för utvecklare.

Höjdpunkter

RavenDB - Amazing feats, Ayende Rahien. Man kan inte låta bli att älska RavenDB och Ayendes approach på utveckling.
Modern technologies for web-based-gaming, Rob Ashton. Så jäkla kul kille!
Modern Javascript, Scott Allen. Starstruck? Japp. Glasklart hur man skriver stabil kod i Javascript.
An architecture remake, Jimmy Nilsson. Jag gillar skarpt att ta del av andra teams resor.

Hetast just nu

Javascript
Node.js
Realtime
NoSQL
Responsive design
Windows 8
Back to basics

Alla dessa män

40 talare och 38 män. Det är självklart svårt att inte lägga märke till det. Jag drömmer om framtiden.

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Massor av kod på Devsum 2012", + "meta_description": "", + "author_id": 1093, + "created_at": 1337935560000, + "created_by": 1093, + "updated_at": 1337935560000, + "updated_by": 1093, + "published_at": 1337935560000, + "published_by": 1093 + }, + { + "id": 609, + "title": "Closures i JavaScript - när binds egentligen variablerna?", + "slug": "closures-i-javascript---nar-binds-egentligen-variablerna", + "markdown": "\r\n\r\nAllt mer utveckling både på klientsidan (förstås) och på serversidan sker med JavaScript och alltmer sker asynkront. Tidigare kunde man anropa funktioner som uträttar uppgifter en efter en och helt enkelt gå vidare till nästa steg när man var klar med det innan. Lätt att förstå och lätt att debugga, men inte särskilt anpassat till dagens arkitekturer där man ofta anropar externa tjänster och API:er och där gränssnittet helt enkelt inte kan vänta på svar. Istället gör man en funktion, en callback, som anropas när den externa uppgiften är klar.\r\n\r\nDet är ett smart pattern, men kan ge upphov till klurigheter att lösa för utvecklaren. En sådan är vilket scope som callback-funktionen egentligen körs i, d.v.s. vilka variablerna man har tillgång till när svarsanropet väl kommer. Ett annat är att man kan råka ut för race conditions där värden av vissa variabler plötsligt beror på svarstiden för de externa anropen.\r\n\r\nHär är ett exempel:\r\n\r\n![Bild](http://tekniken.nu/uploads/closure.png)\r\n```prettyprint lang-javascript\r\ncars = [ { reg: ‘ABC123’ }, { reg: ‘DEF456’ }, { reg: ‘GHI789’ }, { reg: ’JKL123’ } ];\r\n\r\nfor (i = 0; i < cars.length ; i++)\r\n{\t\r\n\tvar currentCar = cars[i];\r\n\r\n\t// Långsamt anrop till externt api. Anropet tar två parametrar, första är registreringsnumret den andra är\r\n\r\n\t// callbackfunktionen som anropas när api:et svarar\r\n\r\n\texternalService.slowlyLookupCarBrand(\r\n\t\tcar.reg,\r\n function (brandName) {\r\n\t\t\tcars[i].brand = brandName;\r\n }\r\n\t);\r\n}\r\n```\r\n\r\n\r\nVad händer när denna körs? Ett fel uppstår där det står att ”cars[i].brand is undefined”. Konstigt... Första tanken är att det är fel scope, att variabeln i inte finns i callbackfunktionen. Om man skriver ut värdet på i upptäcker man att så inte är fallet – istället är har i alltid värdet 4. Vad har hänt här egentligen?\r\n\r\n\r\nSvaret är att när första callback-anropet görs (och de tre följande förstås) så har redan for-loopen körts igenom och värdet på i har redan räknats upp till sitt maxvärde 4. Så anropet i callbacken kommer alltid att bli cars[4].brand. Det vi skulle vilja är att värdet på i binds när callback-funktionen skapas, inte när den anropas.\r\n\r\n\r\nJavaScript är ett magiskt språk med många funktioner som länge har funnits på teoretisk nivå inom datalogin men som sällan letar sig fram till praktisk användning. En sådan är högre ordningens funktioner – vilket betyder att funktioner fungerar som vilka andra typer som helst. Det ska vi använda för att lösa vårt problem. Vi vill skapa en s.k. closure, helt enkelt en bindning av variabelns värde vid deklarationen istället för vid körningen. Såhär går det till (detta är inte intuitivt och tar de flesta ganska mycket tankemöda innan man förstår vad som händer):\r\n\r\n```prettyprint lang-javascript\r\ncars = [ { reg: ‘ABC123’ }, { reg: ‘DEF456’ }, { reg: ‘GHI789’ }, { reg: ’JKL123’ } ];\r\n\r\nfor (i = 0; i < cars.length ; i++)\r\n{\t\r\n\tvar currentCar = cars[i];\r\n\t\r\n\t// Långsamt anrop till externt api. Anropet tar två parametrar, första är registreringsnumret den andra är\r\n\r\n\t// callbackfunktionen som anropas när api:et svarar\r\n\t\r\n\texternalService.slowlyLookupCarBrand(\r\n car.reg,\r\n function (index) {\r\n\t\t\treturn function (brandName) {\t\r\n\t\t\t\tcars[index].brand = brandName;\t\r\n\t\t\t}\t\r\n\t\t} (i)\t\r\n\t);\r\n}\r\n```\r\n\r\n\r\nOK, vad betyder det här nu då? Istället för att direkt skapa en anonym funktion som callback så låter vi en yttre funktion skapa och returnera callback-funktionen. Det sista (i) efter } betyder ”anropa den yttre funktionen med parametervärdet i”. Det som händer då är att en closure skapas, en binding av variablers värden som de ser ut just nu. Parametern index i funktionen tilldelas värdet som vi har vid tillfället när anropet till slowlyLookupCarBrand görs, inte när svarsanropet till den inre funktionen kommer från den externa tjänsten. Det betyder att våra fyra externa anrop kommer att få fyra olika svarsfunktioner, var och en med ett värde på index som motsvarar värdet på i när det externa anropet sker.\r\n\r\n\r\nSom sagt  - inte intuitivt och inte superenkelt att förstå vid första genomläsningen, men helt nödvändigt att använda i vissa tillfällen.\r\n", + "html": "

Allt mer utveckling både på klientsidan (förstås) och på serversidan sker med JavaScript och alltmer sker asynkront. Tidigare kunde man anropa funktioner som uträttar uppgifter en efter en och helt enkelt gå vidare till nästa steg när man var klar med det innan. Lätt att förstå och lätt att debugga, men inte särskilt anpassat till dagens arkitekturer där man ofta anropar externa tjänster och API:er och där gränssnittet helt enkelt inte kan vänta på svar. Istället gör man en funktion, en callback, som anropas när den externa uppgiften är klar.

Det är ett smart pattern, men kan ge upphov till klurigheter att lösa för utvecklaren. En sådan är vilket scope som callback-funktionen egentligen körs i, d.v.s. vilka variablerna man har tillgång till när svarsanropet väl kommer. Ett annat är att man kan råka ut för race conditions där värden av vissa variabler plötsligt beror på svarstiden för de externa anropen.

Här är ett exempel:



Vad händer när denna körs? Ett fel uppstår där det står att ”cars[i].brand is undefined”. Konstigt... Första tanken är att det är fel scope, att variabeln i inte finns i callbackfunktionen. Om man skriver ut värdet på i upptäcker man att så inte är fallet – istället är har i alltid värdet 4. Vad har hänt här egentligen?


Svaret är att när första callback-anropet görs (och de tre följande förstås) så har redan for-loopen körts igenom och värdet på i har redan räknats upp till sitt maxvärde 4. Så anropet i callbacken kommer alltid att bli cars[4].brand. Det vi skulle vilja är att värdet på i binds när callback-funktionen skapas, inte när den anropas.


JavaScript är ett magiskt språk med många funktioner som länge har funnits på teoretisk nivå inom datalogin men som sällan letar sig fram till praktisk användning. En sådan är högre ordningens funktioner – vilket betyder att funktioner fungerar som vilka andra typer som helst. Det ska vi använda för att lösa vårt problem. Vi vill skapa en s.k. closure, helt enkelt en bindning av variabelns värde vid deklarationen istället för vid körningen. Såhär går det till (detta är inte intuitivt och tar de flesta ganska mycket tankemöda innan man förstår vad som händer):



OK, vad betyder det här nu då? Istället för att direkt skapa en anonym funktion som callback så låter vi en yttre funktion skapa och returnera callback-funktionen. Det sista (i) efter } betyder ”anropa den yttre funktionen med parametervärdet i”. Det som händer då är att en closure skapas, en binding av variablers värden som de ser ut just nu. Parametern index i funktionen tilldelas värdet som vi har vid tillfället när anropet till slowlyLookupCarBrand görs, inte när svarsanropet till den inre funktionen kommer från den externa tjänsten. Det betyder att våra fyra externa anrop kommer att få fyra olika svarsfunktioner, var och en med ett värde på index som motsvarar värdet på i när det externa anropet sker.


Som sagt  - inte intuitivt och inte superenkelt att förstå vid första genomläsningen, men helt nödvändigt att använda i vissa tillfällen.

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Closures i JavaScript - när binds egentligen variablerna?", + "meta_description": "", + "author_id": 6, + "created_at": 1338390900000, + "created_by": 6, + "updated_at": 1338390900000, + "updated_by": 6, + "published_at": 1338390900000, + "published_by": 6 + }, + { + "id": 610, + "title": "Modern Javascript utan ramverk", + "slug": "modern-javascript-utan-ramverk", + "markdown": "\r\n\r\nEftersom många har sina Javascript-kunskaper från en tid då Javascript var krångligt och bara några få kommandon fungerade överallt är man naturligt nervös. Dessutom är ju språket dynamiskt och relativt oförlåtande och många editorer har svårt att verifiera syntaxen ordentligt. Resultatet är att man inte använder sig av de smarta utökningarna som har kommit i Javascript den senaste tiden. Många förlitar sig även på jQuery som utökar äldre webbläsare med samma typ av funktionalitet som numera finns inbyggd i Javascript. jQuery är väldigt bra men när man är i en kontrollerad miljö som t ex Node.js är det väldigt onödigt att använda sig av ett ramverk som erbjuder samma funktionalitet som den inbyggda motorn.\r\n\r\nNedan visar jag några trix som går att använda i alla moderna webbläsare från och med IE9 (HTML5-kompatibla) och självklart fungerar allt detta i Node.js – allt utan ett enda ramverk.\r\n\r\n![Bild](http://tekniken.nu/uploads/no-framwork.png)\r\n```prettyprint lang-javascript\r\n// [] ger exakt samma resultat som new Array()\r\nvar array=['hello','world'];\r\n\r\n// forEach stöds ej i IE8 men i alla andra webbläsare inkl IE9\r\narray.forEach(function(item){\r\n\tconsole.log(item)\r\n});\r\n\r\n// lite likt LINQ i C# kan man bearbeta sina listor och få tillbaka filtrerade resultat\r\nvar filteredArray=array.filter(function(item){\r\n\treturn item=='hello';\r\n});\r\n\r\n// returnerar en ny array ['HELLO', 'WORLD']. Fungerar i IE9\r\narray.map(function(item){return item.toUpperCase()});\r\n\r\n// every körs för varje del av en array och nedanstående eturnerar true om alla returnerar true\r\narray.every(function(item){return item=='hello' });\r\n\r\n// some körs för varje del av en array och returnerar true om någon av delarna returnerar true\r\narray.some(function(item){return item=='hello' });\r\n\r\n// returnerar en del av en array, i det här fallet den första\r\narray.splice(0,1);\r\n\r\n// sortera i bokstavsordning\r\nvar sortedArray=array.sort(function(a,b){\r\n\treturn a-b;\r\n});\r\n\r\n// nu till lite användning av våra nya fina listbearbetningsfunktioner\r\nvar playHistory=[\r\n\t{\r\n \tartist:'Madonna',\r\n \ttitle:'Frozen'\r\n \t},\r\n \t{\r\n\t\tartist:'Madonna',\r\n \ttitle:'La Isla Bonita'\r\n\t},\r\n \t{\r\n \tartist:'Madonna',\r\n \ttitle:'American Pie'\r\n \t},\r\n \t{\r\n \tartist:'Madonna',\r\n \ttitle:'Frozen'\r\n \t},\r\n \t{\r\n \tartist:'Madonna',\r\n \t\ttitle:'Frozen'\r\n \t}\r\n];\r\n\r\n// behöver deklareras temporärt\r\nvar group={};\r\n\r\n// Exempel på arrayfunktioner för att ta fram en topplista\r\nvar topSongs=playHistory\r\n\r\n// vi letar igenom alla artister och sparar unika låtar\r\n.map(function(item){\r\n // enkelt = innebär tilldelning vilket gör att vi bara behöver leta en gång. Kan upplevas som lite farligt.. ;)\r\n\r\n if(song=group[item.title])\r\n song.count++;\r\n else\r\n return group[item.title]={artist: item.artist, title : item.title, count :1};\r\n\r\n}, topSongs)\r\n\r\n// sortera på flest antal\r\n.sort(function(a,b){return a.count>b.count})\r\n\r\n// motsvarande .take(3);\r\n.slice(0,3);\r\n```\r\n\r\n\r\nFör att använda JSON behövs inga bibliotek när du har en modern webbläsare:\r\n\r\n```prettyprint lang-javascript\r\n// serialiserar ett objekt till en sträng: \"['hello', 'world']\"\r\nvar string=JSON.stringify(array);\r\n\r\n// skapar ett objekt av en JSON sträng\r\nvar object=JSON.parse(string);\r\n```\r\n\r\n\r\nFör att skapa objektorienterad struktur används vanliga funktioner som innehåller variabler och funktioner som fungerar på motsvarande sätt som publika och privata egenskaper eller metoder.\r\n\r\n```prettyprint lang-javascript\r\n// så här ser en klass ut i Javascript\r\nfunction Additioner=function() {\r\n\t// för att alltid kunna hänvisa till klassen från privata metoder sätter vi ett eget namn på instansen: 'self'\t\r\n\tvar self=this;\r\n \r\n\t// privat variabel i klassen\r\n var total=0;\r\n\r\n // privat metod i klassen\r\n var add=function(number)\t\r\n\t{\r\n \t// i en privat metod blir 'this' inte längre lokalt för klassen utan för den privata metoden. \t\r\n\t\t// Då använder vi vår egen definierade closure self istället för 'this'\t\r\n\t\tself.total=self.total+number;\t\r\n\t} \r\n\r\n // publik metod\r\n this.add=function(number,callback){\t\t\r\n\t\tthis.total=this.total+number;\r\n\t\r\n\t\t// javascript lämpar sig ypperligt för att bygga asynkrona tjänster och försök därför alltid gör\r\n if(callback)\r\n\t\t\tcallback(this.total);\t\r\n\t}\r\n\t\r\n\t// publik metod\t\r\n\tthis.getResult=function()\r\n\t{\t\r\n\t\t// i publika metoder finns 'this' och därför använder vi den\r\n return this.total;\t\r\n\t}\r\n}\r\n\r\n// för att använda sin klass:\r\nvar additioner= new Additioner();\r\nadditioner.add(1);\r\nadditioner.add(5, function(result) {\r\n\tconsole.log(result);// 6\r\n});\r\n```\r\n\r\n\r\nDu kan även använda objektet .prototype för att utöka superklassen och då ärvs alla nya egenskaper i superklassen ut till alla instanser av ditt objekt.\r\n\r\n```prettyprint lang-javascript\r\nString.prototype.endsWith =function(suffix) {\r\n\treturn this.indexOf(suffix, this.length - suffix.length) !== -1;\r\n};\r\n```\r\n", + "html": "

Eftersom många har sina Javascript-kunskaper från en tid då Javascript var krångligt och bara några få kommandon fungerade överallt är man naturligt nervös. Dessutom är ju språket dynamiskt och relativt oförlåtande och många editorer har svårt att verifiera syntaxen ordentligt. Resultatet är att man inte använder sig av de smarta utökningarna som har kommit i Javascript den senaste tiden. Många förlitar sig även på jQuery som utökar äldre webbläsare med samma typ av funktionalitet som numera finns inbyggd i Javascript. jQuery är väldigt bra men när man är i en kontrollerad miljö som t ex Node.js är det väldigt onödigt att använda sig av ett ramverk som erbjuder samma funktionalitet som den inbyggda motorn.

Nedan visar jag några trix som går att använda i alla moderna webbläsare från och med IE9 (HTML5-kompatibla) och självklart fungerar allt detta i Node.js – allt utan ett enda ramverk.



För att använda JSON behövs inga bibliotek när du har en modern webbläsare:



För att skapa objektorienterad struktur används vanliga funktioner som innehåller variabler och funktioner som fungerar på motsvarande sätt som publika och privata egenskaper eller metoder.



Du kan även använda objektet .prototype för att utöka superklassen och då ärvs alla nya egenskaper i superklassen ut till alla instanser av ditt objekt.

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Modern Javascript utan ramverk", + "meta_description": "", + "author_id": 1087, + "created_at": 1338202200000, + "created_by": 1087, + "updated_at": 1338202200000, + "updated_by": 1087, + "published_at": 1338202200000, + "published_by": 1087 + }, + { + "id": 611, + "title": "Search Engine Optimization (SEO) Toolkit 1.0 ", + "slug": "search-engine-optimization-seo-toolkit-10-", + "markdown": "\r\n## Vilka är URLerna?\r\nJag fick nyligen uppgiften att lista alla URLer från en kunds externa site. De ska mappas till motsvarande innehåll i den nya site vi bygger. Eftersom jag inte hade tillgång till produktionsmiljön satt jag lite illa till. Jag bestämde mig för att försöka crawla siten och googlade efter ett verktyg för detta. Första träffen pekade rakt ned i min egen dator. Tydligen kommer något som heter Search Engine Optimization (SEO) Toolkit 1.0 med Web Platform. Jag inser sedan att verktyget funnits sedan 2009 men att jag aldrig sprungit på det. Det känns mest pinsamt. Jag testade verktyget lokalt men den klarade inte av att crawla min utvecklingsmiljö. Utan att felsöka det vidare testade jag på vår CI-server och där gick det hur bra som helst.\r\n\r\nSearch Engine Optimization (SEO) Toolkit 1.0 lät mig peka ut en site och klicka på Ok, en stund senare satt jag där med en massa data att analysera. Där fanns alla violations mot god SEO-sed skuret på olika ledder (sammanställning av alla, violations per sida...) men även prestandabovar m.m. indikerades.  Varje violation förklarades dessutom med några meningar om varför den skapar ett problem.\r\n\r\nHur löste det här mitt problem? Jo, jag kunde ta ut en rapport på alla URLer och öppna i alla analytikers favoritverktyg, Excel. Rapporten innehöll alla resurser, inte bra sidor utan även bilder m.m.  jag filtrerade på content type och fick ut en lista som våra SEO-partners var nöjda med.\r\n\r\nNu använder jag verktyget ofta för att det hjälper mig att hålla hygiennivå i det jag utvecklar.\r\n## Fler länkar om Search Engine Optimization (SEO) Toolkit 1.0\r\nScott Guthrie bloggar bra -http://weblogs.asp.net/scottgu/archive/2009/06/03/iis-search-engine-optimization-toolkit.aspx\r\n\r\nOfficiell hemsida, nedladdning -http://www.iis.net/download/SEOToolkit\r\n\r\n![Bild](http://tekniken.nu/uploads/634745093293364607-image001.jpg@01CD4301.7CAE5300__image001.jpg)", + "html": "

Vilka är URLerna?

Jag fick nyligen uppgiften att lista alla URLer från en kunds externa site. De ska mappas till motsvarande innehåll i den nya site vi bygger. Eftersom jag inte hade tillgång till produktionsmiljön satt jag lite illa till. Jag bestämde mig för att försöka crawla siten och googlade efter ett verktyg för detta. Första träffen pekade rakt ned i min egen dator. Tydligen kommer något som heter Search Engine Optimization (SEO) Toolkit 1.0 med Web Platform. Jag inser sedan att verktyget funnits sedan 2009 men att jag aldrig sprungit på det. Det känns mest pinsamt. Jag testade verktyget lokalt men den klarade inte av att crawla min utvecklingsmiljö. Utan att felsöka det vidare testade jag på vår CI-server och där gick det hur bra som helst.

Search Engine Optimization (SEO) Toolkit 1.0 lät mig peka ut en site och klicka på Ok, en stund senare satt jag där med en massa data att analysera. Där fanns alla violations mot god SEO-sed skuret på olika ledder (sammanställning av alla, violations per sida...) men även prestandabovar m.m. indikerades.  Varje violation förklarades dessutom med några meningar om varför den skapar ett problem.

Hur löste det här mitt problem? Jo, jag kunde ta ut en rapport på alla URLer och öppna i alla analytikers favoritverktyg, Excel. Rapporten innehöll alla resurser, inte bra sidor utan även bilder m.m.  jag filtrerade på content type och fick ut en lista som våra SEO-partners var nöjda med.

Nu använder jag verktyget ofta för att det hjälper mig att hålla hygiennivå i det jag utvecklar.

Fler länkar om Search Engine Optimization (SEO) Toolkit 1.0

Scott Guthrie bloggar bra -http://weblogs.asp.net/scottgu/archive/2009/06/03/iis-search-engine-optimization-toolkit.aspx

Officiell hemsida, nedladdning -http://www.iis.net/download/SEOToolkit

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Search Engine Optimization (SEO) Toolkit 1.0 ", + "meta_description": "", + "author_id": 1098, + "created_at": 1338912526000, + "created_by": 1098, + "updated_at": 1338912526000, + "updated_by": 1098, + "published_at": 1338912526000, + "published_by": 1098 + }, + { + "id": 612, + "title": "Asynkron programmering", + "slug": "asynkron-programmering", + "markdown": "\r\n\r\nMan kan ju fråga sig varför en server skriven i Javascript kan bli snabbare än en som är kompilerad i C#. Oavsett vilket språk mananvänder så behöver man vid vissa tillfällen hämta saker från disk, databas eller från nätverk. Eftersom Node.JS är enkeltrådat MÅSTE man skriva all kod asynkron för att inte hela servern ska hänga sig vilket inte är fallet i C#.\r\n\r\nDetta enkla faktum gör att man oftast skriver synkron kod i C# och därför ligger större delen av koden i väntan på olika I/O anrop. Hela sidan beräknas seriellt och varje fördröjning i I/O gör applikationen långsam. Jämför med att överföra små och stora filer med FTP – om du har flera parallella överföringar igång kan alla små anrop bli klara samtidigt som de stora filerna överförs. På samma sätt vill man hinna göra klart så mycket som möjligt av resterande kod under tiden man väntar på svaren från alla sina I/O anrop. \r\n\r\nEftersom många redan är vana vid detta i Javascript, mycket på grund av AJAX och Jquery, har man en inbyggd känsla för hur asynkron programmering ska byggas i Javascript vilket gör dem snabbare än sajter byggda i C#.\r\n\r\nNu betyder detta inte att Node.JS alltid är bättre än C# eller att man inte kan använda sig av asynkrona programmeringsmönster även i C# eller i Java. Däremot har det krävt ganska komplicerad kod tidigare. I nästa version av Visual Studio 2012 finns Microsoft Async vilket innebär stora förbättringar i hur asynkront programmeringsmönster kan hanteras.\r\n## Kodexempel\r\n![Bild](http://tekniken.nu/uploads/634747678941917307-image001.png@01CD4571.7A04D350__image001.png)\r\n```prettyprint lang-c-sharp\r\nstring data = await client.DownloadStringTaskAsync(new Uri(url));\r\nResponse.Write(data);\r\n```\r\n\r\n\r\nMotsvarande kod i Javascript skulle vara:\r\n\r\n```prettyprint lang-javascript\r\nvar data = client.downloadStringTaskAsync(new Uri(url), function() {\r\n document.write(data); // no one would use document.write though ;)\r\n);\r\n```\r\n\r\n\r\nFör att lära sig mer om Async i C# finns det en jättebra sida med exempel:\r\nhttp://www.wischik.com/lu/AsyncSilverlight/AsyncSamples.html\r\nOm du inte gjort det redan borde du ladda ner Node.JS och installera Express som ger en bra start för att börja bygga sajter med Node.JS:\r\nnpm install Express\r\nEn annan viktig skillnad mellan Node.JS och ASP.NET är hur mycket resurser som går åt för varje anrop. I C# används som standard en tråd per request. Det innebär att mycket tid går åt till att frigöra resurser från trådpoolen till varje request, dessutom tar varje tråd minst två megabyte minne vilket gör att tusentals samtidiga requests kräver enorma mängder ram på servern. I Node.JS finns inga trådar utan allt körs inom samma process vilket gör att anrop som väntar på svar inte tar mer än några kilobyte i minne.\r\n", + "html": "

Man kan ju fråga sig varför en server skriven i Javascript kan bli snabbare än en som är kompilerad i C#. Oavsett vilket språk mananvänder så behöver man vid vissa tillfällen hämta saker från disk, databas eller från nätverk. Eftersom Node.JS är enkeltrådat MÅSTE man skriva all kod asynkron för att inte hela servern ska hänga sig vilket inte är fallet i C#.

Detta enkla faktum gör att man oftast skriver synkron kod i C# och därför ligger större delen av koden i väntan på olika I/O anrop. Hela sidan beräknas seriellt och varje fördröjning i I/O gör applikationen långsam. Jämför med att överföra små och stora filer med FTP – om du har flera parallella överföringar igång kan alla små anrop bli klara samtidigt som de stora filerna överförs. På samma sätt vill man hinna göra klart så mycket som möjligt av resterande kod under tiden man väntar på svaren från alla sina I/O anrop.

Eftersom många redan är vana vid detta i Javascript, mycket på grund av AJAX och Jquery, har man en inbyggd känsla för hur asynkron programmering ska byggas i Javascript vilket gör dem snabbare än sajter byggda i C#.

Nu betyder detta inte att Node.JS alltid är bättre än C# eller att man inte kan använda sig av asynkrona programmeringsmönster även i C# eller i Java. Däremot har det krävt ganska komplicerad kod tidigare. I nästa version av Visual Studio 2012 finns Microsoft Async vilket innebär stora förbättringar i hur asynkront programmeringsmönster kan hanteras.

Kodexempel



Motsvarande kod i Javascript skulle vara:



För att lära sig mer om Async i C# finns det en jättebra sida med exempel:

http://www.wischik.com/lu/AsyncSilverlight/AsyncSamples.html

Om du inte gjort det redan borde du ladda ner Node.JS och installera Express som ger en bra start för att börja bygga sajter med Node.JS:

npm install Express

En annan viktig skillnad mellan Node.JS och ASP.NET är hur mycket resurser som går åt för varje anrop. I C# används som standard en tråd per request. Det innebär att mycket tid går åt till att frigöra resurser från trådpoolen till varje request, dessutom tar varje tråd minst två megabyte minne vilket gör att tusentals samtidiga requests kräver enorma mängder ram på servern. I Node.JS finns inga trådar utan allt körs inom samma process vilket gör att anrop som väntar på svar inte tar mer än några kilobyte i minne.

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Asynkron programmering", + "meta_description": "", + "author_id": 1087, + "created_at": 1339171091000, + "created_by": 1087, + "updated_at": 1339171091000, + "updated_by": 1087, + "published_at": 1339171091000, + "published_by": 1087 + }, + { + "id": 613, + "title": "test", + "slug": "test", + "markdown": "\r\ntestar\r\n\r\nTvå grymma utvecklare sökes - känner du någon som borde jobba på Sveriges bästa teknikbyrå? \r\n\r\n\r\n\r\nJohanna Gustafsson - johanna.gustafsson@iteam.seTegnérgatan 28 - SE-113 59 Stockholm\r\n\r\nOffice: +46 8 26 70 90Mobile: +46 734 02 91 12", + "html": "

testar

Två grymma utvecklare sökes - känner du någon som borde jobba på Sveriges bästa teknikbyrå?

Johanna Gustafsson - johanna.gustafsson@iteam.se
Tegnérgatan 28 - SE-113 59 Stockholm

Office: +46 8 26 70 90
Mobile: +46 734 02 91 12", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "test", + "meta_description": null, + "author_id": 1093, + "created_at": 1342797037000, + "created_by": 1093, + "updated_at": 1342797037000, + "updated_by": 1093, + "published_at": 1342797037000, + "published_by": 1093 + }, + { + "id": 615, + "title": "unika rubben", + "slug": "unika-rubben", + "markdown": "\r\nTvå grymma utvecklare sökes - känner du någon som borde jobba på Sveriges bästa teknikbyrå? \r\n\r\n\r\n\r\nJohanna Gustafsson - johanna.gustafsson@iteam.seTegnérgatan 28 - SE-113 59 Stockholm\r\n\r\nOffice: +46 8 26 70 90Mobile: +46 734 02 91 12", + "html": "

Två grymma utvecklare sökes - känner du någon som borde jobba på Sveriges bästa teknikbyrå?

Johanna Gustafsson - johanna.gustafsson@iteam.se
Tegnérgatan 28 - SE-113 59 Stockholm

Office: +46 8 26 70 90
Mobile: +46 734 02 91 12", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "unika rubben", + "meta_description": null, + "author_id": 1093, + "created_at": 1342797613000, + "created_by": 1093, + "updated_at": 1342797613000, + "updated_by": 1093, + "published_at": 1342797613000, + "published_by": 1093 + }, + { + "id": 616, + "title": "FW: unika rubben 2", + "slug": "fw-unika-rubben-2", + "markdown": "\r\n\r\n\r\nTvå grymma utvecklare sökes - känner du någon som borde jobba på Sveriges bästa teknikbyrå? \r\n\r\n\r\n\r\nJohanna Gustafsson - johanna.gustafsson@iteam.seTegnérgatan 28 - SE-113 59 Stockholm\r\n\r\nOffice: +46 8 26 70 90Mobile: +46 734 02 91 12\r\n![Bild](http://tekniken.nu/uploads/634783949432377392-image001.png)", + "html": "

Två grymma utvecklare sökes - känner du någon som borde jobba på Sveriges bästa teknikbyrå?

Johanna Gustafsson - johanna.gustafsson@iteam.se
Tegnérgatan 28 - SE-113 59 Stockholm

Office: +46 8 26 70 90
Mobile: +46 734 02 91 12", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "FW: unika rubben 2", + "meta_description": null, + "author_id": 1093, + "created_at": 1342798143000, + "created_by": 1093, + "updated_at": 1342798143000, + "updated_by": 1093, + "published_at": 1342798143000, + "published_by": 1093 + }, + { + "id": 618, + "title": "Test av kodsnuttar i text", + "slug": "test-av-kodsnuttar-i-text", + "markdown": "\r\nAllt mer utveckling både på klientsidan (förstås) och på serversidan sker med JavaScript och alltmer sker asynkront. Tidigare kunde anropa funktioner som uträttar uppgifter en efter en och helt enkelt gå vidare till nästa steg när man var klar med det innan. Lätt att förstå och lätt att debugga, men inte särskilt anpassat till dagens arkitekturer där man ofta anropar externa tjänster och API:er och där gränssnittet helt enkelt inte kan vänta på svar. Istället gör man en funktion, en callback, som anropas när den externa uppgiften är klar.\r\n\r\nDet är ett smart pattern, men kan ge upphov till klurigheter att lösa för utvecklaren. En sån är vilket scope som callback-funktionen egentligen körs i, d.v.s. vilka variablerna man har tillgång till när svarsanropet väl kommer. Ett annat är att man kan råka ut för race conditions där värden av vissa variabler plötsligt beror på svarstiden för de externa anropen.\r\n\r\nHär är ett exempel:\r\n\r\ncars =  [ { reg: ‘ABC123’ }, { reg: ‘DEF456’ }, { reg: ‘GHI789’ }, { reg: ’JKL123’ } ];\r\n\r\nfor (i = 0; i < cars.length ; i++)\r\n\r\n{\r\n\r\n                var currentCar = cars[i];\r\n\r\n                // Långsamt anrop till externt api. Anropet tar två parametrar, första är registreringsnumret den andra är\r\n\r\n                // callbackfunktionen som anropas när api:et svarar\r\n\r\n                externalService.slowlyLookupCarBrand(\r\n\r\n                car.reg,\r\n\r\n                function (brandName)\r\n\r\n                {\r\n\r\n                                cars[i].brand = brandName;\r\n\r\n                }\r\n\r\n);\r\n\r\n}\r\n\r\nVad händer när denna körs? Ett fel uppstår där det står att ”cars[i].brand is undefined”. Konstigt... Första tanken är att det är fel scope, att variabeln i inte finns i callbackfunktionen. Om man skriver ut värdet på i upptäcker man att så inte är fallet – istället är har i alltid värdet 4. Vad har hänt här egentligen?\r\n\r\nSvaret är att när första callback-anropet görs (och de tre följande förstås) så har redan for-loopen körts igenom och värdet på i har redan räknats upp till sitt maxvärde 4. Så anropet i callbacken kommer alltid att bli cars[4].brand. Det vi skulle vilja är att värdet på i binds när callback-funktionen skapas, inte när den anropas.\r\n\r\nJavaScript är ett magiskt språk med många funktioner som länge har funnits på teoretisk nivå inom datalogin men som sällan letar sig fram till praktisk användning. En sådan är högre ordningens funktioner – vilket betyder att funktioner fungerar som vilka andra typer som helst. Det ska vi använda för att lösa vårt problem. Vi vill skapa en s.k. closure, helt enkelt en bindning av variabelns värde vi deklarationen istället för vid körningen. Såhär går det till (detta är inte intuitivt och tar de flesta ganska mycket tankemöda innan man förstår vad som händer):\r\n\r\ncars =  [ { reg: ‘ABC123’ }, { reg: ‘DEF456’ }, { reg: ‘GHI789’ }, { reg: ’JKL123’ } ];\r\n\r\nfor (i = 0; i < cars.length ; i++)\r\n\r\n{\r\n\r\n                var currentCar = cars[i];\r\n\r\n                // Långsamt anrop till externt api. Anropet tar två parametrar, första är registreringsnumret den andra är\r\n\r\n                // callbackfunktionen som anropas när api:et svarar\r\n\r\n                externalService.slowlyLookupCarBrand(\r\n\r\n                car.reg,\r\n\r\n                function (index)\r\n\r\n{\r\n\r\n                                return function (brandName)\r\n\r\n                                {\r\n\r\n                                                cars[index].brand = brandName;\r\n\r\n                                }\r\n\r\n                                } (i)\r\n\r\n                );\r\n\r\n}\r\n\r\nOK, vad betyder det här nu då? Istället för att direkt skapa en anonym funktion som callback så låter vi en yttre funktion skapa och returnera callback-funktionen. Det sista (i) efter } betyder ”anropa den yttre funktionen med parametervärdet i”. Det som händer då är att en closure skapas, en binding av variablers värden som de ser ut just nu. Parametern index i funktionen tilldelas värdet som i har vid tillfället när anropet till slowlyLookupCarBrand görs, inte när svarsanropet till den inre funktionen kommer från den externa tjänsten. Det betyder att våra fyra externa anrop kommer att få fyra olika svarsfunktioner, var och en med ett värde på index som motsvarar värdet på i när det externa anropet sker.\r\n\r\nSom sagt  - inte intuitivt och inte superenkelt att förstå vid första genomläsningen, men helt nödvändigt att använda i vissa tillfällen.", + "html": "

Allt mer utveckling både på klientsidan (förstås) och på serversidan sker med JavaScript och alltmer sker asynkront. Tidigare kunde anropa funktioner som uträttar uppgifter en efter en och helt enkelt gå vidare till nästa steg när man var klar med det innan. Lätt att förstå och lätt att debugga, men inte särskilt anpassat till dagens arkitekturer där man ofta anropar externa tjänster och API:er och där gränssnittet helt enkelt inte kan vänta på svar. Istället gör man en funktion, en callback, som anropas när den externa uppgiften är klar.

Det är ett smart pattern, men kan ge upphov till klurigheter att lösa för utvecklaren. En sån är vilket scope som callback-funktionen egentligen körs i, d.v.s. vilka variablerna man har tillgång till när svarsanropet väl kommer. Ett annat är att man kan råka ut för race conditions där värden av vissa variabler plötsligt beror på svarstiden för de externa anropen.

Här är ett exempel:

cars =  [ { reg: ‘ABC123’ }, { reg: ‘DEF456’ }, { reg: ‘GHI789’ }, { reg: ’JKL123’ } ];

for (i = 0; i < cars.length ; i++)

{

                var currentCar = cars[i];

                // Långsamt anrop till externt api. Anropet tar två parametrar, första är registreringsnumret den andra är

                // callbackfunktionen som anropas när api:et svarar

                externalService.slowlyLookupCarBrand(

                car.reg,

                function (brandName)

                {

                                cars[i].brand = brandName;

                }

);

}

Vad händer när denna körs? Ett fel uppstår där det står att ”cars[i].brand is undefined”. Konstigt... Första tanken är att det är fel scope, att variabeln i inte finns i callbackfunktionen. Om man skriver ut värdet på i upptäcker man att så inte är fallet – istället är har i alltid värdet 4. Vad har hänt här egentligen?

Svaret är att när första callback-anropet görs (och de tre följande förstås) så har redan for-loopen körts igenom och värdet på i har redan räknats upp till sitt maxvärde 4. Så anropet i callbacken kommer alltid att bli cars[4].brand. Det vi skulle vilja är att värdet på i binds när callback-funktionen skapas, inte när den anropas.

JavaScript är ett magiskt språk med många funktioner som länge har funnits på teoretisk nivå inom datalogin men som sällan letar sig fram till praktisk användning. En sådan är högre ordningens funktioner – vilket betyder att funktioner fungerar som vilka andra typer som helst. Det ska vi använda för att lösa vårt problem. Vi vill skapa en s.k. closure, helt enkelt en bindning av variabelns värde vi deklarationen istället för vid körningen. Såhär går det till (detta är inte intuitivt och tar de flesta ganska mycket tankemöda innan man förstår vad som händer):

cars =  [ { reg: ‘ABC123’ }, { reg: ‘DEF456’ }, { reg: ‘GHI789’ }, { reg: ’JKL123’ } ];

for (i = 0; i < cars.length ; i++)

{

                var currentCar = cars[i];

                // Långsamt anrop till externt api. Anropet tar två parametrar, första är registreringsnumret den andra är

                // callbackfunktionen som anropas när api:et svarar

                externalService.slowlyLookupCarBrand(

                car.reg,

                function (index)

{

                                return function (brandName)

                                {

                                                cars[index].brand = brandName;

                                }

                                } (i)

                );

}

OK, vad betyder det här nu då? Istället för att direkt skapa en anonym funktion som callback så låter vi en yttre funktion skapa och returnera callback-funktionen. Det sista (i) efter } betyder ”anropa den yttre funktionen med parametervärdet i”. Det som händer då är att en closure skapas, en binding av variablers värden som de ser ut just nu. Parametern index i funktionen tilldelas värdet som i har vid tillfället när anropet till slowlyLookupCarBrand görs, inte när svarsanropet till den inre funktionen kommer från den externa tjänsten. Det betyder att våra fyra externa anrop kommer att få fyra olika svarsfunktioner, var och en med ett värde på index som motsvarar värdet på i när det externa anropet sker.

Som sagt  - inte intuitivt och inte superenkelt att förstå vid första genomläsningen, men helt nödvändigt att använda i vissa tillfällen.", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Test av kodsnuttar i text", + "meta_description": null, + "author_id": 1093, + "created_at": 1343148224000, + "created_by": 1093, + "updated_at": 1343148224000, + "updated_by": 1093, + "published_at": 1343148224000, + "published_by": 1093 + }, + { + "id": 619, + "title": "FW: Test av kodsnuttar i text", + "slug": "fw-test-av-kodsnuttar-i-text", + "markdown": "\r\nAllt mer utveckling både på klientsidan (förstås) och på serversidan sker med JavaScript och alltmer sker asynkront. Tidigare kunde anropa funktioner som uträttar uppgifter en efter en och helt enkelt gå vidare till nästa steg när man var klar med det innan. Lätt att förstå och lätt att debugga, men inte särskilt anpassat till dagens arkitekturer där man ofta anropar externa tjänster och API:er och där gränssnittet helt enkelt inte kan vänta på svar. Istället gör man en funktion, en callback, som anropas när den externa uppgiften är klar.\r\n\r\nDet är ett smart pattern, men kan ge upphov till klurigheter att lösa för utvecklaren. En sån är vilket scope som callback-funktionen egentligen körs i, d.v.s. vilka variablerna man har tillgång till när svarsanropet väl kommer. Ett annat är att man kan råka ut för race conditions där värden av vissa variabler plötsligt beror på svarstiden för de externa anropen.\r\n\r\nHär är ett exempel:\r\n\r\ncars =  [ { reg: ‘ABC123’ }, { reg: ‘DEF456’ }, { reg: ‘GHI789’ }, { reg: ’JKL123’ } ];\r\n\r\nfor (i = 0; i < cars.length ; i++)\r\n\r\n{\r\n\r\n                var currentCar = cars[i];\r\n\r\n                // Långsamt anrop till externt api. Anropet tar två parametrar, första är registreringsnumret den andra är\r\n\r\n                // callbackfunktionen som anropas när api:et svarar\r\n\r\n                externalService.slowlyLookupCarBrand(\r\n\r\n                car.reg,\r\n\r\n                function (brandName)\r\n\r\n                {\r\n\r\n                                cars[i].brand = brandName;\r\n\r\n                }\r\n\r\n);\r\n\r\n}\r\n\r\nVad händer när denna körs? Ett fel uppstår där det står att ”cars[i].brand is undefined”. Konstigt... Första tanken är att det är fel scope, att variabeln i inte finns i callbackfunktionen. Om man skriver ut värdet på i upptäcker man att så inte är fallet – istället är har i alltid värdet 4. Vad har hänt här egentligen?\r\n\r\nSvaret är att när första callback-anropet görs (och de tre följande förstås) så har redan for-loopen körts igenom och värdet på i har redan räknats upp till sitt maxvärde 4. Så anropet i callbacken kommer alltid att bli cars[4].brand. Det vi skulle vilja är att värdet på i binds när callback-funktionen skapas, inte när den anropas.\r\n\r\nJavaScript är ett magiskt språk med många funktioner som länge har funnits på teoretisk nivå inom datalogin men som sällan letar sig fram till praktisk användning. En sådan är högre ordningens funktioner – vilket betyder att funktioner fungerar som vilka andra typer som helst. Det ska vi använda för att lösa vårt problem. Vi vill skapa en s.k. closure, helt enkelt en bindning av variabelns värde vi deklarationen istället för vid körningen. Såhär går det till (detta är inte intuitivt och tar de flesta ganska mycket tankemöda innan man förstår vad som händer):\r\n\r\ncars =  [ { reg: ‘ABC123’ }, { reg: ‘DEF456’ }, { reg: ‘GHI789’ }, { reg: ’JKL123’ } ];\r\n\r\nfor (i = 0; i < cars.length ; i++)\r\n\r\n{\r\n\r\n                var currentCar = cars[i];\r\n\r\n                // Långsamt anrop till externt api. Anropet tar två parametrar, första är registreringsnumret den andra är\r\n\r\n                // callbackfunktionen som anropas när api:et svarar\r\n\r\n                externalService.slowlyLookupCarBrand(\r\n\r\n                car.reg,\r\n\r\n                function (index)\r\n\r\n{\r\n\r\n                                return function (brandName)\r\n\r\n                                {\r\n\r\n                                                cars[index].brand = brandName;\r\n\r\n                                }\r\n\r\n                                } (i)\r\n\r\n                );\r\n\r\n}\r\n\r\nOK, vad betyder det här nu då? Istället för att direkt skapa en anonym funktion som callback så låter vi en yttre funktion skapa och returnera callback-funktionen. Det sista (i) efter } betyder ”anropa den yttre funktionen med parametervärdet i”. Det som händer då är att en closure skapas, en binding av variablers värden som de ser ut just nu. Parametern index i funktionen tilldelas värdet som i har vid tillfället när anropet till slowlyLookupCarBrand görs, inte när svarsanropet till den inre funktionen kommer från den externa tjänsten. Det betyder att våra fyra externa anrop kommer att få fyra olika svarsfunktioner, var och en med ett värde på index som motsvarar värdet på i när det externa anropet sker.\r\n\r\nSom sagt  - inte intuitivt och inte superenkelt att förstå vid första genomläsningen, men helt nödvändigt att använda i vissa tillfällen.", + "html": "

Allt mer utveckling både på klientsidan (förstås) och på serversidan sker med JavaScript och alltmer sker asynkront. Tidigare kunde anropa funktioner som uträttar uppgifter en efter en och helt enkelt gå vidare till nästa steg när man var klar med det innan. Lätt att förstå och lätt att debugga, men inte särskilt anpassat till dagens arkitekturer där man ofta anropar externa tjänster och API:er och där gränssnittet helt enkelt inte kan vänta på svar. Istället gör man en funktion, en callback, som anropas när den externa uppgiften är klar.

Det är ett smart pattern, men kan ge upphov till klurigheter att lösa för utvecklaren. En sån är vilket scope som callback-funktionen egentligen körs i, d.v.s. vilka variablerna man har tillgång till när svarsanropet väl kommer. Ett annat är att man kan råka ut för race conditions där värden av vissa variabler plötsligt beror på svarstiden för de externa anropen.

Här är ett exempel:

cars =  [ { reg: ‘ABC123’ }, { reg: ‘DEF456’ }, { reg: ‘GHI789’ }, { reg: ’JKL123’ } ];

for (i = 0; i < cars.length ; i++)

{

                var currentCar = cars[i];

                // Långsamt anrop till externt api. Anropet tar två parametrar, första är registreringsnumret den andra är

                // callbackfunktionen som anropas när api:et svarar

                externalService.slowlyLookupCarBrand(

                car.reg,

                function (brandName)

                {

                                cars[i].brand = brandName;

                }

);

}

Vad händer när denna körs? Ett fel uppstår där det står att ”cars[i].brand is undefined”. Konstigt... Första tanken är att det är fel scope, att variabeln i inte finns i callbackfunktionen. Om man skriver ut värdet på i upptäcker man att så inte är fallet – istället är har i alltid värdet 4. Vad har hänt här egentligen?

Svaret är att när första callback-anropet görs (och de tre följande förstås) så har redan for-loopen körts igenom och värdet på i har redan räknats upp till sitt maxvärde 4. Så anropet i callbacken kommer alltid att bli cars[4].brand. Det vi skulle vilja är att värdet på i binds när callback-funktionen skapas, inte när den anropas.

JavaScript är ett magiskt språk med många funktioner som länge har funnits på teoretisk nivå inom datalogin men som sällan letar sig fram till praktisk användning. En sådan är högre ordningens funktioner – vilket betyder att funktioner fungerar som vilka andra typer som helst. Det ska vi använda för att lösa vårt problem. Vi vill skapa en s.k. closure, helt enkelt en bindning av variabelns värde vi deklarationen istället för vid körningen. Såhär går det till (detta är inte intuitivt och tar de flesta ganska mycket tankemöda innan man förstår vad som händer):

cars =  [ { reg: ‘ABC123’ }, { reg: ‘DEF456’ }, { reg: ‘GHI789’ }, { reg: ’JKL123’ } ];

for (i = 0; i < cars.length ; i++)

{

                var currentCar = cars[i];

                // Långsamt anrop till externt api. Anropet tar två parametrar, första är registreringsnumret den andra är

                // callbackfunktionen som anropas när api:et svarar

                externalService.slowlyLookupCarBrand(

                car.reg,

                function (index)

{

                                return function (brandName)

                                {

                                                cars[index].brand = brandName;

                                }

                                } (i)

                );

}

OK, vad betyder det här nu då? Istället för att direkt skapa en anonym funktion som callback så låter vi en yttre funktion skapa och returnera callback-funktionen. Det sista (i) efter } betyder ”anropa den yttre funktionen med parametervärdet i”. Det som händer då är att en closure skapas, en binding av variablers värden som de ser ut just nu. Parametern index i funktionen tilldelas värdet som i har vid tillfället när anropet till slowlyLookupCarBrand görs, inte när svarsanropet till den inre funktionen kommer från den externa tjänsten. Det betyder att våra fyra externa anrop kommer att få fyra olika svarsfunktioner, var och en med ett värde på index som motsvarar värdet på i när det externa anropet sker.

Som sagt  - inte intuitivt och inte superenkelt att förstå vid första genomläsningen, men helt nödvändigt att använda i vissa tillfällen.", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "FW: Test av kodsnuttar i text", + "meta_description": null, + "author_id": 1093, + "created_at": 1343148405000, + "created_by": 1093, + "updated_at": 1343148405000, + "updated_by": 1093, + "published_at": 1343148405000, + "published_by": 1093 + }, + { + "id": 620, + "title": "FW21: Test av kodsnuttar i text", + "slug": "fw21-test-av-kodsnuttar-i-text", + "markdown": "\r\nAllt mer utveckling både på klientsidan (förstås) och på serversidan sker med JavaScript och alltmer sker asynkront. Tidigare kunde anropa funktioner som uträttar uppgifter en efter en och helt enkelt gå vidare till nästa steg när man var klar med det innan. Lätt att förstå och lätt att debugga, men inte särskilt anpassat till dagens arkitekturer där man ofta anropar externa tjänster och API:er och där gränssnittet helt enkelt inte kan vänta på svar. Istället gör man en funktion, en callback, som anropas när den externa uppgiften är klar.\r\n\r\nDet är ett smart pattern, men kan ge upphov till klurigheter att lösa för utvecklaren. En sån är vilket scope som callback-funktionen egentligen körs i, d.v.s. vilka variablerna man har tillgång till när svarsanropet väl kommer. Ett annat är att man kan råka ut för race conditions där värden av vissa variabler plötsligt beror på svarstiden för de externa anropen.\r\n\r\nHär är ett exempel:\r\n\r\ncars =  [ { reg: ‘ABC123’ }, { reg: ‘DEF456’ }, { reg: ‘GHI789’ }, { reg: ’JKL123’ } ];\r\n\r\nfor (i = 0; i < cars.length ; i++)\r\n\r\n{\r\n\r\n                var currentCar = cars[i];\r\n\r\n                // Långsamt anrop till externt api. Anropet tar två parametrar, första är registreringsnumret den andra är\r\n\r\n                // callbackfunktionen som anropas när api:et svarar\r\n\r\n                externalService.slowlyLookupCarBrand(\r\n\r\n                car.reg,\r\n\r\n                function (brandName)\r\n\r\n                {\r\n\r\n                                cars[i].brand = brandName;\r\n\r\n                }\r\n\r\n);\r\n\r\n}\r\n\r\nVad händer när denna körs? Ett fel uppstår där det står att ”cars[i].brand is undefined”. Konstigt... Första tanken är att det är fel scope, att variabeln i inte finns i callbackfunktionen. Om man skriver ut värdet på i upptäcker man att så inte är fallet – istället är har i alltid värdet 4. Vad har hänt här egentligen?\r\n\r\nSvaret är att när första callback-anropet görs (och de tre följande förstås) så har redan for-loopen körts igenom och värdet på i har redan räknats upp till sitt maxvärde 4. Så anropet i callbacken kommer alltid att bli cars[4].brand. Det vi skulle vilja är att värdet på i binds när callback-funktionen skapas, inte när den anropas.\r\n\r\nJavaScript är ett magiskt språk med många funktioner som länge har funnits på teoretisk nivå inom datalogin men som sällan letar sig fram till praktisk användning. En sådan är högre ordningens funktioner – vilket betyder att funktioner fungerar som vilka andra typer som helst. Det ska vi använda för att lösa vårt problem. Vi vill skapa en s.k. closure, helt enkelt en bindning av variabelns värde vi deklarationen istället för vid körningen. Såhär går det till (detta är inte intuitivt och tar de flesta ganska mycket tankemöda innan man förstår vad som händer):\r\n\r\ncars =  [ { reg: ‘ABC123’ }, { reg: ‘DEF456’ }, { reg: ‘GHI789’ }, { reg: ’JKL123’ } ];\r\n\r\nfor (i = 0; i < cars.length ; i++)\r\n\r\n{\r\n\r\n                var currentCar = cars[i];\r\n\r\n                // Långsamt anrop till externt api. Anropet tar två parametrar, första är registreringsnumret den andra är\r\n\r\n                // callbackfunktionen som anropas när api:et svarar\r\n\r\n                externalService.slowlyLookupCarBrand(\r\n\r\n                car.reg,\r\n\r\n                function (index)\r\n\r\n{\r\n\r\n                                return function (brandName)\r\n\r\n                                {\r\n\r\n                                                cars[index].brand = brandName;\r\n\r\n                                }\r\n\r\n                                } (i)\r\n\r\n                );\r\n\r\n}\r\n\r\nOK, vad betyder det här nu då? Istället för att direkt skapa en anonym funktion som callback så låter vi en yttre funktion skapa och returnera callback-funktionen. Det sista (i) efter } betyder ”anropa den yttre funktionen med parametervärdet i”. Det som händer då är att en closure skapas, en binding av variablers värden som de ser ut just nu. Parametern index i funktionen tilldelas värdet som i har vid tillfället när anropet till slowlyLookupCarBrand görs, inte när svarsanropet till den inre funktionen kommer från den externa tjänsten. Det betyder att våra fyra externa anrop kommer att få fyra olika svarsfunktioner, var och en med ett värde på index som motsvarar värdet på i när det externa anropet sker.\r\n\r\nSom sagt  - inte intuitivt och inte superenkelt att förstå vid första genomläsningen, men helt nödvändigt att använda i vissa tillfällen.", + "html": "

Allt mer utveckling både på klientsidan (förstås) och på serversidan sker med JavaScript och alltmer sker asynkront. Tidigare kunde anropa funktioner som uträttar uppgifter en efter en och helt enkelt gå vidare till nästa steg när man var klar med det innan. Lätt att förstå och lätt att debugga, men inte särskilt anpassat till dagens arkitekturer där man ofta anropar externa tjänster och API:er och där gränssnittet helt enkelt inte kan vänta på svar. Istället gör man en funktion, en callback, som anropas när den externa uppgiften är klar.

Det är ett smart pattern, men kan ge upphov till klurigheter att lösa för utvecklaren. En sån är vilket scope som callback-funktionen egentligen körs i, d.v.s. vilka variablerna man har tillgång till när svarsanropet väl kommer. Ett annat är att man kan råka ut för race conditions där värden av vissa variabler plötsligt beror på svarstiden för de externa anropen.

Här är ett exempel:

cars =  [ { reg: ‘ABC123’ }, { reg: ‘DEF456’ }, { reg: ‘GHI789’ }, { reg: ’JKL123’ } ];

for (i = 0; i < cars.length ; i++)

{

                var currentCar = cars[i];

                // Långsamt anrop till externt api. Anropet tar två parametrar, första är registreringsnumret den andra är

                // callbackfunktionen som anropas när api:et svarar

                externalService.slowlyLookupCarBrand(

                car.reg,

                function (brandName)

                {

                                cars[i].brand = brandName;

                }

);

}

Vad händer när denna körs? Ett fel uppstår där det står att ”cars[i].brand is undefined”. Konstigt... Första tanken är att det är fel scope, att variabeln i inte finns i callbackfunktionen. Om man skriver ut värdet på i upptäcker man att så inte är fallet – istället är har i alltid värdet 4. Vad har hänt här egentligen?

Svaret är att när första callback-anropet görs (och de tre följande förstås) så har redan for-loopen körts igenom och värdet på i har redan räknats upp till sitt maxvärde 4. Så anropet i callbacken kommer alltid att bli cars[4].brand. Det vi skulle vilja är att värdet på i binds när callback-funktionen skapas, inte när den anropas.

JavaScript är ett magiskt språk med många funktioner som länge har funnits på teoretisk nivå inom datalogin men som sällan letar sig fram till praktisk användning. En sådan är högre ordningens funktioner – vilket betyder att funktioner fungerar som vilka andra typer som helst. Det ska vi använda för att lösa vårt problem. Vi vill skapa en s.k. closure, helt enkelt en bindning av variabelns värde vi deklarationen istället för vid körningen. Såhär går det till (detta är inte intuitivt och tar de flesta ganska mycket tankemöda innan man förstår vad som händer):

cars =  [ { reg: ‘ABC123’ }, { reg: ‘DEF456’ }, { reg: ‘GHI789’ }, { reg: ’JKL123’ } ];

for (i = 0; i < cars.length ; i++)

{

                var currentCar = cars[i];

                // Långsamt anrop till externt api. Anropet tar två parametrar, första är registreringsnumret den andra är

                // callbackfunktionen som anropas när api:et svarar

                externalService.slowlyLookupCarBrand(

                car.reg,

                function (index)

{

                                return function (brandName)

                                {

                                                cars[index].brand = brandName;

                                }

                                } (i)

                );

}

OK, vad betyder det här nu då? Istället för att direkt skapa en anonym funktion som callback så låter vi en yttre funktion skapa och returnera callback-funktionen. Det sista (i) efter } betyder ”anropa den yttre funktionen med parametervärdet i”. Det som händer då är att en closure skapas, en binding av variablers värden som de ser ut just nu. Parametern index i funktionen tilldelas värdet som i har vid tillfället när anropet till slowlyLookupCarBrand görs, inte när svarsanropet till den inre funktionen kommer från den externa tjänsten. Det betyder att våra fyra externa anrop kommer att få fyra olika svarsfunktioner, var och en med ett värde på index som motsvarar värdet på i när det externa anropet sker.

Som sagt  - inte intuitivt och inte superenkelt att förstå vid första genomläsningen, men helt nödvändigt att använda i vissa tillfällen.", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "FW21: Test av kodsnuttar i text", + "meta_description": null, + "author_id": 1093, + "created_at": 1343148583000, + "created_by": 1093, + "updated_at": 1343148583000, + "updated_by": 1093, + "published_at": 1343148583000, + "published_by": 1093 + }, + { + "id": 621, + "title": "Test Utvecking", + "slug": "test-utvecking", + "markdown": "\r\nTvå grymma utvecklare sökes - känner du någon som borde jobba på Sveriges bästa teknikbyrå? \r\n\r\n\r\n\r\nJohanna Gustafsson - johanna.gustafsson@iteam.seTegnérgatan 28 - SE-113 59 Stockholm\r\n\r\nOffice: +46 8 26 70 90Mobile: +46 734 02 91 12\r\n![Bild](http://tekniken.nu/uploads/634828917410694498-image001.png)", + "html": "

Två grymma utvecklare sökes - känner du någon som borde jobba på Sveriges bästa teknikbyrå?

Johanna Gustafsson - johanna.gustafsson@iteam.se
Tegnérgatan 28 - SE-113 59 Stockholm

Office: +46 8 26 70 90
Mobile: +46 734 02 91 12", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Test Utvecking", + "meta_description": null, + "author_id": 1093, + "created_at": 1347294940000, + "created_by": 1093, + "updated_at": 1347294940000, + "updated_by": 1093, + "published_at": 1347294940000, + "published_by": 1093 + }, + { + "id": 622, + "title": "FW: test via mailgun", + "slug": "fw-test-via-mailgun", + "markdown": "\r\nBild i bild:\r\n\r\n\r\n\r\nTvå grymma utvecklare sökes - känner du någon som borde jobba på Sveriges bästa teknikbyrå? \r\n\r\n\r\n\r\nJohanna Gustafsson - johanna.gustafsson@iteam.seTegnérgatan 28 - SE-113 59 Stockholm\r\n\r\nOffice: +46 8 26 70 90Mobile: +46 734 02 91 12\r\n![Bild](http://tekniken.nu/uploads/634878090376123858-image001.png)", + "html": "

Bild i bild:

Två grymma utvecklare sökes - känner du någon som borde jobba på Sveriges bästa teknikbyrå?

Johanna Gustafsson - johanna.gustafsson@iteam.se
Tegnérgatan 28 - SE-113 59 Stockholm

Office: +46 8 26 70 90
Mobile: +46 734 02 91 12", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "FW: test via mailgun", + "meta_description": null, + "author_id": 1093, + "created_at": 1352212237000, + "created_by": 1093, + "updated_at": 1352212237000, + "updated_by": 1093, + "published_at": 1352212237000, + "published_by": 1093 + }, + { + "id": 623, + "title": "RE: SEO analyser i Google Analytics", + "slug": "re-seo-analyser-i-google-analytics", + "markdown": "\r\n\r\nJag har senaste tiden sett att antalet besök har nått nya nivåer pånärmaste.se. Eftersom all trafik kommer via google-sökningar ( t  ex närmaste bankomat, närmaste ticnetombud, systembolag vid brommaplan osv) så är det intressant att det helt plötsligt kommer mer trafik utan naturliga förklaringar. Tidigare toppar kan förklaras med nyårsafton, midsommarafton, dagar då apotekets datasystem låg nere osv:\r\n\r\n\r\n \r\n\r\n\r\n\r\n\r\n\r\nOm man tittar lite närmare kan man via Google Analytics hitta ett mönster med ett tak som upprepar sig i flera dagar och som jag tolkar som att det finns en ramp-up till ett max antal träffar per vecka som automatiskt höjs och sänks baserat på något internt rankinsystem på Google. PageRank är ju officiellt borttaget men någon sorts ranking finns det som de höjer upp och ner per vecka.\r\n\r\n\r\nDenna rapport kan man nå via Google Analytics på Traffic Sources > Search Engine Optimizations > Queries. Rapporten kräver att du har aktiverat Google Tools For webmasters och gör därför en ihopslagning av den trafik som Google skickar vidare till sajtägare även om du inte har Google Analytics installerat på din sajt. Informationen visar hur många gånger din sajt har blivit visad i googles sökresultat. \r\n\r\n\r\n\r\n\r\n\r\nJag tolkar att taggigheten på topparna i slutet på den nuvarande perioden är ett tecken på att de snart kommer höja nivån. <- Ovanstående skrev jag igår och mycket riktigt har det blivit ytterligare en högre nivå idag! Detta är samma rapport som igår men nu har Google släppt på ytterligare en nivå.\r\n\r\n\r\n\r\n\r\n\r\nOm man zoomar in lite på den sista  månaden så ser man tydligt när gränsen passeras..\r\n\r\n\r\n\r\n\r\n\r\nSlutsatsen är att så länge dessa kurvor är spetsiga kommer Google öka maxgränsen. Jämför man med en annan sajt vi har insikt i kan man se att man där har stabiliserat sig på en viss nivå och där är topparna inte lika spetsiga:\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/634968025292981772-image001.png)", + "html": "

Jag har senaste tiden sett att antalet besök har nått nya nivåer pånärmaste.se. Eftersom all trafik kommer via google-sökningar ( t  ex närmaste bankomat, närmaste ticnetombud, systembolag vid brommaplan osv) så är det intressant att det helt plötsligt kommer mer trafik utan naturliga förklaringar. Tidigare toppar kan förklaras med nyårsafton, midsommarafton, dagar då apotekets datasystem låg nere osv:


 



Om man tittar lite närmare kan man via Google Analytics hitta ett mönster med ett tak som upprepar sig i flera dagar och som jag tolkar som att det finns en ramp-up till ett max antal träffar per vecka som automatiskt höjs och sänks baserat på något internt rankinsystem på Google. PageRank är ju officiellt borttaget men någon sorts ranking finns det som de höjer upp och ner per vecka.


Denna rapport kan man nå via Google Analytics på Traffic Sources > Search Engine Optimizations > Queries. Rapporten kräver att du har aktiverat Google Tools For webmasters och gör därför en ihopslagning av den trafik som Google skickar vidare till sajtägare även om du inte har Google Analytics installerat på din sajt. Informationen visar hur många gånger din sajt har blivit visad i googles sökresultat. 



Jag tolkar att taggigheten på topparna i slutet på den nuvarande perioden är ett tecken på att de snart kommer höja nivån. <- Ovanstående skrev jag igår och mycket riktigt har det blivit ytterligare en högre nivå idag! Detta är samma rapport som igår men nu har Google släppt på ytterligare en nivå.



Om man zoomar in lite på den sista  månaden så ser man tydligt när gränsen passeras..



Slutsatsen är att så länge dessa kurvor är spetsiga kommer Google öka maxgränsen. Jämför man med en annan sajt vi har insikt i kan man se att man där har stabiliserat sig på en viss nivå och där är topparna inte lika spetsiga:


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "RE: SEO analyser i Google Analytics", + "meta_description": null, + "author_id": 1093, + "created_at": 1361205728000, + "created_by": 1093, + "updated_at": 1361205728000, + "updated_by": 1093, + "published_at": 1361205728000, + "published_by": 1093 + }, + { + "id": 624, + "title": "SEO analyser i Google Analytics", + "slug": "seo-analyser-i-google-analytics", + "markdown": "\r\nJag har senaste tiden sett att antalet besök har nått nya nivåer pånärmaste.se. Eftersom all trafik kommer via google-sökningar ( t  ex närmaste bankomat, närmaste ticnetombud, systembolag vid brommaplan osv) så är det intressant att det helt plötsligt kommer mer trafik utan naturliga förklaringar. Tidigare toppar kan förklaras med nyårsafton, midsommarafton, dagar då apotekets datasystem låg nere osv:\r\n\r\n\r\n\r\nOm man tittar lite närmare kan man via Google Analytics hitta ett mönster med ett tak som upprepar sig i flera dagar och som jag tolkar som att det finns en ramp-up till ett max antal träffar per vecka som automatiskt höjs och sänks baserat på något internt rankinsystem på Google. PageRank är ju officiellt borttaget men någon sorts ranking finns det som de höjer upp och ner per vecka.\r\n\r\nDenna rapport kan man nå via Google Analytics på Traffic Sources > Search Engine Optimizations > Queries. Rapporten kräver att du har aktiverat Google Tools For webmasters och gör därför en ihopslagning av den trafik som Google skickar vidare till sajtägare även om du inte har Google Analytics installerat på din sajt. Informationen visar hur många gånger din sajt har blivit visad i googles sökresultat. \r\n\r\n\r\n\r\nJag tolkar att taggigheten på topparna i slutet på den nuvarande perioden är ett tecken på att de snart kommer höja nivån. <- Ovanstående skrev jag igår och mycket riktigt har det blivit ytterligare en högre nivå idag! Detta är samma rapport som igår men nu har Google släppt på ytterligare en nivå.\r\n\r\n\r\n\r\nOm man zoomar in lite på den sista  månaden så ser man tydligt när gränsen passeras..\r\n\r\n\r\n\r\nSlutsatsen är att så länge dessa kurvor är spetsiga kommer Google öka maxgränsen. Jämför man med en annan sajt vi har insikt i kan man se att man där har stabiliserat sig på en viss nivå och där är topparna inte lika spetsiga:\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/634968026662891772-image001.png)", + "html": "

Jag har senaste tiden sett att antalet besök har nått nya nivåer pånärmaste.se. Eftersom all trafik kommer via google-sökningar ( t  ex närmaste bankomat, närmaste ticnetombud, systembolag vid brommaplan osv) så är det intressant att det helt plötsligt kommer mer trafik utan naturliga förklaringar. Tidigare toppar kan förklaras med nyårsafton, midsommarafton, dagar då apotekets datasystem låg nere osv:

Om man tittar lite närmare kan man via Google Analytics hitta ett mönster med ett tak som upprepar sig i flera dagar och som jag tolkar som att det finns en ramp-up till ett max antal träffar per vecka som automatiskt höjs och sänks baserat på något internt rankinsystem på Google. PageRank är ju officiellt borttaget men någon sorts ranking finns det som de höjer upp och ner per vecka.

Denna rapport kan man nå via Google Analytics på Traffic Sources > Search Engine Optimizations > Queries. Rapporten kräver att du har aktiverat Google Tools For webmasters och gör därför en ihopslagning av den trafik som Google skickar vidare till sajtägare även om du inte har Google Analytics installerat på din sajt. Informationen visar hur många gånger din sajt har blivit visad i googles sökresultat. 

Jag tolkar att taggigheten på topparna i slutet på den nuvarande perioden är ett tecken på att de snart kommer höja nivån. <- Ovanstående skrev jag igår och mycket riktigt har det blivit ytterligare en högre nivå idag! Detta är samma rapport som igår men nu har Google släppt på ytterligare en nivå.

Om man zoomar in lite på den sista  månaden så ser man tydligt när gränsen passeras..

Slutsatsen är att så länge dessa kurvor är spetsiga kommer Google öka maxgränsen. Jämför man med en annan sajt vi har insikt i kan man se att man där har stabiliserat sig på en viss nivå och där är topparna inte lika spetsiga:

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "SEO analyser i Google Analytics", + "meta_description": null, + "author_id": 1093, + "created_at": 1361205866000, + "created_by": 1093, + "updated_at": 1361205866000, + "updated_by": 1093, + "published_at": 1361205866000, + "published_by": 1093 + }, + { + "id": 626, + "title": "RE2: SEO analyser i Google Analytics", + "slug": "re2-seo-analyser-i-google-analytics", + "markdown": "\r\nJag har senaste tiden sett att antalet besök har nått nya nivåer pånärmaste.se. Eftersom all trafik kommer via google-sökningar ( t  ex närmaste bankomat, närmaste ticnetombud, systembolag vid brommaplan osv) så är det intressant att det helt plötsligt kommer mer trafik utan naturliga förklaringar. Tidigare toppar kan förklaras med nyårsafton, midsommarafton, dagar då apotekets datasystem låg nere osv:\r\n\r\n\r\n\r\nOm man tittar lite närmare kan man via Google Analytics hitta ett mönster med ett tak som upprepar sig i flera dagar och som jag tolkar som att det finns en ramp-up till ett max antal träffar per vecka som automatiskt höjs och sänks baserat på något internt rankinsystem på Google. PageRank är ju officiellt borttaget men någon sorts ranking finns det som de höjer upp och ner per vecka.\r\n\r\nDenna rapport kan man nå via Google Analytics på Traffic Sources > Search Engine Optimizations > Queries. Rapporten kräver att du har aktiverat Google Tools For webmasters och gör därför en ihopslagning av den trafik som Google skickar vidare till sajtägare även om du inte har Google Analytics installerat på din sajt. Informationen visar hur många gånger din sajt har blivit visad i googles sökresultat. \r\n\r\n\r\n\r\nJag tolkar att taggigheten på topparna i slutet på den nuvarande perioden är ett tecken på att de snart kommer höja nivån. <- Ovanstående skrev jag igår och mycket riktigt har det blivit ytterligare en högre nivå idag! Detta är samma rapport som igår men nu har Google släppt på ytterligare en nivå.\r\n\r\n\r\n\r\nOm man zoomar in lite på den sista  månaden så ser man tydligt när gränsen passeras..\r\n\r\n\r\n\r\nSlutsatsen är att så länge dessa kurvor är spetsiga kommer Google öka maxgränsen. Jämför man med en annan sajt vi har insikt i kan man se att man där har stabiliserat sig på en viss nivå och där är topparna inte lika spetsiga:\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/634968030985361772-image001.png)", + "html": "

Jag har senaste tiden sett att antalet besök har nått nya nivåer pånärmaste.se. Eftersom all trafik kommer via google-sökningar ( t  ex närmaste bankomat, närmaste ticnetombud, systembolag vid brommaplan osv) så är det intressant att det helt plötsligt kommer mer trafik utan naturliga förklaringar. Tidigare toppar kan förklaras med nyårsafton, midsommarafton, dagar då apotekets datasystem låg nere osv:

Om man tittar lite närmare kan man via Google Analytics hitta ett mönster med ett tak som upprepar sig i flera dagar och som jag tolkar som att det finns en ramp-up till ett max antal träffar per vecka som automatiskt höjs och sänks baserat på något internt rankinsystem på Google. PageRank är ju officiellt borttaget men någon sorts ranking finns det som de höjer upp och ner per vecka.

Denna rapport kan man nå via Google Analytics på Traffic Sources > Search Engine Optimizations > Queries. Rapporten kräver att du har aktiverat Google Tools For webmasters och gör därför en ihopslagning av den trafik som Google skickar vidare till sajtägare även om du inte har Google Analytics installerat på din sajt. Informationen visar hur många gånger din sajt har blivit visad i googles sökresultat. 

Jag tolkar att taggigheten på topparna i slutet på den nuvarande perioden är ett tecken på att de snart kommer höja nivån. <- Ovanstående skrev jag igår och mycket riktigt har det blivit ytterligare en högre nivå idag! Detta är samma rapport som igår men nu har Google släppt på ytterligare en nivå.

Om man zoomar in lite på den sista  månaden så ser man tydligt när gränsen passeras..

Slutsatsen är att så länge dessa kurvor är spetsiga kommer Google öka maxgränsen. Jämför man med en annan sajt vi har insikt i kan man se att man där har stabiliserat sig på en viss nivå och där är topparna inte lika spetsiga:

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "RE2: SEO analyser i Google Analytics", + "meta_description": null, + "author_id": 1093, + "created_at": 1361206298000, + "created_by": 1093, + "updated_at": 1361206298000, + "updated_by": 1093, + "published_at": 1361206298000, + "published_by": 1093 + }, + { + "id": 627, + "title": "testar inläsning av bilder", + "slug": "testar-inlasning-av-bilder", + "markdown": "\r\nI C# finns det ett utmärkt bibliotek för att skapa en realtidskommunikation mellan klient och server via WebSockets (med fallback till andra tekniker). Biblioteket heterSignalR och här kommer en liten redogörelse för ett proof of concept vi har gjort där vi kombinerar detta bibliotek medMailGun som är en grym molntjänst för  att ta emot email till en applikation.\r\n\r\nDEMO: För att testa proof of concept går du till:\r\n\r\nhttp://mailfeed-1.apphb.com/mail (Pröva att skicka ett mail tillinfo@mailfeed.mailgun.org och se hur mailet magiskt kommer upp på skärmen.)\r\n\r\nDetta kan vara utmärkt för många saker, bland annat om man ska bygga en omröstningsfunktion, kontrollera mailadresser med aktiveringskod osv osv. \r\n\r\nNedan hittar du ett utdrag från de viktigaste delarna i koden (som du hittar i sin helhet på GitHub:https://github.com/irony/Mailfeed)\r\n\r\nFörst sätter vi upp en MVC route för att ta emot mailet från MailGun\r\n\r\n\r\n\r\nFör att överföra mellan olika delar i systemet använder vi en statisk IObservable\r\n\r\n\r\n\r\nSen lyssnar vi på förändringar i denna och synkar till anslutna klienter\r\n\r\nObservera att vi i Add metoden anropar en klientfunktion (!):\r\n\r\n\r\n\r\nSen tar vi emot all kommunikation på klientsidan:\r\n\r\nHär deklareras metoden ”updateInbox” som vi ovan anropar från servern:\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/634980042214226457-image001.png)", + "html": "

I C# finns det ett utmärkt bibliotek för att skapa en realtidskommunikation mellan klient och server via WebSockets (med fallback till andra tekniker). Biblioteket heterSignalR och här kommer en liten redogörelse för ett proof of concept vi har gjort där vi kombinerar detta bibliotek medMailGun som är en grym molntjänst för  att ta emot email till en applikation.

DEMO: För att testa proof of concept går du till:

http://mailfeed-1.apphb.com/mail (Pröva att skicka ett mail tillinfo@mailfeed.mailgun.org och se hur mailet magiskt kommer upp på skärmen.)

Detta kan vara utmärkt för många saker, bland annat om man ska bygga en omröstningsfunktion, kontrollera mailadresser med aktiveringskod osv osv.

Nedan hittar du ett utdrag från de viktigaste delarna i koden (som du hittar i sin helhet på GitHub:https://github.com/irony/Mailfeed)

Först sätter vi upp en MVC route för att ta emot mailet från MailGun

För att överföra mellan olika delar i systemet använder vi en statisk IObservable

Sen lyssnar vi på förändringar i denna och synkar till anslutna klienter

Observera att vi i Add metoden anropar en klientfunktion (!):

Sen tar vi emot all kommunikation på klientsidan:

Här deklareras metoden ”updateInbox” som vi ovan anropar från servern:

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "testar inläsning av bilder", + "meta_description": null, + "author_id": 1093, + "created_at": 1362407421000, + "created_by": 1093, + "updated_at": 1362407421000, + "updated_by": 1093, + "published_at": 1362407421000, + "published_by": 1093 + }, + { + "id": 18, + "title": "Utveckling", + "slug": "utveckling", + "markdown": null, + "html": null, + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Utvecklingstips", + "meta_description": "", + "author_id": 4, + "created_at": 1181663409000, + "created_by": 4, + "updated_at": 1181663409000, + "updated_by": 4, + "published_at": 1181663409000, + "published_by": 4 + }, + { + "id": 60, + "title": "Minnesbegränsningar i Microsoft Windows Server 2003", + "slug": "minnesbegransningar-i-microsoft-windows-server-2003", + "markdown": "\r\nHär följer de övre minnesgränserna i Windows Server 2003:\r\n\r\n \r\n\r\nWindows\r\nServer 2003 Web edition – 2GB\r\n\r\nWindows\r\nServer 2003 Standard - 4GB\r\n\r\nWindows\r\nServer 2003 Enterprise – 32GB (x86 32-bit), 64GB (Itanium 64-bit)\r\n\r\nWindows\r\nServer 2003 Datacenter Edition – 128GB (x86 32-bit), 2TB (Itanium 64-bit)\r\n\r\n \r\n\r\n(Samma gränser gäller för R2).\r\n\r\n", + "html": "

Här följer de övre minnesgränserna i Windows Server 2003:


 


Windows
Server 2003 Web edition – 2GB


Windows
Server 2003 Standard - 4GB


Windows
Server 2003 Enterprise – 32GB (x86 32-bit), 64GB (Itanium 64-bit)


Windows
Server 2003 Datacenter Edition – 128GB (x86 32-bit), 2TB (Itanium 64-bit)


 


(Samma gränser gäller för R2).

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1085, + "created_at": 1187024340000, + "created_by": 1085, + "updated_at": 1187024340000, + "updated_by": 1085, + "published_at": 1187024340000, + "published_by": 1085 + }, + { + "id": 62, + "title": "Microsoft släpper två uppdateringspaket till Vista", + "slug": "microsoft-slapper-tva-uppdateringspaket-till-vista", + "markdown": "\r\nI väntan på Service Pack 1 till Vista som förväntas komma under hösten har Microsoft släppt två paket med hotfixar som var viktiga nog för att man inte ville vänta. Några smakprov på fixarna:   Prestanda- och pålitlighetsuppdateringenSmåfel i skärmsläckare Snabbare återgång efter Hibernation Den stora som har varit föremål för mycket diskussioner på nätet: fix av filkopieringsbuggen som gör att det ibland tar väldigt lång tid att kopiera filer, steget ”beräknar återstående tid” tar väldigt lång tid.   Kompatibilitets- och pålitlighetsuppdateringenMånga problem med grafikkort och drivrutiner, särskilt relaterade till spel och video Diverse hårdvaruproblem, bland annat med anslutna externa enheter Problem med nätverket     Mer om uppdateringarna här: http://arstechnica.com/news.ars/post/20070807-vista-performance-and-compatibility-packs-released.html  Båda paketen förväntas dyka upp i de automatiska uppdateringarna nästa patch-tisdag, så har du inte jätteproblem är det enklast att bara vänta. Själv är jag ganska sugen på att se om jag kan få fart på filkopieringen :-) \r\n![Bild](http://tekniken.nu/uploads/vista-start.png)", + "html": "

I väntan på Service Pack 1 till Vista som förväntas komma under hösten har Microsoft släppt två paket med hotfixar som var viktiga nog för att man inte ville vänta. Några smakprov på fixarna:
 
Prestanda- och pålitlighetsuppdateringen
Småfel i skärmsläckare
Snabbare återgång efter Hibernation
Den stora som har varit föremål för mycket diskussioner på nätet: fix av filkopieringsbuggen som gör att det ibland tar väldigt lång tid att kopiera filer, steget ”beräknar återstående tid” tar väldigt lång tid.
 
Kompatibilitets- och pålitlighetsuppdateringen
Många problem med grafikkort och drivrutiner, särskilt relaterade till spel och video
Diverse hårdvaruproblem, bland annat med anslutna externa enheter
Problem med nätverket
 
 
Mer om uppdateringarna här: http://arstechnica.com/news.ars/post/20070807-vista-performance-and-compatibility-packs-released.html
 
Båda paketen förväntas dyka upp i de automatiska uppdateringarna nästa patch-tisdag, så har du inte jätteproblem är det enklast att bara vänta. Själv är jag ganska sugen på att se om jag kan få fart på filkopieringen :-) ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1186597200000, + "created_by": 6, + "updated_at": 1186597200000, + "updated_by": 6, + "published_at": 1186597200000, + "published_by": 6 + }, + { + "id": 64, + "title": "Problem att synka NTP mot time.windows.com", + "slug": "problem-att-synka-ntp-mot-timewindowscom", + "markdown": "\r\n\r\n\r\nSedan USA gjorde om sina sommartidsregler i våras uppvisar många servrar problem att synkronisera tiden mot time.windows.com. Detta är förstås lite problematiskt då den servern är förininställd i NTP i alla windowsservrar...   För att ändra NTP server i Windows 2003 ändrar man följande registernyckel till t.ex. “time-a.nist.gov,0x1”: \r\n\r\n\r\n\r\nHKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\W32Time\\Parameters\\NtpServer\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/1337clock.jpg)", + "html": "


Sedan USA gjorde om sina sommartidsregler i våras uppvisar många servrar problem att synkronisera tiden mot time.windows.com. Detta är förstås lite problematiskt då den servern är förininställd i NTP i alla windowsservrar...
 
För att ändra NTP server i Windows 2003 ändrar man följande registernyckel till t.ex. “time-a.nist.gov,0x1”: 




HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\W32Time\\Parameters\\NtpServer


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1085, + "created_at": 1184772960000, + "created_by": 1085, + "updated_at": 1184772960000, + "updated_by": 1085, + "published_at": 1184772960000, + "published_by": 1085 + }, + { + "id": 67, + "title": "Back/Forward med Dell-mus i Windows Vista", + "slug": "backforward-med-dell-mus-i-windows-vista", + "markdown": "\r\n\r\n\r\nDells femknapparsmus fungerar lite si-och-så i Vista. Knapparna bakåt och framåt gör inte riktigt vad man förväntar sig.\r\n\r\n\r\nLyckligtvis är lösningen enkel:Avinstallera Dells medföljande program Mouse Suite så fungerar musen som tänkt. \r\n\r\n", + "html": "


Dells femknapparsmus fungerar lite si-och-så i Vista. Knapparna bakåt och framåt gör inte riktigt vad man förväntar sig.


Lyckligtvis är lösningen enkel:
Avinstallera Dells medföljande program Mouse Suite så fungerar musen som tänkt.


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1088, + "created_at": 1183992780000, + "created_by": 1088, + "updated_at": 1183992780000, + "updated_by": 1088, + "published_at": 1183992780000, + "published_by": 1088 + }, + { + "id": 73, + "title": "Lägga till funktionalitet för att ändra lösenord i Outlook Web Access", + "slug": "lagga-till-funktionalitet-for-att-andra-losenord-i-outlook-web-access", + "markdown": "\r\n\r\n\r\nEn guide som beskriver alla steg finns att läsa på Petri. \r\n\r\n\r\n\r\nhttp://www.petri.co.il/enable_password_changing_through_owa_in_exchange_2003.htm\r\n\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/outlookpassword.png)", + "html": "


En guide som beskriver alla steg finns att läsa på Petri.



http://www.petri.co.il/enable_password_changing_through_owa_in_exchange_2003.htm





", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1088, + "created_at": 1182878220000, + "created_by": 1088, + "updated_at": 1182878220000, + "updated_by": 1088, + "published_at": 1182878220000, + "published_by": 1088 + }, + { + "id": 77, + "title": "Mailbox-rättigheter i Exchange 2007", + "slug": "mailbox-rattigheter-i-exchange-2007", + "markdown": "\r\n\r\nAtt administrera mailbox-rättigheter i Exchange 2007 är lite knepigare än i tidigare versioner och görs numera via Exchange Shell med följande kommando:\r\n\r\n\r\nadd-mailboxpermission  -user  -AccessRights fullaccess\r\n\r\nFöljande kommando ger alltså administratorn \"full mailbox access\" på min brevlåda:\r\n\r\nadd-mailboxpermission magnus.tjerneld -user administrator -AccessRights fullaccess\r\n\r\nSamtliga tillgängliga alternativ för add-mailboxpermission finns i denna artikel på TechNet:\r\n\r\n\r\nhttp://technet.microsoft.com/en-us/library/a9aacbf5-5e6c-47ef-95d6-e24547e95d01.aspx\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/exchange2007.png)", + "html": "


Att administrera mailbox-rättigheter i Exchange 2007 är lite knepigare än i tidigare versioner och görs numera via Exchange Shell med följande kommando:


add-mailboxpermission <användaren du vill påverka> -user <användaren som skall ges tillgång> -AccessRights fullaccess


Följande kommando ger alltså administratorn \"full mailbox access\" på min brevlåda:


add-mailboxpermission magnus.tjerneld -user administrator -AccessRights fullaccess


Samtliga tillgängliga alternativ för add-mailboxpermission finns i denna artikel på TechNet:



http://technet.microsoft.com/en-us/library/a9aacbf5-5e6c-47ef-95d6-e24547e95d01.aspx


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1085, + "created_at": 1188571200000, + "created_by": 1085, + "updated_at": 1188571200000, + "updated_by": 1085, + "published_at": 1188571200000, + "published_by": 1085 + }, + { + "id": 78, + "title": "Timeout i MS SQL Server Management Studio", + "slug": "timeout-i-ms-sql-server-management-studio", + "markdown": "\r\n\r\n\r\n\r\n\r\n\r\nOm du får timeout när du försöker uppdatera en tabell i SQL\r\nServer Management Studio fastän du ställt upp både time out på både servern och\r\npå klienten så beror det på att det finns ytterligare ett timeoutvärde satt som\r\ngäller just för designläget. Inställningar för detta hittar man under\r\n”Tools->Options->Designers”, som bilden nedan visar.\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/sql-timeout.png)", + "html": "




Om du får timeout när du försöker uppdatera en tabell i SQL
Server Management Studio fastän du ställt upp både time out på både servern och
på klienten så beror det på att det finns ytterligare ett timeoutvärde satt som
gäller just för designläget. Inställningar för detta hittar man under
”Tools->Options->Designers”, som bilden nedan visar.





", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1086, + "created_at": 1188577080000, + "created_by": 1086, + "updated_at": 1188577080000, + "updated_by": 1086, + "published_at": 1188577080000, + "published_by": 1086 + }, + { + "id": 81, + "title": "Hur man ändrar MAC adress på en virtuell PC", + "slug": "hur-man-andrar-mac-adress-pa-en-virtuell-pc", + "markdown": "\r\n\r\nOm du har kopierat en virtuell PC till en annan maskin och\r\nkört NewCID för att få en nytt datornamn kommer fortfarande MAC adressen på\r\nnätverkskortet vara detsamma som tidigare. För att ändra det, leta upp .VMC-filen och ta bort innehållet i nedanstående tag. Då skapas en ny MAC-adress nästa\r\ngång du startar upp den virtuella PCn:\r\n\r\n\r\n0003FFxxxxxx\r\n\r\n\r\nSka bli tomt:\r\n\r\n\r\n\r\n\r\nAlternativt kopierar du bara den virtuella hårddisken och\r\nskapar en ny VMC fil på den nya datorn då skapas automatiskt en ny MAC adress.\r\n\r\n", + "html": "


Om du har kopierat en virtuell PC till en annan maskin och
kört NewCID för att få en nytt datornamn kommer fortfarande MAC adressen på
nätverkskortet vara detsamma som tidigare. För att ändra det, leta upp .VMC-filen och ta bort innehållet i nedanstående tag. Då skapas en ny MAC-adress nästa
gång du startar upp den virtuella PCn:


<ethernet_card_address
type=\"bytes\">0003FFxxxxxx</ethernet_card_address>


Ska bli tomt:


<ethernet_card_address
type=\"bytes\"></ethernet_card_address>


Alternativt kopierar du bara den virtuella hårddisken och
skapar en ny VMC fil på den nya datorn då skapas automatiskt en ny MAC adress.


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1087, + "created_at": 1182276900000, + "created_by": 1087, + "updated_at": 1182276900000, + "updated_by": 1087, + "published_at": 1182276900000, + "published_by": 1087 + }, + { + "id": 83, + "title": "Så installerar man tilläggsprogram till SQL Server 2005 med installationspaket från en annan variant", + "slug": "sa-installerar-man-tillaggsprogram-till-sql-server-2005-med-installationspaket-fran-en-annan-variant", + "markdown": "\r\n\r\nSQL Server 2005 finns i flera utgåvor (Express, Standard,\r\nWorkgroup, Enterprise). Om man redan har t.ex. en Express installerad och vill\r\nkomplettera med hjälpprogram som Management Studio från en installationskiva\r\nför Standard så kommer installationsprogrammet att klaga. Lösningen är att\r\nstarta installationsprogrammet i uppgraderingsläge (från kommandoraden):\r\n\r\nsetup.exe SKUUPGRADE=1\r\n\r\nDå går det bra att installera hjälpprogrammen, utan att man behöver\r\npåverka själva databasmotorn (ifall man t.ex. vill behåll Express).\r\n\r\n", + "html": "


SQL Server 2005 finns i flera utgåvor (Express, Standard,
Workgroup, Enterprise). Om man redan har t.ex. en Express installerad och vill
komplettera med hjälpprogram som Management Studio från en installationskiva
för Standard så kommer installationsprogrammet att klaga. Lösningen är att
starta installationsprogrammet i uppgraderingsläge (från kommandoraden):


setup.exe SKUUPGRADE=1


Då går det bra att installera hjälpprogrammen, utan att man behöver
påverka själva databasmotorn (ifall man t.ex. vill behåll Express).


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "man har installerat en Express.", + "author_id": 6, + "created_at": 1182099722000, + "created_by": 6, + "updated_at": 1182099722000, + "updated_by": 6, + "published_at": 1182099722000, + "published_by": 6 + }, + { + "id": 84, + "title": "Så får man VLC att fungera i Vista", + "slug": "sa-far-man-vlc-att-fungera-i-vista", + "markdown": "\r\n\r\n\r\n\r\n\r\n\r\nVideospelaren VLC (www.videolan.org)\r\nfungerar dåligt på vissa Vista-installationer med grundinställningarna. För att få bild måste man\r\nändra videoutmatningsmodul.\r\n\r\nGör såhär:\r\n\r\n1) Välj i menyn: Inställningar > Inställningar\r\n\r\n2) Under Video, välj Utmatningsmoduler\r\n\r\n3) Välj en annan modul än de som använder DirectX. OpenGL\r\noch Windows GDI fungerar bra t.ex. Även Color ASCII, men det ger kanske inte\r\nprecis det resultat du är ute efter :-).\r\n\r\n", + "html": "




Videospelaren VLC (www.videolan.org)
fungerar dåligt på vissa Vista-installationer med grundinställningarna. För att få bild måste man
ändra videoutmatningsmodul.


Gör såhär:


1) Välj i menyn: Inställningar > Inställningar


2) Under Video, välj Utmatningsmoduler


3) Välj en annan modul än de som använder DirectX. OpenGL
och Windows GDI fungerar bra t.ex. Även Color ASCII, men det ger kanske inte
precis det resultat du är ute efter :-).


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1182099540000, + "created_by": 6, + "updated_at": 1182099540000, + "updated_by": 6, + "published_at": 1182099540000, + "published_by": 6 + }, + { + "id": 86, + "title": "Få Alt Gr-knappen att fungera i Virtual PC", + "slug": "fa-alt-gr-knappen-att-fungera-i-virtual-pc", + "markdown": "\r\n\r\n\r\n\r\n\r\n\r\nI Virtual PC finns en s.k. värdknapp (host button) som gör att man kommer ur den virtuella datorn och tillbaka till värddatorn (bra att ha om man har valt att muspekaren ska ”fastna” i den virtuella). Som standardknapp för det har Microsoft valt Alt Gr, eftersom ”den bara används i vissa obskyra språk”. För oss i Sverige gör det livet lite komplicerat eftersom Alt Gr används för att göra tecken som \\.\r\n\r\nSom tur är går det att definiera om värdknappen:\r\n\r\n1) Starta Virtual PC Console2) Öppna menyn File->Options3) Välj Keyboard, klicka på Current host key4) Välj en knapp du inte använder, t.ex. SCROLL LOCK5) Öppna din virtuella maskin på nytt - nu funkar Alt Gr!\r\n\r\n", + "html": "




I Virtual PC finns en s.k. värdknapp (host button) som gör att man kommer ur den virtuella datorn och tillbaka till värddatorn (bra att ha om man har valt att muspekaren ska ”fastna” i den virtuella). Som standardknapp för det har Microsoft valt Alt Gr, eftersom ”den bara används i vissa obskyra språk”. För oss i Sverige gör det livet lite komplicerat eftersom Alt Gr används för att göra tecken som \\.


Som tur är går det att definiera om värdknappen:


1) Starta Virtual PC Console
2) Öppna menyn File->Options
3) Välj Keyboard, klicka på Current host key
4) Välj en knapp du inte använder, t.ex. SCROLL LOCK
5) Öppna din virtuella maskin på nytt - nu funkar Alt Gr!


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1181842380000, + "created_by": 6, + "updated_at": 1181842380000, + "updated_by": 6, + "published_at": 1181842380000, + "published_by": 6 + }, + { + "id": 87, + "title": "Stäng av datorn vid ett bestämt klockslag", + "slug": "stang-av-datorn-vid-ett-bestamt-klockslag", + "markdown": "\r\n\r\nIbland behöver man lämna sin dator med en uppgift, men vill ändå\r\natt den ska stängas av senare (som igår t.ex., eftersom vi hade ett planerat\r\nelavbrott idag på morgonen).\r\n\r\nGör såhär:\r\n\r\n- Skapa ett schemalagt jobb (finns under kontrollpanelen i\r\nXP och som eget program i Vista), som ska köras endast en gång\r\n\r\n- Programmet som ska startas är\r\n ”C:\\windows\\system32\\shutdown.exe” med argumenten /s /f (stäng av datorn,\r\noch stäng alla applikationer utan att be den inloggade användaren om lov).\r\n\r\n", + "html": "


Ibland behöver man lämna sin dator med en uppgift, men vill ändå
att den ska stängas av senare (som igår t.ex., eftersom vi hade ett planerat
elavbrott idag på morgonen).


Gör såhär:


- Skapa ett schemalagt jobb (finns under kontrollpanelen i
XP och som eget program i Vista), som ska köras endast en gång


- Programmet som ska startas är
 ”C:\\windows\\system32\\shutdown.exe” med argumenten /s /f (stäng av datorn,
och stäng alla applikationer utan att be den inloggade användaren om lov).


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1181817240000, + "created_by": 6, + "updated_at": 1181817240000, + "updated_by": 6, + "published_at": 1181817240000, + "published_by": 6 + }, + { + "id": 104, + "title": "Användarrättigheter för Scheduled Tasks på Windows 2003 server", + "slug": "anvandarrattigheter-for-scheduled-tasks-pa-windows-2003-server", + "markdown": "\r\n\r\n\r\nNormalinställningen på en Windows 2003 server är att bara administratörskonton får lägga upp schemalagda jobb. Ibland vill man dock skapa ett servicekonto för en applikation som inte ska vara administratör (av säkerhetsskäl) men ändå kunna lägga upp schemalagda jobb. \r\n\r\n\r\nRättigheten ändras på mapp c:\\windows\\tasks. Tyvärr kan man inte använda det vanliga gränssnittet för filrättigheter, utan man måste använda kommandoradsverktyget cacls.\r\n\r\n\r\nFör att se vilka rättigheter som finns nu:\r\n\r\ncacls c:\\windows\\tasks\r\n\r\n\r\n\r\n\r\n\r\nFör att ge en användare rätt att skapa jobb (C = Create):\r\n\r\ncacls c:\\windows\\tasks /E /P anders:C\r\n\r\n/P innebär att användaren får nya rättigheter. /E Betyder att alla tidigare rättigheter (för andra användare) ska finnas kvar - glöm inte /E, annars kommer hela rättighetslistan på c:\\windows\\tasks tas bort!\r\n\r\n", + "html": "


Normalinställningen på en Windows 2003 server är att bara administratörskonton får lägga upp schemalagda jobb. Ibland vill man dock skapa ett servicekonto för en applikation som inte ska vara administratör (av säkerhetsskäl) men ändå kunna lägga upp schemalagda jobb.


Rättigheten ändras på mapp c:\\windows\\tasks. Tyvärr kan man inte använda det vanliga gränssnittet för filrättigheter, utan man måste använda kommandoradsverktyget cacls.


För att se vilka rättigheter som finns nu:


cacls c:\\windows\\tasks



För att ge en användare rätt att skapa jobb (C = Create):


cacls c:\\windows\\tasks /E /P anders:C

/P innebär att användaren får nya rättigheter. /E Betyder att alla tidigare rättigheter (för andra användare) ska finnas kvar - glöm inte /E, annars kommer hela rättighetslistan på c:\\windows\\tasks tas bort!


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1189764900000, + "created_by": 6, + "updated_at": 1189764900000, + "updated_by": 6, + "published_at": 1189764900000, + "published_by": 6 + }, + { + "id": 106, + "title": "Varning: Greylisting kan orsaka problem i Exchange 2003", + "slug": "varning-greylisting-kan-orsaka-problem-i-exchange-2003", + "markdown": "\r\n\r\nTre gånger i år, i tre helt skiljda Exchange-miljöer, har jag\r\nvarit med om följande scenario:\r\n\r\n\r\nExchange Server 2003 håller sporadiskt vissa mail utan att varken leverera dem\r\neller skicka NDR (Non-Delivery Report) till den interna avsändaren. Först vid omstart av\r\nSMTP-tjänsten går mailen iväg. I det senaste fallet uppdagades problemet vid en\r\nomstart, då månadsgamla mail plötsligt skickades iväg.\r\n\r\nProblemet ovan har visat sig bero på en bugg i SMTP-servern\r\ni Windows Server 2003 i kombination med mottagare som använder s.k. greylisting, en\r\nantispamteknik som går ut på att tillfälligt neka alla mail från en okänd\r\navsändare. Efter att ha blivit tillfälligt stoppat hos mottagaren skall\r\navsändarservern försöka skicka mailet igen enligt ett serverdefinierat\r\nintervall, men p.g.a. av denna bugg så sker inga nya försök att skicka. Någon leveransrapport om att mailet inte nått fram skickas alltså inte\r\nheller till avsändaren.\r\n\r\nMicrosoft har erkänt problemet och har också satt ihop en hotfix som kommer ingå\r\ni nästa service pack för Windows Server 2003. I väntan på SP3 måste man dock\r\nringa Microsofts support och be dem maila patchen...\r\n\r\nMicrosoft\r\nQ934709:\r\n\r\n\r\nhttp://support.microsoft.com/kb/934709/en-us\r\n\r\n\r\nMer info om buggen:\r\n\r\n\r\nhttp://www.webservertalk.com/printthread.php?s=9d64fa7f8ee6989847cfcedaa1275e4b&threadid=1918960\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/exchange2003.png)", + "html": "


Tre gånger i år, i tre helt skiljda Exchange-miljöer, har jag
varit med om följande scenario:


Exchange Server 2003 håller sporadiskt vissa mail utan att varken leverera dem
eller skicka NDR (Non-Delivery Report) till den interna avsändaren. Först vid omstart av
SMTP-tjänsten går mailen iväg. I det senaste fallet uppdagades problemet vid en
omstart, då månadsgamla mail plötsligt skickades iväg.


Problemet ovan har visat sig bero på en bugg i SMTP-servern
i Windows Server 2003 i kombination med mottagare som använder s.k. greylisting, en
antispamteknik som går ut på att tillfälligt neka alla mail från en okänd
avsändare. Efter att ha blivit tillfälligt stoppat hos mottagaren skall
avsändarservern försöka skicka mailet igen enligt ett serverdefinierat
intervall, men p.g.a. av denna bugg så sker inga nya försök att skicka. Någon leveransrapport om att mailet inte nått fram skickas alltså inte
heller till avsändaren.


Microsoft har erkänt problemet och har också satt ihop en hotfix som kommer ingå
i nästa service pack för Windows Server 2003. I väntan på SP3 måste man dock
ringa Microsofts support och be dem maila patchen...


Microsoft
Q934709:



http://support.microsoft.com/kb/934709/en-us


Mer info om buggen:



http://www.webservertalk.com/printthread.php?s=9d64fa7f8ee6989847cfcedaa1275e4b&threadid=1918960


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "alltid utan att avsändaren får något varningsmeddelande.", + "author_id": 1085, + "created_at": 1190047200000, + "created_by": 1085, + "updated_at": 1190047200000, + "updated_by": 1085, + "published_at": 1190047200000, + "published_by": 1085 + }, + { + "id": 115, + "title": "Bästa tipsen för kombinationen RSA SecurID och ISA Server 2006", + "slug": "basta-tipsen-for-kombinationen-rsa-securid-och-isa-server-2006", + "markdown": "\r\n\r\nUppdraget: Att skydda ditt nätverk med tvåfaktorauthentisering med RSA SecurID, inklusive VPN-kopplingar och webbtjänster som webbmail och affärssystem.\r\n\r\nNågra små problem kan dyka upp då du försöker använda\r\nISA Server 2006 som en Agent Host i RSA SecureID:\r\n\r\n\r\nGenerellt vid installation av RSA SecurID Agent Hosts: Se\r\ntill att hosten är upplagd med rätt IP (den som ska kommunicera) i RSA\r\nAuthentication Manager. Se till att den är satt till typen NetOS, och\r\natt host-secret-kryssrutan är okryssad. Generera och leverera filen\r\nSDCONF.REC till dina Agent Hosts i mappen c:\\windows\\system32. Node secret skapas automatiskt vid första lyckade authentiseringsförsöket.\r\nFörvirring uppstår lätt i och med att RSA SecurID delvis\r\nredan är inbyggt i ISA Server 2006. Det stämmer, men endast som web-filter. Ska\r\ndu använda en EAP-klient (d.v.s. skydda VPN) så måste du installera RSA SecurIDs egen EAP-klient\r\n(för närvarande i version 6.1), vilket kommer orsaka en krock (se nedan).\r\nISA Server är ju en brandvägg och har per\r\ndefinition därför flera nätverkskort. Det måste hanteras enligt följande:\"If ISA\r\nServer is configured with multiple network adapters and you create a Web\r\nlistener with RSA SecurID authentication enabled, you should explicitly\r\nconfigure the network adapter address through which ISA Server will connect to\r\nthe RSA Authentication Manager for authentication purposes. Otherwise, ISA\r\nServer may fail to perform SecurID authentication. Specify the IP address in\r\nregistry key HKEY_LOCAL_MACHINE\\SOFTWARE\\SDTI\\AceClient\\PrimaryInterfaceIP, as\r\na string value.\"(Från: http://www.microsoft.com/technet/isa/2006/authentication.mspx)\r\nEftersom ISA Server 2006 därmed i princip\r\nbestår av två agenter måste sdconf.rec även läggas i mappen c:\\program files\\Isa\r\nServer\\sdconf, vilket inte är dokumenterat. När man gör det rensas ”node\r\nsecret”-rutan i Authentication Manager och en autentisering görs via webbgänssnittet.\r\nDå får man felet ”node verification failed” i\r\nVPN-installationen (RSA Agent 6.1)... Detta löser du genom att köra ”clear\r\nnode secret” i RSA Security Center på din Agent (ISA-servern), och sedan\r\nkopiera tillbaka filen securid från mappen c:\\program files\\Isa Server\\sdconf till c:\\windows\\system32.\r\nVoila – både VPN och webbtjänster skyddade med RSA SecurID!\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/rsa.png)\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/isa.png)", + "html": "


Uppdraget: Att skydda ditt nätverk med tvåfaktorauthentisering med RSA SecurID, inklusive VPN-kopplingar och webbtjänster som webbmail och affärssystem.


Några små problem kan dyka upp då du försöker använda
ISA Server 2006 som en Agent Host i RSA SecureID:



  • Generellt vid installation av RSA SecurID Agent Hosts: Se
    till att hosten är upplagd med rätt IP (den som ska kommunicera) i RSA
    Authentication Manager. Se till att den är satt till typen NetOS, och
    att host-secret-kryssrutan är okryssad. Generera och leverera filen
    SDCONF.REC till dina Agent Hosts i mappen c:\\windows\\system32. Node secret skapas automatiskt vid första lyckade authentiseringsförsöket.

  • Förvirring uppstår lätt i och med att RSA SecurID delvis
    redan är inbyggt i ISA Server 2006. Det stämmer, men endast som web-filter. Ska
    du använda en EAP-klient (d.v.s. skydda VPN) så måste du installera RSA SecurIDs egen EAP-klient
    (för närvarande i version 6.1), vilket kommer orsaka en krock (se nedan).

  • ISA Server är ju en brandvägg och har per
    definition därför flera nätverkskort. Det måste hanteras enligt följande:

    \"If ISA
    Server is configured with multiple network adapters and you create a Web
    listener with RSA SecurID authentication enabled, you should explicitly
    configure the network adapter address through which ISA Server will connect to
    the RSA Authentication Manager for authentication purposes. Otherwise, ISA
    Server may fail to perform SecurID authentication. Specify the IP address in
    registry key HKEY_LOCAL_MACHINE\\SOFTWARE\\SDTI\\AceClient\\PrimaryInterfaceIP, as
    a string value.\"


    (Från: http://www.microsoft.com/technet/isa/2006/authentication.mspx)

  • Eftersom ISA Server 2006 därmed i princip
    består av två agenter måste sdconf.rec även läggas i mappen c:\\program files\\Isa
    Server\\sdconf, vilket inte är dokumenterat. När man gör det rensas ”node
    secret”-rutan i Authentication Manager och en autentisering görs via webbgänssnittet.

  • Då får man felet ”node verification failed” i
    VPN-installationen (RSA Agent 6.1)... Detta löser du genom att köra ”clear
    node secret” i RSA Security Center på din Agent (ISA-servern), och sedan
    kopiera tillbaka filen securid från mappen c:\\program files\\Isa Server\\sdconf till c:\\windows\\system32.

  • Voila – både VPN och webbtjänster skyddade med RSA SecurID!






", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1090, + "created_at": 1190653740000, + "created_by": 1090, + "updated_at": 1190653740000, + "updated_by": 1090, + "published_at": 1190653740000, + "published_by": 1090 + }, + { + "id": 116, + "title": "Varning: Allvarligt fel i Excel 2007!", + "slug": "varning-allvarligt-fel-i-excel-2007", + "markdown": "\r\nI Excel 2007 finns en bugg som gör att alla multiplikationer som slutar upp i 65 535\r\nistället blir 100 000. Detta är ett potentiellt väldigt allvarligt fel med tanke på hur mycket data som\r\nvanligen ligger i Excel runt om på företag. Det är också extra lömskt eftersom det är svårt att själv upptäcka att det här felet har smugit sig in i en av ens kalkyler.\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/excel.png)", + "html": "

I Excel 2007 finns en bugg som gör att alla multiplikationer som slutar upp i 65 535
istället blir 100 000. Detta är ett potentiellt väldigt allvarligt fel med tanke på hur mycket data som
vanligen ligger i Excel runt om på företag. Det är också extra lömskt eftersom det är svårt att själv upptäcka att det här felet har smugit sig in i en av ens kalkyler.

", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1086, + "created_at": 1190736960000, + "created_by": 1086, + "updated_at": 1190736960000, + "updated_by": 1086, + "published_at": 1190736960000, + "published_by": 1086 + }, + { + "id": 123, + "title": "Installation av SQL Server 2005 krockar med Office 2003 Web Components", + "slug": "installation-av-sql-server-2005-krockar-med-office-2003-web-components", + "markdown": "\r\n\r\n\r\n\r\n\r\n\r\nIdag sprang jag på ett ganska långsökt problem vid installation\r\nav SQL Server 2005: tydligen går det inte att inte att installera SQL Server om Office\r\n2003 Web Components (OWC11) redan är installerat. \r\n\r\nKontrollen inför installationen visade helt snällt att allt som\r\nbehövdes fanns på plats och installationen gick igång som den skulle, men ganska snabbt\r\nmisslyckas installationen av OWC11 och således även andra viktiga delar av\r\ninstallationen (SQL Server Database Services tex.).\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/sqlinstall.png)\r\n\r\nFelet som loggas i setuploggen lyder:\r\n\r\n\r\nMachine:Product: OWC11Error: Error 1706. Setup cannot find the required files.  Check your connection to the network, or CD-ROM drive.  For other potential solutions to this\r\nproblem, see C:\\Program Files\\Microsoft Office\\OFFICE11\\1033\\SETUP.CHM.\r\n\r\n\r\nLösningen är ganska enkel: avinstallera ”Office Web Components\r\n2003” och kör SQL-installationen igen.\r\n\r\n", + "html": "




Idag sprang jag på ett ganska långsökt problem vid installation
av SQL Server 2005: tydligen går det inte att inte att installera SQL Server om Office
2003 Web Components (OWC11) redan är installerat.


Kontrollen inför installationen visade helt snällt att allt som
behövdes fanns på plats och installationen gick igång som den skulle, men ganska snabbt
misslyckas installationen av OWC11 och således även andra viktiga delar av
installationen (SQL Server Database Services tex.).








Felet som loggas i setuploggen lyder:



Machine:
Product:
OWC11
Error: Error 1706. Setup cannot find the required files.  Check your connection to the network, or CD-ROM drive.  For other potential solutions to this
problem, see C:\\Program Files\\Microsoft Office\\OFFICE11\\1033\\SETUP.CHM.


Lösningen är ganska enkel: avinstallera ”Office Web Components
2003” och kör SQL-installationen igen.


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1085, + "created_at": 1192030440000, + "created_by": 1085, + "updated_at": 1192030440000, + "updated_by": 1085, + "published_at": 1192030440000, + "published_by": 1085 + }, + { + "id": 128, + "title": "Vistabugg orsakar minnesproblem vid filkopiering", + "slug": "vistabugg-orsakar-minnesproblem-vid-filkopiering", + "markdown": "\r\n\r\n\r\nJag har vid några tillfällen stött på problemet att Vista inte kan kopiera stora filer från vår filserver. Operativsystemet klagar på att det inte finns något minne vilket är konstigt iom att vi sitter på ganska kraftfulla datorer.\r\n\r\n\r\nLite research ledde dock till att jag läste att det mycket riktigt är en bugg i Vista (problem med OLE-aktiveringen i Explorer). Microsoft har släppt en hotfix men dyker inte ännu inte upp i de automatiska uppdateringarna:\r\n\r\n\r\n\r\nhttp://support.microsoft.com/kb/942435/en-us\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/vista.png)", + "html": "


Jag har vid några tillfällen stött på problemet att Vista inte kan kopiera stora filer från vår filserver. Operativsystemet klagar på att det inte finns något minne vilket är konstigt iom att vi sitter på ganska kraftfulla datorer.


Lite research ledde dock till att jag läste att det mycket riktigt är en bugg i Vista (problem med OLE-aktiveringen i Explorer). Microsoft har släppt en hotfix men dyker inte ännu inte upp i de automatiska uppdateringarna:



http://support.microsoft.com/kb/942435/en-us


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Vistabugg orsakar minnesproblem vid filkopiering", + "meta_description": "", + "author_id": 1086, + "created_at": 1192724220000, + "created_by": 1086, + "updated_at": 1192724220000, + "updated_by": 1086, + "published_at": 1192724220000, + "published_by": 1086 + }, + { + "id": 133, + "title": "Gratisversion av SQL Server Management Studio", + "slug": "gratisversion-av-sql-server-management-studio", + "markdown": "\r\n\r\n\r\nMed SQL Server 2005 får man administrationsverktyget SQL Server Management Studio, där man kan hantera data, skapa databaser, hantera backuper, inloggningar, stored procedures o.s.v. Management Studio är en sammanslagning av Enterprise Manager och Query Analyzer från tidigare versioner av SQL Server.\r\n\r\n\r\nOm man installerar gratisversionen SQL Server 2005 Express så har man tidigare inte fått något administrationsverktyg. Det finns ett enklare verktyg i Visual Studio, men det är inte så lättjobbat och har inte alla funktioner. Man kan installera SQL Server Management Studio från en skarp SQL Server-skiva, men det är antagligen inte helt i enlighet med licensreglerna.\r\n\r\n\r\nSom tur är finns nu även Management Studio i en gratisversion, följdriktigt döpt till SQL Server Management Studio Express. Den innehåller allt som riktiga MS gör, med undantag för att man inte kan administrera:\r\n\r\n\r\nAnalysis Services\r\nIntegration Services (import och export av data)\r\nNotification Services\r\nReport Builder\r\nSQL Agent\r\nDatabase Tuning Advisor\r\nFull-text search\r\nMaintenance plans\r\nLog shipping\r\n\r\n\r\nAllt annat funkar som vanligt. Kort sagt ett perfekt verktyg för en utvecklare som vill administrera SQL Servrar från sin vanliga arbetsstation eller hantera en SQL Server 2005 Express på sin utvecklingsdator. Ladda ner här: http://www.microsoft.com/downloads/details.aspx?FamilyId=C243A5AE-4BD1-4E3D-94B8-5A0F62BF7796&displaylang=en\r\n\r\n\r\nPS. Management Studio Express har funnits ute ett tag, men jag hade helt missat att den fanns. DS.\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/29366_figure1_big.jpg)", + "html": "


Med SQL Server 2005 får man administrationsverktyget SQL Server Management Studio, där man kan hantera data, skapa databaser, hantera backuper, inloggningar, stored procedures o.s.v. Management Studio är en sammanslagning av Enterprise Manager och Query Analyzer från tidigare versioner av SQL Server.


Om man installerar gratisversionen SQL Server 2005 Express så har man tidigare inte fått något administrationsverktyg. Det finns ett enklare verktyg i Visual Studio, men det är inte så lättjobbat och har inte alla funktioner. Man kan installera SQL Server Management Studio från en skarp SQL Server-skiva, men det är antagligen inte helt i enlighet med licensreglerna.


Som tur är finns nu även Management Studio i en gratisversion, följdriktigt döpt till SQL Server Management Studio Express. Den innehåller allt som riktiga MS gör, med undantag för att man inte kan administrera:



  • Analysis Services

  • Integration Services (import och export av data)

  • Notification Services

  • Report Builder

  • SQL Agent

  • Database Tuning Advisor

  • Full-text search

  • Maintenance plans

  • Log shipping


Allt annat funkar som vanligt. Kort sagt ett perfekt verktyg för en utvecklare som vill administrera SQL Servrar från sin vanliga arbetsstation eller hantera en SQL Server 2005 Express på sin utvecklingsdator. Ladda ner här: http://www.microsoft.com/downloads/details.aspx?FamilyId=C243A5AE-4BD1-4E3D-94B8-5A0F62BF7796&displaylang=en


PS. Management Studio Express har funnits ute ett tag, men jag hade helt missat att den fanns. DS.





", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "ess. Nu har även Management Studio kommit i Expressversion - och den har allt det man behöver i dagligt arbete!", + "author_id": 6, + "created_at": 1193327580000, + "created_by": 6, + "updated_at": 1193327580000, + "updated_by": 6, + "published_at": 1193327580000, + "published_by": 6 + }, + { + "id": 156, + "title": "Öppna TIFF-bilder med Adobe Acrobat istället för Windows faxvisare", + "slug": "oppna-tiff-bilder-med-adobe-acrobat-istallet-for-windows-faxvisare", + "markdown": "\r\n\r\n\r\nMånga faxservrar levererar automatiskt inskannade fax som TIFF-filer. Stödet för att visa TIFF-filer i Windows är dock ganska föråldrat och saknar många funktioner. Man kan inte använda vilken bildvisare som helst, eftersom TIFF-filer kan innehålla flera sidor. Däremot kan man använda Adobe Acrobat (det är köpversionen som gäller, tyvärr räcker inte gratisversionen Adobe Reader). En bonus är att filen automatiskt konverteras till PDF-format när man sparar den i Acrobat. PDF är ett enklare format att hantera och man vara säkrare på att det kommer att fungera om man skickar filen vidare till någon annan.\r\n\r\n\r\nGör såhär för att ändra filassociationen i Windows:\r\n\r\n\r\nHögerklicka på en TIFF-fil\r\nVälj Öppna med -> Välj program (Välj standardprogram i Vista)\r\nVälj Adobe Acrobat. Om Acrobat inte visas i listan, tryck på Bläddra och leta fram programfilen i program-katalogen.\r\nKryssa i rutan Använd alltid det här programmet för att öppna den här filtypen\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/fax.png)", + "html": "


Många faxservrar levererar automatiskt inskannade fax som TIFF-filer. Stödet för att visa TIFF-filer i Windows är dock ganska föråldrat och saknar många funktioner. Man kan inte använda vilken bildvisare som helst, eftersom TIFF-filer kan innehålla flera sidor. Däremot kan man använda Adobe Acrobat (det är köpversionen som gäller, tyvärr räcker inte gratisversionen Adobe Reader). En bonus är att filen automatiskt konverteras till PDF-format när man sparar den i Acrobat. PDF är ett enklare format att hantera och man vara säkrare på att det kommer att fungera om man skickar filen vidare till någon annan.


Gör såhär för att ändra filassociationen i Windows:



  1. Högerklicka på en TIFF-fil

  2. Välj Öppna med -> Välj program (Välj standardprogram i Vista)

  3. Välj Adobe Acrobat. Om Acrobat inte visas i listan, tryck på Bläddra och leta fram programfilen i program-katalogen.

  4. Kryssa i rutan Använd alltid det här programmet för att öppna den här filtypen


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "finns dock en mycket bättre lösning!", + "author_id": 1087, + "created_at": 1197300780000, + "created_by": 1087, + "updated_at": 1197300780000, + "updated_by": 1087, + "published_at": 1197300780000, + "published_by": 1087 + }, + { + "id": 162, + "title": "Relaying i Exchange 2007", + "slug": "relaying-i-exchange-2007", + "markdown": "\r\n\r\n\r\nAtt tillåta interna system att sända epost via en Exchangeserver har gått ifrån att vara något väldigt enkelt (och lätt att missbruka) i Exchange 2003 till att vara ganska mycket mer komplicerat i Exchange 2007.\r\n\r\n\r\nGrundregeln när det gäller relaying i Exchange 2007 är \"använd det endast om ingen annan möjlighet finns\". Alltså: Om er mjukvara, skrivare, användare etc som behöver skicka mail via Exchangservern stödjer SMTP autentiering, så skall detta alltid användas hellre än att börja öppna för relaying.\r\n\r\n\r\nIbland måste man dock ändå öppna upp för relaying och då gäller det att hålla tungan rätt i mun så att man inte råkar öppna för mycket. Exchangeteamet har en utmärkt guide för bästa tillvägagångssätt på sin blog (You had me at EHLO):\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/exchange2007.png)", + "html": "


Att tillåta interna system att sända epost via en Exchangeserver har gått ifrån att vara något väldigt enkelt (och lätt att missbruka) i Exchange 2003 till att vara ganska mycket mer komplicerat i Exchange 2007.


Grundregeln när det gäller relaying i Exchange 2007 är \"använd det endast om ingen annan möjlighet finns\". Alltså: Om er mjukvara, skrivare, användare etc som behöver skicka mail via Exchangservern stödjer SMTP autentiering, så skall detta alltid användas hellre än att börja öppna för relaying.


Ibland måste man dock ändå öppna upp för relaying och då gäller det att hålla tungan rätt i mun så att man inte råkar öppna för mycket. Exchangeteamet har en utmärkt guide för bästa tillvägagångssätt på sin blog (You had me at EHLO):


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "hange 2007.", + "author_id": 1085, + "created_at": 1198165800000, + "created_by": 1085, + "updated_at": 1198165800000, + "updated_by": 1085, + "published_at": 1198165800000, + "published_by": 1085 + }, + { + "id": 163, + "title": "Koppla EOS300D till en dator med Windows Vista", + "slug": "koppla-eos300d-till-en-dator-med-windows-vista", + "markdown": "\r\n\r\n\r\nNär jag installerade Windows Vista på min nya dator hemma för ganska precis ett år sen var det första problemet jag stötte på att datorn inte kände igen min systemkamera, Canon EOS 300D, när man kopplade den till datorn via USB-sladd. Till min stora förvåning så har Canon valt att inte släppa några Vista-drivrutiner för den (däremot finns det för alla senare modeller, från och med EOS 350D). Eftersom min dator har en kortläsare för CF-kort var det inget problem. Det blev större problem på semestern med en laptop med Vista utan kortläsare.\r\n\r\n\r\nSom tur är så finns det en lösning. Kameran har ett enklare USB-läge som kallas PTP. I menyn Setup2 finns en inställning för kommunikationsläge - ändra det från Normal till PTP. Kameran fungerar då mer som en extern hårddisk - den vänder t.ex. inte själv bilder och annat som den gör i normalläget, men den fungerar åtminstone.\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/blackeos300d.png)", + "html": "


När jag installerade Windows Vista på min nya dator hemma för ganska precis ett år sen var det första problemet jag stötte på att datorn inte kände igen min systemkamera, Canon EOS 300D, när man kopplade den till datorn via USB-sladd. Till min stora förvåning så har Canon valt att inte släppa några Vista-drivrutiner för den (däremot finns det för alla senare modeller, från och med EOS 350D). Eftersom min dator har en kortläsare för CF-kort var det inget problem. Det blev större problem på semestern med en laptop med Vista utan kortläsare.


Som tur är så finns det en lösning. Kameran har ett enklare USB-läge som kallas PTP. I menyn Setup2 finns en inställning för kommunikationsläge - ändra det från Normal till PTP. Kameran fungerar då mer som en extern hårddisk - den vänder t.ex. inte själv bilder och annat som den gör i normalläget, men den fungerar åtminstone.


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1199269200000, + "created_by": 6, + "updated_at": 1199269200000, + "updated_by": 6, + "published_at": 1199269200000, + "published_by": 6 + }, + { + "id": 166, + "title": "GPMC SP1 i Windows Server 2003 x64", + "slug": "gpmc-sp1-i-windows-server-2003-x64", + "markdown": "\r\n\r\n\r\n\r\n\r\nVARNING: En bloggbesökare har rapporterat att nedanstående kan ställa till bekymmer på en server som kör Exchange 2007. Jag har visserligen själv gjort nedanstående på Exchangemaskiner utan problem, men en varning känns ändå rättfärdigad.\r\n\r\n\r\n\r\n\r\nNågot år efter att Windows Server 2003 släpptes kom ett servicepack till Group Policy Management Console (GPMC) som gör hanteringen av grupprinciper mycket enklare. I Windows 2003 R2 ligger denna editor med som standard, men använder du 64-bitarsversionen av Windows Server 2003 så finns dock den \"nya\" editorn inte installerad. Och att få den på plats är varken enkelt eller självklart, men det går!\r\n\r\n\r\nLadda ner och installera .NET Framework 1.1. Glöm inte all läsa instruktionen som kan be dig köra ett kommando för att tillåta 32-bitars applikationer i IIS.\r\n\r\n\r\nLadda ner och installera Group Policy Management Console SP1.\r\n\r\n\r\nNär detta är gjort måste man manuellt kopiera gpmc.msc från \"%windir%\\system32\\\" till \"%windir%\\syswow64\\\".\r\n\r\n\r\nJag föredrar att starta GPMC från AD Users and Computers, för att få dem möjligheten måste jag skapa en ny genväg som startar ADUC i 32-bitarsläge:\r\n\r\n\r\n%windir%\\syswow64\\mmc.exe %systemroot%\\system32\\dsa.msc -32 back\r\n\r\n\r\nProblemet beror på lite virrvarr mellan 32 och 64-bitars versioner av MMC-snapins. Förhoppningsvis får vi en bättre lösning i ett framtida Adminpak till Windows Server 2003 x64, alternativt i Windows Server 2008.\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/windows2003logo.jpg)\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/gpmcsp1.gif)", + "html": "




VARNING: En bloggbesökare har rapporterat att nedanstående kan ställa till bekymmer på en server som kör Exchange 2007. Jag har visserligen själv gjort nedanstående på Exchangemaskiner utan problem, men en varning känns ändå rättfärdigad.


Något år efter att Windows Server 2003 släpptes kom ett servicepack till Group Policy Management Console (GPMC) som gör hanteringen av grupprinciper mycket enklare. I Windows 2003 R2 ligger denna editor med som standard, men använder du 64-bitarsversionen av Windows Server 2003 så finns dock den \"nya\" editorn inte installerad. Och att få den på plats är varken enkelt eller självklart, men det går!


Ladda ner och installera .NET Framework 1.1. Glöm inte all läsa instruktionen som kan be dig köra ett kommando för att tillåta 32-bitars applikationer i IIS.


Ladda ner och installera Group Policy Management Console SP1.


När detta är gjort måste man manuellt kopiera gpmc.msc från
\"%windir%\\system32\\\" till \"%windir%\\syswow64\\\".


Jag föredrar att starta GPMC från AD Users and Computers, för att få dem möjligheten måste jag skapa en ny genväg som startar ADUC i 32-bitarsläge:


%windir%\\syswow64\\mmc.exe %systemroot%\\system32\\dsa.msc -32 back


Problemet beror på lite virrvarr mellan 32 och 64-bitars versioner av MMC-snapins. Förhoppningsvis får vi en bättre lösning i ett framtida Adminpak till Windows Server 2003 x64, alternativt i Windows Server 2008.





", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "te installerad. Och att få den på plats inte speciellt enkelt, men det går!", + "author_id": 1085, + "created_at": 1199723700000, + "created_by": 1085, + "updated_at": 1199723700000, + "updated_by": 1085, + "published_at": 1199723700000, + "published_by": 1085 + }, + { + "id": 172, + "title": "IE7 ikon på skrivbordet i Vista", + "slug": "ie7-ikon-pa-skrivbordet-i-vista", + "markdown": "\r\n\r\n\r\nI tidigare versioner av Windows var det enkelt att lägga en snygg IE-ikon (utan genvägspil) på skrivbordet via skrivbordsinställningarna under kontrollpanelen. I Vista saknas dock denna möjlighet vilket endast lämnar användaren med möjligheten att\r\nskapa en vanlig genväg till IE.\r\n\r\n\r\n\r\n\r\nFör att få in den\r\n\"riktiga\" IE ikonen även i Vista skapar man följande nyckel i registret:\r\n\r\n\r\n\r\n[HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\HideDesktopIcons\\NewStartPanel]\r\n\"{871C5380-42A0-1069-A2EA-08002B30309D}\" (DWORD:0)\r\n\r\n\r\n(Iakta sedvanlig försiktighet när du arbetar i registret.)\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/internetexplorer.gif)", + "html": "


I tidigare versioner av Windows var det enkelt att lägga en snygg IE-ikon (utan genvägspil) på skrivbordet via skrivbordsinställningarna under kontrollpanelen. I Vista saknas dock denna möjlighet vilket endast lämnar användaren med möjligheten att
skapa en vanlig genväg till IE.


För att få in den
\"riktiga\" IE ikonen även i Vista skapar man följande nyckel i registret:


[HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\HideDesktopIcons\\NewStartPanel]

\"{871C5380-42A0-1069-A2EA-08002B30309D}\" (DWORD:0)


(Iakta sedvanlig försiktighet när du arbetar i registret.)


", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "et endast lämnar användaren med möjligheten att skapa en vanlig ikon till IE. Så här får du en \"riktig\" IE7 ikon i Vista...", + "author_id": 1085, + "created_at": 1200584460000, + "created_by": 1085, + "updated_at": 1200584460000, + "updated_by": 1085, + "published_at": 1200584460000, + "published_by": 1085 + }, + { + "id": 173, + "title": "Nätverksproblem hos Dell Optiplex 755", + "slug": "natverksproblem-hos-dell-optiplex-755", + "markdown": "\r\n\r\n\r\nDells stationära modell Optiplex 755 har i\r\nmånga fall nätverksproblem efter att Dell bytte leverantör av nätverkskort från Broadcom till Intel. Problemet visar sig i att datorn ofta rapporterar att Nätverkskabeln ej är ansluten. Nätverkskontakten återupprättas efter några sekunder.\r\n\r\n\r\nDell har ännu inte åtgärdat\r\nproblemet men de har gått ut med ett tips att inaktivera State Control (kontrollen av mediastatus):\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nStarta om datorn och håll tryck CTRL+P vid IntelBIOS för att komma in i MEBx (Intel® Management Engine BIOS Extension)\r\nStandardlösenordet är “admin”\r\nVälj ”Change Intel(R) ME Password”\r\nDet nya lösenordet du väljer måste vara tämligen avancerat (åtta bokstäver, små och stora, en siffra och slutligen ett tecken.)\r\nNär du har valt ditt lösenord öppnar du ”Intel(R) ME Configuration”\r\n\r\nVälj “Intel(R) State Control”\r\nVälj “Disable”\r\nDatorn startar om sig och problemet är i bästa fall avhjälpt.\r\n\r\nVissa har även fått rådet av Dell att stänga av Flow control i egenskaperna för nätverkskortet (under avancerat).\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/optiplex755.png)", + "html": "


Dells stationära modell Optiplex 755 har i
många fall nätverksproblem efter att Dell bytte leverantör av nätverkskort från Broadcom till Intel. Problemet visar sig i att datorn ofta rapporterar att Nätverkskabeln ej är ansluten. Nätverkskontakten återupprättas efter några sekunder.


Dell har ännu inte åtgärdat
problemet men de har gått ut med ett tips att inaktivera State Control (kontrollen av mediastatus):




  • Starta om datorn och håll tryck CTRL+P vid IntelBIOS för att komma in i MEBx (Intel® Management Engine BIOS Extension)

  • Standardlösenordet är “admin”

  • Välj ”Change Intel(R) ME Password”

  • Det nya lösenordet du väljer måste vara tämligen avancerat (åtta bokstäver, små och stora, en siffra och slutligen ett tecken.)

  • När du har valt ditt lösenord öppnar du ”Intel(R) ME Configuration”

  • Välj “Intel(R) State Control”

  • Välj “Disable”

  • Datorn startar om sig och problemet är i bästa fall avhjälpt.

  • Vissa har även fått rådet av Dell att stänga av Flow control i egenskaperna för nätverkskortet (under avancerat).


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": " ansluten”. Nätverkskontakten återupprättas efter några sekunder. Här är lite tips på åtgärder.", + "author_id": 1088, + "created_at": 1201096440000, + "created_by": 1088, + "updated_at": 1201096440000, + "updated_by": 1088, + "published_at": 1201096440000, + "published_by": 1088 + }, + { + "id": 175, + "title": "Inaktivitetslås på SE M600i efter uppgradering till Exchange 2007 SP1", + "slug": "inaktivitetslas-pa-se-m600i-efter-uppgradering-till-exchange-2007-sp1", + "markdown": "\r\n\r\n\r\nNär man uppgraderar Exchange Server 2007 till SP1 läggs det automatiskt till en policy för säkerhetsinställningar på telefoner som synkroniserar med Active Sync. Oavsett vilken inställning man gör i denna så aktiveras ett inaktivitetslås på M600i som inte går att avaktivera. Här är en workararound...\r\n\r\n\r\nFör att avaktivera inaktivitetslåset på M600i krävs \"dessvärre\" följande:\r\n\r\n\r\n1. Ta bort Defaultpolicyn i Exchange 2007\r\nDetta kan bara göras via Management Shell. Kommandot är:\r\n\r\n\r\nRemove-ActiveSyncMailboxPolicy -identity \"Default\"\r\n\r\n\r\nNotera att användaren med en M600i inte är associerad med någon annan policy, tricket är att användaren inte får vara kopplad till en policy. om användaren ligger kopplad på en annan policy kan du flytta den till en temporär policy som du sedan tar bort. Du kontrollerar detta via användarens mailbox (properties på Active Sync från användarens brevlåda).\r\n\r\n\r\n2. Starta om IIS (\"iisreset\" från kommandoraden)\r\n\r\n\r\n3. I telefonen går du sedan in i Active Sync och väljer att tömma all lokal Exchangedata (under Avancerat-fliken). Kontrollera också att du har senaste versionen av AS (fn. 2.012), uppgradera annars från SE:s hemsida.\r\n\r\n\r\n4. Kör en synkronisering\r\n\r\n\r\n5. Starta om telefonen\r\n\r\n\r\n6. Avaktivera inaktivitetslåset från kontrollpanelen->Säkerhet\r\n\r\n\r\nNackdelen med denna modell är att man inte kan ha en defaultpolicy på servern så länge som man vill ha M600i i sin organaisation. SonyEricsson P1i uppvisar samma problem, men här finns en firmwareuppgradering som löser problemet.\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/sem600i.png)", + "html": "


    När man uppgraderar Exchange Server 2007 till SP1 läggs det automatiskt till en policy för säkerhetsinställningar på telefoner som synkroniserar med Active Sync. Oavsett vilken inställning man gör i denna så aktiveras ett inaktivitetslås på M600i som inte går att avaktivera. Här är en workararound...


    För att avaktivera inaktivitetslåset på M600i krävs \"dessvärre\" följande:


    1. Ta bort Defaultpolicyn i Exchange 2007
    Detta kan bara göras via Management Shell. Kommandot är:


    Remove-ActiveSyncMailboxPolicy -identity \"Default\"


    Notera att användaren med en M600i inte är associerad med någon annan policy, tricket är att användaren inte får vara kopplad till en policy. om användaren ligger kopplad på en annan policy kan du flytta den till en temporär policy som du sedan tar bort. Du kontrollerar detta via användarens mailbox (properties på Active Sync från användarens brevlåda).


    2. Starta om IIS (\"iisreset\" från kommandoraden)


    3. I telefonen går du sedan in i Active Sync och väljer att tömma all lokal Exchangedata (under Avancerat-fliken). Kontrollera också att du har senaste versionen av AS (fn. 2.012), uppgradera annars från SE:s hemsida.


    4. Kör en synkronisering


    5. Starta om telefonen


    6. Avaktivera inaktivitetslåset från kontrollpanelen->Säkerhet


    Nackdelen med denna modell är att man inte kan ha en defaultpolicy på servern så länge som man vill ha M600i i sin organaisation. SonyEricsson P1i uppvisar samma problem, men här finns en firmwareuppgradering som löser problemet.


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "enna så aktiveras ett inaktivitetslås på M600i som inte går att avaktivera. Här är en workararound...", + "author_id": 1085, + "created_at": 1201518900000, + "created_by": 1085, + "updated_at": 1201518900000, + "updated_by": 1085, + "published_at": 1201518900000, + "published_by": 1085 + }, + { + "id": 181, + "title": "Indexera och söka i PDF-filer i SharePoint", + "slug": "indexera-och-soka-i-pdf-filer-i-sharepoint", + "markdown": "\r\n\r\n\r\nMicrosoft Office SharePoint Server (MOSS) 2007 måste kompletteras för att möjliggöra sökning i PDF-filer.\r\n\r\n\r\nLättaste och modernaste stödet får man genom att använda det ifilter som följer med senaste versionen (eller åtminstone senare än 8.1) av Acrobat Reader.\r\n\r\n\r\nInstallera Acrobat Reader.\r\nStäll in i Sharepoint att även inkludera PDF-filer i sökningen:\r\n> SharePoint 3.0 Central Administration -> Search Settings -> File Types -> New File Type (Lägg till pdf här)\r\n\r\nÄndra följande registerinställning: (ta alltid en backup och se upp när du ändrar i registret)\r\nHKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Office server\\12.0\\Search\\Setup\\ContentIndexCommon\\Filters\\Extension\\.pdf\r\nDefault -> {E8978DA6-047F-4E3D-9C78-CDBE46041603}\r\nLägg till mappen för Acrobat Reader (ex: ”c:\\Program Files\\Adobe\\Reader 8.0\\Reader”) till System Path (högerklick på den här datorn, egenskaper, avancerat, systemvariabler).\r\nStarta om söktjänsten (net stop osearch / net start osearch)\r\nLåt Sharepoint indexera om innehållet.\r\nKlart!\r\n\r\n\r\n\r\nOBS:\r\nHar du installerat SharePoint på en 64-bitarsplattform blir det hela ett snäpp knepigare, men det är inte omöjligt! Stödet för 64-bitars ifilter (krävs för 64-bitars SharePoint) finns inte med i Acrobat Reader per default utan måste installeras enligt en blogg hos Adobe:http://labs.adobe.com/wiki/index.php/PDF_iFilter_8_-_64-bit_Support\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/office2007logo.png)", + "html": "


    Microsoft Office SharePoint Server (MOSS) 2007 måste kompletteras för att möjliggöra sökning i PDF-filer.


    Lättaste och modernaste stödet får man genom att använda det ifilter som följer med senaste versionen (eller åtminstone senare än 8.1) av Acrobat Reader.



    • Installera Acrobat Reader.

    • Ställ in i Sharepoint att även inkludera PDF-filer i sökningen:

      > SharePoint 3.0 Central Administration -> Search Settings -> File Types -> New File Type (Lägg till pdf här)


    • Ändra följande registerinställning: (ta alltid en backup och se upp när du ändrar i registret)
      HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Office server\\12.0\\Search\\Setup\\ContentIndexCommon\\Filters\\Extension\\.pdf
      Default -> {E8978DA6-047F-4E3D-9C78-CDBE46041603}

    • Lägg till mappen för Acrobat Reader (ex: ”c:\\Program Files\\Adobe\\Reader 8.0\\Reader”) till System Path (högerklick på den här datorn, egenskaper, avancerat, systemvariabler).

    • Starta om söktjänsten (net stop osearch / net start osearch)

    • Låt Sharepoint indexera om innehållet.

    • Klart!



    OBS:

    Har du installerat SharePoint på en 64-bitarsplattform blir det hela ett snäpp knepigare, men det är inte omöjligt! Stödet för 64-bitars ifilter (krävs för 64-bitars SharePoint) finns inte med i Acrobat Reader per default utan måste installeras enligt en blogg hos Adobe:

    http://labs.adobe.com/wiki/index.php/PDF_iFilter_8_-_64-bit_Support


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1090, + "created_at": 1202817540000, + "created_by": 1090, + "updated_at": 1202817540000, + "updated_by": 1090, + "published_at": 1202817540000, + "published_by": 1090 + }, + { + "id": 183, + "title": "Konsolåtkomst med Remote Desktop i Vista SP1", + "slug": "konsolatkomst-med-remote-desktop-i-vista-sp1", + "markdown": "\r\n\r\n\r\nEfter att ha uppgraderat till Vista SP1 så märker man snabbt att klienten för Remote Desktop fått ganska mycket ny funktionalitet. Tex så finner man stöd för TS Gateway (kommande funktion i Windows Server 2008) samt en bättre hantering av autentiering.\r\n\r\n\r\nDock blev jag snabbt rädd när jag upptäckte att möjligheten få tillgång till konsolsessionen på en fjärrserver genom att skicka med switchen /console inte längre fungerade. Dock visar det sig att funktionen finns kvar men att kommandoraden är numera mstsc.exe /admin.\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/vista.png)", + "html": "


    Efter att ha uppgraderat till Vista SP1 så märker man snabbt att klienten för Remote Desktop fått ganska mycket ny funktionalitet. Tex så finner man stöd för TS Gateway (kommande funktion i Windows Server 2008) samt en bättre hantering av autentiering.


    Dock blev jag snabbt rädd när jag upptäckte att möjligheten få tillgång till konsolsessionen på en fjärrserver genom att skicka med switchen /console inte längre fungerade. Dock visar det sig att funktionen finns kvar men att kommandoraden är numera mstsc.exe /admin.


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1085, + "created_at": 1203680400000, + "created_by": 1085, + "updated_at": 1203680400000, + "updated_by": 1085, + "published_at": 1203680400000, + "published_by": 1085 + }, + { + "id": 186, + "title": "Så får man Outlook 2007 att sluta fråga om certifikat", + "slug": "sa-far-man-outlook-2007-att-sluta-fraga-om-certifikat", + "markdown": "\r\n\r\n\r\nGrundförutsättningar:\r\n\r\n\r\nDu använder Outlook Web Access via HTTPS på en domän, t.ex. mail.company.com\r\nDina användare ansluter med Outlook 2007 RPC HTTPS\r\nDina användare får ett felmeddelande om att det är problem med ett certifikat, som de behöver trycka ”ja” på varje gång.\r\n\r\n\r\nFelmeddelandet handlar egentligen om att Outlook försöker hitta inställningar för automatisk konfiguration (Autodiscover). Detta är ju egentligen en bra funktion, som du kan ha användning för både internt och externt i företaget.Så här gör du enklast för att slå på Outlook Autodiscover, och samtidigt slippa felmeddelandet om certifikatproblem:\r\n\r\n\r\n\r\nGet-ClientAccessServer -Identity SERVER_INTERNAL_NAME | FLSet-ClientAccessServer -Identity SERVER_INTERNAL_NAME -AutoDiscoverServiceInternalUri https://mail.company.com/Autodiscover/Autodiscover.xml\r\n\r\n\r\n\r\nOch så till själva tricket: För att slippa installera ett certifikat med två namn (autodiscover.company.com samt mail.company.com) ställer vi in SRV-records i vår externa DNS enligt följande:\r\n\r\n\r\n\r\nService: _autodiscoverProtocol: _tcpPort Number: 443Host: mail.company.com\r\n\r\n\r\n\r\nMer om detta finns att läsa på:\r\n\r\n\r\n\r\nhttp://www.shudnow.net/2007/08/10/outlook-2007-certificate-error/\r\n\r\nhttp://support.microsoft.com/kb/940881/en-us\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/outlook-logo2.png)", + "html": "


    Grundförutsättningar:



    • Du använder Outlook Web Access via HTTPS på en domän, t.ex. mail.company.com

    • Dina användare ansluter med Outlook 2007 RPC HTTPS

    • Dina användare får ett felmeddelande om att det är problem med ett certifikat, som de behöver trycka ”ja” på varje gång.


    Felmeddelandet handlar egentligen om att Outlook försöker hitta inställningar för automatisk konfiguration (Autodiscover). Detta är ju egentligen en bra funktion, som du kan ha användning för både internt och externt i företaget.
    Så här gör du enklast för att slå på Outlook Autodiscover, och samtidigt slippa felmeddelandet om certifikatproblem:



    Get-ClientAccessServer -Identity SERVER_INTERNAL_NAME | FL
    Set-ClientAccessServer -Identity SERVER_INTERNAL_NAME -AutoDiscoverServiceInternalUri https://mail.company.com/Autodiscover/Autodiscover.xml


    Och så till själva tricket: För att slippa installera ett certifikat med två namn (autodiscover.company.com samt mail.company.com) ställer vi in SRV-records i vår externa DNS enligt följande:



    Service: _autodiscover
    Protocol: _tcp
    Port Number: 443
    Host: mail.company.com


    Mer om detta finns att läsa på:



    http://www.shudnow.net/2007/08/10/outlook-2007-certificate-error/


    http://support.microsoft.com/kb/940881/en-us


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "det!", + "author_id": 1090, + "created_at": 1204734420000, + "created_by": 1090, + "updated_at": 1204734420000, + "updated_by": 1090, + "published_at": 1204734420000, + "published_by": 1090 + }, + { + "id": 196, + "title": "Problem med Hyper-V efter RC0", + "slug": "problem-med-hyper-v-efter-rc0", + "markdown": "\r\n\r\n\r\nHyper-V är den nya virtualiserings- plattformen i Windows Server 2008. Produkten hann inte bli helt klart inför släppet av WS2k8, men skeppas ändå med i en betaversion. Härom veckan släpptes den första releasekandidaten (RC0) och efter installation visar det sig att man kan få problem med att lägga till nya virtuella maskiner. I mitt fall kunde jag skapa maskinerna, men när jag försökte starta dem fick jag följande felmeddelande:\r\n\r\n\r\n\r\nMicrosoft Synthetic Ethernet Port (Instance ID {9C5C0CF3-827C-4DB0-.....}): Failed to Power On with Error 'The specified network resource or device is no longer available.'\r\n\r\n\r\n\r\nLösningen på detta är att ge kontot NETWORK SERVICE \"Read & Execute\" rättigheter på mappen där config-filerna de virtuella maskinerna ligger.\r\n\r\n\r\nDetta lär förhoppningsvis vara åtgärdat i kommande releasekandidater.\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/vista.png)", + "html": "


    Hyper-V är den nya virtualiserings- plattformen i Windows Server 2008. Produkten hann inte bli helt klart inför släppet av WS2k8, men skeppas ändå med i en betaversion. Härom veckan släpptes den första releasekandidaten (RC0) och efter installation visar det sig att man kan få problem med att lägga till nya virtuella maskiner. I mitt fall kunde jag skapa maskinerna, men när jag försökte starta dem fick jag följande felmeddelande:



    Microsoft Synthetic Ethernet Port (Instance ID {9C5C0CF3-827C-4DB0-.....}): Failed to Power On with Error 'The specified network resource or device is no longer available.'


    Lösningen på detta är att ge kontot NETWORK SERVICE \"Read & Execute\" rättigheter på mappen där config-filerna de virtuella maskinerna ligger.


    Detta lär förhoppningsvis vara åtgärdat i kommande releasekandidater.


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1085, + "created_at": 1207928400000, + "created_by": 1085, + "updated_at": 1207928400000, + "updated_by": 1085, + "published_at": 1207928400000, + "published_by": 1085 + }, + { + "id": 198, + "title": "FireShot - Smidigt Firefoxplugin för stora skärmdumpar", + "slug": "fireshot---smidigt-firefoxplugin-for-stora-skarmdumpar", + "markdown": "\r\n\r\n\r\nAtt skapa skärmdumpar med en webbsidas hela innehåll har alltid varit förknippat med en del trassel, framförallt när det gäller innehållet på väldigt vertikalt stora sidor som inte i sin helhet fått plats på skärmen. FireShot är ett gratis plugin till FireFox som löser problemet på ett mycket snyggt sätt.\r\n\r\n\r\nGenom att aktivera programmet får man en drös olika val om vad man vill exportera och till vilken destination (fil, clipboard, uppladdade till en server, förvald editor etc.), och resultatet blir glimrande!\r\n\r\n\r\nGenom den inbyggda editorn kan man enkelt lägga till kommentarer, pilar, text etc, vilket gör det väldigt smidigt att använda när man tex arbetar med korrektur.\r\n\r\n\r\nTillägget hämtas från Mozilla.\r\n\r\n\r\nTips: Bredden på den skärmdump man vill skapa ställs enklast in genom att justera Firefoxfönstret till önskad storlek.\r\n\r\n\r\n\r\nEtt annat Firefoxplugin som gör ungefär samma sak är Screengrab!\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/fireshot_logo.png)\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/fireshot1.png)", + "html": "


    Att skapa skärmdumpar med en webbsidas hela innehåll har alltid varit förknippat med en del trassel, framförallt när det gäller innehållet på väldigt vertikalt stora sidor som inte i sin helhet fått plats på skärmen. FireShot är ett gratis plugin till FireFox som löser problemet på ett mycket snyggt sätt.


    Genom att aktivera programmet får man en drös olika val om vad man vill exportera och till vilken destination (fil, clipboard, uppladdade till en server, förvald editor etc.), och resultatet blir glimrande!


    Genom den inbyggda editorn kan man enkelt lägga till kommentarer, pilar, text etc, vilket gör det väldigt smidigt att använda när man tex arbetar med korrektur.


    Tillägget hämtas från Mozilla.


    Tips: Bredden på den skärmdump man vill skapa ställs enklast in genom att justera Firefoxfönstret till önskad storlek.



    Ett annat Firefoxplugin som gör ungefär samma sak är Screengrab!





    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1085, + "created_at": 1208183400000, + "created_by": 1085, + "updated_at": 1208183400000, + "updated_by": 1085, + "published_at": 1208183400000, + "published_by": 1085 + }, + { + "id": 200, + "title": "Huawei E220 + Activesync = Trubbel", + "slug": "huawei-e220--activesync--trubbel", + "markdown": "\r\n\r\n\r\nHuawei E220 är ett av de vanligast förekommande 3g-donglarna på marknaden och skickas ofta med mobila bredbandsabbonemang från teleoperatörerna. Efter att ha installerat den medföljande programvaran Mobile Connect i Windows XP kan man dock få problem om man också använder windowsversionen av Activesync (v4 och senare). Vid försök till synkronisering ger AS följande felprompt:\r\n\r\n\r\n\r\nCritical communications services have failed to start. To correct the error, quit all programs and restart Windows.\r\n\r\n\r\n\r\nFelet verkar ligga i att någonting i E220-mjukvaran (drivern eller Mobile Connect) hindrar AS från att starta sitt kommunikationsprotokoll RAPI. Jag lyckades lösa problemet genom att ändra följande parameter i registeret från 1 till 0:\r\n\r\n\r\nHKLM\\SYSTEM\\CurrentControlSet\\Services\\AFD\\Parameters\r\nDisable Address Sharing DWORD 0x00000000 (0)\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/huaweie220.png)", + "html": "


    Huawei E220 är ett av de vanligast förekommande 3g-donglarna på marknaden och skickas ofta med mobila bredbandsabbonemang från teleoperatörerna. Efter att ha installerat den medföljande programvaran Mobile Connect i Windows XP kan man dock få problem om man också använder windowsversionen av Activesync (v4 och senare). Vid försök till synkronisering ger AS följande felprompt:



    Critical communications services have failed to start. To correct the error, quit all programs and restart Windows.


    Felet verkar ligga i att någonting i E220-mjukvaran (drivern eller Mobile Connect) hindrar AS från att starta sitt kommunikationsprotokoll RAPI. Jag lyckades lösa problemet genom att ändra följande parameter i registeret från 1 till 0:


    HKLM\\SYSTEM\\CurrentControlSet\\Services\\AFD\\Parameters

    Disable Address Sharing DWORD 0x00000000 (0)


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "vesync.", + "author_id": 1085, + "created_at": 1208790000000, + "created_by": 1085, + "updated_at": 1208790000000, + "updated_by": 1085, + "published_at": 1208790000000, + "published_by": 1085 + }, + { + "id": 201, + "title": "Ny version av AVG Free", + "slug": "ny-version-av-avg-free", + "markdown": "\r\n\r\n\r\n\r\nAVG Free är mitt favoritalternativ bland gratis antivirusprogram. Tommy K Johansson tipsar på sin blogg om att det har kommit ut i helt ny version (8.0) med nya funktioner för antispyware och säkerhetskontroll av webblänkar. AVG Free innehåller inte alla de funktioner som köpversionen har (anti-rootkit, spamskydd m.m. och många fler möjligheter till att ändra inställningar) men har allt det man normalt behöver av ett antivirus i hemmamiljö.\r\n\r\n\r\nDet finns dock ett irritationsmoment i nya versionen, som hänger ihop med länkkontrollen. Funktionen SafeSearch kontrollerar alla sökresultat i Google och andra sökmotorer efter phishing och visar en grön ikon vid de länkar som är ofarliga. Som van surfare vill man dock snart stänga av den funktionen. När man stänger av funktionen så visas dock en varningsmeddelande i AVGs ikon, vilket gör att man lätt missar andra fel som kan uppstå (t.ex. missade uppdateringar). Det finns två sätt att fixa detta:\r\n\r\n\r\n(svåra sättet) Installera AVG Free utan LinkScanner/SafeSearch. Det gör man med en parameter till installationsprogrammet: avg_free_stf_*.exe /REMOVE_FEATURE fea_AVG_SafeSurf /REMOVE_FEATURE fea_AVG_SafeSearch\r\n(lätta sättet) Stäng av AVGs webbläsar-plugin för SafeSearch. I IE öppnar man Tools->Manage Add-ons, i FireFox öppnar man Tools->Add-ons. I listan över tillägg letar man upp AVG SafeSearch och avaktiverar.\r\n\r\n\r\n\r\nMed denna smärre irritation ur vägen kan jag bara rekommendera AVG Free 8!\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/avg-logo.png)", + "html": "



    AVG Free är mitt favoritalternativ bland gratis antivirusprogram. Tommy K Johansson tipsar på sin blogg om att det har kommit ut i helt ny version (8.0) med nya funktioner för antispyware och säkerhetskontroll av webblänkar. AVG Free innehåller inte alla de funktioner som köpversionen har (anti-rootkit, spamskydd m.m. och många fler möjligheter till att ändra inställningar) men har allt det man normalt behöver av ett antivirus i hemmamiljö.


    Det finns dock ett irritationsmoment i nya versionen, som hänger ihop med länkkontrollen. Funktionen SafeSearch kontrollerar alla sökresultat i Google och andra sökmotorer efter phishing och visar en grön ikon vid de länkar som är ofarliga. Som van surfare vill man dock snart stänga av den funktionen. När man stänger av funktionen så visas dock en varningsmeddelande i AVGs ikon, vilket gör att man lätt missar andra fel som kan uppstå (t.ex. missade uppdateringar). Det finns två sätt att fixa detta:



    1. (svåra sättet) Installera AVG Free utan LinkScanner/SafeSearch. Det gör man med en parameter till installationsprogrammet: avg_free_stf_*.exe /REMOVE_FEATURE fea_AVG_SafeSurf /REMOVE_FEATURE fea_AVG_SafeSearch

    2. (lätta sättet) Stäng av AVGs webbläsar-plugin för SafeSearch. I IE öppnar man Tools->Manage Add-ons, i FireFox öppnar man Tools->Add-ons. I listan över tillägg letar man upp AVG SafeSearch och avaktiverar.



    Med denna smärre irritation ur vägen kan jag bara rekommendera AVG Free 8!


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1209380220000, + "created_by": 6, + "updated_at": 1209380220000, + "updated_by": 6, + "published_at": 1209380220000, + "published_by": 6 + }, + { + "id": 204, + "title": "Forefront saboterar IIS 7", + "slug": "forefront-saboterar-iis-7", + "markdown": "\r\n\r\n\r\nDet finns ett fel i Microsofts antivirus-program Forefront som resulterar i att det med slumpvis mellanrum förstör inställningsfilen för IIS 7. Det resulterar i att ens webserver helt lägger av att fungera, så till den grad att man inte ens kan administrera den via administrationsverktyget i kontrollpanelen. Felmeddelandet man får är \"Error: Configuration file is not well-formed XML\".\r\n\r\n\r\nDetta beror tydligen på att Forefront helt enkelt inte hanterar filer på rätt sätt i vissa situationer och att de då blir korrupta när det finns andra processer som läser eller skriver till dem. I det här fallet så är det filen C:\\Windows\\System32\\inetsrv\\config\\applicationHost.config som gått sönder. Medans MS jobbar på en fix på problemet kan man utföra följande för att stänga av det här beteendet:\r\n\r\n\r\nÖppna regedit\r\nSkapa nyckeln HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\MpFilter\\Parameters\r\nLägg till ett DWORD-värde med namnet \"ScanOnCleanup\" och sätt det till 0.\r\nStarta om Forefront/OneCare\r\n\r\n\r\nMer info om detta hittar du på den officiella IIS-bloggen\r\n\r\n\r\nDet står inte så mycket mer om det än vad som här nämnts, så frågan är om detta är ett problem som endast gäller den ovan nämnda XML-filen, eller om det finns risk att andra filer på systemet också blir korrupta av Forefront. Därför känns det säkrast att genomföra fixen även om man inte kör IIS, åtminstone fram tills dess att Microsoft utkommit med mer information.\r\n\r\n\r\nOm du redan har fått din applicationHost.config fil förstörd så är det dock så att Windows gör en backup av den varje gång du ändrar i den och lägger denna i C:\\inetpub\\history. Därifrån kan man då kopiera en tidigare version och således återställa sin inställning.\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/hex_icon.png)", + "html": "


    Det finns ett fel i Microsofts antivirus-program Forefront som resulterar i att det med slumpvis mellanrum förstör inställningsfilen för IIS 7. Det resulterar i att ens webserver helt lägger av att fungera, så till den grad att man inte ens kan administrera den via administrationsverktyget i kontrollpanelen. Felmeddelandet man får är \"Error: Configuration file is not well-formed XML\".


    Detta beror tydligen på att Forefront helt enkelt inte hanterar filer på rätt sätt i vissa situationer och att de då blir korrupta när det finns andra processer som läser eller skriver till dem. I det här fallet så är det filen C:\\Windows\\System32\\inetsrv\\config\\applicationHost.config som gått sönder. Medans MS jobbar på en fix på problemet kan man utföra följande för att stänga av det här beteendet:



    1. Öppna regedit

    2. Skapa nyckeln HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\MpFilter\\Parameters

    3. Lägg till ett DWORD-värde med namnet \"ScanOnCleanup\" och sätt det till 0.

    4. Starta om Forefront/OneCare


    Mer info om detta hittar du på den officiella IIS-bloggen


    Det står inte så mycket mer om det än vad som här nämnts, så frågan är om detta är ett problem som endast gäller den ovan nämnda XML-filen, eller om det finns risk att andra filer på systemet också blir korrupta av Forefront. Därför känns det säkrast att genomföra fixen även om man inte kör IIS, åtminstone fram tills dess att Microsoft utkommit med mer information.


    Om du redan har fått din applicationHost.config fil förstörd så är det dock så att Windows gör en backup av den varje gång du ändrar i den och lägger denna i C:\\inetpub\\history. Därifrån kan man då kopiera en tidigare version och således återställa sin inställning.


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "rmed XML”.", + "author_id": 1086, + "created_at": 1210328640000, + "created_by": 1086, + "updated_at": 1210328640000, + "updated_by": 1086, + "published_at": 1210328640000, + "published_by": 1086 + }, + { + "id": 213, + "title": "Hyper-V RTM", + "slug": "hyper-v-rtm", + "markdown": "\r\n\r\n\r\nPå Maria Lundahls blogg läser jag till stor glädje att Microsofts virtualiseringsplattform Hyper-V inatt släppts i RTM-version! Vi har kört produkten sedan första releasekandidaten och trivs mycket bra med den, utvärderingen har dock dragits med några buggar och problem som nu förhoppningsvis skall vara borta.\r\n\r\n\r\nUppdateringen kommer att släppas via Windows Update för Windows Server 2008 den 8 juli, men går alltså redan nu att ladda ner härifrån:\r\n\r\n\r\n\r\nhttp://www.microsoft.com/downloads/details.aspx?FamilyId=F3AB3D4B-63C8-4424-A738-BADED34D24ED&displaylang=en\r\n\r\n\r\n\r\nUppgraderingsdags!\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/ws2008.png)", + "html": "


    Maria Lundahls blogg läser jag till stor glädje att Microsofts virtualiseringsplattform Hyper-V inatt släppts i RTM-version! Vi har kört produkten sedan första releasekandidaten och trivs mycket bra med den, utvärderingen har dock dragits med några buggar och problem som nu förhoppningsvis skall vara borta.


    Uppdateringen kommer att släppas via Windows Update för Windows Server 2008 den 8 juli, men går alltså redan nu att ladda ner härifrån:



    http://www.microsoft.com/downloads/details.aspx?FamilyId=F3AB3D4B-63C8-4424-A738-BADED34D24ED&displaylang=en


    Uppgraderingsdags!


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1085, + "created_at": 1214568000000, + "created_by": 1085, + "updated_at": 1214568000000, + "updated_by": 1085, + "published_at": 1214568000000, + "published_by": 1085 + }, + { + "id": 219, + "title": "Batteriproblem med iPhone och Exchange-konton", + "slug": "batteriproblem-med-iphone-och-exchange-konton", + "markdown": "\r\n\r\n\r\nEfter tisdagens hyllning av iPhone så vände sig telefongudarna emot\r\nmig igår. Jag gick från kontoret med en fulladdad telefon vid lunch och\r\ntvå timmar senare var batteriet slut. Visst, batteritiden är inte så\r\nimponerande men två timmar är ju bara löjligt. Jag provade att starta\r\nom, att ladda batteriet extra länge över natten o.s.v. med problemet\r\nfanns kvar idag. Laddning tog också extra länge.\r\n\r\n\r\nDet rimliga\r\nverkade vara att någon applikation hade hängt sig och drog\r\nprocessorkraft hela tiden (telefonen var rätt varm hela tiden). Jag provade att radera några misstänkta applikationer, stängde av 3G, ställde datahämtning på manuell men inget hjälpte.\r\n\r\n\r\nTill slut upptäckte jag av en slump att epostprogrammet kollade\r\nefter nya epost hela tiden. En ny uppkoppling var femte, tionde sekund\r\nungefär - trots att hämtningen var satt på manuell. Efter lite mer\r\nfokuserad sökning på internet hittade jag fler med samma problem.\r\nTydligen finns ett problem med Exchange-kopplade epostkonton och\r\neventuellt firmware-uppgraderingen till 2.0.1.\r\n\r\n\r\nLösningen: ta bort mailkontot och lägg till det på nytt. Det här\r\nkänns inte som någon vidare permanent lösning, men har åtminstone löst\r\nmina batteriproblem tills vidare.\r\n\r\n\r\n\r\nVärldens bästa telefon, men helt klart inte världens buggfriaste :-)\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/battery.png)", + "html": "


    Efter tisdagens hyllning av iPhone så vände sig telefongudarna emot
    mig igår. Jag gick från kontoret med en fulladdad telefon vid lunch och
    två timmar senare var batteriet slut. Visst, batteritiden är inte så
    imponerande men två timmar är ju bara löjligt. Jag provade att starta
    om, att ladda batteriet extra länge över natten o.s.v. med problemet
    fanns kvar idag. Laddning tog också extra länge.


    Det rimliga
    verkade vara att någon applikation hade hängt sig och drog
    processorkraft hela tiden (telefonen var rätt varm hela tiden). Jag provade att radera några misstänkta applikationer, stängde av 3G, ställde datahämtning på manuell men inget hjälpte.


    Till slut upptäckte jag av en slump att epostprogrammet kollade
    efter nya epost hela tiden. En ny uppkoppling var femte, tionde sekund
    ungefär - trots att hämtningen var satt på manuell. Efter lite mer
    fokuserad sökning på internet hittade jag fler med samma problem.
    Tydligen finns ett problem med Exchange-kopplade epostkonton och
    eventuellt firmware-uppgraderingen till 2.0.1.


    Lösningen: ta bort mailkontot och lägg till det på nytt. Det här
    känns inte som någon vidare permanent lösning, men har åtminstone löst
    mina batteriproblem tills vidare.



    Världens bästa telefon, men helt klart inte världens buggfriaste :-)


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "äntan på en riktig buggfix från Apple finns dock en enkel lösning.", + "author_id": 6, + "created_at": 1218903660000, + "created_by": 6, + "updated_at": 1218903660000, + "updated_by": 6, + "published_at": 1218903660000, + "published_by": 6 + }, + { + "id": 222, + "title": "IIS-problem vid installation av SQL Server 2005 i Windows Server 2008", + "slug": "iis-problem-vid-installation-av-sql-server-2005-i-windows-server-2008", + "markdown": "\r\n\r\n\r\nVid installation av SQL Server 2005 i en nyinstallerad Windows Server 2008 misslyckades IIS-delen av prerequisite-kontrollen med följande felmeddelande:\r\n\r\n\r\n\r\nMicrosoft Internet Information Services (IIS) is either not installed or is disabled. IIS is required by some SQL Server features. Without IIS, some SQL Server features will not be available for installation. To install all SQL Server features, install IIS from Add or Remove Programs in Control Panel or enable the IIS service through the Control Panel if it is already installed, and then run SQL Server Setup again. For a list of features that depend on IIS, see Features Supported by Editions of SQL Server in Books Online. \r\n\r\n\r\n\r\nProblemet beror på att den IIS6 kompatibilitet krävs för SQL Server 2005 inte installeras om man bara godkänner IIS-installationens förvalda komponenter. För att installera de delar som SQL Server 2005 behöver väljer du att administrera IIS i Server Manager och lägger till följande Role Services: \r\n\r\nIIS 6 Metabase Compatability\r\nIIS 6 WMI Compatability\r\n\r\nInstallern bör nu ge grönt ljus gällande IIS och förutsatt att alla andra kontroller också ser bra ut bör du komma vidare i din installation. Glöm inte att applicera (minst) SQL 2005 SP2 direkt efter installation då det krävs för Windows Server 2008.\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/ws2008.png)\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/sql2005onwin2008_1.png)\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/sql2005onwin2008_2.png)\r\n\r\n\r\nTack till \"The Sean Blog\" på Technet för lösningen på detta, Sean har också en komplett lista över vilka IIS-komponenter som krävs för SQL2005/Win2k8.\r\n\r\n", + "html": "


    Vid installation av SQL Server 2005 i en nyinstallerad Windows Server 2008 misslyckades IIS-delen av prerequisite-kontrollen med följande felmeddelande:



    Microsoft Internet Information Services (IIS) is either not installed or is disabled. IIS is required by some SQL Server features. Without IIS, some SQL Server features will not be available for installation. To install all SQL Server features, install IIS from Add or Remove Programs in Control Panel or enable the IIS service through the Control Panel if it is already installed, and then run SQL Server Setup again. For a list of features that depend on IIS, see Features Supported by Editions of SQL Server in Books Online.


    Problemet beror på att den IIS6 kompatibilitet krävs för SQL Server 2005 inte installeras om man bara godkänner IIS-installationens förvalda komponenter. För att installera de delar som SQL Server 2005 behöver väljer du att administrera IIS i Server Manager och lägger till följande Role Services:


  • IIS 6 Metabase Compatability

  • IIS 6 WMI Compatability

  • Installern bör nu ge grönt ljus gällande IIS och förutsatt att alla andra kontroller också ser bra ut bör du komma vidare i din installation. Glöm inte att applicera (minst) SQL 2005 SP2 direkt efter installation då det krävs för Windows Server 2008.











    Tack till \"The Sean Blog\" på Technet för lösningen på detta, Sean har också en komplett lista över vilka IIS-komponenter som krävs för SQL2005/Win2k8.


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1085, + "created_at": 1219419000000, + "created_by": 1085, + "updated_at": 1219419000000, + "updated_by": 1085, + "published_at": 1219419000000, + "published_by": 1085 + }, + { + "id": 231, + "title": "Skicka epost till publika mappar i Exchange 2007", + "slug": "skicka-epost-till-publika-mappar-i-exchange-2007", + "markdown": "\r\n\r\nFör att ge en publik mapp en epostadress i Exchange 2007 gör man på ett lite nytt sätt (jämför med Exchange 2003). I första versionen av Exchange 2007 var man tvungen att skriva kommandon i PowerShell, men från och med SP1 har allt blivit enklare:\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nMappen får samma adress som namnet + domänen (den i exemplet ovan skulle kunna bli financial@mindoman.se t.ex.)\r\n\r\n![Bild](http://tekniken.nu/uploads/exchange2007.png)", + "html": "

    För att ge en publik mapp en epostadress i Exchange 2007 gör man på ett lite nytt sätt (jämför med Exchange 2003). I första versionen av Exchange 2007 var man tvungen att skriva kommandon i PowerShell, men från och med SP1 har allt blivit enklare:


    Mappen får samma adress som namnet + domänen (den i exemplet ovan skulle kunna bli financial@mindoman.se t.ex.)

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Skicka epost till publika mappar i Exchange 2007", + "meta_description": "", + "author_id": 6, + "created_at": 1221757174000, + "created_by": 6, + "updated_at": 1221757174000, + "updated_by": 6, + "published_at": 1221757174000, + "published_by": 6 + }, + { + "id": 249, + "title": "WGA-problem på nyinstallerad XP SP3", + "slug": "wga-problem-pa-nyinstallerad-xp-sp3", + "markdown": "\r\n\r\nIdag stötte jag på följande problem när jag skulle köra Microsoft Update på en helt nyinstallerad Windows XP SP3 (OEM):\r\n\r\n\r\n\r\n\r\n\r\nKB892130 (Windows Genuine Advantage Validation Tool) bommar och vägrar installera. Iom att WGA är nödvändig för att köra övriga uppdateringar så kommer man inte speciellt mycket längre med sina uppdateringar.\r\n\r\nI %windir%\\windowsupdate.log läser jag följande:\r\n\r\n2008-10-15 10:40:52:406 1552 37c AUClnt FATAL: Error: 0x80004002. wuauclt handler: failed to spawn COM server2008-10-15 10:40:52:421 1036 19c Handler FATAL: 0x80004002: ERROR: Remote update handler container process created (PID: 1552), but exited before signaling event2008-10-15 10:40:53:625 600 dc8 COMAPI >>-- RESUMED -- COMAPI: Install [ClientId = WindowsUpdate]2008-10-15 10:40:53:625 600 dc8 COMAPI - Install call failed 2008-10-15 10:40:53:625 600 dc8 COMAPI - Reboot required = No 2008-10-15 10:40:53:625 600 dc8 COMAPI - WARNING: Exit code = 0x80240FFF; Call error code = 0x80004002\r\n\r\nFör att lösa detta problem gör man enl följande:\r\n\r\nLadda hem WindowsUpdateAgent20-x86.exe från Microsoft och exekvera med följande kommando:\r\n\r\n\"WindowsUpdateAgent20-x86.exe /wuforce\".\r\n\r\nDetta installerar om Windows Update agenten i XP och rättade i mitt fall till det som var fel. Min teori är att problemet uppstått pga att någon installation jag hunnit köra innan Microsoft Update har ändrat i registerrättigheter. Problemet verkar vara ganska vanligt förekommende dock.\r\n\r\n![Bild](http://tekniken.nu/uploads/wga_logo.png)", + "html": "

    Idag stötte jag på följande problem när jag skulle köra Microsoft Update på en helt nyinstallerad Windows XP SP3 (OEM):


    KB892130 (Windows Genuine Advantage Validation Tool) bommar och vägrar installera. Iom att WGA är nödvändig för att köra övriga uppdateringar så kommer man inte speciellt mycket längre med sina uppdateringar.

    I %windir%\\windowsupdate.log läser jag följande:

    2008-10-15 10:40:52:406 1552 37c AUClnt FATAL: Error: 0x80004002. wuauclt handler: failed to spawn COM server
    2008-10-15 10:40:52:421 1036 19c Handler FATAL: 0x80004002: ERROR: Remote update handler container process created (PID: 1552), but exited before signaling event
    2008-10-15 10:40:53:625 600 dc8 COMAPI >>-- RESUMED -- COMAPI: Install [ClientId = WindowsUpdate]
    2008-10-15 10:40:53:625 600 dc8 COMAPI - Install call failed 
    2008-10-15 10:40:53:625 600 dc8 COMAPI - Reboot required = No 
    2008-10-15 10:40:53:625 600 dc8 COMAPI - WARNING: Exit code = 0x80240FFF; Call error code = 0x80004002

    För att lösa detta problem gör man enl följande:

    Ladda hem WindowsUpdateAgent20-x86.exe från Microsoft och exekvera med följande kommando:

    \"WindowsUpdateAgent20-x86.exe /wuforce\".

    Detta installerar om Windows Update agenten i XP och rättade i mitt fall till det som var fel. Min teori är att problemet uppstått pga att någon installation jag hunnit köra innan Microsoft Update har ändrat i registerrättigheter. Problemet verkar vara ganska vanligt förekommende dock.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "WGA-problem på nyinstallerad XP SP3", + "meta_description": "", + "author_id": 1085, + "created_at": 1224073455000, + "created_by": 1085, + "updated_at": 1224073455000, + "updated_by": 1085, + "published_at": 1224073455000, + "published_by": 1085 + }, + { + "id": 255, + "title": "Återställning av specifik användares mailbox i Exchange 2007", + "slug": "aterstallning-av-specifik-anvandares-mailbox-i-exchange-2007", + "markdown": "\r\n\r\nÅterställning av maildatabaser har blivit enklare i och med Exchange 2007. Att göra en komplett återställning av maildatabasen går att ordna helt i det grafiska gränssnittet. Vill man göra en lite mer specifik återställning krävs dock att man använder Exchange Management Shell.\r\n\r\nVi utgår ifrån en fullständig backup gjord i exempelvis ntbackup.\r\nStarta Exchange Management Console (EMC), välj Toolbox och starta därifrån Database Recovery Management.Tryck Next för att logga in på den lokala maskinenVälj Create a recovery storage group så att vår återställning får en måldatabas. Välj var databas och loggfiler finns.Med vår RSG skapad är det dags att starta återställningen. I det här fallet använde jag NTBackup. Välj den databas du vill återställa och tryck start restore.\r\nGenom det grafiska gränssnittet är dina alternativ något begränsade. Om vi väljer ”Show advanced options” går det att återställa data till en specifik användares katalog, vi kan också sortera ut mail på ämne och datum. Det grafiska gränssnittet är alltså mest intressant vid en komplett återställning av databasen.\r\n\r\nIntressantare för mig den här gången var att återställa en specifik användares inbox till administrator-kontot:\r\nStarta Exchange Management Shell.Jag vill återställa hela mailboxen ”met” till Administrator-kontot, under en mapp som kommer heta ”Restore”Det här kommandot löser biffen:\r\nrestore-mailbox -RSGMailbox 'met' -RSGDatabase 'Recovery Storage Group\\Mailbox Database' -id 'Administrator' -TargetFolder ‘Restore’\r\nOm det efter den långa återställningsprocessen kommer felmeddelanden om ”Bad item limit” så går det att höja den gränsen. Avsluta kommandot ovan med –BadItemLimit 1000 så bör du slippa problemen (det är förstås en god idé att söka källan till problemet ändå).\r\nDet hade förstås också gått att låta återskapningen gå till den berörda användarens mailbox och skapa en ’Restore’ mapp där.\r\n\r\nDet här kommandot går att finslipa så att det återställer mail mellan vissa datum eller helt skriver över användarens mailbox med backupen.\r\n\r\nMer om restore-mailbox kommandot går att läsa här;\r\n\r\nhttp://technet.microsoft.com/en-us/library/bb125218.aspx\r\n\r\n![Bild](http://tekniken.nu/uploads/Exchange2007.png)", + "html": "

    Återställning av maildatabaser har blivit enklare i och med Exchange 2007. Att göra en komplett återställning av maildatabasen går att ordna helt i det grafiska gränssnittet. Vill man göra en lite mer specifik återställning krävs dock att man använder Exchange Management Shell.

    Vi utgår ifrån en fullständig backup gjord i exempelvis ntbackup.

    1. Starta Exchange Management Console (EMC), välj Toolbox och starta därifrån Database Recovery Management.
    2. Tryck Next för att logga in på den lokala maskinen
    3. Välj Create a recovery storage group så att vår återställning får en måldatabas. Välj var databas och loggfiler finns.
    4. Med vår RSG skapad är det dags att starta återställningen. I det här fallet använde jag NTBackup. Välj den databas du vill återställa och tryck start restore.

    Genom det grafiska gränssnittet är dina alternativ något begränsade. Om vi väljer ”Show advanced options” går det att återställa data till en specifik användares katalog, vi kan också sortera ut mail på ämne och datum. Det grafiska gränssnittet är alltså mest intressant vid en komplett återställning av databasen.

    Intressantare för mig den här gången var att återställa en specifik användares inbox till administrator-kontot:

    1. Starta Exchange Management Shell.
    2. Jag vill återställa hela mailboxen ”met” till Administrator-kontot, under en mapp som kommer heta ”Restore”
      Det här kommandot löser biffen:

      restore-mailbox -RSGMailbox 'met' -RSGDatabase 'Recovery Storage Group\\Mailbox Database' -id 'Administrator' -TargetFolder ‘Restore’

    3. Om det efter den långa återställningsprocessen kommer felmeddelanden om ”Bad item limit” så går det att höja den gränsen. Avsluta kommandot ovan med –BadItemLimit 1000 så bör du slippa problemen (det är förstås en god idé att söka källan till problemet ändå).

    Det hade förstås också gått att låta återskapningen gå till den berörda användarens mailbox och skapa en ’Restore’ mapp där.

    Det här kommandot går att finslipa så att det återställer mail mellan vissa datum eller helt skriver över användarens mailbox med backupen.

    Mer om restore-mailbox kommandot går att läsa här;

    http://technet.microsoft.com/en-us/library/bb125218.aspx

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Återställning av specifik användares mailbox i Exchange 2007", + "meta_description": "", + "author_id": 1088, + "created_at": 1226922211000, + "created_by": 1088, + "updated_at": 1226922211000, + "updated_by": 1088, + "published_at": 1226922211000, + "published_by": 1088 + }, + { + "id": 256, + "title": "Problem att installera XP SP3 på Intel Mac", + "slug": "problem-att-installera-xp-sp3-pa-intel-mac", + "markdown": "\r\n\r\nVid installation av Servicepack 3 för Windows XP på en Intel Mac med Bootcamp riskerar man att en bit in i installationsguiden få följande felmeddelande:\r\n\r\n\"There is not enough disk space on C:\\WINDOWS\\$NtServicePackUninstall$ to install Service Pack 3 Setup requires an additional 4 megabytes of free space or if you also want to archive the files for uninstallation,Setup requires 4 additional megabytes of free space. Free additional space on your hard disk and then try again.\"\r\n\r\nDetta beror på att SP3-installationen, förvirrad av eventuell EFI-partition på disken, kontrollerar fel diskenhet. För att komma förbi problemet lägger man till följande registernyckel: \r\n\r\nNavigera till följande nivå i Regedit:\r\n\r\n[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Setup]\r\n\r\nLägg till ny sträng: BootDir, med värdet: C:\\ \r\n\r\nKör sedan SP3 installationen igen så bör det gå bättre!\r\n\r\n![Bild](http://tekniken.nu/uploads/633626876179952480-apple_windows_by_mo6.jpg)", + "html": "

    Vid installation av Servicepack 3 för Windows XP på en Intel Mac med Bootcamp riskerar man att en bit in i installationsguiden få följande felmeddelande:

    \"There is not enough disk space on C:\\WINDOWS\\$NtServicePackUninstall$ to install Service Pack 3 Setup requires an additional 4 megabytes of free space or if you also want to archive the files for uninstallation,Setup requires 4 additional megabytes of free space. Free additional space on your hard disk and then try again.\"

    Detta beror på att SP3-installationen, förvirrad av eventuell EFI-partition på disken, kontrollerar fel diskenhet. För att komma förbi problemet lägger man till följande registernyckel: 

    Navigera till följande nivå i Regedit:

    [HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Setup]

    Lägg till ny sträng: BootDir, med värdet: C:\\ 

    Kör sedan SP3 installationen igen så bör det gå bättre!

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Problem att installera XP SP3 på Intel Mac", + "meta_description": "", + "author_id": 1085, + "created_at": 1227090817000, + "created_by": 1085, + "updated_at": 1227090817000, + "updated_by": 1085, + "published_at": 1227090817000, + "published_by": 1085 + }, + { + "id": 258, + "title": "ImgBurn - Riktigt bra gratis brännarprogram", + "slug": "imgburn---riktigt-bra-gratis-brannarprogram", + "markdown": "\r\n\r\nTycker du som jag att de flesta kommersiella CD/DVD-brännarprogrammen börjat växa sig allt för stora för sin egentliga uppgift? Nero går t.ex. knappt att installera utan att få med ett stort antal delprogram som man aldrig kommer att använda, hälften av vilka permanent ligger igång i aktivitetslisten. Dessutom kostar de ganska mycket pengar om ens brännarbehov inte sträcker sig förbi det mest grundläggande: att bränna filer eller en image till skiva.\r\n\r\nJag har på senaste tiden använt programmet ImgBurn som gör just det jag behöver, helt gratis:\r\nBränna filer till skivaBränna image till skivaSkapa image från skivaSkapa image från filer\r\nRekommenderas varmt!\r\n\r\nhttp://www.imgburn.com\r\n\r\nVill du ha fler exempel på gratis brännarprogram för Windows så rekommenderar jag Tommy k Johanssons test.\r\n\r\n\r\n\r\n \r\n\r\n![Bild](http://tekniken.nu/uploads/imgburn_logo.png)", + "html": "

    Tycker du som jag att de flesta kommersiella CD/DVD-brännarprogrammen börjat växa sig allt för stora för sin egentliga uppgift? Nero går t.ex. knappt att installera utan att få med ett stort antal delprogram som man aldrig kommer att använda, hälften av vilka permanent ligger igång i aktivitetslisten. Dessutom kostar de ganska mycket pengar om ens brännarbehov inte sträcker sig förbi det mest grundläggande: att bränna filer eller en image till skiva.

    Jag har på senaste tiden använt programmet ImgBurn som gör just det jag behöver, helt gratis:

    • Bränna filer till skiva
    • Bränna image till skiva
    • Skapa image från skiva
    • Skapa image från filer

    Rekommenderas varmt!

    http://www.imgburn.com

    Vill du ha fler exempel på gratis brännarprogram för Windows så rekommenderar jag Tommy k Johanssons test.

     

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "ImgBurn - riktigt bra gratis brännarprogram", + "meta_description": "", + "author_id": 1085, + "created_at": 1227545766000, + "created_by": 1085, + "updated_at": 1227545766000, + "updated_by": 1085, + "published_at": 1227545766000, + "published_by": 1085 + }, + { + "id": 262, + "title": "Få ordning på gemensamma mappar i Windows Small Business Server 2003", + "slug": "fa-ordning-pa-gemensamma-mappar-i-windows-small-business-server-2003", + "markdown": "\r\n\r\nI Windows Small Business Server 2003 kan man råka ut för det här felmeddelandet när man ska administrera gemensamma mappar (public folders) i Exchange System Manager:\r\n\r\nThe SSL certificate server name is incorrect.ID no: c103b404\r\n\r\nBakgrund och orsakEn Windows-server har ofta ett namn internt och annat namn externt. Det interna namnet är knutet till den interna domänen, t.ex. minserver.mindoman.local, medan det externa namnet är knutet till den domän vill att besökarna ska se, t.ex. mail.mindoman.se. När man installerar Small Business Server så skapar den ett självsignerat certifikat för det interna namnet minserver.mindoman.local. Vill man erbjuda sina användare webbmail så gör man det oftast på externa namnet, så då skapar man eller köper ett certifikat för mail.mindoman.se och ersätter det som servern själv skapade under installationen. Här uppstår problemet.\r\n\r\nDet är nämligen så att Exchange Server Manager använder sig av Outlook Web Access för att hantera gemensamma mapparna. När System Manager ansluter via det interna namnet så stämmer det inte längre med certifikatet – och då dyker felmeddelandet ovan upp.\r\n\r\nLösningDet första man ska testa är att stänga av kravet på SSL på webbkatalogen Exadmin under Default Web Server. Det gör man såhär:\r\n\r\nÖppna IIS ManagerHögerklicka på Exadmin under Default Web SiteVälj fliken Directory Security och tryck på knappen Edit i boxen Secure CommunicationsKryssa ur rutorna Require 128-bit encryption och Require secure channel (SSL)Stäng alla dialogrutor och starta om webbtjänsten (starta även om System Manager om du har den igång).\r\n\r\nDetta beskrivs till viss del i KB 324345, men Microsofts förslag på lösning är att man ska lägga tillbaka det självsignerade certifikatet och det kommer ju inte lösa problemet på det sätt man vill.\r\n\r\nHar du tur så har detta löst problemet. Har du otur måste du ta till med lite hårdare handskar och tvinga System Manager att inte använda SSL för anslutningen:\r\n\r\nInstallera Support Tools (ligger på CD2 bland skivorna till SBS)Starta adsiedit.mscBläddra fram till Configuration > Services >  Microsoft Exchange > Domain Name > Administrative Groups > First Administrative Group > Servers > Servername > Protocols > HTTP > 1 > ExadminHögerklicka på msExchSecureBindings och välj PropertiesVälj värdet :443: och klicka på RemoveStänga alla dialog rutor och starta om webbtjänster och System Manager.\r\n\r\nImplikationerKommer det här att hota säkerheten på servern? Det kan kännas konstigt att ta bort krypteringen på en mapp i webbmailen för att lösa problemet, men det är ingen fara. Exadmin används inte av Outlook Web Access utan bara av servern själv. Däremot rekommenderar jag att du sätter en IP-spärr på Exadmin-katalogen till att bara acceptera anslutningar från servern själv eller andra interna servrar som används för Exchange-administration.\r\n\r\nTack till http://technicalmumblings.wordpress.com/2008/05/06/the-ssl-certificate-server-name-is-incorrect-id-no-c103b404/.\r\n\r\n![Bild](http://tekniken.nu/uploads/633645033992650560-SBS2003-standard-boxangle.png)", + "html": "

    I Windows Small Business Server 2003 kan man råka ut för det här felmeddelandet när man ska administrera gemensamma mappar (public folders) i Exchange System Manager:

    The SSL certificate server name is incorrect.ID no: c103b404

    Bakgrund och orsak
    En Windows-server har ofta ett namn internt och annat namn externt. Det interna namnet är knutet till den interna domänen, t.ex. minserver.mindoman.local, medan det externa namnet är knutet till den domän vill att besökarna ska se, t.ex. mail.mindoman.se. När man installerar Small Business Server så skapar den ett självsignerat certifikat för det interna namnet minserver.mindoman.local. Vill man erbjuda sina användare webbmail så gör man det oftast på externa namnet, så då skapar man eller köper ett certifikat för mail.mindoman.se och ersätter det som servern själv skapade under installationen. Här uppstår problemet.

    Det är nämligen så att Exchange Server Manager använder sig av Outlook Web Access för att hantera gemensamma mapparna. När System Manager ansluter via det interna namnet så stämmer det inte längre med certifikatet – och då dyker felmeddelandet ovan upp.

    Lösning
    Det första man ska testa är att stänga av kravet på SSL på webbkatalogen Exadmin under Default Web Server. Det gör man såhär:

    1. Öppna IIS Manager
    2. Högerklicka på Exadmin under Default Web Site
    3. Välj fliken Directory Security och tryck på knappen Edit i boxen Secure Communications
    4. Kryssa ur rutorna Require 128-bit encryption och Require secure channel (SSL)
    5. Stäng alla dialogrutor och starta om webbtjänsten (starta även om System Manager om du har den igång).

    Detta beskrivs till viss del i KB 324345, men Microsofts förslag på lösning är att man ska lägga tillbaka det självsignerade certifikatet och det kommer ju inte lösa problemet på det sätt man vill.

    Har du tur så har detta löst problemet. Har du otur måste du ta till med lite hårdare handskar och tvinga System Manager att inte använda SSL för anslutningen:

    1. Installera Support Tools (ligger på CD2 bland skivorna till SBS)
    2. Starta adsiedit.msc
    3. Bläddra fram till Configuration > Services >  Microsoft Exchange > Domain Name > Administrative Groups > First Administrative Group > Servers > Servername > Protocols > HTTP > 1 > Exadmin
    4. Högerklicka på msExchSecureBindings och välj Properties
    5. Välj värdet :443: och klicka på Remove
    6. Stänga alla dialog rutor och starta om webbtjänster och System Manager.

    Implikationer
    Kommer det här att hota säkerheten på servern? Det kan kännas konstigt att ta bort krypteringen på en mapp i webbmailen för att lösa problemet, men det är ingen fara. Exadmin används inte av Outlook Web Access utan bara av servern själv. Däremot rekommenderar jag att du sätter en IP-spärr på Exadmin-katalogen till att bara acceptera anslutningar från servern själv eller andra interna servrar som används för Exchange-administration.

    Tack till http://technicalmumblings.wordpress.com/2008/05/06/the-ssl-certificate-server-name-is-incorrect-id-no-c103b404/.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Få ordning på gemensamma mappar i Windows Small Business Server 2003", + "meta_description": "", + "author_id": 6, + "created_at": 1228906598000, + "created_by": 6, + "updated_at": 1228906598000, + "updated_by": 6, + "published_at": 1228906598000, + "published_by": 6 + }, + { + "id": 278, + "title": "Glömt lösenordet till SQL Server?", + "slug": "glomt-losenordet-till-sql-server", + "markdown": "\r\n\r\nI gamla versioner av SQL Server skapades alltid ett konto med högsta administratörsnivå (sysadmin) med namnet sa och tomt lösenord. Det var minst sagt lite av en säkerhetsrisk, så i senare versioner skapas visserligen sa-kontot men det är antingen avstängt eller kräver att man ger det ett lösenord. I SQL Server 2005 och 2008 så läggs den installerande användaren automatiskt i sysadmin-gruppen (exakt vilket konto etc. beror på om det är Windows Server eller inte, om den är domänsansluten etc.).\r\n\r\nAv ett antal orsaker kan man hamna i läget att man inte har tillgång till något konto som är sysadmin. I mitt fall hände det på min utvecklingsmaskin där kontot jag installerat SQL Server under hade gått sönder. Jag hade kunnat installera om SQL Server förstås, men i en produktionsmiljö är det sällan ett bra alternativ. Som tur är så finns ett sätt att starta SQL Server i ”felsäkert läge”. Man kan starta SQL Server isingle user mode, vilket gör att den första användaren som ansluter blir sysadmin.\r\n\r\nGör så här:\r\n\r\n\r\nStäng av SQL Agent (annars riskerar den att vara den första som ansluter och blir sysadmin)Öppna SQL Server Configuration ManagerÖppna trädet SQL Server Services. Högerklicka på din SQL Server-instans.På fliken advanced, lägg till ;-m sist på raden startup parametersStarta om SQL-tjänsten\r\n\r\n\r\nNu är servern isingle user mode, så nu kan du ansluta och ändra i rättigheter på konton, databaser och tabeller. Vad du än gör: kom bara ihåg att gå tillbaka till det vanliga läget när du är klar!\r\n\r\nFör den som kör mysql finns ett liknande läge som kringår all säkerhet som jag skrev om i en annan blogg för länge sen.\r\n\r\n![Bild](http://tekniken.nu/uploads/633715853943315333-access-denied.jpg)", + "html": "

    I gamla versioner av SQL Server skapades alltid ett konto med högsta administratörsnivå (sysadmin) med namnet sa och tomt lösenord. Det var minst sagt lite av en säkerhetsrisk, så i senare versioner skapas visserligen sa-kontot men det är antingen avstängt eller kräver att man ger det ett lösenord. I SQL Server 2005 och 2008 så läggs den installerande användaren automatiskt i sysadmin-gruppen (exakt vilket konto etc. beror på om det är Windows Server eller inte, om den är domänsansluten etc.).

    Av ett antal orsaker kan man hamna i läget att man inte har tillgång till något konto som är sysadmin. I mitt fall hände det på min utvecklingsmaskin där kontot jag installerat SQL Server under hade gått sönder. Jag hade kunnat installera om SQL Server förstås, men i en produktionsmiljö är det sällan ett bra alternativ. Som tur är så finns ett sätt att starta SQL Server i ”felsäkert läge”. Man kan starta SQL Server isingle user mode, vilket gör att den första användaren som ansluter blir sysadmin.

    Gör så här:

    1. Stäng av SQL Agent (annars riskerar den att vara den första som ansluter och blir sysadmin)
    2. Öppna SQL Server Configuration Manager
    3. Öppna trädet SQL Server Services. Högerklicka på din SQL Server-instans.
    4. På fliken advanced, lägg till ;-m sist på raden startup parameters
    5. Starta om SQL-tjänsten

    Nu är servern isingle user mode, så nu kan du ansluta och ändra i rättigheter på konton, databaser och tabeller. Vad du än gör: kom bara ihåg att gå tillbaka till det vanliga läget när du är klar!

    För den som kör mysql finns ett liknande läge som kringår all säkerhet som jag skrev om i en annan blogg för länge sen.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Glömt lösenordet till SQL Server?", + "meta_description": "", + "author_id": 6, + "created_at": 1235988593000, + "created_by": 6, + "updated_at": 1235988593000, + "updated_by": 6, + "published_at": 1235988593000, + "published_by": 6 + }, + { + "id": 285, + "title": "Hitta användare i Active Directory på sekundär mailadress.", + "slug": "hitta-anvandare-i-active-directory-pa-sekundar-mailadress", + "markdown": "\r\n\r\nAtt hitta en viss adress användare är oftast väldigt lätt, skulle adressen dock inte ha något med användarnamnet att göra blir det svårare.\r\n\r\nExemplet i det här fallet är order@iteam.se. Jag vet att adressen finns men inte vem den tillhör. Gör såhär:\r\n\r\nStarta Active Directory Users and Computers.Tryck på Find-knappen.Välj Custom search istället för standarden Users, Contacts and Groups.Välj Advanced fliken. Här kan du nu söka med hjälp av direkta LDAP frågor.I mitt fall körde jag raden nedan för att hitta alla adresser som börjar med order. Det går förstås också att skriva in kompletta adresser utan wildcards.(proxyAddresses=smtp:order*)\r\nMed LDAP-frågor går det att göra väldigt mycket för att hitta i AD. Mer information finns här:\r\n\r\nhttp://technet.microsoft.com/en-us/library/aa996205(EXCHG.65).aspx\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/633746945372320136-folders.png)", + "html": "

    Att hitta en viss adress användare är oftast väldigt lätt, skulle adressen dock inte ha något med användarnamnet att göra blir det svårare.

    Exemplet i det här fallet är order@iteam.se. Jag vet att adressen finns men inte vem den tillhör. Gör såhär:

    1. Starta Active Directory Users and Computers.
    2. Tryck på Find-knappen.
    3. Välj Custom search istället för standarden Users, Contacts and Groups.
    4. Välj Advanced fliken. Här kan du nu söka med hjälp av direkta LDAP frågor.
      I mitt fall körde jag raden nedan för att hitta alla adresser som börjar med order. Det går förstås också att skriva in kompletta adresser utan wildcards.
      (proxyAddresses=smtp:order*)

    Med LDAP-frågor går det att göra väldigt mycket för att hitta i AD. Mer information finns här:

    http://technet.microsoft.com/en-us/library/aa996205(EXCHG.65).aspx

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Hitta användare i Active Directory på sekundär mailadress", + "meta_description": "", + "author_id": 1088, + "created_at": 1239097736000, + "created_by": 1088, + "updated_at": 1239097736000, + "updated_by": 1088, + "published_at": 1239097736000, + "published_by": 1088 + }, + { + "id": 289, + "title": "Bota fläktsurr på DELL-laptop", + "slug": "bota-flaktsurr-pa-dell-laptop", + "markdown": "\r\n\r\nSurrar fläkten på din nya fina DELL-laptop på tok för högt?\r\n\r\nTydligen är detta en sak som vi DELL-köpare har haft problem med under en längre period men sedan en tid tillbaka finns det en lösning som fungerar väl.\r\n\r\nSpeedswitchXP är en liten app som hjälper dig att enkelt kontrollera fläktens hastighet, sätt den på auto så sköter programmet allt åt dig.\r\n\r\nTyvärr så fungerar inte detta program på Vista men diefer.de har uppgraderat och skapat I8kfanGUI. Inte lika snyggt namn på SpeedswitchXP men det fungerar på Vista och är superenkelt att använda.\r\n\r\nFör er som har Windows XP:http://www.diefer.de/speedswitchxp/\r\n\r\nFör oss som har Windows Vista:http://www.diefer.de/i8kfan/index.html\r\n\r\n![Bild](http://tekniken.nu/uploads/633758406867781266-120mm-fan-blue.jpg)", + "html": "

    Surrar fläkten på din nya fina DELL-laptop på tok för högt?

    Tydligen är detta en sak som vi DELL-köpare har haft problem med under en längre period men sedan en tid tillbaka finns det en lösning som fungerar väl.

    SpeedswitchXP är en liten app som hjälper dig att enkelt kontrollera fläktens hastighet, sätt den på auto så sköter programmet allt åt dig.

    Tyvärr så fungerar inte detta program på Vista men diefer.de har uppgraderat och skapat I8kfanGUI. Inte lika snyggt namn på SpeedswitchXP men det fungerar på Vista och är superenkelt att använda.

    För er som har Windows XP:
    http://www.diefer.de/speedswitchxp/

    För oss som har Windows Vista:
    http://www.diefer.de/i8kfan/index.html

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Bota fläktsurr på DELL-laptop", + "meta_description": "", + "author_id": 1091, + "created_at": 1240243886000, + "created_by": 1091, + "updated_at": 1240243886000, + "updated_by": 1091, + "published_at": 1240243886000, + "published_by": 1091 + }, + { + "id": 294, + "title": "Windows 7 RC är släppt", + "slug": "windows-7-rc-ar-slappt", + "markdown": "\r\nMicrosoft har nu gjort releasekandidaten av Windows 7 tillgänglig för allmänheten (har funnits på MSDN sedan 30/4). All information om hämtning finns här:\r\n\r\nhttp://www.microsoft.com/windows/windows-7/download.aspx\r\n\r\nSkillnaderna jämfört med betan är många. Förutom en massa buggfixar så kommer även en drös nya features som Microsoft listar på utvecklingsbloggen:\r\n\r\nhttp://blogs.msdn.com/e7/archive/2009/02/26/some-changes-since-beta.aspx\r\n\r\nDet känns som att Microsoft ligger bra till i utvecklingen och den planerade releasen i oktober känns helt rimlig. Vi håller tummarna!\r\n![Bild](http://tekniken.nu/uploads/633771164649185498-windows7uc.jpg)", + "html": "

    Microsoft har nu gjort releasekandidaten av Windows 7 tillgänglig för allmänheten (har funnits på MSDN sedan 30/4). All information om hämtning finns här:

    http://www.microsoft.com/windows/windows-7/download.aspx

    Skillnaderna jämfört med betan är många. Förutom en massa buggfixar så kommer även en drös nya features som Microsoft listar på utvecklingsbloggen:

    http://blogs.msdn.com/e7/archive/2009/02/26/some-changes-since-beta.aspx

    Det känns som att Microsoft ligger bra till i utvecklingen och den planerade releasen i oktober känns helt rimlig. Vi håller tummarna!", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Windows 7 RC är släppt", + "meta_description": "", + "author_id": 1085, + "created_at": 1241519664000, + "created_by": 1085, + "updated_at": 1241519664000, + "updated_by": 1085, + "published_at": 1241519664000, + "published_by": 1085 + }, + { + "id": 296, + "title": "Undvik fälla när du uppgraderar iPhone 3.0 , eller: så här uppgraderar du till iPhone 3.0 beta 4.", + "slug": "undvik-falla-nar-du-uppgraderar-iphone-30--eller-sa-har-uppgraderar-du-till-iphone-30-beta-4", + "markdown": "\r\n\r\nViktigt: När du ska uppgradera din iPhone till 3.0 beta 4 behöver du först uppdatera din iTunes till senaste versionen (8.2 beta). Detta är inget som varnas om automatiskt förrän halva uppgraderingen är genomförd (det står ju i och för sig klart och tydligt i instruktionerna som man läser efter man har klantat sig). Försöker man uppdatera med äldre version av iTunes avbryts tyvärr uppgraderingsprocessen efter en stund vilket gör att telefonen behöver återställas till fabriksinställningarna vilket inte heller går att göra med en äldre version av iTunes och i detta läge blir man lite svettig att man kanske har ”Brickat” sin fina telefon.\r\n\r\n\r\n\r\nEftersom du läser denna blog har du säkert missat detta och surfar nu runt och undrar om det är kört för dina kontakter, bilder och SMS men lugn, det är det inte om du har tagit backup nyligen.\r\n\r\nNedanstående kräver att du först har registrerat din telefons serienummer hos Apple och är registrerad utvecklare för iPhone 3.0.\r\n\r\nGör så här (på mac):\r\n\r\nOBS! Först och främst: Installera Itunes 8.2 (hittar du på developer.apple.com). Om det inte går att installera på direkten behöver du först uppdatera din Mac med senaste säkerhetspatcharna.Om du klantat dig som jag och försökt uppgradera med en för gammal version av iTunes går du på B nedan, annars A.A. Klicka på knappen ”Leta efter uppdateringar” i iTunes samtidigt som du trycker på ALT på tangentbordet.B. Klicka på knappen ”Återställ till fabriksinställningarna” i iTunes samtidigt som du trycker på ALT på tangentbordetVälj den nya iPhone 3G 3.0 Beta4 du laddade ner från developer.apple.comOm du valt alternativ B ovan kommer nu telefonen återställas till fabriksinställningar och när den är klar kommer den att fråga om du vill återställa din backup.\r\n\r\nNär du väl har gjort detta kan du avnjuta alla fina funktioner i iPhone 3.0 som numera känns väldigt stabilt – inga hängningar konstigheter som i tidigare betaversioner. Buggen som fanns i beta 3 råkade gömma den gröna ”Ring upp” knappen i telefonen är åtgärdad (thank god!).\r\n\r\nKiller apps för mig i iPhone 3.0 är:\r\nSvenskt tangentbord – nu kan man skriva riktigt fort och slippa alla konstiga svengelska förslag!Dela ut internetuppkopplingen till laptops (s.k. tethering) – väldigt bra! Funkar både med USB och Bluetooth. (ladda ner http://dl.getdropbox.com/u/6152/Telia_se.ipcc  och uppdatera på samma sätt som steg 2A ovan så funkar både MMS och internetdelning)MMS - man har ju vant sig av med det då det går bra eller bättre att maila bilder istället men när man tidigare fick ett MMS blev man ju galen av telias usla manuella MMS mottagningstjänst. Nu funkar det kanon!Copy/Paste – skönt att kunna klippa ut url:er från mail osv. Enkelt och smidigt.\r\n\r\nSen ska det bli sjukt intressant att se när Facebook, Skype, Twitter och Google får sätta tänderna i Push Notification Services som ju gör att man kan få realtids push information från alla dessa tjänster utan att ha massor av program igång på telefonen! Ska bli kul att börja utveckla för denna plattform nu också! \r\n\r\nHar någon annan testat? Vad tycker ni? Kommentera gärna nedan!\r\n\r\n![Bild](http://tekniken.nu/uploads/633772917258931496-itunes.png)", + "html": "

    Viktigt: När du ska uppgradera din iPhone till 3.0 beta 4 behöver du först uppdatera din iTunes till senaste versionen (8.2 beta). Detta är inget som varnas om automatiskt förrän halva uppgraderingen är genomförd (det står ju i och för sig klart och tydligt i instruktionerna som man läser efter man har klantat sig). Försöker man uppdatera med äldre version av iTunes avbryts tyvärr uppgraderingsprocessen efter en stund vilket gör att telefonen behöver återställas till fabriksinställningarna vilket inte heller går att göra med en äldre version av iTunes och i detta läge blir man lite svettig att man kanske har ”Brickat” sin fina telefon.

    Eftersom du läser denna blog har du säkert missat detta och surfar nu runt och undrar om det är kört för dina kontakter, bilder och SMS men lugn, det är det inte om du har tagit backup nyligen.

    Nedanstående kräver att du först har registrerat din telefons serienummer hos Apple och är registrerad utvecklare för iPhone 3.0.

    Gör så här (på mac):

    1. OBS! Först och främst: Installera Itunes 8.2 (hittar du på developer.apple.com). Om det inte går att installera på direkten behöver du först uppdatera din Mac med senaste säkerhetspatcharna.
    2. Om du klantat dig som jag och försökt uppgradera med en för gammal version av iTunes går du på B nedan, annars A.
      A. Klicka på knappen ”Leta efter uppdateringar” i iTunes samtidigt som du trycker på ALT på tangentbordet.
      B. Klicka på knappen ”Återställ till fabriksinställningarna” i iTunes samtidigt som du trycker på ALT på tangentbordet
    3. Välj den nya iPhone 3G 3.0 Beta4 du laddade ner från developer.apple.com
    4. Om du valt alternativ B ovan kommer nu telefonen återställas till fabriksinställningar och när den är klar kommer den att fråga om du vill återställa din backup.

    När du väl har gjort detta kan du avnjuta alla fina funktioner i iPhone 3.0 som numera känns väldigt stabilt – inga hängningar konstigheter som i tidigare betaversioner. Buggen som fanns i beta 3 råkade gömma den gröna ”Ring upp” knappen i telefonen är åtgärdad (thank god!).

    Killer apps för mig i iPhone 3.0 är:

    1. Svenskt tangentbord – nu kan man skriva riktigt fort och slippa alla konstiga svengelska förslag!
    2. Dela ut internetuppkopplingen till laptops (s.k. tethering) – väldigt bra! Funkar både med USB och Bluetooth. (ladda ner http://dl.getdropbox.com/u/6152/Telia_se.ipcc  och uppdatera på samma sätt som steg 2A ovan så funkar både MMS och internetdelning)
    3. MMS - man har ju vant sig av med det då det går bra eller bättre att maila bilder istället men när man tidigare fick ett MMS blev man ju galen av telias usla manuella MMS mottagningstjänst. Nu funkar det kanon!
    4. Copy/Paste – skönt att kunna klippa ut url:er från mail osv. Enkelt och smidigt.

    Sen ska det bli sjukt intressant att se när Facebook, Skype, Twitter och Google får sätta tänderna i Push Notification Services som ju gör att man kan få realtids push information från alla dessa tjänster utan att ha massor av program igång på telefonen! Ska bli kul att börja utveckla för denna plattform nu också!

    Har någon annan testat? Vad tycker ni? Kommentera gärna nedan!

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Undvik fälla när du uppgraderar iPhone 3.0 , eller: så här uppgraderar du till iPhone 3.0 beta 4.", + "meta_description": "up - gör så här.", + "author_id": 1087, + "created_at": 1241694925000, + "created_by": 1087, + "updated_at": 1241694925000, + "updated_by": 1087, + "published_at": 1241694925000, + "published_by": 1087 + }, + { + "id": 298, + "title": "RE: Påminnelse: Windows 7 betan upphör att fungera 1:a juli", + "slug": "re-paminnelse-windows-7-betan-upphor-att-fungera-1a-juli", + "markdown": "\r\n\r\nHär kommer en liten påminnelse:\r\n\r\nIfall du inte uppgraderat er Windows 7 installation till RC1 så börjar det bli dags. Betan kommer nämligen att börja stänga av datorn varannan timme from 1:a juli, för att helt upphöra att fungera 1:a augusti.\r\n\r\nLäs min tidigare blogg för instruktioner om hur du hämtar Windows 7 RC1 och Anders bloggom hur du uppgraderar.\r\n\r\n![Bild](http://tekniken.nu/uploads/633772222063954562-windows72.png)", + "html": "

    Här kommer en liten påminnelse:

    Ifall du inte uppgraderat er Windows 7 installation till RC1 så börjar det bli dags. Betan kommer nämligen att börja stänga av datorn varannan timme from 1:a juli, för att helt upphöra att fungera 1:a augusti.

    Läs min tidigare blogg för instruktioner om hur du hämtar Windows 7 RC1 och Anders bloggom hur du uppgraderar.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Påminnelse: Windows 7 betan upphör att fungera 1:a juli", + "meta_description": " augusti.", + "author_id": 1085, + "created_at": 1243933591000, + "created_by": 1085, + "updated_at": 1243933591000, + "updated_by": 1085, + "published_at": 1243933591000, + "published_by": 1085 + }, + { + "id": 304, + "title": "Glapp i iPhone-headset kan vara vanligt ludd", + "slug": "glapp-i-iphone-headset-kan-vara-vanligt-ludd", + "markdown": "\r\nTrots att vi generellt sett är väldigt glada över våra iPhones muttras det förstås om saker som inte fungerar. En sån har varit den dålig kvaliteten på headset, flera headset har slutat fungera – framför allt mikrofonen. Vi började dock ana att något annat var på gång när flera fick samma fel och det inte hjälpte att byta headset... Då började det muttras över dålig kvalitet på iPhones kontakter istället. Till slut fick någon den briljanta idén att det kanske bara var något skräp. Beväpnade med en nål lyckades vi på kort tid pilla ut otippat mycket ludd ur headsetuttagen och har nu fullständigt fungerande både headset och kontakter.\r\n![Bild](http://tekniken.nu/uploads/633801383055322902-IMG_0353.jpg)", + "html": "

    Trots att vi generellt sett är väldigt glada över våra iPhones muttras det förstås om saker som inte fungerar. En sån har varit den dålig kvaliteten på headset, flera headset har slutat fungera – framför allt mikrofonen. Vi började dock ana att något annat var på gång när flera fick samma fel och det inte hjälpte att byta headset... Då började det muttras över dålig kvalitet på iPhones kontakter istället. Till slut fick någon den briljanta idén att det kanske bara var något skräp. Beväpnade med en nål lyckades vi på kort tid pilla ut otippat mycket ludd ur headsetuttagen och har nu fullständigt fungerande både headset och kontakter.", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Glapp i iPhone-headset kan vara vanligt ludd", + "meta_description": "", + "author_id": 6, + "created_at": 1244541505000, + "created_by": 6, + "updated_at": 1244541505000, + "updated_by": 6, + "published_at": 1244541505000, + "published_by": 6 + }, + { + "id": 327, + "title": "Är du berättigad till gratis Windows 7 uppgradering?", + "slug": "ar-du-berattigad-till-gratis-windows-7-uppgradering", + "markdown": "\r\n\r\nDet är ett vanligt grepp av datortillverkarna & Microsoft att erbjuda gratis uppdatering till nytt Windowsoperativ om man köper en dator månaderna innan lansering. Detta för att undvika att kunderna väntar med att lägga sina beställningar. Samtidigt kan det vara lätt att missa att man kvalificerat in för en gratis uppgradering, så det kan vara idé att kolla upp om man nyligen köpt ny dator.\r\n\r\nGrundreglerna för \"Free Windows 7 Upgrade Program\" är generella för alla större datortillverkare (se lista nedan). Uppgradering gäller för:\r\nBärbara och stationära med en kvalificerande Vistaversion (Home Premium, Business & Ultimate)Datorer köpta mellan 26 juni 2009 och 31 januari 2010.Individer eller företag som köpt/köper färre än 25 datorer. För större volymer finns ett motsvarande \"Volume License Upgrade Program\".\r\nFöljande uppgraderingsvägar erbjuds:\r\n\r\n\r\n\r\nDock vill jag uppmärksamma att detinte kommer vara helt gratis, porto- och administrativa kostnader kommer med all sannolikhet att läggas till priset, men klart billigare jämfört med att köpa en uppgradering. Tommy k Johansson har bloggat om prispåslagen.\r\n\r\nFöljande tillverkare deltar i programmet:\r\n\r\nAcer, Asus, Averatec, Dell, eMachines, Fujitsu, Gateway, HP, Lenovo, Samsung, Sony, Toshiba\r\n\r\nPå Microsofts Windows 7 sida finns uppdaterad lista deltagande tillverkarnas uppgraderingsprogram.\r\n\r\n![Bild](http://tekniken.nu/uploads/633869817680314816-windows_7_logo_from_wallpaper.png)", + "html": "

    Det är ett vanligt grepp av datortillverkarna & Microsoft att erbjuda gratis uppdatering till nytt Windowsoperativ om man köper en dator månaderna innan lansering. Detta för att undvika att kunderna väntar med att lägga sina beställningar. Samtidigt kan det vara lätt att missa att man kvalificerat in för en gratis uppgradering, så det kan vara idé att kolla upp om man nyligen köpt ny dator.

    Grundreglerna för \"Free Windows 7 Upgrade Program\" är generella för alla större datortillverkare (se lista nedan). Uppgradering gäller för:

    • Bärbara och stationära med en kvalificerande Vistaversion (Home Premium, Business & Ultimate)
    • Datorer köpta mellan 26 juni 2009 och 31 januari 2010.
    • Individer eller företag som köpt/köper färre än 25 datorer. För större volymer finns ett motsvarande \"Volume License Upgrade Program\".

    Följande uppgraderingsvägar erbjuds:

    Dock vill jag uppmärksamma att detinte kommer vara helt gratis, porto- och administrativa kostnader kommer med all sannolikhet att läggas till priset, men klart billigare jämfört med att köpa en uppgradering. Tommy k Johansson har bloggat om prispåslagen.

    Följande tillverkare deltar i programmet:

    Acer, Asus, Averatec, Dell, eMachines, Fujitsu, Gateway, HP, Lenovo, Samsung, Sony, Toshiba

    Microsofts Windows 7 sida finns uppdaterad lista deltagande tillverkarnas uppgraderingsprogram.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Är du berättigad till gratis Windows 7 uppgradering?", + "meta_description": "ta. Har du köpt ny dator nyligen, kolla om du kvalificerar!", + "author_id": 1085, + "created_at": 1251911100000, + "created_by": 1085, + "updated_at": 1251911100000, + "updated_by": 1085, + "published_at": 1251911100000, + "published_by": 1085 + }, + { + "id": 335, + "title": "Anslutning med Windows VPN hindrar domänautentiering: Löst!", + "slug": "anslutning-med-windows-vpn-hindrar-domanautentiering-lost", + "markdown": "\r\n\r\nEtt stort problem för oss som ofta sitter med VPN-anslutningar mot externa miljöer är att Windows (Vista och 7) får för sig att använda VPN-anslutningens användarnamn och lösenord även på den lokala domänen. Resultatet blir att alla lokala anslutningar som kräver domäninloggning (nätverksdiskar, skrivare etc) nekas åtkomst med felmeddelandet \"unknown username or wrong password\".\r\n\r\nLösningen på detta är att redigera filen rasphone.pbk, som normalt ligger under C:\\Users\\[username]\\AppData\\Roaming\\Microsoft\\Network\\Connections\\Pbk.\r\n\r\nDenna fil innehåller specifika inställningar för alla RAS-anslutningar (VPN och Dialup), för varje berörd anslutning ändrar man UseRasCredentials=1 till UseRasCredentials=0.\r\n\r\nNotera att man manuellt måste göra ändringen för alla nya anslutningar man lägger till framöver. Förhoppningsvis får vi en kryssruta i anslutningen för detta någon gång i framtiden, men tills dess är detta den bästa lösning jag kommit fram till.\r\n\r\n![Bild](http://tekniken.nu/uploads/Connect-to-VPN.png)", + "html": "

    Ett stort problem för oss som ofta sitter med VPN-anslutningar mot externa miljöer är att Windows (Vista och 7) får för sig att använda VPN-anslutningens användarnamn och lösenord även på den lokala domänen. Resultatet blir att alla lokala anslutningar som kräver domäninloggning (nätverksdiskar, skrivare etc) nekas åtkomst med felmeddelandet \"unknown username or wrong password\".

    Lösningen på detta är att redigera filen rasphone.pbk, som normalt ligger under C:\\Users\\[username]\\AppData\\Roaming\\Microsoft\\Network\\Connections\\Pbk.

    Denna fil innehåller specifika inställningar för alla RAS-anslutningar (VPN och Dialup), för varje berörd anslutning ändrar man UseRasCredentials=1 till UseRasCredentials=0.

    Notera att man manuellt måste göra ändringen för alla nya anslutningar man lägger till framöver. Förhoppningsvis får vi en kryssruta i anslutningen för detta någon gång i framtiden, men tills dess är detta den bästa lösning jag kommit fram till.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Anslutning med Windows VPN hindrar domänautentiering: Löst!", + "meta_description": "", + "author_id": 1085, + "created_at": 1253186874000, + "created_by": 1085, + "updated_at": 1253186874000, + "updated_by": 1085, + "published_at": 1253186874000, + "published_by": 1085 + }, + { + "id": 342, + "title": "Installera USB-tethering på din HTC Hero i Windows 7", + "slug": "installera-usb-tethering-pa-din-htc-hero-i-windows-7", + "markdown": "\r\n\r\nDet finns två problem när man vill installera stöd för att använda sin HTC Hero som USB modem i  Windows 7. Dels är drivrutinen inbakad i programmet HTC Sync som är onödigt att installera om man bara vill ha tethering (Detta gäller även för Vista). Vidare så stödjer HTC fortfarande inte officiellt Windows 7, och installationen av HTC Sync vill därför inte installera drivrutinen trots att den fungerar fint i Windows 7.\r\n\r\nLösningen är dock ganska enkel:\r\n\r\n1. Ladda ner den extraherade Vista-drivrutinen från HTC Sync (se nedan).2. Extrahera drivrutinerna till en lokal mapp.3. Anslut telefonen med USB.4. I telefonen väljer du Settings->Wireless Controls->Mobile Network Sharing5. Öppna enhetshanteraren och leta upp enheten \"Android Phone\", denna skall ha misslyckats med sin drivrutinsinstallation och ha ett gult utropstecken:6. Högerklicka på \"Android Phone\" och välj \"Uppdatera drivrutin\".7. Peka på mappen du extraherat drivrutinen till och inkludera undermappar. Du bör nu få meddelande om att RNDIS-drivrutinen installerades korrekt:8. Klart!\r\n\r\nGällande drivrutiner är jag osäker på om HTC tillåter spridningen av dessa, varför jag inte lägger upp dem för direkthämtning. Filerna du vill leta efter heter dock HTC_Driver_32.zip och HTC_Driver_64.zip, mer info hittar du i den här bloggen.\r\n\r\n![Bild](http://tekniken.nu/uploads/androidlogo.png)", + "html": "

    Det finns två problem när man vill installera stöd för att använda sin HTC Hero som USB modem i  Windows 7. Dels är drivrutinen inbakad i programmet HTC Sync som är onödigt att installera om man bara vill ha tethering (Detta gäller även för Vista). Vidare så stödjer HTC fortfarande inte officiellt Windows 7, och installationen av HTC Sync vill därför inte installera drivrutinen trots att den fungerar fint i Windows 7.

    Lösningen är dock ganska enkel:

    1. Ladda ner den extraherade Vista-drivrutinen från HTC Sync (se nedan).
    2. Extrahera drivrutinerna till en lokal mapp.
    3. Anslut telefonen med USB.
    4. I telefonen väljer du Settings->Wireless Controls->Mobile Network Sharing
    5. Öppna enhetshanteraren och leta upp enheten \"Android Phone\", denna skall ha misslyckats med sin drivrutinsinstallation och ha ett gult utropstecken:

    6. Högerklicka på \"Android Phone\" och välj \"Uppdatera drivrutin\".
    7. Peka på mappen du extraherat drivrutinen till och inkludera undermappar. Du bör nu få meddelande om att RNDIS-drivrutinen installerades korrekt:

    8. Klart!

    Gällande drivrutiner är jag osäker på om HTC tillåter spridningen av dessa, varför jag inte lägger upp dem för direkthämtning. Filerna du vill leta efter heter dock HTC_Driver_32.zip och HTC_Driver_64.zip, mer info hittar du i den här bloggen.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Installera USB-tethering på din HTC Hero i Windows 7", + "meta_description": "", + "author_id": 1085, + "created_at": 1254393986000, + "created_by": 1085, + "updated_at": 1254393986000, + "updated_by": 1085, + "published_at": 1254393986000, + "published_by": 1085 + }, + { + "id": 343, + "title": "Flytta en DHCP server - det lätta sättet!", + "slug": "flytta-en-dhcp-server---det-latta-sattet", + "markdown": "\r\n\r\nAtt flytta en DHCP-server manuellt kan vara ganska tidskrävande, framförallt om man har många exclusions och reservations. Men då inga fina export/importmöjligheter finns via Windows Servers DHCP admin så har jag alltid accepterat att det är manuellt arbete som gäller. Det visar sig dock att det från och med Windows Server 2003 är en ganska enkel sak att göra via command-line-verktyget NETSH.\r\n\r\nFöljande artikel från Microsoft visar hur du flyttar DHCP-databasen till en Windows 2003 server från Windows 2003, Windows 2000 och NT4:\r\n\r\nhttp://support.microsoft.com/kb/325473/\r\n\r\nKortfattad beskrivning för att flytta mellan två Windows 2003 servrar:\r\n\r\n1.      Installera DHCP Server på den nya servern2.      På den gamla servern, öppna en kommandoprompt.3.      Skriv och kör netsh dhcp server export C:\\dhcp.txt all4.      Flytta filen dhcp.txt till C-roten på den nya servern5.      Skriv och kör netsh dhcp server import c:\\dhcp.txt all (på den nya servern)6.      Avauktorisera och stoppa den gamla servern7.      Auktorisera den nya servern8.      Testa med en klientdator\r\n\r\nGrymt smidigt!\r\n\r\n![Bild](http://tekniken.nu/uploads/Windows2003logo.jpg)", + "html": "

    Att flytta en DHCP-server manuellt kan vara ganska tidskrävande, framförallt om man har många exclusions och reservations. Men då inga fina export/importmöjligheter finns via Windows Servers DHCP admin så har jag alltid accepterat att det är manuellt arbete som gäller. Det visar sig dock att det från och med Windows Server 2003 är en ganska enkel sak att göra via command-line-verktyget NETSH.

    Följande artikel från Microsoft visar hur du flyttar DHCP-databasen till en Windows 2003 server från Windows 2003, Windows 2000 och NT4:

    http://support.microsoft.com/kb/325473/

    Kortfattad beskrivning för att flytta mellan två Windows 2003 servrar:

    1.      Installera DHCP Server på den nya servern
    2.      På den gamla servern, öppna en kommandoprompt.
    3.      Skriv och kör netsh dhcp server export C:\\dhcp.txt all
    4.      Flytta filen dhcp.txt till C-roten på den nya servern
    5.      Skriv och kör netsh dhcp server import c:\\dhcp.txt all (på den nya servern)
    6.      Avauktorisera och stoppa den gamla servern
    7.      Auktorisera den nya servern
    8.      Testa med en klientdator

    Grymt smidigt!

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Flytta en DHCP server - det lätta sättet!", + "meta_description": "", + "author_id": 1085, + "created_at": 1254486900000, + "created_by": 1085, + "updated_at": 1254486900000, + "updated_by": 1085, + "published_at": 1254486900000, + "published_by": 1085 + }, + { + "id": 364, + "title": "Installera alla program samtidigt!", + "slug": "installera-alla-program-samtidigt", + "markdown": "\r\n\r\nNu i Windows-7 tider är det många som ominstallerar sin dator - använd denna sajt och kryssa för alla program du vill installera, Chrome, Firefox, Skype, iTunes etc.\r\n\r\nNär du ska ominstallera din dator tar det alltid lite tid att hitta alla program som man brukar ha, sen tar det tid att hämta hem och installera varje program som ofta också behöver starta om datorn. Nu finns det en sajt som samlar dessa program och bakar ihop de program du vill ha och skapar en gemensam installationsfil som automatiskt hämtar och installerar den senaste versionen av de markerade programmen. Det fina är också att installationsfilen som skapas endast innehåller länkar till företagens egna filer och börjar installera det första programmet under tiden som resterande program laddas ner!\r\n\r\n\r\n\r\nLycka till!\r\n\r\n![Bild](http://tekniken.nu/uploads/633921910137552889-image002.jpg@01CA562B.A784EF50__image002.jpg)", + "html": "

    Nu i Windows-7 tider är det många som ominstallerar sin dator - använd denna sajt och kryssa för alla program du vill installera, Chrome, Firefox, Skype, iTunes etc.

    När du ska ominstallera din dator tar det alltid lite tid att hitta alla program som man brukar ha, sen tar det tid att hämta hem och installera varje program som ofta också behöver starta om datorn. Nu finns det en sajt som samlar dessa program och bakar ihop de program du vill ha och skapar en gemensam installationsfil som automatiskt hämtar och installerar den senaste versionen av de markerade programmen. Det fina är också att installationsfilen som skapas endast innehåller länkar till företagens egna filer och börjar installera det första programmet under tiden som resterande program laddas ner!

    Lycka till!

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Installera alla program samtidigt!", + "meta_description": "installationspaket med alla dina favoritapplikationer!", + "author_id": 1087, + "created_at": 1256641620000, + "created_by": 1087, + "updated_at": 1256641620000, + "updated_by": 1087, + "published_at": 1256641620000, + "published_by": 1087 + }, + { + "id": 369, + "title": "Varning för att ersätta mappar på Mac", + "slug": "varning-for-att-ersatta-mappar-pa-mac", + "markdown": "\r\n\r\nEn väldigt viktig och farlig sak som är viktig att känna till när man byter från Windows till Apple OS X är vad som händer när man ersätter en mapp med en annan mapp. Om man har en mapp med semesterbilder på sin hårddisk och döpt mappen till 2009 – sedan vill man kopiera över en mapp från ett USB-minne som också heter 2009. I Windows skulle detta innebära att man slår ihop mapparna och finns det dubletter på filnivå kommer systemet att fråga vad man ska göra med de enskilda filerna. I ovanstående scenario i OS X kommer operativsystemet fråga om du är säker att du vill ersätta objektet med den nyare vilket betyder precis så – du ERSÄTTER den gamla 2009 mappen med den nya mappen och den gamla mappen finns ingenstans att hitta – inte ens i papperskorgen.\r\n\r\n\r\n\r\nDen gamla filen finns där bakom nånstans, det är ju ett UNIX-filsystem så det är ju bara själva referensen till mappen som är borta och jag vet att det finns massa tredjepartsprogram och UNIX-kommandon man kan köra för att göra en merge mellan mappar men det är inte det viktiga. Som användare är man väldigt förvånad när systemet beter sig så olika mellan Windows och OS X.\r\n\r\nDen tekniska skillnaden är att OS X ser mappar och filer på precis samma sätt – som objekt. När du ersätter en fil eller en mapp så spelar det ingen roll – referensen flyttas till att peka på ditt nya objekt och alla objekt utan referenser tas automatiskt bort från filsystemet. Detta finurliga sätt är väldigt mycket smartare i de flesta fallen jämfört med Windows NTFS som har filnamnet och sökvägen som referens och därför behöver låsa filer som används osv vilket kräver att installationsprogram behöver starta om datorn för att ersätta filer (eller använda Windows Shadow Copy som gör detta).\r\n\r\nOm någon har tips för hur man på ett enkelt sätt ska kunnna slå ihop mappar på en mac kan ni kommentera nedan – går det till exempel att hålla i en knapp för att ändra beteendet? Också – vet någon var man kan hitta objekt som har tappat sina referenser finns någonstans?\r\n\r\nI Windows 7 ser motsvarande dialog ut så här, dvs den frågar om du vill slå ihop mapparna:\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/633928391802687625-image001.png@01CA5C60.2E840420__image001.png)", + "html": "

    En väldigt viktig och farlig sak som är viktig att känna till när man byter från Windows till Apple OS X är vad som händer när man ersätter en mapp med en annan mapp. Om man har en mapp med semesterbilder på sin hårddisk och döpt mappen till 2009 – sedan vill man kopiera över en mapp från ett USB-minne som också heter 2009. I Windows skulle detta innebära att man slår ihop mapparna och finns det dubletter på filnivå kommer systemet att fråga vad man ska göra med de enskilda filerna. I ovanstående scenario i OS X kommer operativsystemet fråga om du är säker att du vill ersätta objektet med den nyare vilket betyder precis så – du ERSÄTTER den gamla 2009 mappen med den nya mappen och den gamla mappen finns ingenstans att hitta – inte ens i papperskorgen.

    Den gamla filen finns där bakom nånstans, det är ju ett UNIX-filsystem så det är ju bara själva referensen till mappen som är borta och jag vet att det finns massa tredjepartsprogram och UNIX-kommandon man kan köra för att göra en merge mellan mappar men det är inte det viktiga. Som användare är man väldigt förvånad när systemet beter sig så olika mellan Windows och OS X.

    Den tekniska skillnaden är att OS X ser mappar och filer på precis samma sätt – som objekt. När du ersätter en fil eller en mapp så spelar det ingen roll – referensen flyttas till att peka på ditt nya objekt och alla objekt utan referenser tas automatiskt bort från filsystemet. Detta finurliga sätt är väldigt mycket smartare i de flesta fallen jämfört med Windows NTFS som har filnamnet och sökvägen som referens och därför behöver låsa filer som används osv vilket kräver att installationsprogram behöver starta om datorn för att ersätta filer (eller använda Windows Shadow Copy som gör detta).

    Om någon har tips för hur man på ett enkelt sätt ska kunnna slå ihop mappar på en mac kan ni kommentera nedan – går det till exempel att hålla i en knapp för att ändra beteendet? Också – vet någon var man kan hitta objekt som har tappat sina referenser finns någonstans?

    I Windows 7 ser motsvarande dialog ut så här, dvs den frågar om du vill slå ihop mapparna:

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Varning för att ersätta mappar på Mac", + "meta_description": "", + "author_id": 1087, + "created_at": 1257242378000, + "created_by": 1087, + "updated_at": 1257242378000, + "updated_by": 1087, + "published_at": 1257242378000, + "published_by": 1087 + }, + { + "id": 372, + "title": "Inaktivera Windows Updates omstartsprompt", + "slug": "inaktivera-windows-updates-omstartsprompt", + "markdown": "\r\n\r\nEn av de mest irriterande saker jag vet är när man råkar initiera en serveromstart pga att Windows Update slänger upp en prompt om att det är dags att starta om datorn precis på det ställe där man just skall klicka på någonting annat.\r\n\r\nNi känner igen rutan:\r\n\r\nOm du klickar \"Restart Now\" får du ingen ytterligare prompt om att bekräfta, och servern starar om.\r\n\r\nSom tur är så går dessa notifieringar enkelt att ändra eller avaktivera genom en grupprincip (GPO):\r\n\r\nObjektet “Re-prompt for restart with scheduled installations” ligger under ”Local Computer Policy >  Computer Configuration > Administrative Templates > Windows Components > Windows Update”:\r\n\r\n\r\n\r\nDu kan antingen inaktivera eller sätta ett eget värde för hur ofta du vill bli notifierad (10 minuter är standard):\r\n\r\n\r\n\r\nUtför ändringen lokalt på berörda maskiner, eller skapa en domänbaserad GPO och associera med de maskingrupper du vill ändra.\r\n\r\nSjälvklart är det viktigt att man startar om datorn som en del av patchrutinen, men oftast vill man själv styra över när omstarten sker. Iom ändringen ovan så kommer WU fortfarande att notifiera dig om att en omstart väntar i aktivitetsfältet, men du slipper popup-prompten.\r\n\r\n![Bild](http://tekniken.nu/uploads/633936174790452825-vista.png)", + "html": "

    En av de mest irriterande saker jag vet är när man råkar initiera en serveromstart pga att Windows Update slänger upp en prompt om att det är dags att starta om datorn precis på det ställe där man just skall klicka på någonting annat.

    Ni känner igen rutan:


    Om du klickar \"Restart Now\" får du ingen ytterligare prompt om att bekräfta, och servern starar om.

    Som tur är så går dessa notifieringar enkelt att ändra eller avaktivera genom en grupprincip (GPO):

    Objektet “Re-prompt for restart with scheduled installations” ligger under ”Local Computer Policy >  Computer Configuration > Administrative Templates > Windows Components > Windows Update”:

    Du kan antingen inaktivera eller sätta ett eget värde för hur ofta du vill bli notifierad (10 minuter är standard):

    Utför ändringen lokalt på berörda maskiner, eller skapa en domänbaserad GPO och associera med de maskingrupper du vill ändra.

    Självklart är det viktigt att man startar om datorn som en del av patchrutinen, men oftast vill man själv styra över när omstarten sker. Iom ändringen ovan så kommer WU fortfarande att notifiera dig om att en omstart väntar i aktivitetsfältet, men du slipper popup-prompten.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Inaktivera Windows Updates omstartsprompt", + "meta_description": "", + "author_id": 1085, + "created_at": 1258020678000, + "created_by": 1085, + "updated_at": 1258020678000, + "updated_by": 1085, + "published_at": 1258020678000, + "published_by": 1085 + }, + { + "id": 375, + "title": "Otömbar papperskorg i Windows 7", + "slug": "otombar-papperskorg-i-windows-7", + "markdown": "\r\n\r\nJag har nu vid ett par tillfällen stött på den otömbara papperskorgen i Windows 7. Efter att man har klickat på ”Töm papperskorgen” så står det helt enkelt helt stilla, utan att den någonsin tömmer sig.\r\n\r\nLösningen är lyckligtvis relativt enkel.\r\n\r\nVi börjar med att visa dolda filer och systemfiler.\r\n\r\n\r\nStarta utforskaren, klicka på Ordna och välj sedan Mapp- och sökalternativ.Under Visning bockar du sedan bort ”Dölj skyddade operativsystemfiler” och bockar för att visa dolda filer, mappar och enheter.\r\nTa sedan bort mappen $Recycle.bin under C:\\ (kan även ligga under andra enheter, om det är de som krånglar.\r\n\r\nStarta om och njut av en fungerande papperskorg!\r\n\r\n![Bild](http://tekniken.nu/uploads/633946545257077449-202px-Recycle_bin.png)", + "html": "

    Jag har nu vid ett par tillfällen stött på den otömbara papperskorgen i Windows 7. Efter att man har klickat på ”Töm papperskorgen” så står det helt enkelt helt stilla, utan att den någonsin tömmer sig.

    Lösningen är lyckligtvis relativt enkel.

    Vi börjar med att visa dolda filer och systemfiler.

    • Starta utforskaren, klicka på Ordna och välj sedan Mapp- och sökalternativ.
    • Under Visning bockar du sedan bort ”Dölj skyddade operativsystemfiler” och bockar för att visa dolda filer, mappar och enheter.

    Ta sedan bort mappen $Recycle.bin under C:\\ (kan även ligga under andra enheter, om det är de som krånglar.

    Starta om och njut av en fungerande papperskorg!

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Otömbar papperskorg i Windows 7", + "meta_description": "", + "author_id": 1088, + "created_at": 1259057725000, + "created_by": 1088, + "updated_at": 1259057725000, + "updated_by": 1088, + "published_at": 1259057725000, + "published_by": 1088 + }, + { + "id": 380, + "title": "Installera HP-skrivare på Small Business Server", + "slug": "installera-hp-skrivare-pa-small-business-server", + "markdown": "\r\n\r\nI princip alla HP-skrivare har bra stöd för snart sagt alla versioner av Windows, inklusive Server och 64-bitarsversion. Därför blir man lite frustrerad när installationsprogrammet för drivrutinerna inte går att köra på Small Business Server. Installationsprogrammet stannar med meddelandet att ”operativsystemet stöds inte”. Känns lite extra larvigt eftersom SBS ju är en vanlig Windows Server med lite bundlade andra programvaror.\r\n\r\n\r\n\r\nNågonstans långt ner i HPs supportforum hittade jag lösningen, som är värdig den gamla IT-filmsklassikern The Net med Sandra Bullock:\r\n\r\nFör att komma vidare i installationen – håll ner CTRL och SHIFT och tryck på cancel. Alla applikationer och drivrutiner fungerar förstås fint på Small Business Server efter installationen.\r\n\r\n![Bild](http://tekniken.nu/uploads/633984521346867374-net.jpg)", + "html": "

    I princip alla HP-skrivare har bra stöd för snart sagt alla versioner av Windows, inklusive Server och 64-bitarsversion. Därför blir man lite frustrerad när installationsprogrammet för drivrutinerna inte går att köra på Small Business Server. Installationsprogrammet stannar med meddelandet att ”operativsystemet stöds inte”. Känns lite extra larvigt eftersom SBS ju är en vanlig Windows Server med lite bundlade andra programvaror.

    Någonstans långt ner i HPs supportforum hittade jag lösningen, som är värdig den gamla IT-filmsklassikern The Net med Sandra Bullock:

    För att komma vidare i installationen – håll ner CTRL och SHIFT och tryck på cancel. Alla applikationer och drivrutiner fungerar förstås fint på Small Business Server efter installationen.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Installera HP-skrivare på Small Business Server", + "meta_description": "", + "author_id": 6, + "created_at": 1262855333000, + "created_by": 6, + "updated_at": 1262855333000, + "updated_by": 6, + "published_at": 1262855333000, + "published_by": 6 + }, + { + "id": 389, + "title": "Slå ihop ledigt utrymme på en DELL Powervault MD3000i", + "slug": "sla-ihop-ledigt-utrymme-pa-en-dell-powervault-md3000i", + "markdown": "\r\n\r\nNär man tar bort en Virtuell disk i en Dell Powervault 3000i så lämnas lediga utrymmet från den borttagna disken isolerat i den gamla diskens plats istället för att slås ihop med övrigt ledigt utrymme i diskgruppen. Detta ställer ju till problem i alla scenarier där man inte är ute efter att skapa en ny identisk virtuell disk. Så här ser det ut i admingränssnittet:\r\n\r\n\r\n\r\nDet man vill uppnå är såklart att slå ihop det lediga utrymmet till en diskyta, men för den operationen saknas stöd i administrationsverktyget. Istället får man ta till command line interfacet SMcli och initiera en defrag. SMcli ligger normalt i mappen ”C:\\Program Files\\Dell\\MD Storage Manager\\client” och installeras tillsammans med adminverktygen.\r\n\r\nFör att initiera en defrag så kör man följande kommando:\r\n\r\nSMcli controller_0_IP  controller_1_IP -c “start diskGroup [1] defragment;”\r\n\r\nOm din MD3000i endast har en controller så anger du endast den IP-adressen, om array är lösnenordsskyddad lägger du till ”-p yourarraypassword”.\r\n\r\nVill man köra mot diskgruppens namn så använder man följande lite kryptiska formatering:\r\n\r\nSMcli controller_0_IP  controller_1_IP -c “start diskGroup [\\”NAMEOFDISKGROUP\\”] defragment;”\r\n\r\nProcessen kan ta ett bra tag beroende på storleken på din array, men syns tydligt i admingränssnittet under ”Operations in progress”.\r\n\r\n![Bild](http://tekniken.nu/uploads/md3000i.png)", + "html": "

    När man tar bort en Virtuell disk i en Dell Powervault 3000i så lämnas lediga utrymmet från den borttagna disken isolerat i den gamla diskens plats istället för att slås ihop med övrigt ledigt utrymme i diskgruppen. Detta ställer ju till problem i alla scenarier där man inte är ute efter att skapa en ny identisk virtuell disk. Så här ser det ut i admingränssnittet:

    Det man vill uppnå är såklart att slå ihop det lediga utrymmet till en diskyta, men för den operationen saknas stöd i administrationsverktyget. Istället får man ta till command line interfacet SMcli och initiera en defrag. SMcli ligger normalt i mappen ”C:\\Program Files\\Dell\\MD Storage Manager\\client” och installeras tillsammans med adminverktygen.

    För att initiera en defrag så kör man följande kommando:

    SMcli controller_0_IP  controller_1_IP -c “start diskGroup [1] defragment;”

    Om din MD3000i endast har en controller så anger du endast den IP-adressen, om array är lösnenordsskyddad lägger du till ”-p yourarraypassword”.

    Vill man köra mot diskgruppens namn så använder man följande lite kryptiska formatering:

    SMcli controller_0_IP  controller_1_IP -c “start diskGroup [\\”NAMEOFDISKGROUP\\”] defragment;”

    Processen kan ta ett bra tag beroende på storleken på din array, men syns tydligt i admingränssnittet under ”Operations in progress”.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Slå ihop ledigt utrymme på en DELL Powervault MD3000i", + "meta_description": "", + "author_id": 1085, + "created_at": 1267023716000, + "created_by": 1085, + "updated_at": 1267023716000, + "updated_by": 1085, + "published_at": 1267023716000, + "published_by": 1085 + }, + { + "id": 393, + "title": "Konvertera fysisk maskin till virtuell (P2V) för Hyper-V med XenConvert ", + "slug": "konvertera-fysisk-maskin-till-virtuell-p2v-for-hyper-v-med-xenconvert-", + "markdown": "\r\n\r\nJag stod nyligen inför uppdraget att konvertera några äldre fysiska maskiner till virtuella. Kunden kör Microsoft Hyper-V så mina tankar gick till System Center Virtual Machine Manager, SCVMM. Jag har tidigare använt det verktyget för konvertering men drog mig lite för att göra om det, då installationen är ganska omständlig.\r\n\r\nJag bestämde mig därför för att använda Citrix XenConvert istället, ett gratisverktyg från Citrix avsett att användas främst mot deras XenServer. Det går också att ställa den till att skapa VHD filer, något som passar mig utmärkt. XenConvert finns att ta hem från Citrix, logga in på ”MyCitrix” först och leta under XenServer downloads – det är inte lätt att hitta.\r\n\r\nTidigare versioner har varit begränsade av att bara kunna konvertera hårddiskar med en partition, något som snabbt ställer till problem. Med nuvarande 2.1 går det utan problem med fler. Bra att veta är att om din ursprungsserver har flera partitioner eller hårddiskar får du ändå bara en VHD fil, alltså inte en VHD per disk.\r\n\r\nNågra punkter att tänka på innan man börjar konvertering:\r\n\r\nEndast Server 2003, XP eller äldre går att konverteraEndast Basic disks, ej DynamicAutorun måste stängas av i registret. Mer om det här.Uppmappade nätverksdiskar får inte ha enhetsbokstäver direkt efterföljande dina fysiska diskar eller optiska enheter.\r\n\r\nNär jag konverterade körde jag till en USB-disk, att konvertera över nätverket var väldigt långsamt, trots bra hårdvara.\r\n\r\nNär konverteringen är klar och vi startar upp maskinen kommer rester av det fysiska nätverkskortet finnas kvar. Detta kommer att märkas genom att maskinen klagar när du sätter samma IP adress på det nya virtuella kortet som det gamla fysiska hade. Jag råkade också ut för att maskinerna fastnade på ”Applying computer settings” i tio minuter, tills de når timeout för GPO inställningar.\r\n\r\nAtt ta bort det spökande nätverkskortet är lite svårare än förväntat. Det går inte att se i ”Device Manager” trots ”Show hidden devices”\r\n\r\nIstället behöver man använda verktyget Devcon. Det går att ta hem härifrån.\r\n\r\nAnvänd sedan kommandot devcon findall  =net för att få fram en lista på installerade nätverksadaptrar. Hitta ID för de fysiska adaptrar som tidigare användes. Ditt ID kan se ut exempelvis så här:\r\n\r\nPCI\\VEN_14E4&DEV_167A&SUBSYS_01DA1028&REV_02\\4&19633CA3&0&00E4\r\n\r\nFör att ta bort adaptern ovan skriver man:\r\n\r\nDevcon remove ”@PCI\\VEN_14E4&DEV_167A&SUBSYS_01DA1028&REV_02\\4&19633CA3&0&00E4” - Missa inte @-tecknet i början.\r\n\r\nEfter en omstart ska inga nätverksproblem kvarstå och din nya virtuella maskin är klar för användning.\r\n\r\n![Bild](http://tekniken.nu/uploads/634037563996435635-image003.png@01CABEE9.F12B88E0__image003.png)", + "html": "

    Jag stod nyligen inför uppdraget att konvertera några äldre fysiska maskiner till virtuella. Kunden kör Microsoft Hyper-V så mina tankar gick till System Center Virtual Machine Manager, SCVMM. Jag har tidigare använt det verktyget för konvertering men drog mig lite för att göra om det, då installationen är ganska omständlig.

    Jag bestämde mig därför för att använda Citrix XenConvert istället, ett gratisverktyg från Citrix avsett att användas främst mot deras XenServer. Det går också att ställa den till att skapa VHD filer, något som passar mig utmärkt. XenConvert finns att ta hem från Citrix, logga in på ”MyCitrix” först och leta under XenServer downloads – det är inte lätt att hitta.

    Tidigare versioner har varit begränsade av att bara kunna konvertera hårddiskar med en partition, något som snabbt ställer till problem. Med nuvarande 2.1 går det utan problem med fler. Bra att veta är att om din ursprungsserver har flera partitioner eller hårddiskar får du ändå bara en VHD fil, alltså inte en VHD per disk.

    Några punkter att tänka på innan man börjar konvertering:

    • Endast Server 2003, XP eller äldre går att konvertera
    • Endast Basic disks, ej Dynamic
    • Autorun måste stängas av i registret. Mer om det här.
    • Uppmappade nätverksdiskar får inte ha enhetsbokstäver direkt efterföljande dina fysiska diskar eller optiska enheter.

    När jag konverterade körde jag till en USB-disk, att konvertera över nätverket var väldigt långsamt, trots bra hårdvara.

    När konverteringen är klar och vi startar upp maskinen kommer rester av det fysiska nätverkskortet finnas kvar. Detta kommer att märkas genom att maskinen klagar när du sätter samma IP adress på det nya virtuella kortet som det gamla fysiska hade. Jag råkade också ut för att maskinerna fastnade på ”Applying computer settings” i tio minuter, tills de når timeout för GPO inställningar.

    Att ta bort det spökande nätverkskortet är lite svårare än förväntat. Det går inte att se i ”Device Manager” trots ”Show hidden devices”

    Istället behöver man använda verktyget Devcon. Det går att ta hem härifrån.

    Använd sedan kommandot devcon findall  =net för att få fram en lista på installerade nätverksadaptrar. Hitta ID för de fysiska adaptrar som tidigare användes. Ditt ID kan se ut exempelvis så här:

    PCI\\VEN_14E4&DEV_167A&SUBSYS_01DA1028&REV_02\\4&19633CA3&0&00E4

    För att ta bort adaptern ovan skriver man:

    Devcon remove ”@PCI\\VEN_14E4&DEV_167A&SUBSYS_01DA1028&REV_02\\4&19633CA3&0&00E4” - Missa inte @-tecknet i början.

    Efter en omstart ska inga nätverksproblem kvarstå och din nya virtuella maskin är klar för användning.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Konvertera fysisk maskin till virtuell (P2V) för Hyper-V med XenConvert ", + "meta_description": "", + "author_id": 1088, + "created_at": 1268213640000, + "created_by": 1088, + "updated_at": 1268213640000, + "updated_by": 1088, + "published_at": 1268213640000, + "published_by": 1088 + }, + { + "id": 413, + "title": "Problem att få ljudet att fungera genom RDP mot en Windows server?", + "slug": "problem-att-fa-ljudet-att-fungera-genom-rdp-mot-en-windows-server", + "markdown": "\r\n\r\nJag har stött på detta på vid ett flertal tillfällen, både i Windows Server version 2003 och 2008. Nedan finner du ett par enkla steg för att få ljudet ut till dina högtalare.\r\nPå servern:Se till att tjänsten Windows Audio är startad samt att den står på automatisk uppstart.Gå sedan till Terminal Services Configuration. Dubbelklicka på RDP-TCP och gå till flikenClient Settings. Under Disable the following kryssar du ur Audio mapping. För att ändringen skall gå igenom måste man logga ut och sedan logga in på nytt.\r\n\r\nPå klientdatorn:Ställ in RDP-klienten (enligt bilden nedan) för att spela upp ljudet på din dator.\r\n\r\n![Bild](http://tekniken.nu/uploads/634104882274773832-Capture2.JPG)", + "html": "

    Jag har stött på detta på vid ett flertal tillfällen, både i Windows Server version 2003 och 2008. Nedan finner du ett par enkla steg för att få ljudet ut till dina högtalare.

    På servern:
    Se till att tjänsten Windows Audio är startad samt att den står på automatisk uppstart.
    Gå sedan till Terminal Services Configuration. Dubbelklicka på RDP-TCP och gå till flikenClient Settings. Under Disable the following kryssar du ur Audio mapping. För att ändringen skall gå igenom måste man logga ut och sedan logga in på nytt.

    På klientdatorn:
    Ställ in RDP-klienten (enligt bilden nedan) för att spela upp ljudet på din dator.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Problem att få ljudet att fungera genom RDP mot en Windows server?", + "meta_description": "", + "author_id": 1095, + "created_at": 1274891426000, + "created_by": 1095, + "updated_at": 1274891426000, + "updated_by": 1095, + "published_at": 1274891426000, + "published_by": 1095 + }, + { + "id": 427, + "title": "Så här får du rätt knappar på ditt Mac-tangentbord", + "slug": "sa-har-far-du-ratt-knappar-pa-ditt-mac-tangentbord", + "markdown": "\r\n\r\nOm du har ett Mac-tangentbord/Macbook och kör Windows XP, Vista eller Windows 7 så kan det vara praktiskt att mappa om några tangenter för att tangentbordet ska fungera mer som ett PC-tangentbord.\r\n\r\n\r\n\r\nDet är enkelt. Hämta gratisprogrammet SharpKeys (http://sharpkeys.codeplex.com) och skapa mappningar av följande knappar:\r\n\r\n\r\n\r\nHär växlar vi plats på CMD-tangenten och Alt vilket gör att du enklare kan växla fönster med ALT-TAB.\r\n\r\nFör oss svenskar sitter ju @ tangenten lite krångligt till med ALT-GR vilken inte finns på ett Mac tangentbord så den länkar vi om till den högra alt-knappen (Right-Alt) samt länkar även den högra CMD knappen till ALT så att den ligger rätt i fingersättningen (dvs du har nu två högra alt-knappar).\r\n\r\nNär du gjort dinna mappningar trycker du på Write to registry och sedan kan du avinstallera programmet. Det behöver inte vara igång för att mappningen ska fungera.\r\n\r\nDu kan också gå in i programmet BootCamp control panel och kryssa för att du vill använda dina F1-F12 tangenter som vanligt:\r\n\r\n![Bild](http://tekniken.nu/uploads/634127406374167381-image001.png@01CB116C.9908C4E0__image001.png)", + "html": "

    Om du har ett Mac-tangentbord/Macbook och kör Windows XP, Vista eller Windows 7 så kan det vara praktiskt att mappa om några tangenter för att tangentbordet ska fungera mer som ett PC-tangentbord.

    Det är enkelt. Hämta gratisprogrammet SharpKeys (http://sharpkeys.codeplex.com) och skapa mappningar av följande knappar:

    Här växlar vi plats på CMD-tangenten och Alt vilket gör att du enklare kan växla fönster med ALT-TAB.

    För oss svenskar sitter ju @ tangenten lite krångligt till med ALT-GR vilken inte finns på ett Mac tangentbord så den länkar vi om till den högra alt-knappen (Right-Alt) samt länkar även den högra CMD knappen till ALT så att den ligger rätt i fingersättningen (dvs du har nu två högra alt-knappar).

    När du gjort dinna mappningar trycker du på Write to registry och sedan kan du avinstallera programmet. Det behöver inte vara igång för att mappningen ska fungera.

    Du kan också gå in i programmet BootCamp control panel och kryssa för att du vill använda dina F1-F12 tangenter som vanligt:

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Så här får du rätt knappar på ditt Mac-tangentbord", + "meta_description": "", + "author_id": 1087, + "created_at": 1277143836000, + "created_by": 1087, + "updated_at": 1277143836000, + "updated_by": 1087, + "published_at": 1277143836000, + "published_by": 1087 + }, + { + "id": 459, + "title": "Tips för att undvika strul med DNS server", + "slug": "tips-for-att-undvika-strul-med-dns-server", + "markdown": "\r\nJust nu pågår en stor driftstörning hos Telia och för de som är drabbade kan man inte längre surfa på nätet om man har Telia bredband. DNS är en teknik som fungerar ungefär som en automatisk nummerupplysning men istället för telefonnummer slås IP adresser upp. När du skriver in www.aftonbladet.se så skickas en förfrågan till din routers DNS server som därefter frågar Telias DNS server och om någon av dessa inte längre fungerar blir resultatet att din webbläsare inte längre vet var den ska vända sig för att kontakta webbservern. Resultatet är alltså att trots att din uppkoppling fungerar utmärkt så kan du ändå inte surfa eller maila.\r\n\r\nFör att undvika strul med detta så finns det några knep och det bästa är att manuellt lägga in en sekundär DNS server i dina inställningar vilket innebär att om något strular med den vanliga DNS tjänsten så kommer datorn automatiskt pröva med den sekundära DNS servern.\r\n\r\nGoogle tillhandahåller gratis en DNS tjänst som har hög driftsäkerhet och bra prestanda och dessutom har den en väldigt enkel IP-adress som gör det enkelt att komma ihåg: 8.8.8.8 och 8.8.4.4\r\n\r\nFör att ställa in sekundär DNS i Windows 7 går du först till kontrollpanelen, väljer nätverksinställningar, klickar på länken till vänster i rutan som heter Ändra adapterinställningar. Därefter högerklickar du på det nätverkskort som du surfar genom (vanligtvis trådlös uppkoppling), välj Egenskaper.\r\n\r\n\r\n\r\nNu markerar du TCP/IP version 4 i listan och väljer Egenskaper. Här kan du nu fylla i DNS server inställningar manuellt. Med följande inställningar använder du alltid Googles DNS servrar:\r\n\r\n\r\n\r\nFör att behålla din gamla DNS server behöver du först ta reda på vilken adress du tidigare hade och det gör du enklast genom att starta kommandotolken via startmenyn: ”CMD”. Därefter skriver du ”ipconfig /all”\r\n\r\n\r\n\r\nDärefter kontrollerar du raden som står DNS Server. Skriv ner din gamla DNS server och fyll i det i fältet ovan ”preferred DNS server”\r\n\r\n\r\n\r\nNu kommer din internetuppkoppling fungera bra även om din bredbandsleverantör har problem och störningar med DNS.\r\n\r\nChristian\r\n![Bild](http://tekniken.nu/uploads/634275276692030194-image001.png)", + "html": "

    Just nu pågår en stor driftstörning hos Telia och för de som är drabbade kan man inte längre surfa på nätet om man har Telia bredband. DNS är en teknik som fungerar ungefär som en automatisk nummerupplysning men istället för telefonnummer slås IP adresser upp. När du skriver in www.aftonbladet.se så skickas en förfrågan till din routers DNS server som därefter frågar Telias DNS server och om någon av dessa inte längre fungerar blir resultatet att din webbläsare inte längre vet var den ska vända sig för att kontakta webbservern. Resultatet är alltså att trots att din uppkoppling fungerar utmärkt så kan du ändå inte surfa eller maila.

    För att undvika strul med detta så finns det några knep och det bästa är att manuellt lägga in en sekundär DNS server i dina inställningar vilket innebär att om något strular med den vanliga DNS tjänsten så kommer datorn automatiskt pröva med den sekundära DNS servern.

    Google tillhandahåller gratis en DNS tjänst som har hög driftsäkerhet och bra prestanda och dessutom har den en väldigt enkel IP-adress som gör det enkelt att komma ihåg: 8.8.8.8 och 8.8.4.4

    För att ställa in sekundär DNS i Windows 7 går du först till kontrollpanelen, väljer nätverksinställningar, klickar på länken till vänster i rutan som heter Ändra adapterinställningar. Därefter högerklickar du på det nätverkskort som du surfar genom (vanligtvis trådlös uppkoppling), välj Egenskaper.

    Nu markerar du TCP/IP version 4 i listan och väljer Egenskaper. Här kan du nu fylla i DNS server inställningar manuellt. Med följande inställningar använder du alltid Googles DNS servrar:

    För att behålla din gamla DNS server behöver du först ta reda på vilken adress du tidigare hade och det gör du enklast genom att starta kommandotolken via startmenyn: ”CMD”. Därefter skriver du ”ipconfig /all”

    Därefter kontrollerar du raden som står DNS Server. Skriv ner din gamla DNS server och fyll i det i fältet ovan ”preferred DNS server”

    Nu kommer din internetuppkoppling fungera bra även om din bredbandsleverantör har problem och störningar med DNS.

    Christian", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Tips för att undvika strul med DNS server", + "meta_description": "", + "author_id": 1087, + "created_at": 1292234520000, + "created_by": 1087, + "updated_at": 1292234520000, + "updated_by": 1087, + "published_at": 1292234520000, + "published_by": 1087 + }, + { + "id": 462, + "title": "Flytta in gamla AD användare till Windows SBS 2008 Console", + "slug": "flytta-in-gamla-ad-anvandare-till-windows-sbs-2008-console", + "markdown": "\r\n\r\nVid migrering från Windows Server 2003 standard till Small Business Server 2008 ser det vid första anblicken ut som att alla användare inte hängt med.\r\n\r\nOm du vill använda dig av SBS Console behöver du göra ett litet knep till.\r\n\r\nDet går inte att bara placera användarna i ”rätt” OU, det vill säga SBSUsers. Det går inte heller att bara göra användaren medlem av rätt grupper.\r\n\r\nDet man måste göra är att i SBS Console under Users välja ”Change user role for user accounts”.\r\n\r\nVälj därefter exempelvis ”Standard user” och ”Add user permissions or settings” för att inte ta bort befintliga grupper. Efter att ha klickat next kommer vi till kryssrutan man saknar i själva SBS Console; ”Display all user accounts in Active Directory”.\r\n\r\nKryssa i den och välj dina användare, klicka på ”Change user role”\r\n\r\nAnvändaren dyker därefter snällt upp i SBS Console.\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/634286895219432782-image002.jpg@01CBA12B.5DBDB310__image002.jpg)", + "html": "

    Vid migrering från Windows Server 2003 standard till Small Business Server 2008 ser det vid första anblicken ut som att alla användare inte hängt med.

    Om du vill använda dig av SBS Console behöver du göra ett litet knep till.

    Det går inte att bara placera användarna i ”rätt” OU, det vill säga SBSUsers. Det går inte heller att bara göra användaren medlem av rätt grupper.

    Det man måste göra är att i SBS Console under Users välja ”Change user role for user accounts”.

    Välj därefter exempelvis ”Standard user” och ”Add user permissions or settings” för att inte ta bort befintliga grupper. Efter att ha klickat next kommer vi till kryssrutan man saknar i själva SBS Console; ”Display all user accounts in Active Directory”.

    Kryssa i den och välj dina användare, klicka på ”Change user role”

    Användaren dyker därefter snällt upp i SBS Console.


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Flytta in gamla AD användare till Windows SBS 2008 Console", + "meta_description": "", + "author_id": 1088, + "created_at": 1293092719000, + "created_by": 1088, + "updated_at": 1293092719000, + "updated_by": 1088, + "published_at": 1293092719000, + "published_by": 1088 + }, + { + "id": 483, + "title": "Windows Update på MacBook Air orsakade uppstartsproblem", + "slug": "windows-update-pa-macbook-air-orsakade-uppstartsproblem", + "markdown": "\r\n## Apple Multitouch 3.2.0.1 x64 Driver Windows 7 – Windows Update BSOD \r\nDet installerades en härlig Windows Update uppdatering automatiskt på min MacBook Air som gjorde att den efter omstart aldrig mer ville starta upp i Windows-läge.\r\n## Anledning\r\nWindows Update gjorde sin uppdatering innehållande en uppdatering på sin Multitouch (samt Apple Magic Mouse?). Den uppdateringen i kombination med BootCamp 3.1 gjorde att datorn aldrig mer kunde starta upp.\r\n\r\nDet klagades vid omstart på drivrutinen applemtp.sys och på applemtm.sys.\r\n## Här är lösningen, steg-för-steg\r\nEfter prövning med många olika varianter som t.ex. restore till tidigare datum, starta upp i felsäkert läge (som inte gick på grund av att drivrutinen lästes in) så lyckades jag äntligen lösa problemet.\r\n\r\n1.   Starta upp datorn i ”Startup repair” läget.\r\n\r\n2.   Låt den försöka lösa det på egen hand (som inte kommer gå men man kan inte hoppa över detta steg).\r\n\r\n3.   Välj ”view advanced options for system recovery and support”\r\n\r\n4.   Välj ”Command Prompt”\r\n\r\n5.   Ta dig fram till ”C:\\Windows\\System32\\DriverStore\\FileRepository\\applemtp.....” (resten av filnamnet är olika beroende på om det är 32 eller 64 bitars)\r\n\r\n6.   Gå in i mappen ”applemtp...”-mappen\r\n\r\n7.   Skapa där en tempmapp och flytta in alla filer dit från denna mapp alternativt ta bort filerna\r\n\r\n8.   Gör samma sak fast med ”applemtm...”-mappen\r\n\r\n9.   Gå sedan till ”C:\\Windows\\System32\\Drivers” och byt filändelse på applemtp.sys och applemtm.sys så de inte körs vid uppstart (t.ex. till .old eller .tmp)\r\n\r\n10. Starta om datorn\r\n\r\n11. När windows 7 nu äntligen startar uppdatera BootCamp till 3.2 (Tips, ha en annan mus till hands annars är det jobbigt att uppdatera BootCamp eftersom både Multitouch och Magic Mouse slutar att fungera, det märkte jag!)\r\n\r\n12. Nu fungerar datorn som den ska igen\r\n\r\nIbland är det härligt med MacBooks och Windows ihop!\r\n", + "html": "

    Apple Multitouch 3.2.0.1 x64 Driver Windows 7 – Windows Update BSOD

    Det installerades en härlig Windows Update uppdatering automatiskt på min MacBook Air som gjorde att den efter omstart aldrig mer ville starta upp i Windows-läge.

    Anledning

    Windows Update gjorde sin uppdatering innehållande en uppdatering på sin Multitouch (samt Apple Magic Mouse?). Den uppdateringen i kombination med BootCamp 3.1 gjorde att datorn aldrig mer kunde starta upp.

    Det klagades vid omstart på drivrutinen applemtp.sys och på applemtm.sys.

    Här är lösningen, steg-för-steg

    Efter prövning med många olika varianter som t.ex. restore till tidigare datum, starta upp i felsäkert läge (som inte gick på grund av att drivrutinen lästes in) så lyckades jag äntligen lösa problemet.

    1.   Starta upp datorn i ”Startup repair” läget.

    2.   Låt den försöka lösa det på egen hand (som inte kommer gå men man kan inte hoppa över detta steg).

    3.   Välj ”view advanced options for system recovery and support”

    4.   Välj ”Command Prompt”

    5.   Ta dig fram till ”C:\\Windows\\System32\\DriverStore\\FileRepository\\applemtp.....” (resten av filnamnet är olika beroende på om det är 32 eller 64 bitars)

    6.   Gå in i mappen ”applemtp...”-mappen

    7.   Skapa där en tempmapp och flytta in alla filer dit från denna mapp alternativt ta bort filerna

    8.   Gör samma sak fast med ”applemtm...”-mappen

    9.   Gå sedan till ”C:\\Windows\\System32\\Drivers” och byt filändelse på applemtp.sys och applemtm.sys så de inte körs vid uppstart (t.ex. till .old eller .tmp)

    10. Starta om datorn

    11. När windows 7 nu äntligen startar uppdatera BootCamp till 3.2 (Tips, ha en annan mus till hands annars är det jobbigt att uppdatera BootCamp eftersom både Multitouch och Magic Mouse slutar att fungera, det märkte jag!)

    12. Nu fungerar datorn som den ska igen

    Ibland är det härligt med MacBooks och Windows ihop!

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Windows Update på MacBook Air orsakade uppstartsproblem", + "meta_description": "", + "author_id": 1094, + "created_at": 1298886600000, + "created_by": 1094, + "updated_at": 1298886600000, + "updated_by": 1094, + "published_at": 1298886600000, + "published_by": 1094 + }, + { + "id": 484, + "title": "Uppladdningsproblem i Facebook på iPhone", + "slug": "uppladdningsproblem-i-facebook-pa-iphone", + "markdown": "\r\nJag har under en längre tid haft problem med att ladda upp bilder i Facebook-appen på iPhone. Det funkar ibland, men strular oftast när man postar en bild på sin egen eller ännu oftare någon annans wall. Trött på detta problem hittade jag till slut en supporttråd på Facebook.com med lösningen:Kontrollera att location services är påslaget för Facebook (du hittar detta i inställningar). Av någon anledning så var location services avslagen för Facebook. Med den påslagen fungerar uppladdningen korrekt Det framgår inte varför fotouppladdningsfunktionen behöver GPS:en, i nuläget visas ju ingen plats i anslutning till foton...", + "html": "

    Jag har under en längre tid haft problem med att ladda upp bilder i Facebook-appen på iPhone. Det funkar ibland, men strular oftast när man postar en bild på sin egen eller ännu oftare någon annans wall. Trött på detta problem hittade jag till slut en supporttråd på Facebook.com med lösningen:

    Kontrollera att location services är påslaget för Facebook (du hittar detta i inställningar).

    Av någon anledning så var location services avslagen för Facebook. Med den påslagen fungerar uppladdningen korrekt Det framgår inte varför fotouppladdningsfunktionen behöver GPS:en, i nuläget visas ju ingen plats i anslutning till foton...


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Uppladdningsproblem i Facebook på iPhone", + "meta_description": "", + "author_id": 6, + "created_at": 1298380320000, + "created_by": 6, + "updated_at": 1298380320000, + "updated_by": 6, + "published_at": 1298380320000, + "published_by": 6 + }, + { + "id": 504, + "title": "Varning för OCZ SSD i Latitude E serie", + "slug": "varning-for-ocz-ssd-i-latitude-e-serie", + "markdown": "\r\n\r\nVi har sett en tydlig trend att SSD diskar från OCZ (Vertex 2) i Dell Latitude e-serien ofta leder till krasch. Vår statistik visar till och med att nästan 50% av diskarna har gått sönder. De vi däremot har använt i stationära datorer har hittills hållit utan problem.\r\n\r\nDe går sönder på två olika sätt, båda lika illa;\r\n\r\n1.  Disken går att spara till men glömmer all information när strömmen bryts.\r\n\r\n2.  Disken blir helt okontaktbar.\r\n\r\nI och med dessa problem har vi också insett ett annat problem med SSD i allmänhet. När olyckan väl är framme är det i princip omöjligt att återfå data. Mekaniska diskar går oftast att reparera, om inte med mjukvara så med utbyte av komponenter. Sådana rutiner finns ännu inte för SSD.\r\n\r\nVårt tips är därmed (som vanligt) – ha en bra backup! Billig och enkel onlinebackup är exempelvis Backblaze.\r\n\r\n![Bild](http://tekniken.nu/uploads/634405526131047732-image001.png@01CC0E3E.320659E0__image001.png)", + "html": "

    Vi har sett en tydlig trend att SSD diskar från OCZ (Vertex 2) i Dell Latitude e-serien ofta leder till krasch. Vår statistik visar till och med att nästan 50% av diskarna har gått sönder. De vi däremot har använt i stationära datorer har hittills hållit utan problem.

    De går sönder på två olika sätt, båda lika illa;

    1.  Disken går att spara till men glömmer all information när strömmen bryts.

    2.  Disken blir helt okontaktbar.

    I och med dessa problem har vi också insett ett annat problem med SSD i allmänhet. När olyckan väl är framme är det i princip omöjligt att återfå data. Mekaniska diskar går oftast att reparera, om inte med mjukvara så med utbyte av komponenter. Sådana rutiner finns ännu inte för SSD.

    Vårt tips är därmed (som vanligt) – ha en bra backup! Billig och enkel onlinebackup är exempelvis Backblaze.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Varning för OCZ SSD i Latitude E serie", + "meta_description": "", + "author_id": 1088, + "created_at": 1304956200000, + "created_by": 1088, + "updated_at": 1304956200000, + "updated_by": 1088, + "published_at": 1304956200000, + "published_by": 1088 + }, + { + "id": 507, + "title": "Slå på kompression i TMG 2010", + "slug": "sla-pa-kompression-i-tmg-2010", + "markdown": "\r\n\r\nEfter att ha slagit på både static och dynamic compression för en site hostad på IIS 7.5 märkte vi att trafiken utifrån ändå inte blev komprimerad.\r\n\r\nBoven i det här fallet var vår TMG (Microsoft Forefront Threat Management Gateway) som ändrar i den externa klientens förfrågan så att ”accept-encoding:gzip,deflate” inte följer med. Vår webserver tolkar det då som att klienten inte kan hantera komprimerad trafik.\r\n\r\nTvå knep krävs för att lösa problemet.\r\n\r\nBörja med att stänga av ”Compression Filter” i TMG, görs under System -> Web Filters.\r\n\r\nDärefter behöver vi göra en ändring som det tyvärr saknas en enkel kryssruta för.\r\n\r\nVi behöver ändra SendAcceptEncodingHeader till True för vår inkommande regel till webservern.\r\n\r\nSkapa en ny skriptfil och fyll den med koden härifrån.\r\n\r\nKör den med hjälp av cscript filnamn ”regelnamn”.\r\n\r\nOm allting gick vägen svarar den snällt ”Done!”.\r\n\r\n![Bild](http://tekniken.nu/uploads/634413917980920681-image001.png@01CC154F.2F67E740__image001.png)", + "html": "

    Efter att ha slagit på både static och dynamic compression för en site hostad på IIS 7.5 märkte vi att trafiken utifrån ändå inte blev komprimerad.

    Boven i det här fallet var vår TMG (Microsoft Forefront Threat Management Gateway) som ändrar i den externa klientens förfrågan så att ”accept-encoding:gzip,deflate” inte följer med. Vår webserver tolkar det då som att klienten inte kan hantera komprimerad trafik.

    Två knep krävs för att lösa problemet.

    Börja med att stänga av ”Compression Filter” i TMG, görs under System -> Web Filters.

    Därefter behöver vi göra en ändring som det tyvärr saknas en enkel kryssruta för.

    Vi behöver ändra SendAcceptEncodingHeader till True för vår inkommande regel till webservern.

    Skapa en ny skriptfil och fyll den med koden härifrån.

    Kör den med hjälp av cscript filnamn ”regelnamn”.

    Om allting gick vägen svarar den snällt ”Done!”.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Slå på kompression i TMG 2010", + "meta_description": "", + "author_id": 1088, + "created_at": 1305794997000, + "created_by": 1088, + "updated_at": 1305794997000, + "updated_by": 1088, + "published_at": 1305794997000, + "published_by": 1088 + }, + { + "id": 510, + "title": "Bästa online backupen - Backblaze", + "slug": "basta-online-backupen---backblaze", + "markdown": "\r\n\r\nDen är enkel att komma igång med, funkar på både Mac och PC, säkerhetskopierar obegränsad mängd data – och kostar dessutom bara 27kr/mån. Vad är haken?\r\n\r\nDet låter nästan för bra för att vara sant – men den finns där ute. Den enklaste backupplösningen på länge. Och inte nog med fördelarna som redan nämnts – en utav de mest fördelaktiga sakerna är att du kan återställa dina filer helt gratis – nått som inte alls är självklart hos andra backup-leverantörer.\r\n## Så här skaffar du Backblaze\r\nGå till www.backblaze.com för att ladda hem programmet så är du snart igång. I kontrollpanelen kan du välja filter på filnamn, filtyper och sökvägar som du inte vill ha med i backkuppen. Det går också att välja vilken hastighet/bandbredd som tjänsten skall få tillträde till. En rekommendation är att ställa upp hastigheten till max tills alla dina filer är backade – det kan ta flera veckor att få allt backuppat första gången annars. Du kan löpande titta i kontrollpanelen och tydligt se din aktuella backup-status.\r\n\r\n\r\n## Enkelt att återställa dina filer\r\nNär du vill kan du enkelt återfå filer från din backup. Du går helt enkelt till www.backblaze.com och loggar in. Här väljer du mellan tre alternativ. Ladda hem en zipfil med valda filer (0 kr), få en DVD hemskickad till dig (620kr per skiva) eller få en helt ny USB-hårddisk skickad till dig för 1200kr per 400GB).\r\n\r\n![Bild](http://tekniken.nu/uploads/634418417175959224-image001.gif@01CC19F2.4F460270__image001.gif)", + "html": "

    Den är enkel att komma igång med, funkar på både Mac och PC, säkerhetskopierar obegränsad mängd data – och kostar dessutom bara 27kr/mån. Vad är haken?

    Det låter nästan för bra för att vara sant – men den finns där ute. Den enklaste backupplösningen på länge. Och inte nog med fördelarna som redan nämnts – en utav de mest fördelaktiga sakerna är att du kan återställa dina filer helt gratis – nått som inte alls är självklart hos andra backup-leverantörer.

    Så här skaffar du Backblaze

    Gå till www.backblaze.com för att ladda hem programmet så är du snart igång. I kontrollpanelen kan du välja filter på filnamn, filtyper och sökvägar som du inte vill ha med i backkuppen. Det går också att välja vilken hastighet/bandbredd som tjänsten skall få tillträde till. En rekommendation är att ställa upp hastigheten till max tills alla dina filer är backade – det kan ta flera veckor att få allt backuppat första gången annars. Du kan löpande titta i kontrollpanelen och tydligt se din aktuella backup-status.


    Enkelt att återställa dina filer

    När du vill kan du enkelt återfå filer från din backup. Du går helt enkelt till www.backblaze.com och loggar in. Här väljer du mellan tre alternativ. Ladda hem en zipfil med valda filer (0 kr), få en DVD hemskickad till dig (620kr per skiva) eller få en helt ny USB-hårddisk skickad till dig för 1200kr per 400GB).

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Bästa online backupen - Backblaze", + "meta_description": "", + "author_id": 1097, + "created_at": 1306920000000, + "created_by": 1097, + "updated_at": 1306920000000, + "updated_by": 1097, + "published_at": 1306920000000, + "published_by": 1097 + }, + { + "id": 531, + "title": "RSA bekräftar: SecurID hackat", + "slug": "rsa-bekraftar-securid-hackat", + "markdown": "\r\n\r\nI mars fick vi höra att RSA som står bakom SecurID hade blivit utsatta för ett intrång. De har hela tiden varit tystlåtna om vilken omfattning detta intrång hade. Vi märkte dock att vi som återförsäljare hade svårt att få tag på SecurID dosor.\r\n\r\nRSA har nu bekräftat intrånget har lett till minskad säkerhet för användare av den här tekniken.\r\n\r\nEn hacker kan nu med hjälp av siffrorna på baksidan av en dosa, i kombination med användarnamn och PIN kod, komma över hemlig information. Det är alltså fortfarande inte helt enkelt att komma förbi den säkerheten.\r\n\r\nRSA kommer att ersätta de runt 40-miljoner dosor som finns på marknaden med nya, baserade på en ny seed, till de kunder som kräver det.\r\n\r\n\r\n\r\nMer information på länken nedan;http://arstechnica.com/#!/security/news/2011/06/rsa-finally-comes-clean-securid-is-compromised.ars\r\n\r\n![Bild](http://tekniken.nu/uploads/securid.png)", + "html": "

    I mars fick vi höra att RSA som står bakom SecurID hade blivit utsatta för ett intrång. De har hela tiden varit tystlåtna om vilken omfattning detta intrång hade. Vi märkte dock att vi som återförsäljare hade svårt att få tag på SecurID dosor.

    RSA har nu bekräftat intrånget har lett till minskad säkerhet för användare av den här tekniken.

    En hacker kan nu med hjälp av siffrorna på baksidan av en dosa, i kombination med användarnamn och PIN kod, komma över hemlig information. Det är alltså fortfarande inte helt enkelt att komma förbi den säkerheten.

    RSA kommer att ersätta de runt 40-miljoner dosor som finns på marknaden med nya, baserade på en ny seed, till de kunder som kräver det.


    Mer information på länken nedan;
    http://arstechnica.com/#!/security/news/2011/06/rsa-finally-comes-clean-securid-is-compromised.ars

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "RSA bekräftar: SecurID hackat", + "meta_description": "", + "author_id": 1088, + "created_at": 1307612700000, + "created_by": 1088, + "updated_at": 1307612700000, + "updated_by": 1088, + "published_at": 1307612700000, + "published_by": 1088 + }, + { + "id": 533, + "title": "Workspaces i TFS build server - så här tar du bort dem", + "slug": "workspaces-i-tfs-build-server---sa-har-tar-du-bort-dem", + "markdown": "\r\nEtt fel som ibland dyker upp i TFS builds är:\r\n\r\nThe working folder D:\\...\\trunk is already in use by the workspace XX;DOMAIN\\tfs-build on computer XX.\r\n\r\nEftersom felet försvinner av sig självt ibland blir det extra svårt att felsöka. Det enkla svaret på lösning är att köra kommandot: tf workspaces /remove:*\r\n\r\nProblemet med byggservern är bara att workspaces är knutna till det användarkonto som byggserverns servicekonto körs med. Dvs, om du fjärrstyr servern som har byggservern installerad och kör kommandoprompten och sedan kommandot kommer de workspaces som ska tas bort inte synas i listan och därmed är problemet kvar.\r\n\r\nFör att lösa detta kör man antingen Runas /user:DOMAIN\\tfs-build   och sedan samma kommando som ovan. Tyvärr verkar det inte fungera som det är tänkt så vår lösning var att köra\r\n\r\nRunas /user:DOMAIN\\tfs-build devenv.exe\r\n\r\nOch sedan i Manage Workspace i Visual Studio kan man sedan ta bort alla workspaces (ja, man kan markera flera som tur är ;)\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/634437457112490850-image001.png@01CC26CF.A266BEB0__image001.png)", + "html": "

    Ett fel som ibland dyker upp i TFS builds är:

    The working folder D:\\...\\trunk is already in use by the workspace XX;DOMAIN\\tfs-build on computer XX.

    Eftersom felet försvinner av sig självt ibland blir det extra svårt att felsöka. Det enkla svaret på lösning är att köra kommandot: tf workspaces /remove:*

    Problemet med byggservern är bara att workspaces är knutna till det användarkonto som byggserverns servicekonto körs med. Dvs, om du fjärrstyr servern som har byggservern installerad och kör kommandoprompten och sedan kommandot kommer de workspaces som ska tas bort inte synas i listan och därmed är problemet kvar.

    För att lösa detta kör man antingen Runas /user:DOMAIN\\tfs-build   och sedan samma kommando som ovan. Tyvärr verkar det inte fungera som det är tänkt så vår lösning var att köra

    Runas /user:DOMAIN\\tfs-build devenv.exe

    Och sedan i Manage Workspace i Visual Studio kan man sedan ta bort alla workspaces (ja, man kan markera flera som tur är ;)

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Workspaces i TFS build server - så här tar du bort dem", + "meta_description": null, + "author_id": 1087, + "created_at": 1308148911000, + "created_by": 1087, + "updated_at": 1308148911000, + "updated_by": 1087, + "published_at": 1308148911000, + "published_by": 1087 + }, + { + "id": 539, + "title": "Fel 500 i IIS 7 - mapprättigheter", + "slug": "fel-500-i-iis-7---mapprattigheter", + "markdown": "\r\n\r\nNär man sätter upp en ny site i IIS 7 behöver man ta sig en extra funderare för att få rättigheterna rätt på mapparna.\r\n\r\nDe flesta sätter Network Service som identitet för applikationspoolen. Helt logiskt borde då också Network Service få läsrättigheter på den berörda sitens mappstruktur. Detta räcker dock inte om siten ska kunna nås anonymt. Om vi inte också lägger till localhost\\Users gruppen som läsrättighet kommer det inte att fungera utan genererar fel 500.\r\n\r\nDetta är för att den anonyma användaren (som är med i localhost\\users) inte har läsrättighet till mappen annars.\r\n\r\nFör att komma runt det problemet gå in i IIS manager under Authentication. Välj Edit på ”Anonymous Authentication” – bocka där i att den anonyma användare ska använda applikationspoolens identitet. På det här viset har vi bara en rättighet vi behöver tänka på.\r\n\r\nVill vi göra det helt rätt ger vi därefter varje applikationspool (och site) en egen identitet. Gör vi på det viset har vi isolerat siterna från varandra.\r\n\r\n![Bild](http://tekniken.nu/uploads/634483954400743255-image001.png@01CC529E.01A3BC80__image001.png)", + "html": "

    När man sätter upp en ny site i IIS 7 behöver man ta sig en extra funderare för att få rättigheterna rätt på mapparna.

    De flesta sätter Network Service som identitet för applikationspoolen. Helt logiskt borde då också Network Service få läsrättigheter på den berörda sitens mappstruktur. Detta räcker dock inte om siten ska kunna nås anonymt. Om vi inte också lägger till localhost\\Users gruppen som läsrättighet kommer det inte att fungera utan genererar fel 500.

    Detta är för att den anonyma användaren (som är med i localhost\\users) inte har läsrättighet till mappen annars.

    För att komma runt det problemet gå in i IIS manager under Authentication. Välj Edit på ”Anonymous Authentication” – bocka där i att den anonyma användare ska använda applikationspoolens identitet. På det här viset har vi bara en rättighet vi behöver tänka på.

    Vill vi göra det helt rätt ger vi därefter varje applikationspool (och site) en egen identitet. Gör vi på det viset har vi isolerat siterna från varandra.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Fel 500 i IIS 7 - mapprättigheter", + "meta_description": "", + "author_id": 1088, + "created_at": 1312798638000, + "created_by": 1088, + "updated_at": 1312798638000, + "updated_by": 1088, + "published_at": 1312798638000, + "published_by": 1088 + }, + { + "id": 548, + "title": "Camera Codec Pack", + "slug": "camera-codec-pack", + "markdown": "\r\n\r\nMed jämna mellanrum stöter jag på problem med att öppna RAW filer skapade av digitala systemkameror.\r\n\r\n\r\n\r\nI de flesta fall krävs att man får tag på en korrekt codec från tillverkaren för att öppna filerna. Senaste gången gällde det Pentax *ist Dl som skapar PEF-filer. Pentax själva har inte släppt någon codec för 64-bitars Windows 7 och verkar inte planera att göra det heller.\r\n\r\nLösningen kom som tur är förra månaden, Microsoft har släppt Camera Codec Pack som klarar av de vanligaste kamerornas format.\r\n\r\nMer information och nedladdning finns här.\r\n\r\nAlternativet är att öppna med Adobe Photoshop Lightroom som dessutom är en tämligen smidig bildbehandlare, kostar därefter dock.\r\n", + "html": "

    Med jämna mellanrum stöter jag på problem med att öppna RAW filer skapade av digitala systemkameror.

    I de flesta fall krävs att man får tag på en korrekt codec från tillverkaren för att öppna filerna. Senaste gången gällde det Pentax *ist Dl som skapar PEF-filer. Pentax själva har inte släppt någon codec för 64-bitars Windows 7 och verkar inte planera att göra det heller.

    Lösningen kom som tur är förra månaden, Microsoft har släppt Camera Codec Pack som klarar av de vanligaste kamerornas format.

    Mer information och nedladdning finns här.

    Alternativet är att öppna med Adobe Photoshop Lightroom som dessutom är en tämligen smidig bildbehandlare, kostar därefter dock.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Camera Codec Pack", + "meta_description": "", + "author_id": 1088, + "created_at": 1314175260000, + "created_by": 1088, + "updated_at": 1314175260000, + "updated_by": 1088, + "published_at": 1314175260000, + "published_by": 1088 + }, + { + "id": 560, + "title": "Outlook 2010 hittar inte min gamla NK2-fil!", + "slug": "outlook-2010-hittar-inte-min-gamla-nk2-fil", + "markdown": "\r\n\r\nEfter att du flyttat din NK2-fil (smeknamnscachen) från äldre versioner av Outlook till en ny dator med Outlook 2010, kan du behöva göra ett par enkla steg för att få in alla dina gamla snabb-adresser.\r\nFlytta filen till%appdata%\\Microsoft\\Outlook och se till att NK2-filen har samma namn som din Outlook-profil. Default är Outlook och NK2-filen bör då döpas till outlook.nk2Skulle Outlook av någon anledning inte känna av din NK2-fil får du starta Outlook med kommandotoutlook.exe /importnk2. Innehållet i filen importeras till ett dolt meddelande i standardarkivet. Efter importen döps nk2-filen om till nk2.old\r\nMer information om detta finns att läsa på: http://support.microsoft.com/kb/980542/sv\r\n\r\n![Bild](http://tekniken.nu/uploads/outlook_2007_logo.jpg)", + "html": "

    Efter att du flyttat din NK2-fil (smeknamnscachen) från äldre versioner av Outlook till en ny dator med Outlook 2010, kan du behöva göra ett par enkla steg för att få in alla dina gamla snabb-adresser.

    1. Flytta filen till%appdata%\\Microsoft\\Outlook och se till att NK2-filen har samma namn som din Outlook-profil. Default är Outlook och NK2-filen bör då döpas till outlook.nk2
    2. Skulle Outlook av någon anledning inte känna av din NK2-fil får du starta Outlook med kommandotoutlook.exe /importnk2. Innehållet i filen importeras till ett dolt meddelande i standardarkivet. Efter importen döps nk2-filen om till nk2.old

    Mer information om detta finns att läsa på: http://support.microsoft.com/kb/980542/sv

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Outlook 2010 hittar inte min gamla NK2-fil!", + "meta_description": "", + "author_id": 1095, + "created_at": 1315567560000, + "created_by": 1095, + "updated_at": 1315567560000, + "updated_by": 1095, + "published_at": 1315567560000, + "published_by": 1095 + }, + { + "id": 561, + "title": "Installera Apple Wireless Keyboard på Windows 7 64-bit", + "slug": "installera-apple-wireless-keyboard-pa-windows-7-64-bit", + "markdown": "\r\n\r\nFör att paira ditt Apple Wireless Keyboard med ditt Windows 7 64-bit gör du såhär:\r\n\r\n\r\n\r\nDu går in under Control Panel, Add device, sätter på ditt Apple Wireless Keyboard. Du kommer så långt att du får slå in en passcode for att pairingen skall slutföras men avbryts efter att du hunnit knappa in en eller två siffror av koden. Samma sak händer, om och om igen. Hur snabb du än försöker vara.\r\n\r\nIstället för att klicka på Apple Wireless Keyboard i listan och gå vidare i Wizarden, högerklickar du på AWK väljer Properties och kryssar i ”Driver for keyboard, mice etc (HID)”. Efter detta installeras en drivrutin och du bör nu ha ett fungerande tangentbord som är kopplad mot din dator.\r\n\r\nNästa steg för mig var att jag inte kunde trycka på CTRL+ALT+DEL utan att använda ett Microsoft-anpassat tangentbord. Detta löste jag genom att ta fram en valfri MAC OSX-skiva, navigera mig till Drivers\\64 och sedan packa upp AppleKeyboardInstaller64 till valfri plats och sedan installera drivrutinen. Efter detta fungerar även CTRL+ALT+DEL (CTRL+ALT+BACKSPACE).\r\n\r\n![Bild](http://tekniken.nu/uploads/apple-wireless-keyboard-side-view.jpg)", + "html": "

    För att paira ditt Apple Wireless Keyboard med ditt Windows 7 64-bit gör du såhär:

    Du går in under Control Panel, Add device, sätter på ditt Apple Wireless Keyboard. Du kommer så långt att du får slå in en passcode for att pairingen skall slutföras men avbryts efter att du hunnit knappa in en eller två siffror av koden. Samma sak händer, om och om igen. Hur snabb du än försöker vara.

    Istället för att klicka på Apple Wireless Keyboard i listan och gå vidare i Wizarden, högerklickar du på AWK väljer Properties och kryssar i ”Driver for keyboard, mice etc (HID)”. Efter detta installeras en drivrutin och du bör nu ha ett fungerande tangentbord som är kopplad mot din dator.

    Nästa steg för mig var att jag inte kunde trycka på CTRL+ALT+DEL utan att använda ett Microsoft-anpassat tangentbord. Detta löste jag genom att ta fram en valfri MAC OSX-skiva, navigera mig till Drivers\\64 och sedan packa upp AppleKeyboardInstaller64 till valfri plats och sedan installera drivrutinen. Efter detta fungerar även CTRL+ALT+DEL (CTRL+ALT+BACKSPACE).

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Installera Apple Wireless Keyboard på Windows 7 64-bit", + "meta_description": "", + "author_id": 1095, + "created_at": 1315305700000, + "created_by": 1095, + "updated_at": 1315305700000, + "updated_by": 1095, + "published_at": 1315305700000, + "published_by": 1095 + }, + { + "id": 566, + "title": "Förenkla stora kopieringar i Windows", + "slug": "forenkla-stora-kopieringar-i-windows", + "markdown": "\r\n\r\nJag behöver ofta kopiera stora/många filer mellan servrar och datorer som kan vara ganska långt ifrån varandra. Störande är om kopplingen bryts under kopiering.  Ännu värre om en fil är skadad och inte kan kopieras.\r\n\r\n\r\n\r\nOm något sådant händer avbryts hela kopieringen och jag får börja om från början, utan en aning om hur långt den hann.\r\n\r\nFör att komma förbi problemet har jag sedan ett tag kört Teracopy som ersätter Windows inbyggda kopieringsfunktion. Kopior går snabbare och går att fortsätta om de skulle avbrytas.\r\n\r\nUtöver det försöker den flera gånger om en fil skulle vara svår att läsa, den ger inte upp direkt.\r\n\r\nVäljer jag att starta flera kopior samtidigt lägger de sig som väntande tills den första kopieringen är klar, eller tills jag tvingar dem att starta.\r\n\r\n\r\n\r\nBra litet program helt enkelt!\r\n\r\nMer info på deras hemsida.\r\n\r\n![Bild](http://tekniken.nu/uploads/634523639769117151-image001.png@01CC7950.81F3B9C0__image001.png)", + "html": "

    Jag behöver ofta kopiera stora/många filer mellan servrar och datorer som kan vara ganska långt ifrån varandra. Störande är om kopplingen bryts under kopiering.  Ännu värre om en fil är skadad och inte kan kopieras.

    Om något sådant händer avbryts hela kopieringen och jag får börja om från början, utan en aning om hur långt den hann.

    För att komma förbi problemet har jag sedan ett tag kört Teracopy som ersätter Windows inbyggda kopieringsfunktion. Kopior går snabbare och går att fortsätta om de skulle avbrytas.

    Utöver det försöker den flera gånger om en fil skulle vara svår att läsa, den ger inte upp direkt.

    Väljer jag att starta flera kopior samtidigt lägger de sig som väntande tills den första kopieringen är klar, eller tills jag tvingar dem att starta.


    Bra litet program helt enkelt!

    Mer info på deras hemsida.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Förenkla stora kopieringar i Windows", + "meta_description": "", + "author_id": 1088, + "created_at": 1317635700000, + "created_by": 1088, + "updated_at": 1317635700000, + "updated_by": 1088, + "published_at": 1317635700000, + "published_by": 1088 + }, + { + "id": 567, + "title": "DNS suffix saknas för VPN klienter mot Server 2008", + "slug": "dns-suffix-saknas-for-vpn-klienter-mot-server-2008", + "markdown": "\r\n\r\nI och med utfasningen av Windows Server 2003 kör vi nu oftast RRAS (Routing And Remote Access Server) i nyare 2008 R2 maskiner. I Windows Server 2003 hämtades DNS suffix till VPN klienter från DHCP serverns Option 015 (DNS Domain Name) – en funktionalitet som verkar vara ändrad i 2008.\r\n\r\n\r\n\r\nEn effekt vi har märkt av på grund av det här är vid fjärrstyrningar (med RDP) då vi behövt använda FQDN, vilket inte behövdes förut. Samma gäller klienter som fjärrstyr sin jobbdator. Tidigare knappade de in datornamnet men vissa har nu fått vänja sig vid datornamn.domain.local – något som förvirrar för en del.\r\n\r\nLösningen är lyckligtvis inte så svår;\r\n\r\nLägg till korrekt DNS suffix i TCP/IP inställningarna för RRAS maskinens LAN-kort.Starta om RRAS-tjänsten så att den cachar nya DHCP adresser.\r\nNästa gång en klient ansluter får den korrekt suffix.\r\n\r\n![Bild](http://tekniken.nu/uploads/634523639954740963-logo.gif)", + "html": "

    I och med utfasningen av Windows Server 2003 kör vi nu oftast RRAS (Routing And Remote Access Server) i nyare 2008 R2 maskiner. I Windows Server 2003 hämtades DNS suffix till VPN klienter från DHCP serverns Option 015 (DNS Domain Name) – en funktionalitet som verkar vara ändrad i 2008.

    En effekt vi har märkt av på grund av det här är vid fjärrstyrningar (med RDP) då vi behövt använda FQDN, vilket inte behövdes förut. Samma gäller klienter som fjärrstyr sin jobbdator. Tidigare knappade de in datornamnet men vissa har nu fått vänja sig vid datornamn.domain.local – något som förvirrar för en del.

    Lösningen är lyckligtvis inte så svår;

    1. Lägg till korrekt DNS suffix i TCP/IP inställningarna för RRAS maskinens LAN-kort.
    2. Starta om RRAS-tjänsten så att den cachar nya DHCP adresser.


    Nästa gång en klient ansluter får den korrekt suffix.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "DNS suffix saknas för VPN klienter mot Server 2008", + "meta_description": "", + "author_id": 1088, + "created_at": 1316784000000, + "created_by": 1088, + "updated_at": 1316784000000, + "updated_by": 1088, + "published_at": 1316784000000, + "published_by": 1088 + }, + { + "id": 584, + "title": "Rött kryss på dokument i Team Explorer 2010", + "slug": "rott-kryss-pa-dokument-i-team-explorer-2010", + "markdown": "\r\n\r\nEn del användare av vår TFS kunde inte komma åt delade dokument genom Visual Studio 2010, istället möttes de bara av ett rött kryss.\r\n\r\nKrysset visade sig vara populärt kallat för ”Red X of Death” – vilket var precis vad det kändes som när inget ur uppsjön av lösningar fungerade.\r\n\r\nAlla användare kan komma åt dokumenten genom att gå till Sharepoint Project Portal genom IE så det var inte en rättighetsfråga. På tal om rättigheter kontrolleras de bäst genom TFS Administration Tool.\r\n\r\nVad som slutligen knäckte nöten för oss var att lägga till Sharepoint siten i säkerhetszonen ”Local intranet” samt sänka säkerhetsnivån för den zonen ett snäpp.\r\n\r\nDet är dock tveksamt om lösningen ovan fungerar om man har externa användare som inte är med i domänen.\r\n\r\n![Bild](http://tekniken.nu/uploads/634612749882226507-image002.jpg@01CCBBF6.419E15D0__image002.jpg)", + "html": "

    En del användare av vår TFS kunde inte komma åt delade dokument genom Visual Studio 2010, istället möttes de bara av ett rött kryss.

    Krysset visade sig vara populärt kallat för ”Red X of Death” – vilket var precis vad det kändes som när inget ur uppsjön av lösningar fungerade.

    Alla användare kan komma åt dokumenten genom att gå till Sharepoint Project Portal genom IE så det var inte en rättighetsfråga. På tal om rättigheter kontrolleras de bäst genom TFS Administration Tool.

    Vad som slutligen knäckte nöten för oss var att lägga till Sharepoint siten i säkerhetszonen ”Local intranet” samt sänka säkerhetsnivån för den zonen ett snäpp.

    Det är dock tveksamt om lösningen ovan fungerar om man har externa användare som inte är med i domänen.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Rött kryss på dokument i Team Explorer 2010", + "meta_description": "", + "author_id": 1088, + "created_at": 1326125520000, + "created_by": 1088, + "updated_at": 1326125520000, + "updated_by": 1088, + "published_at": 1326125520000, + "published_by": 1088 + }, + { + "id": 591, + "title": "Tre knep för Remote Desktop", + "slug": "tre-knep-for-remote-desktop", + "markdown": "\r\n\r\nKommer du bara till en grå eller svart skärm?\r\n\r\n1.  Försök logga in i console-läge. Tryck Start och Kör. Skriv in mstsc /admin och anslut sedan som vanligt\r\n\r\n2.  Om en applikation har hängt sig fungerar CTRL-SHIFT-ESC för att få upp aktivitetshanteraren även fjärrstyrt.\r\n\r\n3.  Om saker har hängt sig ordentligt? Tryck CTRL-ALT-END för att skicka CTRL-ALT-DEL till fjärrdatorn. Det här fungerar också bra om du behöver byta lösenord på din användare fjärrstyrt.\r\n\r\n![Bild](http://tekniken.nu/uploads/windows7.png)", + "html": "

    Kommer du bara till en grå eller svart skärm?

    1.  Försök logga in i console-läge. Tryck Start och Kör. Skriv in mstsc /admin och anslut sedan som vanligt

    2.  Om en applikation har hängt sig fungerar CTRL-SHIFT-ESC för att få upp aktivitetshanteraren även fjärrstyrt.

    3.  Om saker har hängt sig ordentligt? Tryck CTRL-ALT-END för att skicka CTRL-ALT-DEL till fjärrdatorn. Det här fungerar också bra om du behöver byta lösenord på din användare fjärrstyrt.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Tre knep för Remote Desktop", + "meta_description": "", + "author_id": 1088, + "created_at": 1330338112000, + "created_by": 1088, + "updated_at": 1330338112000, + "updated_by": 1088, + "published_at": 1330338112000, + "published_by": 1088 + }, + { + "id": 598, + "title": "Smiley blir ett J i Outlook", + "slug": "smiley-blir-ett-j-i-outlook", + "markdown": "\r\n\r\nPå sistone har jag mer och mer irriterat mig på att få vidarebefordrade mail med meningar som avslutas med ett J.\r\n\r\nDet tog mig ett tag att inse att avsändaren menade att göra en glad gubbe - :)\r\n\r\nProblemet är att Office autorättar :) till att blir en lite mer grafisk smiley med hjälp av teckensnittet Wingdings. Saknas det så blir det ett J.\r\n\r\nDen enklaste lösningen jag vet är den här;\r\n\r\nI Outlook, tryck Arkiv -> E-post -> Rättstavning och autokorrigering -> Alternativ för autokorrigering\r\n\r\nHitta den glada gubben, :), i listan och ersätt den med☺ - samma sak fast i Unicode istället för Wingdings. Passa även på att kika igen vilka mer saker som autorättas, det finns en del att ändra!\r\n\r\nTryck ersätt och OK, du är klar!\r\n\r\n![Bild](http://tekniken.nu/uploads/smiley.png)", + "html": "

    På sistone har jag mer och mer irriterat mig på att få vidarebefordrade mail med meningar som avslutas med ett J.

    Det tog mig ett tag att inse att avsändaren menade att göra en glad gubbe - :)

    Problemet är att Office autorättar :) till att blir en lite mer grafisk smiley med hjälp av teckensnittet Wingdings. Saknas det så blir det ett J.

    Den enklaste lösningen jag vet är den här;

    I Outlook, tryck Arkiv -> E-post -> Rättstavning och autokorrigering -> Alternativ för autokorrigering

    Hitta den glada gubben, :), i listan och ersätt den med☺ - samma sak fast i Unicode istället för Wingdings. Passa även på att kika igen vilka mer saker som autorättas, det finns en del att ändra!

    Tryck ersätt och OK, du är klar!

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Smiley blir ett J i Outlook", + "meta_description": "", + "author_id": 1088, + "created_at": 1334052060000, + "created_by": 1088, + "updated_at": 1334052060000, + "updated_by": 1088, + "published_at": 1334052060000, + "published_by": 1088 + }, + { + "id": 600, + "title": "Fixa din iPhones krånglande hemknapp", + "slug": "fixa-din-iphones-kranglande-hemknapp", + "markdown": "\r\n\r\nHemknappen är en nyckelfunktion på en iPhone. Själv har jag haft problem med den på min telefon ganska länge, den är glapp och man måste trycka hårt och flera gånger för att få den att reagera. Att dubbelklicka för att avsluta applikationer och låsa orienteringen är ett riktigt gissel. Jag sökte lite på Google för att se om det fanns några tips på om man kan öppna och rengöra eller något liknande. Dröm om min förvåning när jag hittade följande:\r\n\r\n\r\n\r\niPhone har en inbyggd kalibrering av hemknappen.\r\n\r\nFör att återställa kalibreringen av hur hårt du måste trycka på hemknappen, gör såhär:\r\n\r\n1) Håll ner strömknappen till dess att ”Slide to power off” visas\r\n\r\n2) Släpp strömknappen och tryck samtidigtlöst ner hemknappen\r\n\r\n3) Fortsätt hålla nere hemknappen till dess att avstängningsskärmen stängs av och du återgår till telefonens vanliga funktioner\r\n\r\nDet här lagar förstås inte en knapp som har gått sönder rent hårdvarumässigt, men chansen är ganska stor att det är kalibreringen som har blivit fel. Min extremt glappande hemknapp blev inte som ny, men den blev mycket mycket bättre och jag kan nu både avsluta applikationer och dubbelklicka utan några större problem.\r\n\r\nOm din hemknapp verkligen inte fungerar kan du hjälpligt använda telefonen ändå temporärt genom att slå på det som kallas ”assistive touch” som ger tillgång till hemknappen och andra funktioner direkt på skärmen. Den här funktionen stjäl dock ganska mycket utrymme i ett av hörnen, så det är knappast någon funktion man har på permanent.\r\n\r\nLäs mer här om både kalibreringen och assitive touch:\r\n\r\nhttp://www.iphonestuffs4u.com/iphone-home-button-not-working/\r\n\r\n![Bild](http://tekniken.nu/uploads/634707942322930207-homebutton.png)", + "html": "

    Hemknappen är en nyckelfunktion på en iPhone. Själv har jag haft problem med den på min telefon ganska länge, den är glapp och man måste trycka hårt och flera gånger för att få den att reagera. Att dubbelklicka för att avsluta applikationer och låsa orienteringen är ett riktigt gissel. Jag sökte lite på Google för att se om det fanns några tips på om man kan öppna och rengöra eller något liknande. Dröm om min förvåning när jag hittade följande:

    iPhone har en inbyggd kalibrering av hemknappen.

    För att återställa kalibreringen av hur hårt du måste trycka på hemknappen, gör såhär:

    1) Håll ner strömknappen till dess att ”Slide to power off” visas

    2) Släpp strömknappen och tryck samtidigtlöst ner hemknappen

    3) Fortsätt hålla nere hemknappen till dess att avstängningsskärmen stängs av och du återgår till telefonens vanliga funktioner

    Det här lagar förstås inte en knapp som har gått sönder rent hårdvarumässigt, men chansen är ganska stor att det är kalibreringen som har blivit fel. Min extremt glappande hemknapp blev inte som ny, men den blev mycket mycket bättre och jag kan nu både avsluta applikationer och dubbelklicka utan några större problem.

    Om din hemknapp verkligen inte fungerar kan du hjälpligt använda telefonen ändå temporärt genom att slå på det som kallas ”assistive touch” som ger tillgång till hemknappen och andra funktioner direkt på skärmen. Den här funktionen stjäl dock ganska mycket utrymme i ett av hörnen, så det är knappast någon funktion man har på permanent.

    Läs mer här om både kalibreringen och assitive touch:

    http://www.iphonestuffs4u.com/iphone-home-button-not-working/

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Fixa din iPhones krånglande hemknapp", + "meta_description": "", + "author_id": 6, + "created_at": 1335197431000, + "created_by": 6, + "updated_at": 1335197431000, + "updated_by": 6, + "published_at": 1335197431000, + "published_by": 6 + }, + { + "id": 19, + "title": "Drift", + "slug": "drift", + "markdown": "\r\nAdd your text here", + "html": "

    Add your text here

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Drift & Underhåll", + "meta_description": "", + "author_id": 4, + "created_at": 1181663426000, + "created_by": 4, + "updated_at": 1181663426000, + "updated_by": 4, + "published_at": 1181663426000, + "published_by": 4 + }, + { + "id": 29, + "title": "BioShock (Executive Summary)", + "slug": "bioshock-executive-summary", + "markdown": "\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nHär kommer en snabb catch up om årets storspel BioShock, så att alla kan ”agera insatta” i framtida sociala situationer:\r\n\r\n\r\n\r\n\r\n \r\n\r\n\r\n\r\n\r\nBioshock är den andliga efterföljaren till System Shockspelen, som på många sätt revolutionerade FPS-genren i slutet av 90-talet. Denna gång är scenen tidigt 1960-tal och platsen är havets botten. Efter en flygolycka hamnar man i undervattenstaden Rapture och får kämpa mot genmodifierade monster, enorma servicebottar, småflickor och mycket annat. Framförallt är det rackarns snyggt och storyn skall vara grym. Med andra ord är det nog det största på FPS-scenen sen Half Life 2. Jag har lirat demot och är mkt imponerad!\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/bioshock1.png)\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/bioshock2.png)\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/bioshock3.png)\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/bioshock4.png)\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/bioshock5.png)\r\n\r\n\r\nHD-trailer (grym för de med stora skärmar):\r\n\r\n\r\n\r\n\r\nhttp://www.gametrailers.com/player/15682.html\r\n\r\n\r\n\r\n\r\n\r\n\r\n \r\n\r\n\r\n\r\n\r\n\r\nDemo för PC:\r\n\r\n\r\n\r\n\r\n\r\n\r\nhttp://www.fz.se/filer/?id=3931\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n", + "html": "














































    Här kommer en snabb catch up om årets storspel BioShock, så att alla kan ”agera insatta” i framtida sociala situationer:




     



    Bioshock är den andliga efterföljaren till System Shockspelen, som på många sätt revolutionerade FPS-genren i slutet av 90-talet. Denna gång är scenen tidigt 1960-tal och platsen är havets botten. Efter en flygolycka hamnar man i undervattenstaden Rapture och får kämpa mot genmodifierade monster, enorma servicebottar, småflickor och mycket annat. Framförallt är det rackarns snyggt och storyn skall vara grym. Med andra ord är det nog det största på FPS-scenen sen Half Life 2. Jag har lirat demot och är mkt imponerad!




















    HD-trailer (grym för de med stora skärmar):




    http://www.gametrailers.com/player/15682.html





     




    Demo för PC:





    http://www.fz.se/filer/?id=3931







    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "BioShock (Executive Summary)", + "meta_description": "", + "author_id": 1085, + "created_at": 1187827200000, + "created_by": 1085, + "updated_at": 1187827200000, + "updated_by": 1085, + "published_at": 1187827200000, + "published_by": 1085 + }, + { + "id": 56, + "title": "Bioshock på Steam 24 augusti", + "slug": "bioshock-pa-steam-24-augusti", + "markdown": "\r\n\r\n\r\nDet mycket omtalade och hyllade (och efterlängtade!) spelet Bioshock kommer att finnas till PC, för nedladdning via Valves spelnedladdningstjänst Steam: http://spel.feber.se/feber/art/26910/bioshock_p_steam/\r\n\r\n\r\nFör den som har missat hypen finns det info, videos och annat bra på den officiella siten: http://www.2kgames.com/bioshock/ \r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/bioshock-logo.jpg)", + "html": "


    Det mycket omtalade och hyllade (och efterlängtade!) spelet Bioshock kommer att finnas till PC, för nedladdning via Valves spelnedladdningstjänst Steam: http://spel.feber.se/feber/art/26910/bioshock_p_steam/


    För den som har missat hypen finns det info, videos och annat bra på den officiella siten: http://www.2kgames.com/bioshock/
     


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1187308800000, + "created_by": 6, + "updated_at": 1187308800000, + "updated_by": 6, + "published_at": 1187308800000, + "published_by": 6 + }, + { + "id": 70, + "title": "Fiffigt Firefox-tillägg för fotografer", + "slug": "fiffigt-firefox-tillagg-for-fotografer", + "markdown": "\r\n\r\n\r\nFxIF är ett tillägg till FireFox som gör att man kan se Exif-information direkt i webbläsaren.\r\n\r\n\r\n\r\nhttp://ted.mielczarek.org/code/mozilla/fxif/\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/firefox-exif.png)", + "html": "


    FxIF är ett tillägg till FireFox som gör att man kan se Exif-information direkt i webbläsaren.




    http://ted.mielczarek.org/code/mozilla/fxif/


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1183563600000, + "created_by": 6, + "updated_at": 1183563600000, + "updated_by": 6, + "published_at": 1183563600000, + "published_by": 6 + }, + { + "id": 71, + "title": "Mashup för löprundor", + "slug": "mashup-for-loprundor", + "markdown": "\r\n\r\n\r\nEn mashup är en webbplats där någon har slagit ihop flera webbtjänster (egna och andras) till en. Google Maps är en ganska populär site att ha med i mashups – den är både detaljerad och erbjuder ett bra gränssnitt för programmerare.\r\n\r\n\r\nEn fiffig mashup är Gmaps Pedometer, där man kan plotta ut sin löprunda och få avstånd och kaloriförbrukning uträknad. Även höjdskillnader visas i ett diagram. När man är nöjd kan man maila löprundan till sig själv (eller spara den som GPX, ett standardiserat GPS-format, om man har svårt att hitta).\r\n\r\n\r\n\r\nhttp://www.gmap-pedometer.com/\r\n\r\n\r\n\r\n \r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/loprunda.png)\r\n\r\n\r\n(kom-igångtips: när man har tryckt på ”Start recording” ska man dubbelklicka för att sätta ut nya punkter på löprundan).\r\n\r\n\r\nTidningen iform har en liknande tjänst (http://routeplanner.iform.se) men den är tyvärr inte lika bra – sämre karta och en konstigt bugg i zoom-funktionen som gör att man lätt tror att man har sprungit mycket längre än vad man har :-)\r\n\r\n", + "html": "


    En mashup är en webbplats där någon har slagit ihop flera webbtjänster (egna och andras) till en. Google Maps är en ganska populär site att ha med i mashups – den är både detaljerad och erbjuder ett bra gränssnitt för programmerare.


    En fiffig mashup är Gmaps Pedometer, där man kan plotta ut sin löprunda och få avstånd och kaloriförbrukning uträknad. Även höjdskillnader visas i ett diagram. När man är nöjd kan man maila löprundan till sig själv (eller spara den som GPX, ett standardiserat GPS-format, om man har svårt att hitta).



    http://www.gmap-pedometer.com/


     








    (kom-igångtips: när man har tryckt på ”Start recording” ska man dubbelklicka för att sätta ut nya punkter på löprundan).


    Tidningen iform har en liknande tjänst (http://routeplanner.iform.se) men den är tyvärr inte lika bra – sämre karta och en konstigt bugg i zoom-funktionen som gör att man lätt tror att man har sprungit mycket längre än vad man har :-)


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1183490580000, + "created_by": 6, + "updated_at": 1183490580000, + "updated_by": 6, + "published_at": 1183490580000, + "published_by": 6 + }, + { + "id": 79, + "title": "Inbyggd flygsimulator i Google Earth", + "slug": "inbyggd-flygsimulator-i-google-earth", + "markdown": "\r\n\r\nSenaste\r\nversionen av Google Earth (v4.2) innehåller ett riktigt tufft påskägg: En dold\r\nflygsimulator!  För att aktivera simulatorn klickar man CTRL-ALT-A, varpå\r\nen prompt öppnas där man kan välja om man vill flyga en F16 eller en Cirrus\r\nSR22.\r\n\r\nSimulatorn\r\nfunkar faktiskt riktigt bra och simulerar oväntat många flygplansdelar\r\n(klaffar, ställ etc.). Och går smidigt att flyga runt i med mus-tangenter,\r\neller joystick.\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/google_earth_flight.png)\r\n\r\n\r\nVad\r\nman nu egentligen vill ha är ju Microsoft Flight Simulator, men med Google\r\nEarth som världsmesh/textur, synd att MS och Google inte gillar varandra så\r\nbra...\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/google_earth_settings.png)\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n", + "html": "


    Senaste
    versionen av Google Earth (v4.2) innehåller ett riktigt tufft påskägg: En dold
    flygsimulator!  För att aktivera simulatorn klickar man CTRL-ALT-A, varpå
    en prompt öppnas där man kan välja om man vill flyga en F16 eller en Cirrus
    SR22.


    Simulatorn
    funkar faktiskt riktigt bra och simulerar oväntat många flygplansdelar
    (klaffar, ställ etc.). Och går smidigt att flyga runt i med mus-tangenter,
    eller joystick.








    Vad
    man nu egentligen vill ha är ju Microsoft Flight Simulator, men med Google
    Earth som världsmesh/textur, synd att MS och Google inte gillar varandra så
    bra...














    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1085, + "created_at": 1188843960000, + "created_by": 1085, + "updated_at": 1188843960000, + "updated_by": 1085, + "published_at": 1188843960000, + "published_by": 1085 + }, + { + "id": 97, + "title": "Fredagstipset: Bygg din mediedator i en Lack-hylla", + "slug": "fredagstipset-bygg-din-mediedator-i-en-lack-hylla", + "markdown": "\r\n\r\n\r\nCasemoddning är 2000-talets svar på 50-talets custombilbyggande - bygg in din dator i något oväntat och snyggt, kanske en gammal 60-tals-TV, en attachéväska eller trästock? För den som är ute efter något mer användbart så är nedanstående lösning kanske något för det kritiska designerhemmet där man vill att datorn inte ska synas:\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/lack1.jpg)\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/lack2.jpg)\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/lack3.jpg)\r\n\r\n\r\nByggbeskrivning och massor av bilder finns här: http://www.sweclockers.com/forum/showthread.php?s=&postid=6203488#post6203488\r\n\r\n", + "html": "


    Casemoddning är 2000-talets svar på 50-talets custombilbyggande - bygg in din dator i något oväntat och snyggt, kanske en gammal 60-tals-TV, en attachéväska eller trästock? För den som är ute efter något mer användbart så är nedanstående lösning kanske något för det kritiska designerhemmet där man vill att datorn inte ska synas:














    Byggbeskrivning och massor av bilder finns här: http://www.sweclockers.com/forum/showthread.php?s=&postid=6203488#post6203488


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "Lack-hyllor.", + "author_id": 6, + "created_at": 1189186200000, + "created_by": 6, + "updated_at": 1189186200000, + "updated_by": 6, + "published_at": 1189186200000, + "published_by": 6 + }, + { + "id": 101, + "title": "Såhär gör man reklam för operativsystem!", + "slug": "sahar-gor-man-reklam-for-operativsystem", + "markdown": "\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n", + "html": "








    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1189606080000, + "created_by": 6, + "updated_at": 1189606080000, + "updated_by": 6, + "published_at": 1189606080000, + "published_by": 6 + }, + { + "id": 102, + "title": "Guitar Hero 3 kommer till PC och Mac", + "slug": "guitar-hero-3-kommer-till-pc-och-mac", + "markdown": "\r\n\r\nAspyr Media, företaget bakom de\r\nvansinnigt populära Guitar Hero spelen, har parat upp med Activision för att\r\ngöra nästa del i serien (Guitar Hero III: Legends of rock) tillgänglig även för\r\nPC och Mac. De tidigare spelen i serien har endast funnits för PS2 och\r\nXBOX 360, GHIII kommer alltså släppas till PS2, PS3, Xbox 360, Wii, PC och Mac!\r\nTill PC och Mac kommer spelet att säljas med en USB-baserad Gibsongitarr.\r\nFörhoppningsvis kommer vi även att få se roliga flerspelarlägen med\r\nnätverksstöd. Hur kul vore det inte att spöa värsta konkurrenten på ett DragonForce-solo över\r\nInternet till fredagsölen?\r\n\r\nAspyr medias pressrelease:\r\n\r\n\r\nhttp://www.aspyr.com/software/news/85/167\r\n\r\n\r\nAll info om Guitar Hero III:\r\n\r\n\r\nhttp://en.wikipedia.org/wiki/Guitar_Hero_III:_Legends_of_Rock\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/gh3-logo.png)\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/gh3-1.png)", + "html": "


    Aspyr Media, företaget bakom de
    vansinnigt populära Guitar Hero spelen, har parat upp med Activision för att
    göra nästa del i serien (Guitar Hero III: Legends of rock) tillgänglig även för
    PC och Mac. De tidigare spelen i serien har endast funnits för PS2 och
    XBOX 360, GHIII kommer alltså släppas till PS2, PS3, Xbox 360, Wii, PC och Mac!
    Till PC och Mac kommer spelet att säljas med en USB-baserad Gibsongitarr.
    Förhoppningsvis kommer vi även att få se roliga flerspelarlägen med
    nätverksstöd. Hur kul vore det inte att spöa värsta konkurrenten på ett DragonForce-solo över
    Internet till fredagsölen?


    Aspyr medias pressrelease:



    http://www.aspyr.com/software/news/85/167


    All info om Guitar Hero III:



    http://en.wikipedia.org/wiki/Guitar_Hero_III:_Legends_of_Rock





    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1085, + "created_at": 1189675200000, + "created_by": 1085, + "updated_at": 1189675200000, + "updated_by": 1085, + "published_at": 1189675200000, + "published_by": 1085 + }, + { + "id": 105, + "title": "Helgnöje: 100 C64-spel på 10 minuter!", + "slug": "helgnoje-100-c64-spel-pa-10-minuter", + "markdown": "\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nFör den som inte fått nog så finns det en site som heter C64 longplay som har spelat igenom en massa klassiker - nu har du chansen att se hur det såg ut när man klarade t.ex. Impossible Mission eller Hunchback:\r\n\r\n\r\n\r\nhttp://www.youtube.com/results?search_query=c64+longplay&search=Search\r\n\r\n\r\n\r\n\r\n\r\nFör den som ändå inte har fått nog finns också 100 Amiga-spel på 10 minuter:\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n", + "html": "











    För den som inte fått nog så finns det en site som heter C64 longplay som har spelat igenom en massa klassiker - nu har du chansen att se hur det såg ut när man klarade t.ex. Impossible Mission eller Hunchback:



    http://www.youtube.com/results?search_query=c64+longplay&search=Search





    För den som ändå inte har fått nog finns också 100 Amiga-spel på 10 minuter:










    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1189869000000, + "created_by": 6, + "updated_at": 1189869000000, + "updated_by": 6, + "published_at": 1189869000000, + "published_by": 6 + }, + { + "id": 110, + "title": "Helgen är räddad: SingStar-klon till PC!", + "slug": "helgen-ar-raddad-singstar-klon-till-pc", + "markdown": "\r\n\r\n\r\nHar du alltid sneglat avundsjukt på dina kompisar med Playstation och SingStar? Nu finns en \"SingStar-emulator\" till PC! Efter ett tips i IDG-tidningen M3 laddade vi ner och testade UltraStar - en open source-variant av SingStar. För den som har missat hela SingStar-tåget så är det ett otroligt roligt karaokespel där man inte bara får text och musik presenterade, utan även bedöms utifrån hur väl man håller ton och kan spela mot varandra. I UltraStar finns en mängd spellägen, allt från ensamsjungande och duetter till partyläge med turneringar mellan upp till sju spelare.\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/ultrastar_cap.jpg)\r\n\r\n\r\nProgrammet är otroligt enkelt att installera (kopiera bara filerna till en katalog i program files) och kräver inga konstiga drivrutiner eller så. Det är bara att plugga i mikrofonen och sjunga! Har du bara ett ljudkort (ganska vanligt) kan du med en enkel adapter dela upp stereoingången i två monoingångar och tilldela de två mikrofonerna varsin kanal så att ni kan spela två samtidigt. Har du flera ljudkort kan du klämma in ännu fler samtidiga spelare än två.\r\n\r\n\r\nMan kan även göra egna låtar till UltraStar - man behöver en mp3-fil, en midi-fil (som programmet läser ut tonhöjderna ur) samt en timead fil med texten. Har du en video också är det bara att lägga dit den med, men det är inget krav. Kanske inget man snor ihop på fem minuter, men det finns gott om färdiggjorda låtar att hitta på webben, vilket väl borde vara OK om man har köpt låten på skiva eller Itunes? Roligast är att det finns mängder av låtar som aldrig kommer leta sig fram till SingStar - vad sägs om ett \"all death metal karaoke\"?\r\n\r\n\r\nÄven om ordet SingStar inte nämns någonstans på UltraStars webbplats så kan man tänka sig att Sony förr eller senare kommer att göra sitt bästa för att få säkra monopolet för en av deras största försäljningssuccéer. Passa på att ladda ner det nu :-)\r\n\r\n\r\n\r\nhttp://www.ultrastar.de\r\n\r\n\r\n", + "html": "


    Har du alltid sneglat avundsjukt på dina kompisar med Playstation och SingStar? Nu finns en \"SingStar-emulator\" till PC! Efter ett tips i IDG-tidningen M3 laddade vi ner och testade UltraStar - en open source-variant av SingStar. För den som har missat hela SingStar-tåget så är det ett otroligt roligt karaokespel där man inte bara får text och musik presenterade, utan även bedöms utifrån hur väl man håller ton och kan spela mot varandra. I UltraStar finns en mängd spellägen, allt från ensamsjungande och duetter till partyläge med turneringar mellan upp till sju spelare.








    Programmet är otroligt enkelt att installera (kopiera bara filerna till en katalog i program files) och kräver inga konstiga drivrutiner eller så. Det är bara att plugga i mikrofonen och sjunga! Har du bara ett ljudkort (ganska vanligt) kan du med en enkel adapter dela upp stereoingången i två monoingångar och tilldela de två mikrofonerna varsin kanal så att ni kan spela två samtidigt. Har du flera ljudkort kan du klämma in ännu fler samtidiga spelare än två.


    Man kan även göra egna låtar till UltraStar - man behöver en mp3-fil, en midi-fil (som programmet läser ut tonhöjderna ur) samt en timead fil med texten. Har du en video också är det bara att lägga dit den med, men det är inget krav. Kanske inget man snor ihop på fem minuter, men det finns gott om färdiggjorda låtar att hitta på webben, vilket väl borde vara OK om man har köpt låten på skiva eller Itunes? Roligast är att det finns mängder av låtar som aldrig kommer leta sig fram till SingStar - vad sägs om ett \"all death metal karaoke\"?


    Även om ordet SingStar inte nämns någonstans på UltraStars webbplats så kan man tänka sig att Sony förr eller senare kommer att göra sitt bästa för att få säkra monopolet för en av deras största försäljningssuccéer. Passa på att ladda ner det nu :-)



    http://www.ultrastar.de


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1190206200000, + "created_by": 6, + "updated_at": 1190206200000, + "updated_by": 6, + "published_at": 1190206200000, + "published_by": 6 + }, + { + "id": 117, + "title": "Frets on Fire: Guitar Hero-klon till PC", + "slug": "frets-on-fire-guitar-hero-klon-till-pc", + "markdown": "\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/fretsonfire.png)\r\n\r\nFrets on Fire är en riktigt snygg Guitar Hero-klon för PC\r\n(Windows, Linux och Mac) som dessutom är helt open source. Projektet verkar\r\nha varit igång sen i januari, men själv hade jag missat det helt fram till nu.\r\n\r\nLikheterna med UltraStar är många, t.ex. går egna låtar att\r\nproducera genom att kombinera en OGG-fil med ljudspåret och en midifil som\r\nbeskriver gitarrtonerna som skall anslås. Och precis som med UltraStar handlar\r\ndet om ren och skär kopiering av spelidén, så bli inte förvånade om projektet\r\nplötsligt upphör att existera. Ladda ner medans det finns kvar!\r\n\r\nI väntan på bra spelkontroller (läs Guitar Hero III’s\r\nUSB-kontroll...) får man köra med ett uppochnedvänt tangentbord (F1-F5) som\r\ngitarr, något som fungerar oväntat bra. Extra kul om man har ett trådlöst\r\ntangentbord!\r\n\r\nFreebird!\r\n\r\n\r\nProgrammet laddas hem från:\r\nhttp://fretsonfire.sourceforge.net/\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/pose.png)\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/fretsingame.png)\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n", + "html": "





    Frets on Fire är en riktigt snygg Guitar Hero-klon för PC
    (Windows, Linux och Mac) som dessutom är helt open source. Projektet verkar
    ha varit igång sen i januari, men själv hade jag missat det helt fram till nu.


    Likheterna med UltraStar är många, t.ex. går egna låtar att
    producera genom att kombinera en OGG-fil med ljudspåret och en midifil som
    beskriver gitarrtonerna som skall anslås. Och precis som med UltraStar handlar
    det om ren och skär kopiering av spelidén, så bli inte förvånade om projektet
    plötsligt upphör att existera. Ladda ner medans det finns kvar!


    I väntan på bra spelkontroller (läs Guitar Hero III’s
    USB-kontroll...) får man köra med ett uppochnedvänt tangentbord (F1-F5) som
    gitarr, något som fungerar oväntat bra. Extra kul om man har ett trådlöst
    tangentbord!


    Freebird!


    Programmet laddas hem från:
    http://fretsonfire.sourceforge.net/














    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1085, + "created_at": 1190834880000, + "created_by": 1085, + "updated_at": 1190834880000, + "updated_by": 1085, + "published_at": 1190834880000, + "published_by": 1085 + }, + { + "id": 130, + "title": "Se på film i din mobil", + "slug": "se-pa-film-i-din-mobil", + "markdown": "\r\n\r\nSmarta telefoner blir allt vanligare - t.ex. Sony Ericsson P1, Nokia N95 och Windows Mobile-mobiler från en mängd tillverkare. Att surfa mobilt och alltid komma åt sin epost är bekvämt - men visste du att du kan se på filmer och TV-serier i riktigt bra kvalitet direkt i mobilen?\r\n\r\nÄr det svårt? Nej!\r\nBlir det inte väldigt smått? Skärmen på mobilen är ju inte så stor, men\r\neftersom moderna mobiler har väldigt bra upplösning så funkar det över all\r\nförväntan.\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/transformers2.png)\r\n\r\n\r\nDet här behöver du:\r\n\r\n\r\nEn smartphone eller en handdator med Windows Mobile (t.ex. Samsung BlackJack eller HTC MTeoR), Symbian (t.ex. Nokia N95 eller SonyEricsson P1) eller PalmOS (t.ex. Treo).\r\nCorePlayer – en mycket bra mediespelare för mobila enheter för $20-$25 beroende på operativsystem, eller gratisvarianten TCPMP som funkar bra men inte är lika snyggt och inte vidareutvecklas.\r\n\r\nPocketDivXEncoder – ett gratis filmkonverteringsprogram som tar nästan vilken videofil som helst och konverterar till ett anpassat DivX-format för din mobila enhet.\r\n\r\n\r\n\r\n\r\nGör så här (det är lättare än vad det ser ut - följ bara instruktionen steg för steg):\r\n\r\n\r\nLadda ner här: PocketDivXEncoder. Från och med den nya versionen (0.3.96 beta) funkar det utmärkt även på Vista om man kör det som administratör. PocketDivXEncoder är ett grafiskt gränssnitt till den grymma konverteringsmotorn mencoder som klarar av att konvertera från nästan alla videoformat man kan tänka sig (divx, xvid, mpeg, mpeg2, mkv o.s.v.)\r\nNär man startar PocketDivXEncoder får man välja vilken enhet man ska koda video för. Jag brukar välja PDA eftersom den har samma upplösning som min HTC MTeoR (240 x 320 pixlar).\r\nÖppna din videofil.\r\nGör lämpliga inställningar för konverteringen. Jag brukar välja de här (vissa ligger under advanced options):\r\nVideo quality: 12 (max)Audio quality: 5Brightness: +6%Saturation: +5%Sound: +5%Use 2-pass encoding: ikryssad (konverteringen tar längre tid men ger bättre kvalitet)Deinterlace: ikryssadVHQ: ikryssadXviD: ikryssad (om man inte kryssar i den här får man ut en DivX-fil istället – skillnaden är minimal).\r\nÖverkurs: Beskär filmen. Om din enhet inte har widescreenformat så kan det bli en del svarta kanter (precis som på en vanlig TV utan widescreen). Jag brukar beskära lite så att man får en video med större höjd men tappar lite i ytterkanterna. För en TV-serie i widescreen (1.78:1) brukar jag sätta höjden till 210, för en film (2.35:1) brukar jag sätta höjden till 180. Detta gör man under Resize.\r\nTryck på Encode Now så sätter kodningen igång.\r\nLadda ner och installera CorePlayer eller TCPMP på din mobila enhet.\r\nNär punkt 6 är klar, kopiera över den konverterade filen till din mobila enhet.\r\nÖppna filen i CorePlayer och njut av film överallt! Coreplayer gör sig bäst i fullskärmsläge där den vrider filmen för att utnyttja skärmytan på bästa sätt.\r\n\r\n\r\n\r\nMed inställningar ovan blir ett 22-minutersavsnitt av en TV-serie ungefär 85 MB, 45-minutersavsnitt 160 MB och en långfilm c:a 325 MB. Man får in mycket TV och film på ett minneskort på 2GB med andra ord.\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/pocketdivx.png)", + "html": "


    Smarta telefoner blir allt vanligare - t.ex. Sony Ericsson P1, Nokia N95 och Windows Mobile-mobiler från en mängd tillverkare. Att surfa mobilt och alltid komma åt sin epost är bekvämt - men visste du att du kan se på filmer och TV-serier i riktigt bra kvalitet direkt i mobilen?


    Är det svårt? Nej!
    Blir det inte väldigt smått? Skärmen på mobilen är ju inte så stor, men
    eftersom moderna mobiler har väldigt bra upplösning så funkar det över all
    förväntan.








    Det här behöver du:



    • En smartphone eller en handdator med Windows Mobile (t.ex. Samsung BlackJack eller HTC MTeoR), Symbian (t.ex. Nokia N95 eller SonyEricsson P1) eller PalmOS (t.ex. Treo).

    • CorePlayer – en mycket bra mediespelare för mobila enheter för $20-$25 beroende på operativsystem, eller gratisvarianten TCPMP som funkar bra men inte är lika snyggt och inte vidareutvecklas.


    • PocketDivXEncoder – ett gratis filmkonverteringsprogram som tar nästan vilken videofil som helst och konverterar till ett anpassat DivX-format för din mobila enhet.





    Gör så här (det är lättare än vad det ser ut - följ bara instruktionen steg för steg):



    1. Ladda ner här: PocketDivXEncoder. Från och med den nya versionen (0.3.96 beta) funkar det utmärkt även på Vista om man kör det som administratör. PocketDivXEncoder är ett grafiskt gränssnitt till den grymma konverteringsmotorn mencoder som klarar av att konvertera från nästan alla videoformat man kan tänka sig (divx, xvid, mpeg, mpeg2, mkv o.s.v.)

    2. När man startar PocketDivXEncoder får man välja vilken enhet man ska koda video för. Jag brukar välja PDA eftersom den har samma upplösning som min HTC MTeoR (240 x 320 pixlar).

    3. Öppna din videofil.

    4. Gör lämpliga inställningar för konverteringen. Jag brukar välja de här (vissa ligger under advanced options):
      • Video quality: 12 (max)
      • Audio quality: 5
      • Brightness: +6%
      • Saturation: +5%
      • Sound: +5%
      • Use 2-pass encoding: ikryssad (konverteringen tar längre tid men ger bättre kvalitet)
      • Deinterlace: ikryssad
      • VHQ: ikryssad
      • XviD: ikryssad (om man inte kryssar i den här får man ut en DivX-fil istället – skillnaden är minimal).

    5. Överkurs: Beskär filmen. Om din enhet inte har widescreenformat så kan det bli en del svarta kanter (precis som på en vanlig TV utan widescreen). Jag brukar beskära lite så att man får en video med större höjd men tappar lite i ytterkanterna. För en TV-serie i widescreen (1.78:1) brukar jag sätta höjden till 210, för en film (2.35:1) brukar jag sätta höjden till 180. Detta gör man under Resize.

    6. Tryck på Encode Now så sätter kodningen igång.

    7. Ladda ner och installera CorePlayer eller TCPMP på din mobila enhet.

    8. När punkt 6 är klar, kopiera över den konverterade filen till din mobila enhet.

    9. Öppna filen i CorePlayer och njut av film överallt! Coreplayer gör sig bäst i fullskärmsläge där den vrider filmen för att utnyttja skärmytan på bästa sätt.



    Med inställningar ovan blir ett 22-minutersavsnitt av en TV-serie ungefär 85 MB, 45-minutersavsnitt 160 MB och en långfilm c:a 325 MB. Man får in mycket TV och film på ett minneskort på 2GB med andra ord.


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "et i mobilen!", + "author_id": 6, + "created_at": 1192803840000, + "created_by": 6, + "updated_at": 1192803840000, + "updated_by": 6, + "published_at": 1192803840000, + "published_by": 6 + }, + { + "id": 135, + "title": "Låtlistan för Rock Band är klar!", + "slug": "latlistan-for-rock-band-ar-klar", + "markdown": "\r\n\r\n\r\nTa en bra idé och gör den ännu bättre - Harmonix som är upphovsmakare till Guitar Hero har tagit nästa steg och i deras nya spel Rock Band kan man jamma med tre kompisar samtidigt. \r\n\r\n\r\nRock Band fungerar precis som Guitar Hero, men har ytterligare två instrument - bas och trummor - och ett sångspår. Priset är inte helt klart, men det verkar hamna kring 2000:- inklusive alla instrument. Rock Band har alla chanser att bli vinterns stora partyspel!\r\n\r\n\r\nI veckan släpptes den officiella låtlistan:\r\n\r\n\r\n\r\n\r\n1960s\r\nRolling Stones \"Gimme Shelter\"\r\n\r\n\r\n\r\n1970s\r\nAerosmith “Train Kept a Rollin’”*The Who \"Won't Get Fooled Again\"Boston “Foreplay/Long Time”Mountain \"Mississippi Queen\"*The Police “Next to You”David Bowie \"Suffragette City\"Black Sabbath \"Paranoid\"*Blue Oyster Cult \"Don't Fear the Reaper\"The Ramones \"Blitzkrieg Bop\"Deep Purple \"Highway Star\"KISS \"Detroit Rock City\"Molly Hatchet “Flirtin’ With Disaster”The Outlaws “Green Grass & High Tides”*Sweet “Ballroom Blitz”*\r\n\r\n\r\n\r\n1980sRush \"Tom Sawyer\"*Bon Jovi \"Wanted Dead or Alive\"The Clash \"Should I Stay or Should I Go\"Faith No More \"Epic\"R.E.M. “Orange Crush”Iron Maiden “Run to the Hills”*\r\n\r\n\r\n\r\n1990s\r\nFoo Fighters \"Learn to Fly\"Metallica \"Enter Sandman\"Nirvana \"In Bloom\"Stone Temple Pilots \"Vasoline\"Weezer \"Say It Ain't So\"Smashing Pumpkins \"Cherub Rock\"Radiohead \"Creep\"Beastie Boys \"Sabotage\"Hole \"Celebrity Skin\"Garbage \"I Think I'm Paranoid\"Soundgarden \"Black Hole Sun\"\r\n\r\n\r\n\r\n2000sThe Hives \"Main Offender\"Queens of the Stone Age \"Go With the Flow\"The Strokes \"Reptilia\"Jet \"Are You Gonna Be My Girl\"OK Go \"Here It Goes Again\"Nine Inch Nails \"The Hand That Feeds\"Pixies \"Wave of Mutilation\"Yeah Yeah Yeahs \"Maps\"Red Hot Chili Peppers \"Dani California\"Coheed & Cambria “Welcome Home”Fallout Boy “Dead on Arrival”The Killers “When You Were Young”New Pornographers “Electric Version”\r\n\r\n\r\n\r\n* Cover-version\r\n\r\n\r\nDen här listan innehåller en helt sjukt hög procent favoritlåtar av band jag har lyssnat mycket på i mitt liv, så det här känns som ett givet köp!\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/rockband-instruments.png)\r\n\r\n\r\nSåhär ser det ut när man spelar:\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n", + "html": "


    Ta en bra idé och gör den ännu bättre - Harmonix som är upphovsmakare till Guitar Hero har tagit nästa steg och i deras nya spel Rock Band kan man jamma med tre kompisar samtidigt.


    Rock Band fungerar precis som Guitar Hero, men har ytterligare två instrument - bas och trummor - och ett sångspår. Priset är inte helt klart, men det verkar hamna kring 2000:- inklusive alla instrument. Rock Band har alla chanser att bli vinterns stora partyspel!


    I veckan släpptes den officiella låtlistan:





    1960s

    Rolling Stones \"Gimme Shelter\"



    1970s

    Aerosmith “Train Kept a Rollin’”*
    The Who \"Won't Get Fooled Again\"
    Boston “Foreplay/Long Time”
    Mountain \"Mississippi Queen\"*
    The Police “Next to You”
    David Bowie \"Suffragette City\"
    Black Sabbath \"Paranoid\"*
    Blue Oyster Cult \"Don't Fear the Reaper\"
    The Ramones \"Blitzkrieg Bop\"
    Deep Purple \"Highway Star\"
    KISS \"Detroit Rock City\"
    Molly Hatchet “Flirtin’ With Disaster”
    The Outlaws “Green Grass & High Tides”*
    Sweet “Ballroom Blitz”*



    1980s
    Rush \"Tom Sawyer\"*
    Bon Jovi \"Wanted Dead or Alive\"
    The Clash \"Should I Stay or Should I Go\"
    Faith No More \"Epic\"
    R.E.M. “Orange Crush”
    Iron Maiden “Run to the Hills”*



    1990s

    Foo Fighters \"Learn to Fly\"
    Metallica \"Enter Sandman\"
    Nirvana \"In Bloom\"
    Stone Temple Pilots \"Vasoline\"
    Weezer \"Say It Ain't So\"
    Smashing Pumpkins \"Cherub Rock\"
    Radiohead \"Creep\"
    Beastie Boys \"Sabotage\"
    Hole \"Celebrity Skin\"
    Garbage \"I Think I'm Paranoid\"
    Soundgarden \"Black Hole Sun\"



    2000s
    The Hives \"Main Offender\"
    Queens of the Stone Age \"Go With the Flow\"
    The Strokes \"Reptilia\"
    Jet \"Are You Gonna Be My Girl\"
    OK Go \"Here It Goes Again\"
    Nine Inch Nails \"The Hand That Feeds\"
    Pixies \"Wave of Mutilation\"
    Yeah Yeah Yeahs \"Maps\"
    Red Hot Chili Peppers \"Dani California\"
    Coheed & Cambria “Welcome Home”
    Fallout Boy “Dead on Arrival”
    The Killers “When You Were Young”
    New Pornographers “Electric Version”




    * Cover-version


    Den här listan innehåller en helt sjukt hög procent favoritlåtar av band jag har lyssnat mycket på i mitt liv, så det här känns som ett givet köp!





    Såhär ser det ut när man spelar:








    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1193908800000, + "created_by": 6, + "updated_at": 1193908800000, + "updated_by": 6, + "published_at": 1193908800000, + "published_by": 6 + }, + { + "id": 143, + "title": "XNA GameStudio 2.0 beta finns nu att ladda ner", + "slug": "xna-gamestudio-20-beta-finns-nu-att-ladda-ner", + "markdown": "\r\n\r\n\r\nAtt utveckla dataspel är många datanördars dröm - och nu är det möjligt, även för oss som inte har orkat dyka djupt i prestandaoptimerad C++ och grafikprogrammering på vertex-nivå. Med Microsofts XNA Game Studio så kan man sätta ihop färdiga komponenter till ett spel på bara några timmar. Tidigare har Game Studio krävt att man installerar en Express-versionen av Visual Studio, men i och med 2.0 beta så kan man använda vanliga Visual Studio 2005 (det ryktas om stöd för Visual Studio 2008 i den skarpa releasen).\r\n\r\n\r\nOm du vill se lite exempel på spel som gjorts med Game Studio, titta på tävlingen Swedish Game Awards som Microsoft håller varje år. Förra årets vinnare Graviton Ultra ser riktigt grymt ut.\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/original.jpg)\r\n\r\n\r\nLadda ner betan av XNA Game Studio här.\r\n\r\n", + "html": "


    Att utveckla dataspel är många datanördars dröm - och nu är det möjligt, även för oss som inte har orkat dyka djupt i prestandaoptimerad C++ och grafikprogrammering på vertex-nivå. Med Microsofts XNA Game Studio så kan man sätta ihop färdiga komponenter till ett spel på bara några timmar. Tidigare har Game Studio krävt att man installerar en Express-versionen av Visual Studio, men i och med 2.0 beta så kan man använda vanliga Visual Studio 2005 (det ryktas om stöd för Visual Studio 2008 i den skarpa releasen).


    Om du vill se lite exempel på spel som gjorts med Game Studio, titta på tävlingen Swedish Game Awards som Microsoft håller varje år. Förra årets vinnare Graviton Ultra ser riktigt grymt ut.







    Ladda ner betan av XNA Game Studio här.


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "ör att veva ihop ett spel för PC eller Xbox på en kväll", + "author_id": 6, + "created_at": 1195560600000, + "created_by": 6, + "updated_at": 1195560600000, + "updated_by": 6, + "published_at": 1195560600000, + "published_by": 6 + }, + { + "id": 158, + "title": "Lek med 3000 tunnor i Crysis", + "slug": "lek-med-3000-tunnor-i-crysis", + "markdown": "\r\n\r\n\r\nDet är alltid kul med grym spelfysik, men extra kul när man plötsligt ser något i en spelmotor som känns långt mer avancerat än man trodde var möjligt. Jag sprang på den här filmen där någon testat gränserna för Crysis motor (Cryteks CryENGINE2) rejält. Förmodligen lär man behöva en ganska vass rigg för att klara av att upprepa detta, men det visar ändå på en riktigt fin fysikmotor.\r\n\r\n\r\nCryENGINE2 är en vidareutveckling av den motor som användes i Far Cry, en kul notis är att svenska MindArk (Project Entropia) har licensierat motorn till sitt kommande Entropia Universe.\r\n\r\n\r\nTjing pax för att slippa städa undan alla tunnorna!\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/tunnor.png)", + "html": "


    Det är alltid kul med grym spelfysik, men extra kul när man plötsligt ser något i en spelmotor som känns långt mer avancerat än man trodde var möjligt. Jag sprang på den här filmen där någon testat gränserna för Crysis motor (Cryteks CryENGINE2) rejält. Förmodligen lär man behöva en ganska vass rigg för att klara av att upprepa detta, men det visar ändå på en riktigt fin fysikmotor.


    CryENGINE2 är en vidareutveckling av den motor som användes i Far Cry, en kul notis är att svenska MindArk (Project Entropia) har licensierat motorn till sitt kommande Entropia Universe.


    Tjing pax för att slippa städa undan alla tunnorna!




    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1085, + "created_at": 1197935400000, + "created_by": 1085, + "updated_at": 1197935400000, + "updated_by": 1085, + "published_at": 1197935400000, + "published_by": 1085 + }, + { + "id": 165, + "title": "Speltipset: Portal", + "slug": "speltipset-portal", + "markdown": "\r\n\r\n\r\nDet är inte så ofta det kommer ett spel med en helt ny spelidé - men Portal är faktiskt ett sådant! Du vaknar upp i ett testlabb och har som enda hjälp en manick som skapar teleporteringsportaler. En blå portal och en gul portal, som är omedelbart hopkopplade. Det är en fiffigt hjälpmedel när du t.ex. ska ta dig upp på en plats dit du inte kan hoppa, och riktigt förvirrande blir det när du placerar ena portalen i golvet och den andra högt upp på en vägg. Total desorientering uppstår när gravitationen plötsligt har vridit sig åt ett annat håll!\r\n\r\n\r\nSom enda vägledare har du den ganska konstiga datorn GlaDOS som i ett lugnt och glatt tonläge berättar om hemska saker som kommer hända dig om du misslyckas med testerna. En tårta och en kub spelar också viktiga roller för handlingen, som jag inte ska avslöja mer om. Estetiken och idén påminner om filmen Cube och dess uppföljare HyperCube, och i kombination med en stor dos svart humor har Portal blivit mångas nya favorit. Bäst förstår man kanske alltihop av spelets trailer (som både visar spelidén och tonläget):\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nSjälv älskar jag det här spelet, dess enda fel är att det är för kort och går för fort att spela igenom. Det är dock ändå klart värt de $25 det kostar på Steam. Jag är inte alls överraskad över alla fansites och tributes som har gjorts, bland annat en av fredags-photoshop-tävlingarna på Something Awful. Som bonus har det också vad som måste vara spelhistoriens bästa ending credits :-).\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/portal_1184139776.jpg)", + "html": "


    Det är inte så ofta det kommer ett spel med en helt ny spelidé - men Portal är faktiskt ett sådant! Du vaknar upp i ett testlabb och har som enda hjälp en manick som skapar teleporteringsportaler. En blå portal och en gul portal, som är omedelbart hopkopplade. Det är en fiffigt hjälpmedel när du t.ex. ska ta dig upp på en plats dit du inte kan hoppa, och riktigt förvirrande blir det när du placerar ena portalen i golvet och den andra högt upp på en vägg. Total desorientering uppstår när gravitationen plötsligt har vridit sig åt ett annat håll!


    Som enda vägledare har du den ganska konstiga datorn GlaDOS som i ett lugnt och glatt tonläge berättar om hemska saker som kommer hända dig om du misslyckas med testerna. En tårta och en kub spelar också viktiga roller för handlingen, som jag inte ska avslöja mer om. Estetiken och idén påminner om filmen Cube och dess uppföljare HyperCube, och i kombination med en stor dos svart humor har Portal blivit mångas nya favorit. Bäst förstår man kanske alltihop av spelets trailer (som både visar spelidén och tonläget):










    Själv älskar jag det här spelet, dess enda fel är att det är för kort och går för fort att spela igenom. Det är dock ändå klart värt de $25 det kostar på Steam. Jag är inte alls överraskad över alla fansites och tributes som har gjorts, bland annat en av fredags-photoshop-tävlingarna på Something Awful. Som bonus har det också vad som måste vara spelhistoriens bästa ending credits :-).


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1199665560000, + "created_by": 6, + "updated_at": 1199665560000, + "updated_by": 6, + "published_at": 1199665560000, + "published_by": 6 + }, + { + "id": 176, + "title": "Håll koll på hur din dator ligger till prestandamässigt", + "slug": "hall-koll-pa-hur-din-dator-ligger-till-prestandamassigt", + "markdown": "\r\n\r\n\r\n3DMark är programmet som har blivit lite av en standard när det gäller att mäta sin dators prestanda, särskilt när det gäller hur den klarar tunga 3D-applikationer som nya spel. Tillverkaren Futuremark har skapat en community kring sitt program dit man kan skicka in resultaten och jämföra med andra. Senaste tillägget till communityn är en riktigt snygg flashkarta som visar i realtid hur testerna går.\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/futuremark.png)\r\nMan kan också hitta annan intressant statistik som vilka komponenter som ger bäst prestanda per krona. Titta på flashkartan här: 3DMarks flashkarta", + "html": "


    3DMark är programmet som har blivit lite av en standard när det gäller att mäta sin dators prestanda, särskilt när det gäller hur den klarar tunga 3D-applikationer som nya spel. Tillverkaren Futuremark har skapat en community kring sitt program dit man kan skicka in resultaten och jämföra med andra. Senaste tillägget till communityn är en riktigt snygg flashkarta som visar i realtid hur testerna går.







    Man kan också hitta annan intressant statistik som vilka komponenter som ger bäst prestanda per krona. Titta på flashkartan här: 3DMarks flashkarta
    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "testerna går runt om i världen", + "author_id": 6, + "created_at": 1201600500000, + "created_by": 6, + "updated_at": 1201600500000, + "updated_by": 6, + "published_at": 1201600500000, + "published_by": 6 + }, + { + "id": 177, + "title": "DisplayFusion - olika bakgrundsbilder på dina dubbla skärmar", + "slug": "displayfusion---olika-bakgrundsbilder-pa-dina-dubbla-skarmar", + "markdown": "\r\n\r\n\r\nOm du tillhör den del av datoranvändare som inte klarar sig på enbart en skärm, så kanske du hunnit störa dig på att Windows (XP & Vista) endast låter dig välja en bakgrundsbild trots att du vill ha olika bilder eller en bakgrund som sträcker sig över båda skärmarna.\r\n\r\n\r\nSom tur är finns det fler som velat uppnå ovanstående och tagit saken i egna händer, och jag vill framförallt lyfta fram gratisverktyget DisplayFusion. Programmet fungerar precis så bra som man vill att det skall göra och låter användaren enkelt bestämma individuella bakgrundsbilder på upp till tre skärmar. Man kan också enkelt flytta runt bilderna för att få så snygga skarvar som möjligt. Jag har testat DisplayFusion i Vista och där fungerar det helt felfritt.\r\n\r\n\r\nDisplayFusion har även en direktkoppling mot Flickr, där man kan söka bilder direkt i bildjättens arkiv. Smidigt!\r\n\r\n\r\nProgrammet är gratis och laddas ned från Binary Fortress hemsida. En snabb Googlesökning på Dual Screen Wallpapers öppnar sedan en värld av snygga bakgrunder, min favoritsite är Mandolux som har grymma bakgrunder för alla skärmstorlekar.\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/dualscreen.png)\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/displayfusion_1_5_0_wallpaper.gif)", + "html": "


    Om du tillhör den del av datoranvändare som inte klarar sig på enbart en skärm, så kanske du hunnit störa dig på att Windows (XP & Vista) endast låter dig välja en bakgrundsbild trots att du vill ha olika bilder eller en bakgrund som sträcker sig över båda skärmarna.


    Som tur är finns det fler som velat uppnå ovanstående och tagit saken i egna händer, och jag vill framförallt lyfta fram gratisverktyget DisplayFusion. Programmet fungerar precis så bra som man vill att det skall göra och låter användaren enkelt bestämma individuella bakgrundsbilder på upp till tre skärmar. Man kan också enkelt flytta runt bilderna för att få så snygga skarvar som möjligt. Jag har testat DisplayFusion i Vista och där fungerar det helt felfritt.


    DisplayFusion har även en direktkoppling mot Flickr, där man kan söka bilder direkt i bildjättens arkiv. Smidigt!


    Programmet är gratis och laddas ned från Binary Fortress hemsida. En snabb Googlesökning på Dual Screen Wallpapers öppnar sedan en värld av snygga bakgrunder, min favoritsite är Mandolux som har grymma bakgrunder för alla skärmstorlekar.





    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "lika bilder eller en bakgrund som sträcker sig över båda skärmarna.", + "author_id": 1085, + "created_at": 1201603200000, + "created_by": 1085, + "updated_at": 1201603200000, + "updated_by": 1085, + "published_at": 1201603200000, + "published_by": 1085 + }, + { + "id": 179, + "title": "Dagens felmeddelande", + "slug": "dagens-felmeddelande", + "markdown": "\r\n\r\n\r\nVid ett försök att starta Sony Ericsson PC Suite fick en av våra kunder följande (väldigt ologiska) felmeddelande. Vad skulle du svara?\r\n\r\n\r\nTrevlig helg!\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/sepcsuite.png)\r\n\r\n\r\n\r\n", + "html": "


    Vid ett försök att starta Sony Ericsson PC Suite fick en av våra kunder följande (väldigt ologiska) felmeddelande. Vad skulle du svara?


    Trevlig helg!









    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1085, + "created_at": 1202472600000, + "created_by": 1085, + "updated_at": 1202472600000, + "updated_by": 1085, + "published_at": 1202472600000, + "published_by": 1085 + }, + { + "id": 180, + "title": "The Real Guitar Hero", + "slug": "the-real-guitar-hero", + "markdown": "\r\n\r\n\r\nGuitar Rising är som Guitar Hero - men med en riktig elgitarr! Vi datorns inbyggda ljudkort eller ett extern USB-ljudkort kan du koppla in vilken elgitarr som helst och äga dina vänner! Via det ljud som kommer in vet spelet vilken sträng som spelas och på vilket band - en sträng i taget är det som gäller, inga ackord med andra ord. Det här tror jag kommer att bli ett grymt spel som man dessutom kan ha mycket nytta av när man övar. Elgitarr ingår dock ej :-).\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/guitarrising.png)\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nLäs mer på http://www.guitarrising.com.\r\n\r\n\r\n", + "html": "


    Guitar Rising är som Guitar Hero - men med en riktig elgitarr! Vi datorns inbyggda ljudkort eller ett extern USB-ljudkort kan du koppla in vilken elgitarr som helst och äga dina vänner! Via det ljud som kommer in vet spelet vilken sträng som spelas och på vilket band - en sträng i taget är det som gäller, inga ackord med andra ord. Det här tror jag kommer att bli ett grymt spel som man dessutom kan ha mycket nytta av när man övar. Elgitarr ingår dock ej :-).


















    Läs mer på http://www.guitarrising.com.


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1202728320000, + "created_by": 6, + "updated_at": 1202728320000, + "updated_by": 6, + "published_at": 1202728320000, + "published_by": 6 + }, + { + "id": 190, + "title": "Ny version av CorePlayer", + "slug": "ny-version-av-coreplayer", + "markdown": "\r\n\r\n\r\nTidigare har vi berättat om hur man bäst ser på film i sin mobil. Nu har vår favoritspelare CorePlayer kommit i ny version, som bland annat innehåller följande nyheter:\r\n\r\n\r\n- Streaming, stöder alla vanliga format som används av SVT, SR och andra\r\n\r\n\r\n- YouTube-integration: specialfunktioner för att göra surfande på YouTubes mobilsite m.youtube.com bättre. Bland annat kan man välja att få se videos i bättre kvalitet.\r\n\r\n\r\n- Stöd för mängder med nya format (bland annat AVCHD, GSM Audio, PNG med alfakanal, \r\n\r\n\r\n- Nytt och bättre mediebibliotek för att hålla reda på alla filer man har på sin enhet\r\n\r\n\r\n- Språkstöd\r\n\r\n\r\n- Hundratals buggfixar, särskilt för Symbian och PalmOS som tidigare har legat lite efter Windows Mobile-versionen.\r\n\r\n\r\n\r\nMycket nöje! http://coreplayer.com/\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/cp_logo_ontop.jpg)", + "html": "


    Tidigare har vi berättat om hur man bäst ser på film i sin mobil. Nu har vår favoritspelare CorePlayer kommit i ny version, som bland annat innehåller följande nyheter:


    - Streaming, stöder alla vanliga format som används av SVT, SR och andra


    - YouTube-integration: specialfunktioner för att göra surfande på YouTubes mobilsite m.youtube.com bättre. Bland annat kan man välja att få se videos i bättre kvalitet.


    - Stöd för mängder med nya format (bland annat AVCHD, GSM Audio, PNG med alfakanal,


    - Nytt och bättre mediebibliotek för att hålla reda på alla filer man har på sin enhet


    - Språkstöd


    - Hundratals buggfixar, särskilt för Symbian och PalmOS som tidigare har legat lite efter Windows Mobile-versionen.




    Mycket nöje! http://coreplayer.com/


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1206012540000, + "created_by": 6, + "updated_at": 1206012540000, + "updated_by": 6, + "published_at": 1206012540000, + "published_by": 6 + }, + { + "id": 191, + "title": "Battlefield Heroes - Gratisspel från DICE i sommar", + "slug": "battlefield-heroes---gratisspel-fran-dice-i-sommar", + "markdown": "\r\n\r\n\r\nSvenska spelutvecklarna DICE, företaget bakom Battlefield-serien, lanserar i sommar ett nyutvecklat onlinespel - helt gratis! Spelet, Battlefield Heroes, är enl DICE en \"Cartoon Shooter\" och kan förmodligen närmast jämföras med Valves Team Fortress 2. Enligt utvecklaren är tyngdpunkten denna gång lagd helt på spelglädje och spelet lär vara långt ifrån lika \"realistiskt\" som föregångarna i serien.\r\n\r\n\r\nSpelet skall finansieras dels av reklam på spelets hemsida samt i spelets \"loader\", dock skall ingen reklam finnas inne i spelet. Man kommer även få betala mindre summor om man vill skräddarsy utseendet på sin karaktär, dock gäller detta endast utseende och är inget som ger spelfördelar.\r\n\r\n\r\nSpelet kommer även att ha ett eget rankingsystem som gör att man enbart kommer att matchas mot spelare i sin egen nivå. Detta lär förhoppningsvis göra att man slipper bli massmördad av kids som inte gör annat än att spela hela dagarna.\r\n\r\n\r\nJag tycker att det ser väldigt lovande ut, grafiken tilltalar mig stort och om DICE lyckas göra det kul att spela tror jag att det kan bli en stor succe. Kolla in trailern nedan.\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/bfheroes_logo.gif)\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/bfheroes_scr1.jpg)\r\n\r\n\r\n\r\n\r\n\r\n\r\n", + "html": "


    Svenska spelutvecklarna DICE, företaget bakom Battlefield-serien, lanserar i sommar ett nyutvecklat onlinespel - helt gratis! Spelet, Battlefield Heroes, är enl DICE en \"Cartoon Shooter\" och kan förmodligen närmast jämföras med Valves Team Fortress 2. Enligt utvecklaren är tyngdpunkten denna gång lagd helt på spelglädje och spelet lär vara långt ifrån lika \"realistiskt\" som föregångarna i serien.


    Spelet skall finansieras dels av reklam på spelets hemsida samt i spelets \"loader\", dock skall ingen reklam finnas inne i spelet. Man kommer även få betala mindre summor om man vill skräddarsy utseendet på sin karaktär, dock gäller detta endast utseende och är inget som ger spelfördelar.


    Spelet kommer även att ha ett eget rankingsystem som gör att man enbart kommer att matchas mot spelare i sin egen nivå. Detta lär förhoppningsvis göra att man slipper bli massmördad av kids som inte gör annat än att spela hela dagarna.


    Jag tycker att det ser väldigt lovande ut, grafiken tilltalar mig stort och om DICE lyckas göra det kul att spela tror jag att det kan bli en stor succe. Kolla in trailern nedan.













    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1085, + "created_at": 1206619200000, + "created_by": 1085, + "updated_at": 1206619200000, + "updated_by": 1085, + "published_at": 1206619200000, + "published_by": 1085 + }, + { + "id": 205, + "title": "Grymmaste bilspelstillbehöret nånsin?", + "slug": "grymmaste-bilspelstillbehoret-nansin", + "markdown": "\r\n\r\n\r\nBilspelsentusiast som man är kunde jag inte hålla mig från att länka till den här grymma fullmotionstolen från CXC Simulations som jag snubblade över hos Gizmodo. Förutom racingstolen på fullmotionplatta får man ratt, pedaler, tre 46-tums HD-skärmar, 505 watts surroundsystem samt fyra vibrationsskapare.\r\n\r\n\r\nPris är inte angivet, men med tanke på att de byggs för hand efter beställarens specifikationer lär det handla om fantasibelopp. Men man får väl alltid drömma...\r\n\r\n\r\nAlla specifikationer finns i Gizmodos artikel.CXC Simulatons.\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/mpsii.jpg)\r\n\r\n\r\nCXC Simulations har också en riktigt grym Quicktime 3D som visar stolen ur alla vinklar man kan tänka sig.\r\n\r\n", + "html": "


    Bilspelsentusiast som man är kunde jag inte hålla mig från att länka till den här grymma fullmotionstolen från CXC Simulations som jag snubblade över hos Gizmodo. Förutom racingstolen på fullmotionplatta får man ratt, pedaler, tre 46-tums HD-skärmar, 505 watts surroundsystem samt fyra vibrationsskapare.


    Pris är inte angivet, men med tanke på att de byggs för hand efter beställarens specifikationer lär det handla om fantasibelopp. Men man får väl alltid drömma...


    Alla specifikationer finns i Gizmodos artikel.
    CXC Simulatons.





    CXC Simulations har också en riktigt grym Quicktime 3D som visar stolen ur alla vinklar man kan tänka sig.


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1085, + "created_at": 1210868700000, + "created_by": 1085, + "updated_at": 1210868700000, + "updated_by": 1085, + "published_at": 1210868700000, + "published_by": 1085 + }, + { + "id": 229, + "title": "Klyscherizer 2000", + "slug": "klyscherizer-2000", + "markdown": "\r\n\r\nEn klassiker som garanterat väcker nostalgikänslor hos dom flesta som var med kring millenieskiftet. En klyscherizer - klicka på knapparna och hör alla klyschor - så som: \"Jag lyssnade på dom långt innan de blev kända\", \"jag tyckte boken var bättre än filmen\" osv. Klockren nostalgi!På med högtalaren och följ länken:http://funzone.se/onlinespel/595-Klyscherizer_2000\r\n\r\n\r\nUPDATE 2010-05-06:Ovanstående verkar var död så Oscar tipsade om att den finns att nå på Web Archive:Klyscherizer 2000\r\n\r\n\r\nJag tog mig också friheten att göra en lokal kopia av denna del av viktig internethistoria:\r\n\r\n\r\nLokal kopia\r\n\r\n![Bild](http://tekniken.nu/uploads/633572642477218879-klyscherizer.JPG)", + "html": "

    En klassiker som garanterat väcker nostalgikänslor hos dom flesta som var med kring millenieskiftet. En klyscherizer - klicka på knapparna och hör alla klyschor - så som: \"Jag lyssnade på dom långt innan de blev kända\", \"jag tyckte boken var bättre än filmen\" osv. Klockren nostalgi!

    På med högtalaren och följ länken:
    http://funzone.se/onlinespel/595-Klyscherizer_2000


    UPDATE 2010-05-06:
    Ovanstående verkar var död så Oscar tipsade om att den finns att nå på Web Archive:

    Klyscherizer 2000


    Jag tog mig också friheten att göra en lokal kopia av denna del av viktig internethistoria:


    Lokal kopia

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Klyscherizer 2000", + "meta_description": "", + "author_id": 1087, + "created_at": 1221667447000, + "created_by": 1087, + "updated_at": 1221667447000, + "updated_by": 1087, + "published_at": 1221667447000, + "published_by": 1087 + }, + { + "id": 232, + "title": "PocketGuitar - populäraste programmet på Itunes App Store", + "slug": "pocketguitar---popularaste-programmet-pa-itunes-app-store", + "markdown": "\r\n\r\nJust nu ligger programmet PocketGuitar på topp i Itunes App Store. Det är en gitarrsimulering – eller som en av mina kollegor uttryckte det: ett av de minst meningslösa av alla de meningslösa program som finns för iPhone.\r\n\r\nMeningslöst eller inte – PocketGuitar är otroligt välgjort. Huvudskärmen består av en greppbräda där man trycker ner banden till vänster och slår an strängar längst till höger. Man kan ställa in hur långt avståndet mellan strängarna ska vara och hur många band som ska visas, så att man kan få en gitarr som passar olika storlekar på fingrar.\r\n\r\n\r\n\r\nDet finns en uppsjö inställningar. Man kan välja mellan olika gitarrer (akustisk med mick, elgitarr, nylon och bas) och mängder av stämningar, t.ex. Drop D. Accelerometern fungerar som svaj – väldigt roligt :-).\r\n\r\n\r\n\r\nDet finns två platser för pedaler där man kan välja dist, delay och chorus och göra olika inställningar.\r\n\r\nProgrammet känns oerhört responsivt och ljudet laggar ingenting. Priset är också det rätta: 7 kr. Det enda negativa är att man skulle vilja att programmet ännu mer var likt en gitarr. Det går ju förstås inte att spela ordentligt på en gitarr där man inte kan känna strängarna och som inte har mer än fyra fem band. Men det är hur kul som helst och har hög imponansfaktor!\r\n\r\nHär är en liten video på hur det funkar när man spelar:\r\n\r\n![Bild](http://tekniken.nu/uploads/633576784718920666-PocketGuitar.PNG)\r\n\r\n\r\n", + "html": "

    Just nu ligger programmet PocketGuitar på topp i Itunes App Store. Det är en gitarrsimulering – eller som en av mina kollegor uttryckte det: ett av de minst meningslösa av alla de meningslösa program som finns för iPhone.

    Meningslöst eller inte – PocketGuitar är otroligt välgjort. Huvudskärmen består av en greppbräda där man trycker ner banden till vänster och slår an strängar längst till höger. Man kan ställa in hur långt avståndet mellan strängarna ska vara och hur många band som ska visas, så att man kan få en gitarr som passar olika storlekar på fingrar.

    Det finns en uppsjö inställningar. Man kan välja mellan olika gitarrer (akustisk med mick, elgitarr, nylon och bas) och mängder av stämningar, t.ex. Drop D. Accelerometern fungerar som svaj – väldigt roligt :-).

    Det finns två platser för pedaler där man kan välja dist, delay och chorus och göra olika inställningar.

    Programmet känns oerhört responsivt och ljudet laggar ingenting. Priset är också det rätta: 7 kr. Det enda negativa är att man skulle vilja att programmet ännu mer var likt en gitarr. Det går ju förstås inte att spela ordentligt på en gitarr där man inte kan känna strängarna och som inte har mer än fyra fem band. Men det är hur kul som helst och har hög imponansfaktor!

    Här är en liten video på hur det funkar när man spelar:




    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "PocketGuitar - populäraste programmet på Itunes App Store", + "meta_description": "", + "author_id": 6, + "created_at": 1222081671000, + "created_by": 6, + "updated_at": 1222081671000, + "updated_by": 6, + "published_at": 1222081671000, + "published_by": 6 + }, + { + "id": 242, + "title": "Gmail - nu med alkolås", + "slug": "gmail---nu-med-alkolas", + "markdown": "\r\n\r\nAlla har vi väl någon gång kommit hem från en fest satt oss framför datorn och författat några väl valda ord som dagen efter kanske inte längre tycks lika briljanta. Wired berättar att för att råda bot på detta har Gmail lanserat ett (valfritt) fylleskydd man kallar Mail Goggles (jämför Beer Goggles). Om man försöker skicka epost på helgkvällar så måste man först lösa några ganska enkla mattetal på en viss tid, annars går mailet inte iväg.\r\n\r\nFör den som inte använder Gmail eller vill ha ett mer permanent skydd så kan man enkelt sätta upp en regel som fördröjer alla skickade mail i en minut. Då hinner man t.ex. fiska upp mailet ur utkorgen när man kommer på att man glömde bilagan. Såhär gör man:\r\n\r\nÖppna Tools > Rules and alerts, skapa en ny regel:\r\n\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/633589968421353699-Super Gmail Logo.png)", + "html": "

    Alla har vi väl någon gång kommit hem från en fest satt oss framför datorn och författat några väl valda ord som dagen efter kanske inte längre tycks lika briljanta. Wired berättar att för att råda bot på detta har Gmail lanserat ett (valfritt) fylleskydd man kallar Mail Goggles (jämför Beer Goggles). Om man försöker skicka epost på helgkvällar så måste man först lösa några ganska enkla mattetal på en viss tid, annars går mailet inte iväg.

    För den som inte använder Gmail eller vill ha ett mer permanent skydd så kan man enkelt sätta upp en regel som fördröjer alla skickade mail i en minut. Då hinner man t.ex. fiska upp mailet ur utkorgen när man kommer på att man glömde bilagan. Såhär gör man:

    Öppna Tools > Rules and alerts, skapa en ny regel:

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Gmail - nu med alkolås", + "meta_description": "", + "author_id": 6, + "created_at": 1223400041000, + "created_by": 6, + "updated_at": 1223400041000, + "updated_by": 6, + "published_at": 1223400041000, + "published_by": 6 + }, + { + "id": 243, + "title": "Tilt shift - en fascinerande fototeknik", + "slug": "tilt-shift---en-fascinerande-fototeknik", + "markdown": "\r\n\r\nTilt-shift är en spännande teknik som har en otroligt kool miniatyriseringseffekt – allt man fotar ser ut som en modell!\r\n\r\n\r\n\r\nTekniken består av två delar:\r\n\r\nTilt: normalt sett är objektivet parallellt med bildsensorn/sensorn, vilket gör att alla objekt som är i fokus är på samma avstånd från kameran. Om man vinklar objektivet kommer objekt på olika avstånd att vara i fokus, vilket ger en ovanlig effektShift: När man fotograferar något som inte är rakt framför kameran, t.ex. genom att vinkla kameran uppåt för att fota toppen på ett högt hus, så kommer objektets parallella linjer (husets ytterväggar) att löpa samman. Detta kan också göras tvärt om för att lura ögat.\r\n\r\nDet har börjat dyka upp fantastiska foton på städer som ser ut att vara gjorda i någons vardagsrum. En av de nyaste och bästa är filmer över Syndeys hamn som kallas ”Sydney Bathtub”. Se filmerna här!\r\n\r\n![Bild](http://tekniken.nu/uploads/633591487727254380-bathtub.png)", + "html": "

    Tilt-shift är en spännande teknik som har en otroligt kool miniatyriseringseffekt – allt man fotar ser ut som en modell!

    Tekniken består av två delar:

    • Tilt: normalt sett är objektivet parallellt med bildsensorn/sensorn, vilket gör att alla objekt som är i fokus är på samma avstånd från kameran. Om man vinklar objektivet kommer objekt på olika avstånd att vara i fokus, vilket ger en ovanlig effekt
    • Shift: När man fotograferar något som inte är rakt framför kameran, t.ex. genom att vinkla kameran uppåt för att fota toppen på ett högt hus, så kommer objektets parallella linjer (husets ytterväggar) att löpa samman. Detta kan också göras tvärt om för att lura ögat.

    Det har börjat dyka upp fantastiska foton på städer som ser ut att vara gjorda i någons vardagsrum. En av de nyaste och bästa är filmer över Syndeys hamn som kallas ”Sydney Bathtub”. Se filmerna här!

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Tilt shift - en fascinerande fototeknik", + "meta_description": "", + "author_id": 6, + "created_at": 1223551971000, + "created_by": 6, + "updated_at": 1223551971000, + "updated_by": 6, + "published_at": 1223551971000, + "published_by": 6 + }, + { + "id": 244, + "title": "Hur får man YouTube i superupplösning?", + "slug": "hur-far-man-youtube-i-superupplosning", + "markdown": "\r\n\r\nSåhär förstås:\r\n\r\n\r\n\r\nEn driftig människa som kallar sig Mr Doob har satt ihop en ”TV-vägg” med Rick Astley på YouTube.\r\n\r\n(Tips: starta med länken \"Play\", inte med play-knapparna i spelarna, och kör \"Restart\" några gånger om de inte är synkroniserade)\r\n\r\n![Bild](http://tekniken.nu/uploads/633592267856552409-ricksuperhd.png)", + "html": "

    Såhär förstås:

    En driftig människa som kallar sig Mr Doob har satt ihop en ”TV-vägg” med Rick Astley på YouTube.

    (Tips: starta med länken \"Play\", inte med play-knapparna i spelarna, och kör \"Restart\" några gånger om de inte är synkroniserade)

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Hur får man YouTube i superupplösning?", + "meta_description": "", + "author_id": 6, + "created_at": 1223629985000, + "created_by": 6, + "updated_at": 1223629985000, + "updated_by": 6, + "published_at": 1223629985000, + "published_by": 6 + }, + { + "id": 250, + "title": "Wordle - Gör \"tag cloud konst\" av ord ", + "slug": "wordle---gor-tag-cloud-konst-av-ord-", + "markdown": "\r\n\r\nEn bloggläsare tipsade mig för ett tag sedan om webbtjänsten Wordle som är ett verktyg som genererar ”konst” av textmassa. Förmodligen inte superanvändbart, men det blir faktiskt riktigt snyggt!\r\n\r\nTjänsten låter dig klippa in en textmassa eller länka till ett RSS-flöde och genererar sedan ett s.k. tag cloud där man kan påverka de flesta variablerna (typsnitt, palett, sorteringsmodell etc). Storleken på respektive ord baseras sedan på dess förekomst. Funktioner för att exkludera vanliga ord (även svenska!) finns, man kan även markera specifika ord och ta bort dem.\r\n\r\nLåt det stjäla en halvtimme av din arbetstid!\r\n\r\nhttp://www.wordle.net\r\n\r\n\r\n\r\nTekniken.nus RSS\r\n\r\n\r\n\r\nIDGs RSS\r\n\r\n![Bild](http://tekniken.nu/uploads/633609751582083756-wrdle-big.png)", + "html": "

    En bloggläsare tipsade mig för ett tag sedan om webbtjänsten Wordle som är ett verktyg som genererar ”konst” av textmassa. Förmodligen inte superanvändbart, men det blir faktiskt riktigt snyggt!

    Tjänsten låter dig klippa in en textmassa eller länka till ett RSS-flöde och genererar sedan ett s.k. tag cloud där man kan påverka de flesta variablerna (typsnitt, palett, sorteringsmodell etc). Storleken på respektive ord baseras sedan på dess förekomst. Funktioner för att exkludera vanliga ord (även svenska!) finns, man kan även markera specifika ord och ta bort dem.

    Låt det stjäla en halvtimme av din arbetstid!

    http://www.wordle.net

    Tekniken.nus RSS

    IDGs RSS

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Wordle - gör \"tag cloud\"-konst av ord ", + "meta_description": "", + "author_id": 1085, + "created_at": 1225378357000, + "created_by": 1085, + "updated_at": 1225378357000, + "updated_by": 1085, + "published_at": 1225378357000, + "published_by": 1085 + }, + { + "id": 251, + "title": "Nytt Riddick-spel på gång!", + "slug": "nytt-riddick-spel-pa-gang", + "markdown": "\r\n\r\nEtt av teknikens absoluta favoritspel Chronicles of Riddick: Escape from Butcher Bay kommer nu att få en uppföljare rapporterar Spelfeber. Uppföljaren Assault on Dark Athena har det ryktats om länge, men när Activision slogs ihop med Blizzard var det en av titlarna man la i malpåse. Nu har dock rättigheterna köpts av Atari så nu blir det av – och det blir inte en remake av Butcher Bay som man tidigare har talat om utan ett helt nytt spel. Utvecklare blir som i förra spelet svenska Starbreeze, vilket borgar för ett riktigt bra spel även denna gång. För er som inte spelat första spelet är det bara att sätta igång – det finns att få tag i billigt både begagnat och i budgetutgåva!\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/riddick.jpg)", + "html": "

    Ett av teknikens absoluta favoritspel Chronicles of Riddick: Escape from Butcher Bay kommer nu att få en uppföljare rapporterar Spelfeber. Uppföljaren Assault on Dark Athena har det ryktats om länge, men när Activision slogs ihop med Blizzard var det en av titlarna man la i malpåse. Nu har dock rättigheterna köpts av Atari så nu blir det av – och det blir inte en remake av Butcher Bay som man tidigare har talat om utan ett helt nytt spel. Utvecklare blir som i förra spelet svenska Starbreeze, vilket borgar för ett riktigt bra spel även denna gång. För er som inte spelat första spelet är det bara att sätta igång – det finns att få tag i billigt både begagnat och i budgetutgåva!

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Nytt Riddick-spel på gång!", + "meta_description": "", + "author_id": 6, + "created_at": 1225446361000, + "created_by": 6, + "updated_at": 1225446361000, + "updated_by": 6, + "published_at": 1225446361000, + "published_by": 6 + }, + { + "id": 252, + "title": "Den ultimata kombinationen i vardagsrummet", + "slug": "den-ultimata-kombinationen-i-vardagsrummet", + "markdown": "\r\n\r\nFör alla som funderar på att köpa en Media-PC att koppla in till sin hdtv i vardagsrummet kan jag nu rekommendera den ultimata kombinationen av tillbehör som tillsammans gör ditt vardagsrum till en fullständig upplevelse:\r\n\r\nTill att börja med är det en LCD-TV du behöver, här finns det många bra att välja mellan och det enda jag kan säga är att har du ett större rum behöver du minst en 46 tum om du ska kunna se texten i operativsystemet på en full hd-upplösning, sitter du närmare TVn räcker 40 tum.\r\n\r\nSedan är det en Mac-Mini (1GB minne, Dual Core minst 1,8 Ghz) som du kopplar ihop med TVn med hjälp av en DVI-HDMI konverterare.\r\n\r\nHar du ett ljudsystem eller hemmabioförstärkare har dessa oftast en optisk ingång och då kopplar du in denna med hjälp av en s.k. Toslink kabel från Macen som faktiskt har en kombinerad optisk och analog 3.5 utgång.\r\n\r\nTill detta köper du en EyeTV diversity för att titta på marksänd TV (nu kan du börja pausa i direktsändning, kolla på SVD HD etc).\r\n\r\nSo far so good, nu har du ett snyggt och stabilt system för att titta på filmer och tv. Nu kommer det spännande som gör kombinationen ovan ultimat: Hämta hem PLEX, det är en mediaspelare för OSX som spelar upp alla format, inklusive RAR-filer, PLEX scannar automatiskt igenom dina filmmappar och hämtar filminformation från IMDB och tv.com, allt presenteras i ett jättefint gränssnitt som går utmärkt att styra med den vita fjärrkontrollen som följer med Mac-minin.\r\n\r\nFör att ytterligare göra kombinationen komplett köper du nu en iPhone, med hjälp av denna kan du både styra iTunes med hjälp av Remote som laddas ner gratis från App Store, köp även \"Pad\" (7 kr) från App Store, med hjälp av denna gör du om din iPhone till en styrplatta som klarar av alla gester som nya Macbook datorerna har (dvs zooma, scrolla, klicka med hjälp av en eller två fingrar).\r\n\r\nHar du flera rum kan du också köpa en Airport Express och koppla in ytterligare högtalare i fler rum och du styr allt med hjälp av din iPhone, volym, vilka rum ljudet ska spelas upp i.\r\n\r\nDirektlänkar till ovanstående program kommer snart!\r\n\r\n![Bild](http://tekniken.nu/uploads/lcdtv.png)", + "html": "

    För alla som funderar på att köpa en Media-PC att koppla in till sin hdtv i vardagsrummet kan jag nu rekommendera den ultimata kombinationen av tillbehör som tillsammans gör ditt vardagsrum till en fullständig upplevelse:

    Till att börja med är det en LCD-TV du behöver, här finns det många bra att välja mellan och det enda jag kan säga är att har du ett större rum behöver du minst en 46 tum om du ska kunna se texten i operativsystemet på en full hd-upplösning, sitter du närmare TVn räcker 40 tum.

    Sedan är det en Mac-Mini (1GB minne, Dual Core minst 1,8 Ghz) som du kopplar ihop med TVn med hjälp av en DVI-HDMI konverterare.

    Har du ett ljudsystem eller hemmabioförstärkare har dessa oftast en optisk ingång och då kopplar du in denna med hjälp av en s.k. Toslink kabel från Macen som faktiskt har en kombinerad optisk och analog 3.5 utgång.

    Till detta köper du en EyeTV diversity för att titta på marksänd TV (nu kan du börja pausa i direktsändning, kolla på SVD HD etc).

    So far so good, nu har du ett snyggt och stabilt system för att titta på filmer och tv. Nu kommer det spännande som gör kombinationen ovan ultimat: Hämta hem PLEX, det är en mediaspelare för OSX som spelar upp alla format, inklusive RAR-filer, PLEX scannar automatiskt igenom dina filmmappar och hämtar filminformation från IMDB och tv.com, allt presenteras i ett jättefint gränssnitt som går utmärkt att styra med den vita fjärrkontrollen som följer med Mac-minin.

    För att ytterligare göra kombinationen komplett köper du nu en iPhone, med hjälp av denna kan du både styra iTunes med hjälp av Remote som laddas ner gratis från App Store, köp även \"Pad\" (7 kr) från App Store, med hjälp av denna gör du om din iPhone till en styrplatta som klarar av alla gester som nya Macbook datorerna har (dvs zooma, scrolla, klicka med hjälp av en eller två fingrar).

    Har du flera rum kan du också köpa en Airport Express och koppla in ytterligare högtalare i fler rum och du styr allt med hjälp av din iPhone, volym, vilka rum ljudet ska spelas upp i.

    Direktlänkar till ovanstående program kommer snart!

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Den ultimata kombinationen i vardagsrummet", + "meta_description": "", + "author_id": 1087, + "created_at": 1225706772000, + "created_by": 1087, + "updated_at": 1225706772000, + "updated_by": 1087, + "published_at": 1225706772000, + "published_by": 1087 + }, + { + "id": 268, + "title": "Så hyr du film och TV lagligt på iTunes", + "slug": "sa-hyr-du-film-och-tv-lagligt-pa-itunes", + "markdown": "\r\n\r\nBitTorrent i all ära men vill man göra rätt för sig är det svårt i Sverige eller Europa överlag. Det finns några svenska alternativ, vi har tidigare skrivit om HeadWeb som vi egentligen gillar mer eftersom det är en bättre teknisk lösning - inget DRM skydd och har en svensk butik men tyvärr är utbudet inte tillräckligt bra (inte ens i närheten av lika bra som i den fysiska filmbutiken runt hörnet). I USA finns det många tjänster som erbjuder laglig film och TV med hela det stora utbudet, iTunes, NetFlix och Hulu är de stora spelarna men tyvärr är de än så länge begränsade till den amerikanska marknaden. Men nu finns det ett sätt att komma åt iTunes trots att du sitter i Sverige, metoden går ut på att du skapar ett amerikanskt konto och använder det till köp på iTunes. Numera är också all musik som säljs på iTunes fri från DRM-skydd vilket gör att du kan köpa musik via ditt amerikanska konto och sedan lyssna på det oavsett vilket konto du har loggat in som. Att Apple har tagit bort DRM-skyddet för musik till slut hurrar vi extra mycket för och förhoppningsvis kommer detta framöver även gälla för köpfilmer snart så att du kan bränna dem på DVD.\r\n\r\nÖverlag känns det synd att man måste krångla så här mycket för att kunna göra rätt för sig, men förhoppningsvis lär sig filmindustrin snart samma läxa som musikindustrin har gjort! Skälet till att iTunes inte erbjuder denna möjlighet till Europa lär säkerligen vara på grund av begränsningar i deras avtal med upphovsägarna (filmbolagen) och att film och TV-industrin är bortskämda med att kunna ha olika releasedatum i olika delar av världen.\r\n\r\nAnyway, så här gör du:\r\n\r\n\r\nKöp ett iTunes Gift Card på eBay av en amerikansk säljare. Hitta en säljare som har fått goda recensioner och betala ungefär vad kortet är värt, ibland några dollar över värdet på kortet ibland några dollar under. Jag köpte ett 50$ kort för 46$.Vänta på emailet från säljaren som skrapat presentkortet och skickat koden till dig. Min kod kom efter fem minuter.Gå in i iTunes, logga ut ditt nuvarande konto (det är ju kopplat till Sverige).Klicka på Redeem i iTunes Store.Fyll i den kod du fick av säljaren (den förbrukas inte än, du kan vara lugn).Nu trycker du på login och sedan Create Account – eftersom du redan matat in presentkortet så behöver du nu inte fylla i ett kreditkort, välj därför –None.Välj en annan av dina mailadresser.Skriv in en adress på ett hotell du varit på i USA eller annan giltig amerikansk adress.Tryck Create. Nu kommer ditt amerikanska konto skapas och fyllas med pengarna från presentkortet.\r\n\r\n\r\nKvaliten på bild och ljud är kanon, det står HD-kvalitet och bilden är högupplöst men en film på 1,35gb håller ju inte blu-ray kvalitet direkt. Hastigheten att ladda ner filmer är jättesnabb eftersom Apple använder sig av Akamai:s distributionsnätverk så du kan oftast börja titta på filmen direkt när du köpt/hyrt den. Om du har en Apple-TV eller en Mac-mini kopplad till din TV kan du nu börja använda Frontrow på riktigt! Riktigt skön upplevelse kan jag lova!\r\n\r\nPriserna är väldigt konkurrenskraftiga, nu har dollarn gått upp lite den senaste tiden så det är inte samma rea-priser som i somras men ändå väldigt behagligt. Dessutom får man ju alla filmer tidigare än i Sverige.\r\n\r\nHär kommer lite prisexempel:\r\n\r\nHyra en film: $3.99 (c:a 32kr)\r\n\r\nDu har 24 timmar på dig att titta på filmen. Köpa filmen kostar $14.99 (c:a 120kr)\r\n\r\n\r\n\r\nKöpa en hel tv-säsong (season ticket) : $18.99 (c:a 120kr), enskilt avsnitt: $1.90 (c:a 16kr)\r\n\r\n\r\n\r\nKöpa ett musikalbum: $9.99 (c:a 80kr)\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/633669280423573581-image003.jpg)", + "html": "

    BitTorrent i all ära men vill man göra rätt för sig är det svårt i Sverige eller Europa överlag. Det finns några svenska alternativ, vi har tidigare skrivit om HeadWeb som vi egentligen gillar mer eftersom det är en bättre teknisk lösning - inget DRM skydd och har en svensk butik men tyvärr är utbudet inte tillräckligt bra (inte ens i närheten av lika bra som i den fysiska filmbutiken runt hörnet). I USA finns det många tjänster som erbjuder laglig film och TV med hela det stora utbudet, iTunes, NetFlix och Hulu är de stora spelarna men tyvärr är de än så länge begränsade till den amerikanska marknaden. Men nu finns det ett sätt att komma åt iTunes trots att du sitter i Sverige, metoden går ut på att du skapar ett amerikanskt konto och använder det till köp på iTunes. Numera är också all musik som säljs på iTunes fri från DRM-skydd vilket gör att du kan köpa musik via ditt amerikanska konto och sedan lyssna på det oavsett vilket konto du har loggat in som. Att Apple har tagit bort DRM-skyddet för musik till slut hurrar vi extra mycket för och förhoppningsvis kommer detta framöver även gälla för köpfilmer snart så att du kan bränna dem på DVD.

    Överlag känns det synd att man måste krångla så här mycket för att kunna göra rätt för sig, men förhoppningsvis lär sig filmindustrin snart samma läxa som musikindustrin har gjort! Skälet till att iTunes inte erbjuder denna möjlighet till Europa lär säkerligen vara på grund av begränsningar i deras avtal med upphovsägarna (filmbolagen) och att film och TV-industrin är bortskämda med att kunna ha olika releasedatum i olika delar av världen.

    Anyway, så här gör du:

    1. Köp ett iTunes Gift Card på eBay av en amerikansk säljare. Hitta en säljare som har fått goda recensioner och betala ungefär vad kortet är värt, ibland några dollar över värdet på kortet ibland några dollar under. Jag köpte ett 50$ kort för 46$.
    2. Vänta på emailet från säljaren som skrapat presentkortet och skickat koden till dig. Min kod kom efter fem minuter.
    3. Gå in i iTunes, logga ut ditt nuvarande konto (det är ju kopplat till Sverige).
    4. Klicka på Redeem i iTunes Store.
    5. Fyll i den kod du fick av säljaren (den förbrukas inte än, du kan vara lugn).
    6. Nu trycker du på login och sedan Create Account – eftersom du redan matat in presentkortet så behöver du nu inte fylla i ett kreditkort, välj därför –None.
    7. Välj en annan av dina mailadresser.
    8. Skriv in en adress på ett hotell du varit på i USA eller annan giltig amerikansk adress.
    9. Tryck Create. Nu kommer ditt amerikanska konto skapas och fyllas med pengarna från presentkortet.

    Kvaliten på bild och ljud är kanon, det står HD-kvalitet och bilden är högupplöst men en film på 1,35gb håller ju inte blu-ray kvalitet direkt. Hastigheten att ladda ner filmer är jättesnabb eftersom Apple använder sig av Akamai:s distributionsnätverk så du kan oftast börja titta på filmen direkt när du köpt/hyrt den. Om du har en Apple-TV eller en Mac-mini kopplad till din TV kan du nu börja använda Frontrow på riktigt! Riktigt skön upplevelse kan jag lova!

    Priserna är väldigt konkurrenskraftiga, nu har dollarn gått upp lite den senaste tiden så det är inte samma rea-priser som i somras men ändå väldigt behagligt. Dessutom får man ju alla filmer tidigare än i Sverige.

    Här kommer lite prisexempel:

    Hyra en film: $3.99 (c:a 32kr)

    Du har 24 timmar på dig att titta på filmen. Köpa filmen kostar $14.99 (c:a 120kr)

    Köpa en hel tv-säsong (season ticket) : $18.99 (c:a 120kr), enskilt avsnitt: $1.90 (c:a 16kr)

    Köpa ett musikalbum: $9.99 (c:a 80kr)

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Så hyr du film och TV lagligt på iTunes", + "meta_description": "", + "author_id": 1087, + "created_at": 1231331242000, + "created_by": 1087, + "updated_at": 1231331242000, + "updated_by": 1087, + "published_at": 1231331242000, + "published_by": 1087 + }, + { + "id": 286, + "title": "Tiltshift-tjänst på webben", + "slug": "tiltshift-tjanst-pa-webben", + "markdown": "\r\n\r\nTilt shift har vi skrivit om förut – med ett särskilt objektiv kan man få ett väldigt smalt område i fokus och det lurar ögat att motivet är en modell och inte riktigt. Tilt shift-objektiv är dock dyra och budgetvarianten är att göra (o)skärpan i PhotoShop. Om man inte har PhotoShop så kan det bli ännu enklare - Fotofeber tipsar om att det nu finns webbtjänst som gör om dina bilder i tilt shift: www.tiltshiftmaker.com.\r\n\r\nHär är mitt eget första försök:\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/633753291806448267-tilt-shift-photo.jpg)", + "html": "

    Tilt shift har vi skrivit om förut – med ett särskilt objektiv kan man få ett väldigt smalt område i fokus och det lurar ögat att motivet är en modell och inte riktigt. Tilt shift-objektiv är dock dyra och budgetvarianten är att göra (o)skärpan i PhotoShop. Om man inte har PhotoShop så kan det bli ännu enklare - Fotofeber tipsar om att det nu finns webbtjänst som gör om dina bilder i tilt shift: www.tiltshiftmaker.com.

    Här är mitt eget första försök:

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Tilt shift-tjänst på webben", + "meta_description": "", + "author_id": 6, + "created_at": 1239732379000, + "created_by": 6, + "updated_at": 1239732379000, + "updated_by": 6, + "published_at": 1239732379000, + "published_by": 6 + }, + { + "id": 308, + "title": "Low Grav Racer - mycket spel för 15 kronor", + "slug": "low-grav-racer---mycket-spel-for-15-kronor", + "markdown": "\r\n\r\nI App Store för iPhone finns spelet Low Grav Racer. Det är ett spel som man om man är snäll kan säga har inspirerats av Wipeout, särskilt PSP-versionen Wipeout Fusion. Om man inte är snäll kan man säga att Cobramobile har kopierat ganska friskt. Om man bortser från det så är Low Grav Racer en väldigt rolig Wipeout-klon, och jag måste säga att accelerometerstyrningen är mer naturlig och bättre än analogjoysticken på PSP. Spelet känns väldigt responsivt och lagom svårt. \r\n\r\nVad är inte bra då? iPhonens avsaknad av hårdvaruknappar gör att mycket måste skötas med touchknappar på skärmen, något som alltid blir en svaghet. När man inte kan känna var man håller fingrarna är det lätt att missa knapparna. Jag skulle också vilja se ett lite mer utbyggt championship-läge där man kan uppgradera sitt skepp o.s.v.\r\n\r\nTrots nackdelarna är Low Grav Racer väl värt sina 15 kronor! Om du gillar Wipeout kommer du att gilla det här, även om det kan kännas lite som en light-version i vissa hänseenden. Här är en video med gameplay:\r\n\r\n\r\n\r\nNamn: Low Grav RacerUtvecklare: Cobra Mobile\r\n\r\nGrafik: 4Kontroller: 4Spelvärde: 4Prisvärde: 5Rekommendation: Köp!\r\n\r\n![Bild](http://tekniken.nu/uploads/633813640332614151-img_0043.jpg)", + "html": "

    I App Store för iPhone finns spelet Low Grav Racer. Det är ett spel som man om man är snäll kan säga har inspirerats av Wipeout, särskilt PSP-versionen Wipeout Fusion. Om man inte är snäll kan man säga att Cobramobile har kopierat ganska friskt. Om man bortser från det så är Low Grav Racer en väldigt rolig Wipeout-klon, och jag måste säga att accelerometerstyrningen är mer naturlig och bättre än analogjoysticken på PSP. Spelet känns väldigt responsivt och lagom svårt.

    Vad är inte bra då? iPhonens avsaknad av hårdvaruknappar gör att mycket måste skötas med touchknappar på skärmen, något som alltid blir en svaghet. När man inte kan känna var man håller fingrarna är det lätt att missa knapparna. Jag skulle också vilja se ett lite mer utbyggt championship-läge där man kan uppgradera sitt skepp o.s.v.

    Trots nackdelarna är Low Grav Racer väl värt sina 15 kronor! Om du gillar Wipeout kommer du att gilla det här, även om det kan kännas lite som en light-version i vissa hänseenden. Här är en video med gameplay:

    Namn: Low Grav Racer
    Utvecklare: Cobra Mobile

    Grafik: 4
    Kontroller: 4
    Spelvärde: 4
    Prisvärde: 5
    Rekommendation: Köp!

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Low Grav Racer - mycket spel för 15 kronor", + "meta_description": "", + "author_id": 6, + "created_at": 1245767232000, + "created_by": 6, + "updated_at": 1245767232000, + "updated_by": 6, + "published_at": 1245767232000, + "published_by": 6 + }, + { + "id": 312, + "title": "Battlefield heroes - Gratis och gott!", + "slug": "battlefield-heroes---gratis-och-gott", + "markdown": "\r\n\r\nNu är äntligen spelet öppet för alla, även om jag personligen har betatestat det under några veckor redan…\r\n\r\nKonceptet är enkelt: gör ett spel där du springer omkring och skjuter folk. För att ingen ska klaga över våld så gör det tecknat, och för att folk ska fastna på riktigt se till att du kan förbättra din gubbe och klä ut honom i nya kläder och se till att det är gratis att komma igång.\r\n\r\nI motsats till de flesta gratisspelen som också har en egen ekonomi så påverkas inte spelmöjligheterna av att du betalar. Du kan t.ex. inte köpa bättre vapen, något som är vanligt bland andra gratisspel där de betalande får massa fördelar.\r\n\r\nMan väljer en av 3 klasser: commando, soldier eller gunner, där varje klass har sina egna egenskaper och vapentyper.\r\nCommando är krypskytten springer snabbt, gömmer sig och dödar gärna med kniv. Bra på riktigt långt håll och riktigt nära.Soldier mejar hårt med automatvapen och tål lite mer stryk än commando, bäst på medium avstånd.Gunner springer omkring som om världen var gjord av sirap men tål mycket stryk och har kraftiga vapen på kort avstånd.\r\nDet finns några få banor och man hittar lätt sina favoriter men genomgående är kvalitén hög och det gör inte så mycket att man måste genomlida de tråkigare banorna också.\r\n\r\nDetta är ett riktigt roligt spel som är lätt att spela ”bara en kvart” men som också håller timme efter timme kväll efter kväll…\r\n\r\nhttp://www.battlefieldheroes.com/\r\n\r\n![Bild](http://tekniken.nu/uploads/633819516072946305-G9CA8GC56DH3200912221.jpg)", + "html": "

    Nu är äntligen spelet öppet för alla, även om jag personligen har betatestat det under några veckor redan…

    Konceptet är enkelt: gör ett spel där du springer omkring och skjuter folk. För att ingen ska klaga över våld så gör det tecknat, och för att folk ska fastna på riktigt se till att du kan förbättra din gubbe och klä ut honom i nya kläder och se till att det är gratis att komma igång.

    I motsats till de flesta gratisspelen som också har en egen ekonomi så påverkas inte spelmöjligheterna av att du betalar. Du kan t.ex. inte köpa bättre vapen, något som är vanligt bland andra gratisspel där de betalande får massa fördelar.

    Man väljer en av 3 klasser: commando, soldier eller gunner, där varje klass har sina egna egenskaper och vapentyper.

    • Commando är krypskytten springer snabbt, gömmer sig och dödar gärna med kniv. Bra på riktigt långt håll och riktigt nära.
    • Soldier mejar hårt med automatvapen och tål lite mer stryk än commando, bäst på medium avstånd.
    • Gunner springer omkring som om världen var gjord av sirap men tål mycket stryk och har kraftiga vapen på kort avstånd.

    Det finns några få banor och man hittar lätt sina favoriter men genomgående är kvalitén hög och det gör inte så mycket att man måste genomlida de tråkigare banorna också.

    Detta är ett riktigt roligt spel som är lätt att spela ”bara en kvart” men som också håller timme efter timme kväll efter kväll…

    http://www.battlefieldheroes.com/

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Battlefield Heroes - Gratis och gott!", + "meta_description": "", + "author_id": 1089, + "created_at": 1246359900000, + "created_by": 1089, + "updated_at": 1246359900000, + "updated_by": 1089, + "published_at": 1246359900000, + "published_by": 1089 + }, + { + "id": 313, + "title": "Gamepad till iPhone - rätt koncept men fel genomförande", + "slug": "gamepad-till-iphone---ratt-koncept-men-fel-genomforande", + "markdown": "\r\n\r\nSom Mobilfeber rapporterade om förra veckan så har det precis släppts en gamepad till iPhone som heter Gamebone Pro. En gamepad till iPhone har jag väntat på länge (trodde att det redan fanns), så det är ju en välkommen nyhet. Flera smarta saker finns också inbyggda, som ett extrabatteri och en högtalare – smart! Trots det så finns det en massa punkter där 22moo har tänkt helt fel, vilket gör att produkten ändå känns ganska värdelös:\r\nDen ansluts via Bluetooth och är alltså helt fristående. Den givna lösningen hade ju varit att man monterar den på telefonen så att den blir mer som en PSP. En sån monteringssats är tydligen under utvecklingBara digital styrning. PSP:n har en analog styrspak, och det är nästan en för lite för att kunna täcka in alla spel.Eget SDK som utvecklarna måste använda. Det gör att antalet spel som stöds antagligen kommer att vara väldigt litet\r\nHär är mitt recept på hur man borde göra:\r\nGör en utdragbar gamepad som man placerar telefonen så att den blir mer som en PSPBehåll gärna extrabatteriet om det går att kombinera med ovanstående kravTvå analoga styrspakarApple utvecklar SDK för gamepads som alla tillverkare kan använda – då kommer garanterat antalet spel som stöds att bli stort\r\n![Bild](http://tekniken.nu/uploads/633820389604536709-GameBonePro.jpg)", + "html": "

    Som Mobilfeber rapporterade om förra veckan så har det precis släppts en gamepad till iPhone som heter Gamebone Pro. En gamepad till iPhone har jag väntat på länge (trodde att det redan fanns), så det är ju en välkommen nyhet. Flera smarta saker finns också inbyggda, som ett extrabatteri och en högtalare – smart! Trots det så finns det en massa punkter där 22moo har tänkt helt fel, vilket gör att produkten ändå känns ganska värdelös:

    • Den ansluts via Bluetooth och är alltså helt fristående. Den givna lösningen hade ju varit att man monterar den på telefonen så att den blir mer som en PSP. En sån monteringssats är tydligen under utveckling
    • Bara digital styrning. PSP:n har en analog styrspak, och det är nästan en för lite för att kunna täcka in alla spel.
    • Eget SDK som utvecklarna måste använda. Det gör att antalet spel som stöds antagligen kommer att vara väldigt litet

    Här är mitt recept på hur man borde göra:

    • Gör en utdragbar gamepad som man placerar telefonen så att den blir mer som en PSP
    • Behåll gärna extrabatteriet om det går att kombinera med ovanstående krav
    • Två analoga styrspakar
    • Apple utvecklar SDK för gamepads som alla tillverkare kan använda – då kommer garanterat antalet spel som stöds att bli stort
    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Gamepad till iPhone - rätt koncept men fel genomförande", + "meta_description": "", + "author_id": 6, + "created_at": 1246442160000, + "created_by": 6, + "updated_at": 1246442160000, + "updated_by": 6, + "published_at": 1246442160000, + "published_by": 6 + }, + { + "id": 315, + "title": "Nytt liv på Monkey Island", + "slug": "nytt-liv-pa-monkey-island", + "markdown": "\r\n\r\nMonkey Island är den kanske mest uppskattade och framgångsrika äventyrsspelserien någonsin. Lucasarts humoristiska piratepos har förmodligen spelats av de flesta personer som växte upp på 90-talet. Fyra delar släpptes mellan 1990 och 2000, men sedan dess har det varit tyst. Detta beror framförallt på att Lucasarts i stort sett lagt ned hela sin utveckling av äventyrsspel då försäljningen med åren kraftigt minskade och den trogna skaran mest bestått av oss nostalgiska som växte upp innan 3D-revolutionen.\r\n\r\nNu är det dock dags att glädjas, inte bara åt en nyhet utan två!\r\n\r\nThe Secret of Monkey Island Special Edition\r\n\r\nIdag släpps en remake av det första spelet i serien i en omarbetad högupplöst (1080p) version för XBOX360 (Live marketplace) och PC (Steam). Det är en väldigt ambitiös upprustning som ägt rum:\r\n\r\n- Handmålade miljöer och nya karaktärsmodeller\r\n\r\n- Nyinspelat soundtrack\r\n\r\n- Orginalskådespelarna har återvänt för att spela in den dialog som tidigare bara fanns som text.\r\n\r\nEn extra tuff funktion är att man när som helst sömlöst kan växla mellan orginalgrafiken och den nya, som visas i det här filmklippet.\r\n\r\nJättekul att se sin gamla favorit uppdaterad till modern tid, jag skulle inte bli förvånad om detta kommer bli allt vanligare med tanke på hur många fantastiska spel som utvecklades under äventyrsspelens storhetstid men som känns inaktuella pga sin åldrade presentation.\r\n\r\nSpelet kostar 8,99€ på Steam.\r\n\r\n![Bild](http://tekniken.nu/uploads/MonkeyIslandSpecial.png)\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nTillsammans med denna remake släpps också en fortsättning på serien:\r\n\r\nTales of Monkey Island\r\n\r\nTelltale\r\nGames har tidigare erfarenhet av att blåsa liv i sovande\r\nLucasartsklassiker, senaste åren har de nått ganska stor framgång med\r\nsina Sam & Max spel. Precis som med Sam & Max så kommer Tales\r\nof Monkey Island att släppas i episodformat, ett 3-timmarsäventyr i\r\nmånaden i fem månader. Grafiken känns respektfull föregånarna och den\r\nförsta episoden som släpptes härom veckan har fått fin kritik. Paketet med samtliga fem delar kostar 32,99€ på Steam.\r\n\r\nSpelets hemsida hos Telltale Games\r\n\r\nMycket att glädjas åt med andra ord! Extra kul att Ron Gilbert (som skapade Monkey Island) ger båda projekten tummen upp och faktiskt var med på ett hörn i QA arbetet, mer om det på hans egen blogg.\r\n\r\nSoon you'll be wearing my sword like a shish kebab!\r\n\r\n\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/Tales_of_Monkey_Island_Logo.png)\r\n\r\n\r\n", + "html": "

    Monkey Island är den kanske mest uppskattade och framgångsrika äventyrsspelserien någonsin. Lucasarts humoristiska piratepos har förmodligen spelats av de flesta personer som växte upp på 90-talet. Fyra delar släpptes mellan 1990 och 2000, men sedan dess har det varit tyst. Detta beror framförallt på att Lucasarts i stort sett lagt ned hela sin utveckling av äventyrsspel då försäljningen med åren kraftigt minskade och den trogna skaran mest bestått av oss nostalgiska som växte upp innan 3D-revolutionen.

    Nu är det dock dags att glädjas, inte bara åt en nyhet utan två!

    The Secret of Monkey Island Special Edition

    Idag släpps en remake av det första spelet i serien i en omarbetad högupplöst (1080p) version för XBOX360 (Live marketplace) och PC (Steam). Det är en väldigt ambitiös upprustning som ägt rum:

    - Handmålade miljöer och nya karaktärsmodeller

    - Nyinspelat soundtrack

    - Orginalskådespelarna har återvänt för att spela in den dialog som tidigare bara fanns som text.

    En extra tuff funktion är att man när som helst sömlöst kan växla mellan orginalgrafiken och den nya, som visas i det här filmklippet.

    Jättekul att se sin gamla favorit uppdaterad till modern tid, jag skulle inte bli förvånad om detta kommer bli allt vanligare med tanke på hur många fantastiska spel som utvecklades under äventyrsspelens storhetstid men som känns inaktuella pga sin åldrade presentation.

    Spelet kostar 8,99€ på Steam.











    Tillsammans med denna remake släpps också en fortsättning på serien:

    Tales of Monkey Island

    Telltale
    Games har tidigare erfarenhet av att blåsa liv i sovande
    Lucasartsklassiker, senaste åren har de nått ganska stor framgång med
    sina Sam & Max spel. Precis som med Sam & Max så kommer Tales
    of Monkey Island att släppas i episodformat, ett 3-timmarsäventyr i
    månaden i fem månader. Grafiken känns respektfull föregånarna och den
    första episoden som släpptes härom veckan har fått fin kritik. Paketet med samtliga fem delar kostar 32,99€ på Steam.

    Spelets hemsida hos Telltale Games

    Mycket att glädjas åt med andra ord! Extra kul att Ron Gilbert (som skapade Monkey Island) ger båda projekten tummen upp och faktiskt var med på ett hörn i QA arbetet, mer om det på hans egen blogg.

    Soon you'll be wearing my sword like a shish kebab!






    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Nytt liv på Monkey Island", + "meta_description": "", + "author_id": 1085, + "created_at": 1247779853000, + "created_by": 1085, + "updated_at": 1247779853000, + "updated_by": 1085, + "published_at": 1247779853000, + "published_by": 1085 + }, + { + "id": 328, + "title": "Kabelmyt BUSTED", + "slug": "kabelmyt-busted", + "markdown": "\r\n\r\nÄntligen har någon tagit tag i det som man misstänkt länge – att de där fina HDMI kablarna för 500kr med guldpläterade kontakter fina specifikationer och superduperskärmning inte ger någon konkret skillnad. Jag har ju länge hävdat att det är här tillverkarna men framförallt återförsäljarna har sin egentliga vinst. Bluffen bygger på samma osäkerhet som allriskförsäkringarna – har man precis köpt en dyr TV för 30 000 kan man inte riskera att få dålig bild så man tar den där dyra kabeln för 500kr ändå. Detsamma gäller även monsterkablar för högtalarare, jag har personligen dragit vanlig elkabel till mina högtalare hemma och den är ju gjord för att skicka 230 volt med många ampere så varför skulle inte den fungera bättre än en monsterhögtalarkabel? Skillanden i pris är enorm.\r\n\r\nNu kommer jag säkert reta gallfeber på alla er som köpt dyra kablar som vill försvara sitt köp med hjälp av undersökningar av olika saker och säger bara: Bring it on! Jag vill gärna bli motbevisad.\r\n\r\nNär vi ändå är inne på myter så skulle jag gärna se någon som kan bevisa om det verkligen är skadligt för batteriet att använda mobilen direkt när man fått den från affären – de flesta hävdar att den måste ligga på laddning i åtta timmar innan den används – jag hävdar att det också är en myt med samma sanningshalt som att man får kramp när man badar precis efter man ätit. ;)\r\n\r\nLäs mer om kabeltestet på M3:http://www.idg.se/2.1085/1.242208/unikt-blindtest-vi-avslojar-kabel-bluffen\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/633875075680727966-image001.jpg@01CA2BAA.B5ED6870__image001.jpg)", + "html": "

    Äntligen har någon tagit tag i det som man misstänkt länge – att de där fina HDMI kablarna för 500kr med guldpläterade kontakter fina specifikationer och superduperskärmning inte ger någon konkret skillnad. Jag har ju länge hävdat att det är här tillverkarna men framförallt återförsäljarna har sin egentliga vinst. Bluffen bygger på samma osäkerhet som allriskförsäkringarna – har man precis köpt en dyr TV för 30 000 kan man inte riskera att få dålig bild så man tar den där dyra kabeln för 500kr ändå. Detsamma gäller även monsterkablar för högtalarare, jag har personligen dragit vanlig elkabel till mina högtalare hemma och den är ju gjord för att skicka 230 volt med många ampere så varför skulle inte den fungera bättre än en monsterhögtalarkabel? Skillanden i pris är enorm.

    Nu kommer jag säkert reta gallfeber på alla er som köpt dyra kablar som vill försvara sitt köp med hjälp av undersökningar av olika saker och säger bara: Bring it on! Jag vill gärna bli motbevisad.

    När vi ändå är inne på myter så skulle jag gärna se någon som kan bevisa om det verkligen är skadligt för batteriet att använda mobilen direkt när man fått den från affären – de flesta hävdar att den måste ligga på laddning i åtta timmar innan den används – jag hävdar att det också är en myt med samma sanningshalt som att man får kramp när man badar precis efter man ätit. ;)

    Läs mer om kabeltestet på M3:
    http://www.idg.se/2.1085/1.242208/unikt-blindtest-vi-avslojar-kabel-bluffen

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Kabelmyt: BUSTED", + "meta_description": "", + "author_id": 1087, + "created_at": 1251910767000, + "created_by": 1087, + "updated_at": 1251910767000, + "updated_by": 1087, + "published_at": 1251910767000, + "published_by": 1087 + }, + { + "id": 338, + "title": "XBMC inbyggt i TVn någon?", + "slug": "xbmc-inbyggt-i-tvn-nagon", + "markdown": "\r\n\r\nEtt önskemål till Sony, Samsung, LG eller vilken annan leverantör som helst: Bygg in mediecenterapplikationen XBMC i er TV – de inbyggda programvarorna för streaming som ni skickar med era LCD TV-apparater håller inte måttet och hur mycket pengar ni än lägger ner på att utveckla dem kommer de ändå inte hålla samma tempo som XBMC gör.\r\n\r\nEn TV med inbyggd XBMC skulle göra att din TV fick inbyggt stöd för SVT Play, Viasat anywhere, streama alla bild- och ljudformat i högsta kvalitet. Med en liten linuxkärna och en hårdvara baserat på NVidias ION-chipset skulle lösningen bli billig men ändå klara av uppspelning av 1080p. Så kom igen nu, våga!\r\n\r\nFör er som inte har bakgrunden till XBMC så är det ett open source-projekt från första början utvecklades för XBOX (första versionen) och har sen starten haft en stor och väldigt nöjd kundgrupp.\r\n\r\n![Bild](http://tekniken.nu/uploads/633892340357620811-XBMC_media_center_main.png)", + "html": "

    Ett önskemål till Sony, Samsung, LG eller vilken annan leverantör som helst: Bygg in mediecenterapplikationen XBMC i er TV – de inbyggda programvarorna för streaming som ni skickar med era LCD TV-apparater håller inte måttet och hur mycket pengar ni än lägger ner på att utveckla dem kommer de ändå inte hålla samma tempo som XBMC gör.

    En TV med inbyggd XBMC skulle göra att din TV fick inbyggt stöd för SVT Play, Viasat anywhere, streama alla bild- och ljudformat i högsta kvalitet. Med en liten linuxkärna och en hårdvara baserat på NVidias ION-chipset skulle lösningen bli billig men ändå klara av uppspelning av 1080p. Så kom igen nu, våga!

    För er som inte har bakgrunden till XBMC så är det ett open source-projekt från första början utvecklades för XBOX (första versionen) och har sen starten haft en stor och väldigt nöjd kundgrupp.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "XBMC inbyggt i TVn någon?", + "meta_description": "", + "author_id": 1087, + "created_at": 1253637235000, + "created_by": 1087, + "updated_at": 1253637235000, + "updated_by": 1087, + "published_at": 1253637235000, + "published_by": 1087 + }, + { + "id": 349, + "title": "Vänta med Snow Leopard om du kör PLEX", + "slug": "vanta-med-snow-leopard-om-du-kor-plex", + "markdown": "\r\n\r\nSnow Leopard har vi ju väntat länge på och mycket nytt finns under huven. Tyvärr finns det lite väl mycket under huven som gör att PLEX inte fungerar smärtfritt efter uppgradering till Snow Leopard. Det viktigaste problemet är att filmer med digitalt ljud låser ljuddrivrutinen vilket gör att PLEX måste startas om samt att fjärrkontrollen styr både PLEX och FrontRow.\r\n\r\nOm du liksom jag redan har installerat Snow Leopard så finns det lite workarounds här:\r\n\r\nSkapa en Composite-ljudkanal och ställa den som ljud-output löser ljudproblemet med digitalt ljud\r\n\r\nFör att temporärt lösa problemet med fjärrkontrollen tar du bort (eller flyttar iväg) appen Front Row från programmappen.\r\n\r\nOvanstående fixar löser problemen med nöd och näppe så rekommendationen är att vänta med Snow Leopard tills Plex har stöd för Snow Leopard.\r\n\r\n![Bild](http://tekniken.nu/uploads/633904275603767418-image001.jpg@01CA465D.88039740__image001.jpg)", + "html": "

    Snow Leopard har vi ju väntat länge på och mycket nytt finns under huven. Tyvärr finns det lite väl mycket under huven som gör att PLEX inte fungerar smärtfritt efter uppgradering till Snow Leopard. Det viktigaste problemet är att filmer med digitalt ljud låser ljuddrivrutinen vilket gör att PLEX måste startas om samt att fjärrkontrollen styr både PLEX och FrontRow.

    Om du liksom jag redan har installerat Snow Leopard så finns det lite workarounds här:

    Skapa en Composite-ljudkanal och ställa den som ljud-output löser ljudproblemet med digitalt ljud

    För att temporärt lösa problemet med fjärrkontrollen tar du bort (eller flyttar iväg) appen Front Row från programmappen.

    Ovanstående fixar löser problemen med nöd och näppe så rekommendationen är att vänta med Snow Leopard tills Plex har stöd för Snow Leopard.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Vänta med Snow Leopard om du kör PLEX", + "meta_description": "", + "author_id": 1087, + "created_at": 1254845340000, + "created_by": 1087, + "updated_at": 1254845340000, + "updated_by": 1087, + "published_at": 1254845340000, + "published_by": 1087 + }, + { + "id": 351, + "title": "Parkera bilar, kan det vara roligt?", + "slug": "parkera-bilar-kan-det-vara-roligt", + "markdown": "\r\n\r\nMitt favoritspel just nu till iPhone är Parking Mania!\r\n\r\nNi har säkert spelat någon variant av det på webben. Idéen är att du ser en parkering med en bil ovanifrån, och ska parkera den i en bestämd parkeringsficka. Varje gång du lyckas kommer du till nästa nivå där nya utmaningar stegvis läggs till, såsom fler bilar att parkera, smalare utrymmen, trafikerade vägar och mycket annat.\r\n\r\nParking Mania har riktigt skön styrning där man använder accelerometern för att styra och en slider på skärmen för att steglöst gasa och bromsa. Jag är extremt allergisk mot styrkontroller på skärmen, men en gas-/bromsslider är tillräckligt lätt att pricka och funkar väldigt bra. Det finns 30 nivåer och de blir roligare ju högre upp man kommer. En av de stora behållningarna tycker jag är att alla fordon beter sig väldigt verklighetstroget. De olika bilarna har olika svängradie och det lönar sig verkligen att krypa runt ett hörn när det blir ont om utrymme. Ett av mina favoritfordon är bussen (som tyvärr bara är med på en nivå), den har en otroligt skön rotationspunkt i och med längden och att fram hjulen sitter bakom föraren. Man måste göra svängar där man tar ut ordentligt i mötande fil och det känns som om man har åkt för långt innan man börjar svänga – precis som i verkligheten.\r\n\r\n\r\n\r\nNär man har spelat igenom de 30 nivåerna börjar nästa utmaning. Alla nivåer har en bonustid, och klarar man de snabbt får man extra poäng. Ju färre gånger man kör emot något ger också mer poäng. Så andra spelomgången blir en speedrun där man både tävlar mot klockan och ska se till att köra så rent och snyggt som möjligt. Det är en riktigt skön känsla att i full fart i en tankbil köra om polisen för att försöka hinna förbi innan mötande trafik kommer :-).\r\n\r\n7 kronor kostar fulla versionen: http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=329887910&mt=8\r\n\r\nFinns också i gratis lite-version: http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=329983824&mt=8\r\n\r\nGrafik: 3Kontroller: 5Spelvärde: 5Prisvärde: 5Rekommendation: Köp!\r\n\r\n![Bild](http://tekniken.nu/uploads/633906183691247895-mzl.gugbxgil.jpg)", + "html": "

    Mitt favoritspel just nu till iPhone är Parking Mania!

    Ni har säkert spelat någon variant av det på webben. Idéen är att du ser en parkering med en bil ovanifrån, och ska parkera den i en bestämd parkeringsficka. Varje gång du lyckas kommer du till nästa nivå där nya utmaningar stegvis läggs till, såsom fler bilar att parkera, smalare utrymmen, trafikerade vägar och mycket annat.

    Parking Mania har riktigt skön styrning där man använder accelerometern för att styra och en slider på skärmen för att steglöst gasa och bromsa. Jag är extremt allergisk mot styrkontroller på skärmen, men en gas-/bromsslider är tillräckligt lätt att pricka och funkar väldigt bra. Det finns 30 nivåer och de blir roligare ju högre upp man kommer. En av de stora behållningarna tycker jag är att alla fordon beter sig väldigt verklighetstroget. De olika bilarna har olika svängradie och det lönar sig verkligen att krypa runt ett hörn när det blir ont om utrymme. Ett av mina favoritfordon är bussen (som tyvärr bara är med på en nivå), den har en otroligt skön rotationspunkt i och med längden och att fram hjulen sitter bakom föraren. Man måste göra svängar där man tar ut ordentligt i mötande fil och det känns som om man har åkt för långt innan man börjar svänga – precis som i verkligheten.

    När man har spelat igenom de 30 nivåerna börjar nästa utmaning. Alla nivåer har en bonustid, och klarar man de snabbt får man extra poäng. Ju färre gånger man kör emot något ger också mer poäng. Så andra spelomgången blir en speedrun där man både tävlar mot klockan och ska se till att köra så rent och snyggt som möjligt. Det är en riktigt skön känsla att i full fart i en tankbil köra om polisen för att försöka hinna förbi innan mötande trafik kommer :-).

    7 kronor kostar fulla versionen: http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=329887910&mt=8

    Finns också i gratis lite-version: http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=329983824&mt=8

    Grafik: 3
    Kontroller: 5
    Spelvärde: 5
    Prisvärde: 5
    Rekommendation: Köp!

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Parkera bilar, kan det vara roligt?", + "meta_description": "", + "author_id": 6, + "created_at": 1255021568000, + "created_by": 6, + "updated_at": 1255021568000, + "updated_by": 6, + "published_at": 1255021568000, + "published_by": 6 + }, + { + "id": 376, + "title": "Speltips: Machinarium", + "slug": "speltips-machinarium", + "markdown": "\r\n\r\nJag älskar och har alltid älskat peka-och-klicka-äventyrsspel, en genre som en gång i tiden regerade spelmarknaden men som med åren blivit allt mer underrepresenterad. Så när man hittar ett nytt tillskott till genren som håller hög klass blir man alltid lycklig på ett lätt nostalgiskt sätt. Ett sådant tillskott, som jag varmt vill rekommendera, är Machinarium.\r\n\r\nI fantastiskt vackra handmålade miljöer styr man sin lillaplåtrobot att lösa diverse pussel och hjärngympaövningar, som på ett naturligt sätt tar spelaren framåt i den övergripande handlingen. Två lite ovanliga grepp är att man bara kan interagera med saker i sin direkta närhet, samt att man kan dra i den lilla roboten för att göra honom kortare eller längre, vilket behövs för att lösa olika uppgifter.\r\n\r\n\r\n\r\nMachinarium har utvecklats under tre år av ett team dedikerade tjeckiska utvecklare på Amanita Design, som själva finansierat hela utvecklingen. Marknadsföringsbudgeten är så låg som $1,000, även om man fått stor draghjälp genom distributionsavtal med Steam. Sådana här projekt är ovanliga och jag tycker att det är värt varenda eurocent av de ca 16€ spelet kostade mig på Steam, och vill verkligen sponsra den fina insats som utvecklarna gjort.\r\n\r\nSpelet finns tillgängligt för Windows, Mac OSX och Linux. I Windowsversionen blev jag dock tvungen att sänka upplösningen till 1280x768 för att skärmen skulle fyllas ut ordentligt, även med fullscreen och 100% skärmfyllnad valt i spelet.\r\n\r\nEftersom spelet är utvecklat i Flash 10 så finns demoversionen spelbar i din webbläsare, testa direkt på http://machinarium.net/demo/.\r\n\r\n![Bild](http://tekniken.nu/uploads/633947602553626633-Machinarium.jpg)", + "html": "

    Jag älskar och har alltid älskat peka-och-klicka-äventyrsspel, en genre som en gång i tiden regerade spelmarknaden men som med åren blivit allt mer underrepresenterad. Så när man hittar ett nytt tillskott till genren som håller hög klass blir man alltid lycklig på ett lätt nostalgiskt sätt. Ett sådant tillskott, som jag varmt vill rekommendera, är Machinarium.

    I fantastiskt vackra handmålade miljöer styr man sin lillaplåtrobot att lösa diverse pussel och hjärngympaövningar, som på ett naturligt sätt tar spelaren framåt i den övergripande handlingen. Två lite ovanliga grepp är att man bara kan interagera med saker i sin direkta närhet, samt att man kan dra i den lilla roboten för att göra honom kortare eller längre, vilket behövs för att lösa olika uppgifter.

    Machinarium har utvecklats under tre år av ett team dedikerade tjeckiska utvecklare på Amanita Design, som själva finansierat hela utvecklingen. Marknadsföringsbudgeten är så låg som $1,000, även om man fått stor draghjälp genom distributionsavtal med Steam. Sådana här projekt är ovanliga och jag tycker att det är värt varenda eurocent av de ca 16€ spelet kostade mig på Steam, och vill verkligen sponsra den fina insats som utvecklarna gjort.

    Spelet finns tillgängligt för Windows, Mac OSX och Linux. I Windowsversionen blev jag dock tvungen att sänka upplösningen till 1280x768 för att skärmen skulle fyllas ut ordentligt, även med fullscreen och 100% skärmfyllnad valt i spelet.

    Eftersom spelet är utvecklat i Flash 10 så finns demoversionen spelbar i din webbläsare, testa direkt på http://machinarium.net/demo/.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Speltips: Machinarium", + "meta_description": "", + "author_id": 1085, + "created_at": 1259163455000, + "created_by": 1085, + "updated_at": 1259163455000, + "updated_by": 1085, + "published_at": 1259163455000, + "published_by": 1085 + }, + { + "id": 377, + "title": "Real Racing - bästa iPhone-spelet någonsin!", + "slug": "real-racing---basta-iphone-spelet-nagonsin", + "markdown": "\r\n\r\nI Apple App Store finns numera över 100 000 applikationer. En hel del av dem är spel, så konkurrensen är stenhård, men jag har hittat det som är mitt favoritspel och som jag tycker höjer sig ganska mycket över alla andra. Spelet är Real Racing. Jag är en inbiten racingnörd på alla nivåer (utom att tävla själv irl :-) ) som har ägnat många timmar till att nöta banor i spel som GP4 och EA Sport F1 200x. På PSP har jag kört en hel del racingspel, men körkänslan vill inte riktigt infinna sig trots en analog styrspak. Det som hittills har gett rätt känsla är en ratt kopplad till datorn.\r\n\r\nPlats på scen för Real Racing till iPhone. iPhones kapacitet ger åtminstone lika bra och snabb grafik som en PSP, men det som verkligen gör den stora skillnaden är accelerometerstyrningen. Spel som kräver en gamepad av något slag tycker jag själv blir rätt svårstyrda och tråkiga på iPhone, men i racingspel där hela telefonen kan fungera som en ratt briljerar verkligen iPhone. Jag har aldrig spelat ett racingspel utan riktig ratt som har gett en så verklig körkänsla! Utvecklaren Firemint har också satsat mycket på grafik och realistiska köregenskaper. I fyra olika bilklasser kan man tävla på 12 olika banor med olika karaktär.\r\n\r\n\r\n\r\nNär man har tagit sig igenom spelets karriärläge öppnar sig spelets verkliga bonusfördel: online-läget. Det finns två sätt att tävla online, det enklaste är genom time trials. Du försöker helt enkelt sätta ditt snabbaste varv på en bana med utvald biltyp. Ditt resultat laddas upp med ett enkelt knapptryck och du kan direkt se din plats på den globala topplistan! Varje time trial-resultat vägs sen ihop för att placera dig på den globala rankingen. Inte nog med det – om man kopplar ihop sitt online-konto med sitt Youtube-konto så laddar spelet automatiskt upp en Youtube-video varje gång man slår sitt personliga rekord på en bana. Vad sägs om undertecknads snabba varv – plats 175 globalt (kanske hade kommit ett par placeringar till högre om jag hade hållit mig på asfalten hela varvet):\r\n\r\n\r\n\r\nDet andra online-läget är att delta i en serie. Serietävlingarna går ut på att tre banor körs i följd, där man får 5 minuter per bana på sig att sätta ett snabbt varv. Ungefär som ett F1-kval i klassisk tappning. Sedan vägs placeringarna på de tre banorna ihop till en slutplacering. Detta är ganska kul, men det är en liten besvikelse att man inte kan tävla mot andra online på banan samtidigt... Jag har inte testat LAN-läget, men hoppas att man kan köra mot varandra samtidigt på banan där :-).\r\n\r\nNamn: Real RacingUtvecklare: FiremintPris: 38 SEKGrafik: 5Kontroller: 5Spelvärde: 5Prisvärde: 4Rekommendation: Köp!\r\n\r\n(finns även som gratisversion, specialgjord för lanseringen av nya Golf GTI).\r\n\r\n![Bild](http://tekniken.nu/uploads/633957783450843825-realracing.PNG)", + "html": "

    I Apple App Store finns numera över 100 000 applikationer. En hel del av dem är spel, så konkurrensen är stenhård, men jag har hittat det som är mitt favoritspel och som jag tycker höjer sig ganska mycket över alla andra. Spelet är Real Racing. Jag är en inbiten racingnörd på alla nivåer (utom att tävla själv irl :-) ) som har ägnat många timmar till att nöta banor i spel som GP4 och EA Sport F1 200x. På PSP har jag kört en hel del racingspel, men körkänslan vill inte riktigt infinna sig trots en analog styrspak. Det som hittills har gett rätt känsla är en ratt kopplad till datorn.

    Plats på scen för Real Racing till iPhone. iPhones kapacitet ger åtminstone lika bra och snabb grafik som en PSP, men det som verkligen gör den stora skillnaden är accelerometerstyrningen. Spel som kräver en gamepad av något slag tycker jag själv blir rätt svårstyrda och tråkiga på iPhone, men i racingspel där hela telefonen kan fungera som en ratt briljerar verkligen iPhone. Jag har aldrig spelat ett racingspel utan riktig ratt som har gett en så verklig körkänsla! Utvecklaren Firemint har också satsat mycket på grafik och realistiska köregenskaper. I fyra olika bilklasser kan man tävla på 12 olika banor med olika karaktär.

    När man har tagit sig igenom spelets karriärläge öppnar sig spelets verkliga bonusfördel: online-läget. Det finns två sätt att tävla online, det enklaste är genom time trials. Du försöker helt enkelt sätta ditt snabbaste varv på en bana med utvald biltyp. Ditt resultat laddas upp med ett enkelt knapptryck och du kan direkt se din plats på den globala topplistan! Varje time trial-resultat vägs sen ihop för att placera dig på den globala rankingen. Inte nog med det – om man kopplar ihop sitt online-konto med sitt Youtube-konto så laddar spelet automatiskt upp en Youtube-video varje gång man slår sitt personliga rekord på en bana. Vad sägs om undertecknads snabba varv – plats 175 globalt (kanske hade kommit ett par placeringar till högre om jag hade hållit mig på asfalten hela varvet):

    Det andra online-läget är att delta i en serie. Serietävlingarna går ut på att tre banor körs i följd, där man får 5 minuter per bana på sig att sätta ett snabbt varv. Ungefär som ett F1-kval i klassisk tappning. Sedan vägs placeringarna på de tre banorna ihop till en slutplacering. Detta är ganska kul, men det är en liten besvikelse att man inte kan tävla mot andra online på banan samtidigt... Jag har inte testat LAN-läget, men hoppas att man kan köra mot varandra samtidigt på banan där :-).

    Namn: Real Racing
    Utvecklare: Firemint
    Pris: 38 SEK
    Grafik: 5
    Kontroller: 5
    Spelvärde: 5
    Prisvärde: 4
    Rekommendation: Köp!

    (finns även som gratisversion, specialgjord för lanseringen av nya Golf GTI).

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Real Racing - bästa iPhone-spelet någonsin!", + "meta_description": "", + "author_id": 6, + "created_at": 1260181544000, + "created_by": 6, + "updated_at": 1260181544000, + "updated_by": 6, + "published_at": 1260181544000, + "published_by": 6 + }, + { + "id": 395, + "title": "Plugga in gitarren i din iPhone", + "slug": "plugga-in-gitarren-i-din-iphone", + "markdown": "\r\n\r\nPaul Reed Smith gör inte bara sjukt snygga gitarrer – de har också tagit fram en särskild kabel för att koppla en elgitarr till iPhone och iPod Touch. Tillsammans med deras iPhone-app PRS Jam Amp så får man en lösning som klarar av att spela upp musik (backtracks), spela in det man spelar i fyra kanaler OCH förstärkarsimulering. Allt till det facila priset av €22 för kabeln (plus frakt på €17 från england) och 75:- för iPhone-appen. Troligen kommer kabeln att gå att få tag i Sverige inom kort och då blir hamnar hela lösningen på ungefär 300:-, d.v.s. ungefär samma som ett par paket strängar av bättre kvalitet.\r\n\r\nVerkar hur grymt som helst. Recension kommer när www.dv247.com har skeppat hem kabeln till mig.\r\n\r\n\r\n\r\n\r\n\r\nVia feber.se\r\n\r\n![Bild](http://tekniken.nu/uploads/634039156546375416-guitarbud-prs-white-gutar-cu-red-web.jpg)", + "html": "

    Paul Reed Smith gör inte bara sjukt snygga gitarrer – de har också tagit fram en särskild kabel för att koppla en elgitarr till iPhone och iPod Touch. Tillsammans med deras iPhone-app PRS Jam Amp så får man en lösning som klarar av att spela upp musik (backtracks), spela in det man spelar i fyra kanaler OCH förstärkarsimulering. Allt till det facila priset av €22 för kabeln (plus frakt på €17 från england) och 75:- för iPhone-appen. Troligen kommer kabeln att gå att få tag i Sverige inom kort och då blir hamnar hela lösningen på ungefär 300:-, d.v.s. ungefär samma som ett par paket strängar av bättre kvalitet.

    Verkar hur grymt som helst. Recension kommer när www.dv247.com har skeppat hem kabeln till mig.



    Via feber.se

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Plugga in gitarren i din iPhone", + "meta_description": "", + "author_id": 6, + "created_at": 1268318854000, + "created_by": 6, + "updated_at": 1268318854000, + "updated_by": 6, + "published_at": 1268318854000, + "published_by": 6 + }, + { + "id": 397, + "title": "Några skrivtips från tekniken.nu", + "slug": "nagra-skrivtips-fran-teknikennu", + "markdown": "\r\n\r\nBehöver du skärpa språkbruket på din blogg? Här är några ovärderliga tips:\r\nAnvänd aldrig alliteration.Prepositioner är inte bra ord att avsluta meningar med.Sky klyschor som pesten. (De är gamla nyheter.)Anställ lokala uttryck.Undvik et-tecken & förkortningar, etc.Anmärkningar inom paranteser (oavsett hur viktiga) är onödiga.Det är fel att någonsin splittra ett infinitiv.Sammandragningar är int' nödvändiga.Man ska aldrig generalisera.Använd icke citat. Eller som Ralph Waldo Emerson sa en gång: \"Jag hatar citat. Berätta vad du vet.\"Jämförelser är lika dåliga som klyschor.Var inte överflödig; använd inte fler ord än nödvändigt; det är ytterst onödigt.Hädelse suger.Var mer eller mindre precis och specifik.Underskattning är alltid bäst.Överdrifter är en miljard gånger värre än underskattningar.En-ordsmeningar? Eliminera!Paralleller i skrift är som vatten på en gås.Var uppe med tuppen för att slippa vardagsuttryck.Även om blandade metaforer låter fint, borde de spåras ur i tidigt stadium.Vem behöver retoriska frågor?\r\nVia zkuttz.com och mängder med andra \"roliga\" siter. Extra rolig är humorsiten Yttermera som har skrivit om punkterna på listan så att nästan allt fyndigt har försvunnit, och dessutom lagt till några egna seriösa skrivtips - surrealistiskt...\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/634043299925881485-calligraphy_pen_transparent.gif)", + "html": "

    Behöver du skärpa språkbruket på din blogg? Här är några ovärderliga tips:

    • Använd aldrig alliteration.
    • Prepositioner är inte bra ord att avsluta meningar med.
    • Sky klyschor som pesten. (De är gamla nyheter.)
    • Anställ lokala uttryck.
    • Undvik et-tecken & förkortningar, etc.
    • Anmärkningar inom paranteser (oavsett hur viktiga) är onödiga.
    • Det är fel att någonsin splittra ett infinitiv.
    • Sammandragningar är int' nödvändiga.
    • Man ska aldrig generalisera.
    • Använd icke citat. Eller som Ralph Waldo Emerson sa en gång: \"Jag hatar citat. Berätta vad du vet.\"
    • Jämförelser är lika dåliga som klyschor.
    • Var inte överflödig; använd inte fler ord än nödvändigt; det är ytterst onödigt.
    • Hädelse suger.
    • Var mer eller mindre precis och specifik.
    • Underskattning är alltid bäst.
    • Överdrifter är en miljard gånger värre än underskattningar.
    • En-ordsmeningar? Eliminera!
    • Paralleller i skrift är som vatten på en gås.
    • Var uppe med tuppen för att slippa vardagsuttryck.
    • Även om blandade metaforer låter fint, borde de spåras ur i tidigt stadium.
    • Vem behöver retoriska frågor?

    Via zkuttz.com och mängder med andra \"roliga\" siter. Extra rolig är humorsiten Yttermera som har skrivit om punkterna på listan så att nästan allt fyndigt har försvunnit, och dessutom lagt till några egna seriösa skrivtips - surrealistiskt...


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Några skrivtips från tekniken.nu", + "meta_description": "", + "author_id": 6, + "created_at": 1268733191000, + "created_by": 6, + "updated_at": 1268733191000, + "updated_by": 6, + "published_at": 1268733191000, + "published_by": 6 + }, + { + "id": 398, + "title": "Webb 3.0 är blå moln :)", + "slug": "webb-30-ar-bla-moln-", + "markdown": "\r\n\r\nTwitter:\r\n\r\n\r\n\r\nVimeo:\r\n\r\n\r\n\r\nSkype:\r\n\r\n\r\n", + "html": "

    Twitter:

    Vimeo:

    Skype:

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Webb 3.0 är blå moln :)", + "meta_description": "", + "author_id": 1087, + "created_at": 1268987794000, + "created_by": 1087, + "updated_at": 1268987794000, + "updated_by": 1087, + "published_at": 1268987794000, + "published_by": 1087 + }, + { + "id": 401, + "title": "Bästa och sämsta iPhone-spelen", + "slug": "basta-och-samsta-iphone-spelen", + "markdown": "\r\n\r\nNuförtiden spelar jag nästan bara på iPhone. Jag har lite för ont om tid för PC-spel och iPhonen är åtminstone lika bra som t.ex. PSP, när det gäller racingspel mycket bättre tack vare accelerometerstyrning. Här kommer mina favoriter och några bottennapp – samtliga kostar pengar.\r\n\r\n## Real Racing\r\n\r\nItunes – 38 SEK\r\n\r\n\r\nReal Racing har jag skrivit om förut. Det är nog mitt absolut favoritspel på iPhone. Riktigt bra gjort, fantastisk styrning och grym känsla. Det enda jag skulle önska mig är fler banor och ett riktigt multiplayerläge över internet (som det är nu kan man tävla i vilka tider man sätter som ensam bil på banan.\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n## Dirt Moto Racing\r\n\r\nItunes – 15 SEK\r\n\r\n\r\nYtterligare ett racingspel, denna gång med fyrhjulingar. Även detta spel har riktigt bra styrning och bra grafik. Man tävlar i fyra olika grenar: vanlig racing, speed (100% turbo hela tiden), orientering och freestyle och kan samla poäng och uppgraderingar. En sak jag\r\n\r\n\r\nfunderar över dock är varför alla spel med fyrhjulingar måste ha konster – gör man faktiskt bakåtvolter mitt i ett race?\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n## Parking Mania\r\n\r\nItunes – 7 SEK\r\n\r\n\r\nParking Mania har jag också skrivit om tidigare. Du har säkert spelat liknande spel på webben – du har en bil som ska parkeras i en parkeringsficka, i en miljö du ser uppifrån. Till en början är det lätt men svårighetsgraden ökar snabbt. Parking Mania har en riktigt lyckat accelerometerstyrning tillsammans med en onscreen-kontroll för att gasa och bromsa analogt. Utöver vanliga bilar får man köra motorcyklar, traktorer, bussar, brandbilar och mycket annat. På svårare nivåer ska man koppla av och på släp som man dessutom ska backa med.\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n## Space Miner\r\n\r\nItunes – 38 SEK\r\n\r\n\r\nSkjuta sönder asteroider, samla malm och uppgradera sitt skepp. Lägg till en ganska corny story runt det hela i rymdwesterntema och du har space miner. Trots att det här spelet bara har onscreen-kontroller som jag normalt sett avskyr så funkar det riktigt bra. Mycket beroendeframkallande och riktigt roligt!\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n## Let's Golf\r\n\r\nItunes – 15 SEK\r\n\r\n\r\nLet’s Golf fick jag i Apples julkampanj där de delade ut låtar och spel gratis. Kontrollerna följer klassiska golfspelskontroller – först pricka rätt styrka på slaget och sen pricka mitten mellan slice och hook. Fin grafik och välgjorda banor. Det enda som drar ner betyget är de fåniga karaktärerna med fåniga röster och fåniga kläder man kan vinna genom att spela bra.\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n## Trivial Pursuit\r\n\r\nItunes – 38 SEK\r\n\r\n\r\nTP är ett annat spel som kom i julkampanjen. Det följer samma upplägg som brädspelet, men är lite lättare i och med att man alltid får svarsalternativ. Man kan spela mot datorn eller i ett nytt spelläge där man ska ta sig igenom en bana på minst antal omgångar genom att svara rätt på frågor. När frågorna började ta slut köpte jag fler paket, vilket man kan göra direkt inifrån spelet.\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n## Civilization Revolution\r\n\r\nItunes – 49 SEK\r\n\r\n\r\nVem har inte lagt ner alldeles för många timmar på Civilization och dess uppföljare? Civilization Revolution är en lite bantad version som liknar den som finns på Nintendo DS. Vissa delar har kapats bort för att göra spelet mobilvänligare. Själv tycker jag bara att det är positivt – det som blir kvar är en genuin Civilization-känsla som man gärna lägger flera timmar på. Efter några lätta vinster har jag har precis hittat svårighetsgraden där jag måste kämpa. Enda önskemålet vore att den autosparade – man kan tappa sitt spel om det ringer.\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nTyvärr är jag inte lika nöjd med alla spel jag har köpt... Här är några riktiga bottennapp – trots bra betyg i App Store.\r\n\r\n## Real Football och Real Tennis\r\n\r\nDessa spel har fått bra betyg genomgående, men jag tycker att de är nästan ospelbara. Problemet är onscreen-kontrollerna. Du måste ha vänstertummen på rätt ställe för att få figurerna att springa dit du vill, och utan någon som helst feedback när du tappar posititionen blir det bara frustration kvar.\r\n\r\n## Driver\r\n\r\nÄven Driver har fått bra recensioner, och eftersom jag verkligen gillade det på PC så köpte jag det. Jag tycker att det är i princip helt ospelbart, det är väldigt segt i reaktionerna vilket gör att man antingen krockar mot hus eller hela tiden blir tagen av polisen. Får nog damma av gamla Logitech-ratten hemma istället.\r\n\r\n## Playman Track and Field\r\n\r\nEtt friidrottsspel där man tävlar genom att trycka på rätt ställen på skärmen i viss takt. Styrsystemet är precis så dumt som det låter, och jag får starka vibbar av Decathlon på C64 där man skulle springa snabbt genom att vicka joysticken fram och tillbaka till den (eller armen) gick sönder.\r\n\r\n![Bild](http://tekniken.nu/uploads/634055622439137558-civilization.jpg)", + "html": "

    Nuförtiden spelar jag nästan bara på iPhone. Jag har lite för ont om tid för PC-spel och iPhonen är åtminstone lika bra som t.ex. PSP, när det gäller racingspel mycket bättre tack vare accelerometerstyrning. Här kommer mina favoriter och några bottennapp – samtliga kostar pengar.


    Real Racing


    Itunes – 38 SEK


    Real Racing har jag skrivit om förut. Det är nog mitt absolut favoritspel på iPhone. Riktigt bra gjort, fantastisk styrning och grym känsla. Det enda jag skulle önska mig är fler banor och ett riktigt multiplayerläge över internet (som det är nu kan man tävla i vilka tider man sätter som ensam bil på banan.








    Dirt Moto Racing


    Itunes – 15 SEK


    Ytterligare ett racingspel, denna gång med fyrhjulingar. Även detta spel har riktigt bra styrning och bra grafik. Man tävlar i fyra olika grenar: vanlig racing, speed (100% turbo hela tiden), orientering och freestyle och kan samla poäng och uppgraderingar. En sak jag


    funderar över dock är varför alla spel med fyrhjulingar måste ha konster – gör man faktiskt bakåtvolter mitt i ett race?








    Parking Mania


    Itunes – 7 SEK


    Parking Mania har jag också skrivit om tidigare. Du har säkert spelat liknande spel på webben – du har en bil som ska parkeras i en parkeringsficka, i en miljö du ser uppifrån. Till en början är det lätt men svårighetsgraden ökar snabbt. Parking Mania har en riktigt lyckat accelerometerstyrning tillsammans med en onscreen-kontroll för att gasa och bromsa analogt. Utöver vanliga bilar får man köra motorcyklar, traktorer, bussar, brandbilar och mycket annat. På svårare nivåer ska man koppla av och på släp som man dessutom ska backa med.








    Space Miner


    Itunes – 38 SEK


    Skjuta sönder asteroider, samla malm och uppgradera sitt skepp. Lägg till en ganska corny story runt det hela i rymdwesterntema och du har space miner. Trots att det här spelet bara har onscreen-kontroller som jag normalt sett avskyr så funkar det riktigt bra. Mycket beroendeframkallande och riktigt roligt!








    Let's Golf


    Itunes – 15 SEK


    Let’s Golf fick jag i Apples julkampanj där de delade ut låtar och spel gratis. Kontrollerna följer klassiska golfspelskontroller – först pricka rätt styrka på slaget och sen pricka mitten mellan slice och hook. Fin grafik och välgjorda banor. Det enda som drar ner betyget är de fåniga karaktärerna med fåniga röster och fåniga kläder man kan vinna genom att spela bra.








    Trivial Pursuit


    Itunes – 38 SEK


    TP är ett annat spel som kom i julkampanjen. Det följer samma upplägg som brädspelet, men är lite lättare i och med att man alltid får svarsalternativ. Man kan spela mot datorn eller i ett nytt spelläge där man ska ta sig igenom en bana på minst antal omgångar genom att svara rätt på frågor. När frågorna började ta slut köpte jag fler paket, vilket man kan göra direkt inifrån spelet.








    Civilization Revolution


    Itunes – 49 SEK


    Vem har inte lagt ner alldeles för många timmar på Civilization och dess uppföljare? Civilization Revolution är en lite bantad version som liknar den som finns på Nintendo DS. Vissa delar har kapats bort för att göra spelet mobilvänligare. Själv tycker jag bara att det är positivt – det som blir kvar är en genuin Civilization-känsla som man gärna lägger flera timmar på. Efter några lätta vinster har jag har precis hittat svårighetsgraden där jag måste kämpa. Enda önskemålet vore att den autosparade – man kan tappa sitt spel om det ringer.








    Tyvärr är jag inte lika nöjd med alla spel jag har köpt... Här är några riktiga bottennapp – trots bra betyg i App Store.


    Real Football och Real Tennis


    Dessa spel har fått bra betyg genomgående, men jag tycker att de är nästan ospelbara. Problemet är onscreen-kontrollerna. Du måste ha vänstertummen på rätt ställe för att få figurerna att springa dit du vill, och utan någon som helst feedback när du tappar posititionen blir det bara frustration kvar.


    Driver


    Även Driver har fått bra recensioner, och eftersom jag verkligen gillade det på PC så köpte jag det. Jag tycker att det är i princip helt ospelbart, det är väldigt segt i reaktionerna vilket gör att man antingen krockar mot hus eller hela tiden blir tagen av polisen. Får nog damma av gamla Logitech-ratten hemma istället.


    Playman Track and Field


    Ett friidrottsspel där man tävlar genom att trycka på rätt ställen på skärmen i viss takt. Styrsystemet är precis så dumt som det låter, och jag får starka vibbar av Decathlon på C64 där man skulle springa snabbt genom att vicka joysticken fram och tillbaka till den (eller armen) gick sönder.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Bästa och sämsta iPhone-spelen", + "meta_description": "", + "author_id": 6, + "created_at": 1269965443000, + "created_by": 6, + "updated_at": 1269965443000, + "updated_by": 6, + "published_at": 1269965443000, + "published_by": 6 + }, + { + "id": 412, + "title": "Bacon är alltid bacon men Chuck Norris är inte cool längre", + "slug": "bacon-ar-alltid-bacon-men-chuck-norris-ar-inte-cool-langre", + "markdown": "\r\n\r\n...eller vad händer när mina favoriter inte är lika bra som jag brukar skryta om?\r\n\r\nVi har alla varit i den situationen när vi lovordat en produkt, en person eller ett varumärke för alla vi känner men prylen/varumärket eller personen förändras. Prylen kanske blir sämre med varje uppdatering eller den kanske inte hänger med konkurenterna. Varumärket kanske är uppköpt eller har tappat sin ideologi som det en gång stod för, personen kanske växer upp och blir tråkig istället för rebelisk och cool.\r\n\r\nChuck Norris var en gång var det hårdaste som fanns, speciellt i sina filmer. Han gjorde roundhouse-sparkar som ingen annan och var så hård att ingen skulle våga säga nåt annat. Numera är han väldigt religiös och politisk konservativ, knappast cool på nåt sätt åtminstone i mina ögon. Legenden Chuck Norris är fortfarande cool men inte personen bakom legenden.\r\n\r\nDen andra sidan av myntet är Apple som en gång stod för frihet, öppenhet och var den lille killens kompis har blivit mobbare, översittare, extremt inlåst och elitistiskt - men användarna som är samma användare som tidigare gillade Apple för att dom var avslappnade och öppna gillar numera Apple för att dom är stenhårda och stängda. Åsikten är kvar men argumenten är ändrade för att fortfarande komma fram till samma slutsats.\r\n\r\nMicrosoft som tidigare haft ostabila och fula produkter som t.ex windows NT, ME och XP (före alla servicepack) och som varit ganska oschyssta mot leverantörer och kunder har skärpt till sig enormt speciellt de senaste 5 åren (Vista är förstås undantaget här). Samma sak gäller Linux som de flesta anser är oanvändarvänligt och saknar drivrutiner, något som var sant väldigt länge men som de senaste 5 åren ändrats enormt och är inte längre en sanning utan en förlegad åsikt.\r\n\r\nVarför är det då så svårt att ändra sig och varför används gamla sanningar som argument i diskussioner än idag. Det är inte svårt att hitta Microsoft-artiklar som har kommentarerna fyllda av ”blåskärmar”, ”monopol” och ”jag vill inte ha internet explorer 6” eller artiklar som handlar om att mormor inte kan använda linux men gankar noobs på sin Windows-maskin (ok just den artikeln kanske inte finns)?\r\n\r\nSvaret ligger förmodligen i evolutionen och psykologins värld. När vi har investerat en stor del av vårt liv för att försvara något oavsett om det är ett vattenhål i öknen, en by med våra grannar eller en ras, religion eller en åsikt så har vi investerat en enorm mängd energi och anseende bland våra vänner och enligt evolutionen så är energi enormt dyrt. Energin var viktigare att lägga på större muskler och snabbare fötter för att hålla sig vid liv, och anseendet  behövdes för att få fortplanta sig. Idag har vi inte alls har inte alls samma förutsättningar (nördar t.ex. fortplantar ju sig ändå inte :-) ) men beteendet är för djupt att ändra på.\r\n\r\nLyckligvis så finns det saker man kan gilla utan att ha fel som t.ex bacon, lolcats och roliga översättningar men här är ju hela internet överens - tja iaf den köttätande delen av internet.\r\n\r\nHela den här bloggposten är mina åsikter som förstås också sitter så djupt att jag har svårt att ändra mig, tur nog så har jag förstås enbart gjort bra val så alla andra borde ändra sig istället. :-)\r\n\r\n![Bild](http://tekniken.nu/uploads/634104061438509932-bacon-chuck-norris.png)", + "html": "

    ...eller vad händer när mina favoriter inte är lika bra som jag brukar skryta om?

    Vi har alla varit i den situationen när vi lovordat en produkt, en person eller ett varumärke för alla vi känner men prylen/varumärket eller personen förändras. Prylen kanske blir sämre med varje uppdatering eller den kanske inte hänger med konkurenterna. Varumärket kanske är uppköpt eller har tappat sin ideologi som det en gång stod för, personen kanske växer upp och blir tråkig istället för rebelisk och cool.

    Chuck Norris var en gång var det hårdaste som fanns, speciellt i sina filmer. Han gjorde roundhouse-sparkar som ingen annan och var så hård att ingen skulle våga säga nåt annat. Numera är han väldigt religiös och politisk konservativ, knappast cool på nåt sätt åtminstone i mina ögon. Legenden Chuck Norris är fortfarande cool men inte personen bakom legenden.

    Den andra sidan av myntet är Apple som en gång stod för frihet, öppenhet och var den lille killens kompis har blivit mobbare, översittare, extremt inlåst och elitistiskt - men användarna som är samma användare som tidigare gillade Apple för att dom var avslappnade och öppna gillar numera Apple för att dom är stenhårda och stängda. Åsikten är kvar men argumenten är ändrade för att fortfarande komma fram till samma slutsats.

    Microsoft som tidigare haft ostabila och fula produkter som t.ex windows NT, ME och XP (före alla servicepack) och som varit ganska oschyssta mot leverantörer och kunder har skärpt till sig enormt speciellt de senaste 5 åren (Vista är förstås undantaget här). Samma sak gäller Linux som de flesta anser är oanvändarvänligt och saknar drivrutiner, något som var sant väldigt länge men som de senaste 5 åren ändrats enormt och är inte längre en sanning utan en förlegad åsikt.

    Varför är det då så svårt att ändra sig och varför används gamla sanningar som argument i diskussioner än idag. Det är inte svårt att hitta Microsoft-artiklar som har kommentarerna fyllda av ”blåskärmar”, ”monopol” och ”jag vill inte ha internet explorer 6” eller artiklar som handlar om att mormor inte kan använda linux men gankar noobs på sin Windows-maskin (ok just den artikeln kanske inte finns)?

    Svaret ligger förmodligen i evolutionen och psykologins värld. När vi har investerat en stor del av vårt liv för att försvara något oavsett om det är ett vattenhål i öknen, en by med våra grannar eller en ras, religion eller en åsikt så har vi investerat en enorm mängd energi och anseende bland våra vänner och enligt evolutionen så är energi enormt dyrt. Energin var viktigare att lägga på större muskler och snabbare fötter för att hålla sig vid liv, och anseendet  behövdes för att få fortplanta sig. Idag har vi inte alls har inte alls samma förutsättningar (nördar t.ex. fortplantar ju sig ändå inte :-) ) men beteendet är för djupt att ändra på.

    Lyckligvis så finns det saker man kan gilla utan att ha fel som t.ex bacon, lolcats och roliga översättningar men här är ju hela internet överens - tja iaf den köttätande delen av internet.

    Hela den här bloggposten är mina åsikter som förstås också sitter så djupt att jag har svårt att ändra mig, tur nog så har jag förstås enbart gjort bra val så alla andra borde ändra sig istället. :-)

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Bacon är alltid bacon men Chuck Norris är inte cool längre", + "meta_description": "", + "author_id": 1089, + "created_at": 1274884800000, + "created_by": 1089, + "updated_at": 1274884800000, + "updated_by": 1089, + "published_at": 1274884800000, + "published_by": 1089 + }, + { + "id": 439, + "title": "Gitarristens bästa iPhone-appar", + "slug": "gitarristens-basta-iphone-appar", + "markdown": "\r\n\r\nApp Store är full av riktiga guldkorn för den som spelar gitarr. Här är några av mina favoriter:\r\n\r\nGuitar Toolkit (Agile Partners) – 75 SEK\r\n\r\nGuitar Toolkit innehåller en stämapparat, en metronom med tap tempo och ett enormt omfattande bibliotek av ackord och skalor där alla positioner på den virtuella halsen gör ljud så att man kan testa ackorden lite. Alla grundverktyg man kan behöva med andra ord. Stämapparaten är väldigt mycket mer exakt än en vanlig stämmare jag köpte på Musikbörsen för ungefär 200:-, så bara den gör att den här applikationen är värd sina 75 SEK.\r\n\r\n\r\n\r\nAlternativ: billigare program som bara t.ex. är stämapparat eller bara ackordbibliotek \r\n## Tab Toolkit (Agile Partners) – 75 SEK\r\nTab Toolkit är en applikation för att visa och spela upp tabulatur på telefonen. Klarar formaten Guitar Pro och Powertab (och kanske några till), med alla spår och olika instrument. Om man är van vid Guitar Pro så hittar man allt man förväntar sig utom funktionalitet för att skapa och ändra i tabbarna. För att få in tab-filerna i applikationen så kan man antingen ansluta till programmets inbyggda webbserver från en dator och ladda upp den vägen, eller så kan man använda den inbyggda webbläsaren\r\n\r\n\r\n\r\nAlternativ: Ultimate Guitars tabapplikation Ultimate Guitar Tabs för 22 SEK. Den är mycket enklare i sitt utförande och visar bara tabbar i vanligt textformat. Den erbjuder dock direktaccess till hela UGs arkiv och har några smarta funktioner som man också hittar på UGs site, t.ex. autoscroll i ett tempo man bestämmer.\r\n## AmpKit (Agile Partners) – 0 till 149 SEK\r\nAmpKit simulerar förstärkare, kabinett, pedaler, mickar o.s.v. Som en Pod i applikationsformat helt enkelt. I gratisversionen får man med en Peavy Valveking, två kabinett, en mick och två pedaler. Man kan köpa mer utrustning antingen via in-app-köp eller genom att betala 149 SEK för fulla versionen där man får mer utrustning och lägre priser på köpen. Detta är en potentiellt dyrare lösning än konkurrenten iAmplitube, men jag tycker att AmpKit är överlägset därför att:\r\n\r\n\r\nDen har inspelningsfunktion (ganska katastrofalt att detta inte finns i iAmplitube, kommer förhoppningsvis snart)Alla inspelningar görs torrt, effekterna läggs på i realtid även när du spelar upp dina inspelningar inne i programmet. Det gör att du alltid kan re-ampa dina inspelningar om du köper nya förstärkarmodeller eller helt enkelt har rattat in ett bättre ljudDen har funktion för backtracks, laddas upp via programmets inbyggda webbserver (samma som i iAmplitube)Den har smartare preset-hantering, varje inställning sparas med eget namn och bild av den utrustning som ingår (iAmplitube har 12 numrerade slotar utan mer information än siffran)Den har direkt koppling tillSoundCloud (som vi bloggat om tidigare) där du kan ladda upp dina inspelningar och dela med dig.\r\n\r\n\r\nOavsett vilken app du väljer så behöver du ett sätt att koppla gitarren till telefonen. AmpKit är sammankopplat med Peavys Ampkit link, men andra produkter som gör samma sak – t.ex. iRig som hör ihop med iAmplitube jag tycker är mycket snyggare – funkar lika bra och är kompatibla. Det är extremt imponerande att de här apparna tar in ljudet i princip helt utan latens (jag märker ingen åtminstone), något som traditionellt sätt är rätt krångligt att få till med en normal PC utan att skaffa ett särskilt ljudkort med rätt sorts drivrutiner.\r\n\r\n\r\n\r\nAlternativ: iAmplitube, PRS Jam\r\n## Fret Surfer (Jason Neufeld) – 22 SEK\r\nFör den som liksom jag har sjukt svårt att komma ihåg tonerna på halsen så finns spelet Fret Surfer där man övar på just det. Kanske inte världens roligaste spel, men väldigt bra övning, så slipper man skämmas så mycket när man träffar sin gitarrlärare.\r\n\r\n\r\n## Sammanfattning\r\nDet är inte så svårt att räkna ut vem jag tycker gör de bästa gitarr-apparna. Agile har verkligen lyckats otroligt bra med sina applikationer, även om de är dyra (i iPhone-världen) så är de absolut bäst och mest prisvärda.\r\n\r\nUtöver applikationerna ovan finns det många, många fler. Det finns virtuella gitarrer, inspelningsstudios, kompositionsappar och mycket annat.\r\n\r\n![Bild](http://tekniken.nu/uploads/634200659836171406-gtk-feature.png)", + "html": "

    App Store är full av riktiga guldkorn för den som spelar gitarr. Här är några av mina favoriter:

    Guitar Toolkit (Agile Partners) – 75 SEK

    Guitar Toolkit innehåller en stämapparat, en metronom med tap tempo och ett enormt omfattande bibliotek av ackord och skalor där alla positioner på den virtuella halsen gör ljud så att man kan testa ackorden lite. Alla grundverktyg man kan behöva med andra ord. Stämapparaten är väldigt mycket mer exakt än en vanlig stämmare jag köpte på Musikbörsen för ungefär 200:-, så bara den gör att den här applikationen är värd sina 75 SEK.

    Alternativ: billigare program som bara t.ex. är stämapparat eller bara ackordbibliotek 

    Tab Toolkit (Agile Partners) – 75 SEK

    Tab Toolkit är en applikation för att visa och spela upp tabulatur på telefonen. Klarar formaten Guitar Pro och Powertab (och kanske några till), med alla spår och olika instrument. Om man är van vid Guitar Pro så hittar man allt man förväntar sig utom funktionalitet för att skapa och ändra i tabbarna. För att få in tab-filerna i applikationen så kan man antingen ansluta till programmets inbyggda webbserver från en dator och ladda upp den vägen, eller så kan man använda den inbyggda webbläsaren

    Alternativ: Ultimate Guitars tabapplikation Ultimate Guitar Tabs för 22 SEK. Den är mycket enklare i sitt utförande och visar bara tabbar i vanligt textformat. Den erbjuder dock direktaccess till hela UGs arkiv och har några smarta funktioner som man också hittar på UGs site, t.ex. autoscroll i ett tempo man bestämmer.

    AmpKit (Agile Partners) – 0 till 149 SEK

    AmpKit simulerar förstärkare, kabinett, pedaler, mickar o.s.v. Som en Pod i applikationsformat helt enkelt. I gratisversionen får man med en Peavy Valveking, två kabinett, en mick och två pedaler. Man kan köpa mer utrustning antingen via in-app-köp eller genom att betala 149 SEK för fulla versionen där man får mer utrustning och lägre priser på köpen. Detta är en potentiellt dyrare lösning än konkurrenten iAmplitube, men jag tycker att AmpKit är överlägset därför att:

    • Den har inspelningsfunktion (ganska katastrofalt att detta inte finns i iAmplitube, kommer förhoppningsvis snart)
    • Alla inspelningar görs torrt, effekterna läggs på i realtid även när du spelar upp dina inspelningar inne i programmet. Det gör att du alltid kan re-ampa dina inspelningar om du köper nya förstärkarmodeller eller helt enkelt har rattat in ett bättre ljud
    • Den har funktion för backtracks, laddas upp via programmets inbyggda webbserver (samma som i iAmplitube)
    • Den har smartare preset-hantering, varje inställning sparas med eget namn och bild av den utrustning som ingår (iAmplitube har 12 numrerade slotar utan mer information än siffran)
    • Den har direkt koppling tillSoundCloud (som vi bloggat om tidigare) där du kan ladda upp dina inspelningar och dela med dig.

    Oavsett vilken app du väljer så behöver du ett sätt att koppla gitarren till telefonen. AmpKit är sammankopplat med Peavys Ampkit link, men andra produkter som gör samma sak – t.ex. iRig som hör ihop med iAmplitube jag tycker är mycket snyggare – funkar lika bra och är kompatibla. Det är extremt imponerande att de här apparna tar in ljudet i princip helt utan latens (jag märker ingen åtminstone), något som traditionellt sätt är rätt krångligt att få till med en normal PC utan att skaffa ett särskilt ljudkort med rätt sorts drivrutiner.

    Alternativ: iAmplitube, PRS Jam

    Fret Surfer (Jason Neufeld) – 22 SEK

    För den som liksom jag har sjukt svårt att komma ihåg tonerna på halsen så finns spelet Fret Surfer där man övar på just det. Kanske inte världens roligaste spel, men väldigt bra övning, så slipper man skämmas så mycket när man träffar sin gitarrlärare.

    Sammanfattning

    Det är inte så svårt att räkna ut vem jag tycker gör de bästa gitarr-apparna. Agile har verkligen lyckats otroligt bra med sina applikationer, även om de är dyra (i iPhone-världen) så är de absolut bäst och mest prisvärda.

    Utöver applikationerna ovan finns det många, många fler. Det finns virtuella gitarrer, inspelningsstudios, kompositionsappar och mycket annat.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Gitarristens bästa iPhone-appar", + "meta_description": "", + "author_id": 6, + "created_at": 1284469182000, + "created_by": 6, + "updated_at": 1284469182000, + "updated_by": 6, + "published_at": 1284469182000, + "published_by": 6 + }, + { + "id": 499, + "title": "Är knappen deprimerad eller inte? Exjts API är inte helt tydligt.", + "slug": "ar-knappen-deprimerad-eller-inte-exjts-api-ar-inte-helt-tydligt", + "markdown": "\r\n\r\n\"False to not allow a pressed Button to be depressed (defaults to undefined).\"\r\n\r\nVad betyder det?\r\n\r\n\r\n\r\nEller som google translate utrycker det ”Falska att inte tillåta en pressad knapp för att vara deprimerad (standard undefined)”\r\n\r\nTaget från Extjs documentation. \r\n\r\nhttp://dev.sencha.com/deploy/ext-3.3.1/docs/\r\n\r\n![Bild](http://tekniken.nu/uploads/extjs_documentation_config.png)", + "html": "

    \"False to not allow a pressed Button to be depressed (defaults to undefined).\"

    Vad betyder det?


    Eller som google translate utrycker det ”Falska att inte tillåta en pressad knapp för att vara deprimerad (standard undefined)”

    Taget från Extjs documentation.

    http://dev.sencha.com/deploy/ext-3.3.1/docs/

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Är knappen deprimerad eller inte? Exjts API är inte helt tydligt.", + "meta_description": "", + "author_id": 1089, + "created_at": 1303826778000, + "created_by": 1089, + "updated_at": 1303826778000, + "updated_by": 1089, + "published_at": 1303826778000, + "published_by": 1089 + }, + { + "id": 511, + "title": "Världens skönaste fotbollskommentator!", + "slug": "varldens-skonaste-fotbollskommentator", + "markdown": "\r\n\r\nVärldens skönaste fotbollskommentator!\r\n\r\n\r\n\r\nTiziano Crudeli är en fantastisk ”fotbollskommentator”.\r\n\r\nI Italien har har de förutom sändning av matcher olika program som sänder diskussioner och annat i andra kanaler samtidigt som matchen spelas.\r\n\r\nTiziano Crudeli är den person som kommenterar Milans matcher i en studio och ibland på plats för Italiensk tv.\r\n\r\nHär kommer en Best-of med Crudeli, se och njut! Tips, det finns otroligt många sköna klipp med honom om ni söker er vidare på You Tube.\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/634418417182990429-image001.png@01CC19F2.3C5B2CD0__image001.png)", + "html": "

    Världens skönaste fotbollskommentator!

    Tiziano Crudeli är en fantastisk ”fotbollskommentator”.

    I Italien har har de förutom sändning av matcher olika program som sänder diskussioner och annat i andra kanaler samtidigt som matchen spelas.

    Tiziano Crudeli är den person som kommenterar Milans matcher i en studio och ibland på plats för Italiensk tv.

    Här kommer en Best-of med Crudeli, se och njut! Tips, det finns otroligt många sköna klipp med honom om ni söker er vidare på You Tube.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Världens skönaste fotbollskommentator!", + "meta_description": "", + "author_id": 1094, + "created_at": 1306755180000, + "created_by": 1094, + "updated_at": 1306755180000, + "updated_by": 1094, + "published_at": 1306755180000, + "published_by": 1094 + }, + { + "id": 513, + "title": "Använd din Real Racing 2-profil på både iPhone och iPad", + "slug": "anvand-din-real-racing-2-profil-pa-bade-iphone-och-ipad", + "markdown": "\r\n\r\nReal Racing 2 är ett av de bästa spelen överhuvud taget på iPhone (precis som föregångaren Real Racing). För iPad finns en särskilt anpassad version som heter Real Racing 2 HD. För att komplicera det lite så är det samma spel med bättre grafik men ändå inte samma. Man hamnar inte i samma topplista på GameCenter t.ex. En sak som man däremot kan göra är att importera profilen mellan spelen - så alla de timmar du har lagt ner på att tjäna miljoner dollar och låsa upp alla bilar och banor är inte förgäves om du byter plattform. Det hela sköts via GameCenter så du måste ha slagit på den funktionen i spelet.\r\n\r\n\r\n\r\nGör såhär för att flytta från telefon till iPad (om du inte har tillgång till din telefon för tillfället kan du hoppa direkt till steg 5 och hoppas på att du har en automatiskt sparad någorlunda färsk profil). \r\n\r\n1) Gå in i Real Racing 2 på telefonen.\r\n\r\n2) Öppna profilen (genom att klicka på ditt användarnamn längst upp till höger)\r\n\r\n3) Välj Player Settings\r\n\r\n4) Tryck på Restore Save, och välj upload för att spara en färsk kopia av profilen i GameCenter.\r\n\r\n5) Ta fram iPaden och öppna Real Racing 2 HD\r\n\r\n6) Ta fram listan över sparade spel (punkt 2-4 ovan)\r\n\r\n7) Välj den senast sparade profilen och tryck på Download.\r\n\r\nDet går självklart att flytta åt andra hållet också. Tyvärr finns det ingen funktion för att kontinuerligt synka profilerna. Det går också bra att spela mot varandra (t.ex. local wifi game) mellan en iPhone med Real Racing 2 och en iPad med Real Racing 2 HD.\r\n\r\n![Bild](http://tekniken.nu/uploads/634419134586970237-real-Reacing-2-HD.jpg)", + "html": "

    Real Racing 2 är ett av de bästa spelen överhuvud taget på iPhone (precis som föregångaren Real Racing). För iPad finns en särskilt anpassad version som heter Real Racing 2 HD. För att komplicera det lite så är det samma spel med bättre grafik men ändå inte samma. Man hamnar inte i samma topplista på GameCenter t.ex. En sak som man däremot kan göra är att importera profilen mellan spelen - så alla de timmar du har lagt ner på att tjäna miljoner dollar och låsa upp alla bilar och banor är inte förgäves om du byter plattform. Det hela sköts via GameCenter så du måste ha slagit på den funktionen i spelet.

    Gör såhär för att flytta från telefon till iPad (om du inte har tillgång till din telefon för tillfället kan du hoppa direkt till steg 5 och hoppas på att du har en automatiskt sparad någorlunda färsk profil).

    1) Gå in i Real Racing 2 på telefonen.

    2) Öppna profilen (genom att klicka på ditt användarnamn längst upp till höger)

    3) Välj Player Settings

    4) Tryck på Restore Save, och välj upload för att spara en färsk kopia av profilen i GameCenter.

    5) Ta fram iPaden och öppna Real Racing 2 HD

    6) Ta fram listan över sparade spel (punkt 2-4 ovan)

    7) Välj den senast sparade profilen och tryck på Download.

    Det går självklart att flytta åt andra hållet också. Tyvärr finns det ingen funktion för att kontinuerligt synka profilerna. Det går också bra att spela mot varandra (t.ex. local wifi game) mellan en iPhone med Real Racing 2 och en iPad med Real Racing 2 HD.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Använd din Real Racing 2-profil på både iPhone och iPad", + "meta_description": "", + "author_id": 6, + "created_at": 1307545500000, + "created_by": 6, + "updated_at": 1307545500000, + "updated_by": 6, + "published_at": 1307545500000, + "published_by": 6 + }, + { + "id": 562, + "title": "Equalify - integrerad equalizer till Spotify", + "slug": "equalify---integrerad-equalizer-till-spotify", + "markdown": "\r\nFör oss som lyssnar på Spotify hela dagarna är det rätt irriterande att man inte kan ställa in ljudet. Med endast volymkontroll är det svårt att kompensera för basfattiga lurar eller en dator med dåligt driv i ljudutgången som gör maxvolymen för låg (eller jobbigt brusig/störig på högre volym).\r\n\r\nNu finns det en grafisk equalizer som integrerar sig helt i Spotify-klienten:http://www.equalify.me/. Man kan både ändra frekvensbanden individuellt och förstärka hela signalen.\r\n\r\n\r\n\r\nDen är gratis och superlätt att installera! Finns dock bara för Windows.\r\n![Bild](http://tekniken.nu/uploads/634509025023294730-image001.png@01CC6BD1.BC92B590__image001.png)", + "html": "

    För oss som lyssnar på Spotify hela dagarna är det rätt irriterande att man inte kan ställa in ljudet. Med endast volymkontroll är det svårt att kompensera för basfattiga lurar eller en dator med dåligt driv i ljudutgången som gör maxvolymen för låg (eller jobbigt brusig/störig på högre volym).

    Nu finns det en grafisk equalizer som integrerar sig helt i Spotify-klienten:http://www.equalify.me/. Man kan både ändra frekvensbanden individuellt och förstärka hela signalen.

    Den är gratis och superlätt att installera! Finns dock bara för Windows.", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Equalify - integrerad equalizer till Spotify", + "meta_description": "", + "author_id": 6, + "created_at": 1315832040000, + "created_by": 6, + "updated_at": 1315832040000, + "updated_by": 6, + "published_at": 1315832040000, + "published_by": 6 + }, + { + "id": 564, + "title": "Scrolla upp eller ner?", + "slug": "scrolla-upp-eller-ner", + "markdown": "\r\n\r\nI nya Mac OS X Lion har Apple bestämt sig för att att byta riktning på scrollhjulet och infört s.k. ”natural scroll”. Om man som jag och många andra använder Mac hemma och Windows på jobbet innebär det att man scrollar fel på måndagar och lördagar. \r\n\r\nI längden kommer detta (förhoppningsvis?) ha rett ut sig så att man enas om ett sätt att scrolla och frågan är då: vad är rätt? Vilken riktning hoppas vi kommer överleva?\r\n\r\nSkälet till att man scrollar ner för att komma längre ner i dokumentet är ju från början för att man hade en markör i DOS som man styrde runt i sitt dokument. Denna analogi finns fortfarande kvar men i och med att folk mer använder touchpads och iphones, ipads där en markör inte längre existerar blir det mer naturligt att flytta dokumentet upp och ner än att flytta en markör ner och upp.\r\n\r\nDen intressanta frågan blir alltså: kommer Windows 8 innehålla markörer och scrollbars eller kommer de också gå över till touchpads och touchmöss och därmed byta riktning på scrollhjulet?\r\n\r\nEller är detta en personlig fråga på samma sätt som ”Invert mouse” är i dataspel? Eller som ”goofy” på skateboard eller vänsterspel i golf? Eller samma som att trycka på Upp i hissen när man vill att den ska komma ner (vilket är korrekt eftersom Upp-knappen betyder att man är på väg upp även om man vill att hissen ska komma ner). ;)\r\n\r\n\r\n\r\n\r\n\r\n\r\nUPPDATERING: Eftersom Windows-8 precis har släppts i preview kan vi konstatera att än så länge har inte Microsoft hängt på Apples initiativ att vända på hållet man skrollar, dock finns inte längre någon traditionell rullningslist (tråkig men officiell översättning av ordet scrollbar, men som ni läser försvinner den ändå snart så ingen fara ;).\r\n\r\n\r\n\r\n\r\n\r\nTill höger ser ni nya rullningslisten som väldigt mycket liknar den i iOS och Mac OS X Lion. Men till skillnad från Apple har Microsoft inte valt att byta håll på rullningen (än?)\r\n\r\n![Bild](http://tekniken.nu/uploads/634515259639879117-image001.jpg@01CC713B.13592440__image001.jpg)", + "html": "

    I nya Mac OS X Lion har Apple bestämt sig för att att byta riktning på scrollhjulet och infört s.k. ”natural scroll”. Om man som jag och många andra använder Mac hemma och Windows på jobbet innebär det att man scrollar fel på måndagar och lördagar.

    I längden kommer detta (förhoppningsvis?) ha rett ut sig så att man enas om ett sätt att scrolla och frågan är då: vad är rätt? Vilken riktning hoppas vi kommer överleva?

    Skälet till att man scrollar ner för att komma längre ner i dokumentet är ju från början för att man hade en markör i DOS som man styrde runt i sitt dokument. Denna analogi finns fortfarande kvar men i och med att folk mer använder touchpads och iphones, ipads där en markör inte längre existerar blir det mer naturligt att flytta dokumentet upp och ner än att flytta en markör ner och upp.

    Den intressanta frågan blir alltså: kommer Windows 8 innehålla markörer och scrollbars eller kommer de också gå över till touchpads och touchmöss och därmed byta riktning på scrollhjulet?

    Eller är detta en personlig fråga på samma sätt som ”Invert mouse” är i dataspel? Eller som ”goofy” på skateboard eller vänsterspel i golf? Eller samma som att trycka på Upp i hissen när man vill att den ska komma ner (vilket är korrekt eftersom Upp-knappen betyder att man är på väg upp även om man vill att hissen ska komma ner). ;)




    UPPDATERING: Eftersom Windows-8 precis har släppts i preview kan vi konstatera att än så länge har inte Microsoft hängt på Apples initiativ att vända på hållet man skrollar, dock finns inte längre någon traditionell rullningslist (tråkig men officiell översättning av ordet scrollbar, men som ni läser försvinner den ändå snart så ingen fara ;).




    Till höger ser ni nya rullningslisten som väldigt mycket liknar den i iOS och Mac OS X Lion. Men till skillnad från Apple har Microsoft inte valt att byta håll på rullningen (än?)

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Scrolla upp eller ner?", + "meta_description": "", + "author_id": 1087, + "created_at": 1316186760000, + "created_by": 1087, + "updated_at": 1316186760000, + "updated_by": 1087, + "published_at": 1316186760000, + "published_by": 1087 + }, + { + "id": 574, + "title": "Kör AirPlay på din Windows-dator", + "slug": "kor-airplay-pa-din-windows-dator", + "markdown": "\r\n\r\nI nyare versioner av iOS (4.2 och framåt) finns funktionen AirPlay. Den gör att man kan spela upp musik och film från en enhet – en dator, en iPhone, en iPad etc. – på en annan enhet. Denna andra enhet kan vara en dator men även en fristående musikspelare med AirPlay eller i framtiden kanske en TV eller en digitalbox. AirPlay på mottagande enhet har hittills bara funnits på MacOS, men nu finns en open source-applikation för Windows som åtminstone klarar av musikdelen av AirPlay: Shairport4W.\r\n\r\n\r\n\r\nApplikationen är superenkel och kan autostarta med Windows. Så länge man är på samma nät så dyker en ny ikon upp i musikspelare på iPhone där man helt enkelt bara väljer sin AirPlay-server. För mig som har en autoinloggande HTPC kopplad till hemmastereon är detta perfekt, man trycker igång den och behöver inte starta TV:n alls. AirPlay funkar bra med iPod-appen på telefonen och även Spotify. Har man kopplat en app till AirPlay så verkar andra appar fortsätta använda det för att spela ljud (t.ex. Safari, SoundCloud och DropBox). Shairport4W är inte 100% stabil i nuläget verkar det som, när ens telefon en gång tappar kopplingen så verkar det svårt att koppla upp igen utan att starta om applikationen. Det löser sig säkert med tiden.\r\n\r\n![Bild](http://tekniken.nu/uploads/634540269031699519-image001.jpg)", + "html": "

    I nyare versioner av iOS (4.2 och framåt) finns funktionen AirPlay. Den gör att man kan spela upp musik och film från en enhet – en dator, en iPhone, en iPad etc. – på en annan enhet. Denna andra enhet kan vara en dator men även en fristående musikspelare med AirPlay eller i framtiden kanske en TV eller en digitalbox. AirPlay på mottagande enhet har hittills bara funnits på MacOS, men nu finns en open source-applikation för Windows som åtminstone klarar av musikdelen av AirPlay: Shairport4W.


    Applikationen är superenkel och kan autostarta med Windows. Så länge man är på samma nät så dyker en ny ikon upp i musikspelare på iPhone där man helt enkelt bara väljer sin AirPlay-server. För mig som har en autoinloggande HTPC kopplad till hemmastereon är detta perfekt, man trycker igång den och behöver inte starta TV:n alls. AirPlay funkar bra med iPod-appen på telefonen och även Spotify. Har man kopplat en app till AirPlay så verkar andra appar fortsätta använda det för att spela ljud (t.ex. Safari, SoundCloud och DropBox). Shairport4W är inte 100% stabil i nuläget verkar det som, när ens telefon en gång tappar kopplingen så verkar det svårt att koppla upp igen utan att starta om applikationen. Det löser sig säkert med tiden.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Kör AirPlay på din Windows-dator", + "meta_description": "", + "author_id": 6, + "created_at": 1318430400000, + "created_by": 6, + "updated_at": 1318430400000, + "updated_by": 6, + "published_at": 1318430400000, + "published_by": 6 + }, + { + "id": 22, + "title": "Larv", + "slug": "larv", + "markdown": null, + "html": null, + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 4, + "created_at": 1181663474000, + "created_by": 4, + "updated_at": 1181663474000, + "updated_by": 4, + "published_at": 1181663474000, + "published_by": 4 + }, + { + "id": 63, + "title": "Digg-modellen vinner mark", + "slug": "digg-modellen-vinner-mark", + "markdown": "\r\n\r\nCollaborative Filtering (ungefär ”gemensamt urval”) är en gammal teori där ett antal användare genom sitt beteende hjälper varandra att hitta rätt information. Amazon och andra e-handelssiters förslag på liknande produkter är en sorts collaborative filtering.   På senare tid har en mycket mer direkt och lättbegriplig modell blivit allt populärare. Först ut var tekniknyhetssiten Digg.com. Enkelt beskrivet får vem som helst som är en registrerad användare bidra med länkar till tekniknyheter. Nya bidrag hamnar i en väntekö som är öppen för alla. Om man läser en länkad nyhet som man tycker är bra så trycker man på Digg-knappen bredvid länken, och när tillräckligt många har diggat en länk så uppgraderas den och hamnar på digg.coms förstasida. \r\n![Bild](http://tekniken.nu/uploads/digg.png)\r\nDigg är ett utmärkt exempel på webb 2.0, både i hur man\r\nförhåller sig till användare och användarskapat innehåll, men även i hur man\r\nanvänder modern webbteknik som AJAX.\r\n\r\n \r\n\r\nDigg.com har blivit oerhört populär, och digg-modellen\r\nbörjar nu dyka upp på en mängd andra siter, t.ex. ekositen hugg.com och helt nya svenska modetoppen.se.\r\n\r\n", + "html": "


    Collaborative Filtering (ungefär ”gemensamt urval”) är en gammal teori där ett antal användare genom sitt beteende hjälper varandra att hitta rätt information. Amazon och andra e-handelssiters förslag på liknande produkter är en sorts collaborative filtering.
     
    På senare tid har en mycket mer direkt och lättbegriplig modell blivit allt populärare. Först ut var tekniknyhetssiten Digg.com. Enkelt beskrivet får vem som helst som är en registrerad användare bidra med länkar till tekniknyheter. Nya bidrag hamnar i en väntekö som är öppen för alla. Om man läser en länkad nyhet som man tycker är bra så trycker man på Digg-knappen bredvid länken, och när tillräckligt många har diggat en länk så uppgraderas den och hamnar på digg.coms förstasida.

    Digg är ett utmärkt exempel på webb 2.0, både i hur man
    förhåller sig till användare och användarskapat innehåll, men även i hur man
    använder modern webbteknik som AJAX.


     


    Digg.com har blivit oerhört populär, och digg-modellen
    börjar nu dyka upp på en mängd andra siter, t.ex. ekositen hugg.com och helt nya svenska modetoppen.se.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1186571520000, + "created_by": 6, + "updated_at": 1186571520000, + "updated_by": 6, + "published_at": 1186571520000, + "published_by": 6 + }, + { + "id": 66, + "title": "YouTube lanserar mobilsite", + "slug": "youtube-lanserar-mobilsite", + "markdown": "\r\n\r\n\r\nYouTube har lanserat en mobilanpassad version av sin site: http://m.youtube.com. Om du har en mobiltelefon som klarar RTSP-streaming så fungerar det (funkar t.ex. SVTs mobilvideo så kommer youtube mobile att fungera). Man kan även ladda upp filmer från mobilen genom att skicka MMS. \r\n\r\n\r\nPS. Se upp med mobildata bara – att se videoklipp kan snabbt konsumera mycket trafik, och särskild utomlands kan det bli en mycket dyrbar affär. \r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/youtube-windows-mobile-1.jpg)", + "html": "


    YouTube har lanserat en mobilanpassad version av sin site: http://m.youtube.com. Om du har en mobiltelefon som klarar RTSP-streaming så fungerar det (funkar t.ex. SVTs mobilvideo så kommer youtube mobile att fungera). Man kan även ladda upp filmer från mobilen genom att skicka MMS. 


    PS. Se upp med mobildata bara – att se videoklipp kan snabbt konsumera mycket trafik, och särskild utomlands kan det bli en mycket dyrbar affär.


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1184198280000, + "created_by": 6, + "updated_at": 1184198280000, + "updated_by": 6, + "published_at": 1184198280000, + "published_by": 6 + }, + { + "id": 68, + "title": "Sony Ericsson P1i", + "slug": "sony-ericsson-p1i", + "markdown": "\r\n\r\n\r\nI slutet av augusti lanserar Sony Ericsson en ny businesslur som av allt att döma verkar vara en efterföljare till M600; SE P1I. I formfaktor nästan identisk med M600, men denna gång ser vi en 3.2 megapixelkamera på baksidan. Avsaknaden av kamera var för många en showstopper på M600, så det är trevligt att se att SE lyssnat och lärt. Även en liten videosamtalskamera har lagts till på framsidan (för de typ tre personer i världen som någonsin kör videosamtal). En annan skillnad mot M600 är att den även fått en wlan-krets. Summan känns lite som en P990 i ett M600 skal. \r\n\r\n\r\nLite övriga specifikationer: Operativ: Symbian 9.1 (UIQ 3.0)Skärm: 320x240 med 262000 färgerNät: Trippelband med 3G (dock ej EDGE, vilket är lite synd i USA)Radio: BT 2.0, 802.11bEpost: Klient för Microsoft Active SyncStorlek: 106 x 55 x 17Vikt: 124g\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/p1i.png)", + "html": "


    I slutet av augusti lanserar Sony Ericsson en ny businesslur som av allt att döma verkar vara en efterföljare till M600; SE P1I. I formfaktor nästan identisk med M600, men denna gång ser vi en 3.2 megapixelkamera på baksidan. Avsaknaden av kamera var för många en showstopper på M600, så det är trevligt att se att SE lyssnat och lärt. Även en liten videosamtalskamera har lagts till på framsidan (för de typ tre personer i världen som någonsin kör videosamtal). En annan skillnad mot M600 är att den även fått en wlan-krets. Summan känns lite som en P990 i ett M600 skal. 


    Lite övriga specifikationer:
    Operativ: Symbian 9.1 (UIQ 3.0)
    Skärm: 320x240 med 262000 färger
    Nät: Trippelband med 3G (dock ej EDGE, vilket är lite synd i USA)
    Radio: BT 2.0, 802.11b
    Epost: Klient för Microsoft Active Sync
    Storlek: 106 x 55 x 17
    Vikt: 124g


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1085, + "created_at": 1183978860000, + "created_by": 1085, + "updated_at": 1183978860000, + "updated_by": 1085, + "published_at": 1183978860000, + "published_by": 1085 + }, + { + "id": 69, + "title": "Många rykten om Google-telefon", + "slug": "manga-rykten-om-google-telefon", + "markdown": "\r\n\r\n\r\nDet florerar gott om rykten kring att Google ska börja sälja en egenbrandad mobiltelefon.\r\n\r\n\r\nEnligt Wired, som hänvisar till en hemlig källa inom Google kommer Google-telefonen gPhone att vara Linux-baserad, ha GPS som ska vara kopplat till Google Maps, vara operatörsolåst och vara billig - inspirerad av 100-dollarsdatorn. http://blog.wired.com/monkeybites/2007/08/rumor-google-ph.html\r\n\r\n\r\n \r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/googlephone780039.jpg)\r\n\r\n\r\nGizmodo hänvisar till en hemlig källa inom telefontillverkaren HTC (tidigare känd som QTEK) som tillverkar en mängd operatörsbrandade Windows Mobile-telefoner åt stora operatörer. Enligt denna källa väljer Google just nu bland 20 nya HTC-modeller. Den färdiga telefonen kommer enligt dem att köra Windows Mobile 6 eller Linux, och innehålla ungefär samma funktioner som Wireds källa uppger.http://gizmodo.com/gadgets/rumor/google-phone-confirmed-by-htc-insider-294277.php\r\n\r\n\r\nSjälv är jag lite skeptiskt till hela ryktet - jag ser inte riktigt poängen för Google att börja leverera telefoner. Men konstigare saker har hänt :-).\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/google-phone-1.jpg)", + "html": "


    Det florerar gott om rykten kring att Google ska börja sälja en egenbrandad mobiltelefon.


    Enligt Wired, som hänvisar till en hemlig källa inom Google kommer Google-telefonen gPhone att vara Linux-baserad, ha GPS som ska vara kopplat till Google Maps, vara operatörsolåst och vara billig - inspirerad av 100-dollarsdatorn. http://blog.wired.com/monkeybites/2007/08/rumor-google-ph.html


     





    Gizmodo hänvisar till en hemlig källa inom telefontillverkaren HTC (tidigare känd som QTEK) som tillverkar en mängd operatörsbrandade Windows Mobile-telefoner åt stora operatörer. Enligt denna källa väljer Google just nu bland 20 nya HTC-modeller. Den färdiga telefonen kommer enligt dem att köra Windows Mobile 6 eller Linux, och innehålla ungefär samma funktioner som Wireds källa uppger.
    http://gizmodo.com/gadgets/rumor/google-phone-confirmed-by-htc-insider-294277.php


    Själv är jag lite skeptiskt till hela ryktet - jag ser inte riktigt poängen för Google att börja leverera telefoner. Men konstigare saker har hänt :-).


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1188413403000, + "created_by": 6, + "updated_at": 1188413403000, + "updated_by": 6, + "published_at": 1188413403000, + "published_by": 6 + }, + { + "id": 82, + "title": "ObjectDock - för dem med OSX-avund", + "slug": "objectdock---for-dem-med-osx-avund", + "markdown": "\r\n\r\nAvundsjuk på dockan längst ner på skärmen i OSX? Nu kan du\r\nfå en gratis även i Windows! Dockan kan placeras längst upp på skärmen också om\r\nman vill ha kvar det vanliga aktivitetsfältet med startmenyn: \r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/objectdock.png)\r\n\r\nLadda ner på http://www.objectdock.com\r\n\r\n", + "html": "


    Avundsjuk på dockan längst ner på skärmen i OSX? Nu kan du
    få en gratis även i Windows! Dockan kan placeras längst upp på skärmen också om
    man vill ha kvar det vanliga aktivitetsfältet med startmenyn:








    Ladda ner på http://www.objectdock.com


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1182173400000, + "created_by": 6, + "updated_at": 1182173400000, + "updated_by": 6, + "published_at": 1182173400000, + "published_by": 6 + }, + { + "id": 89, + "title": "Apple släpper Safari för Windows", + "slug": "apple-slapper-safari-for-windows", + "markdown": "\r\n\r\n\r\n\r\n\r\n\r\nApples egen webbläsare Safari har hittills bara funnits för\r\nMacOS, men släpptes igår i betaversion för Windows. Omdömena på webben är som\r\nvanligt när det gäller Apple-produkter delade i två läger – ena lägret hävdar\r\natt att Safari är blixtsnabb och överlägsen FireFox och Internet Explorer,\r\nandra lägret hävdar att den är så buggig att det är svårt att göra någon\r\nbedömning överhuvud taget. Döm själv, Safari 3.0 beta finns att ladda ner från\r\nApples webbplats, som också precis har fått nytt grafiskt utseende: http://www.apple.com/safari/\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/safari.png)", + "html": "




    Apples egen webbläsare Safari har hittills bara funnits för
    MacOS, men släpptes igår i betaversion för Windows. Omdömena på webben är som
    vanligt när det gäller Apple-produkter delade i två läger – ena lägret hävdar
    att att Safari är blixtsnabb och överlägsen FireFox och Internet Explorer,
    andra lägret hävdar att den är så buggig att det är svårt att göra någon
    bedömning överhuvud taget. Döm själv, Safari 3.0 beta finns att ladda ner från
    Apples webbplats, som också precis har fått nytt grafiskt utseende: http://www.apple.com/safari/





    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1181643000000, + "created_by": 6, + "updated_at": 1181643000000, + "updated_by": 6, + "published_at": 1181643000000, + "published_by": 6 + }, + { + "id": 91, + "title": "Storskalig kinesisk piratkopiering", + "slug": "storskalig-kinesisk-piratkopiering", + "markdown": "\r\n\r\nDet är inte bara musik- och\r\nmjukvaruindustrin som lider av kinesisk piratikopiering, även lastvagnsjätten\r\nMAN har fått problem sedan kinesiska biltillverkaren Zonta till synes\r\npiratkopierat deras storsäljande bussmodell \"Starliner\". Rättskampen\r\när såklart i full gång... Avgör själv nedan om du ser någon likhet eller\r\nskillnad (orginalet är lite ljusare i färgen, utan VIP-logga):\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/buss1.png)\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/buss2.png)\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/buss3.png)\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/buss4.png)", + "html": "


    Det är inte bara musik- och
    mjukvaruindustrin som lider av kinesisk piratikopiering, även lastvagnsjätten
    MAN har fått problem sedan kinesiska biltillverkaren Zonta till synes
    piratkopierat deras storsäljande bussmodell \"Starliner\". Rättskampen
    är såklart i full gång... Avgör själv nedan om du ser någon likhet eller
    skillnad (orginalet är lite ljusare i färgen, utan VIP-logga):














    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1085, + "created_at": 1181241960000, + "created_by": 1085, + "updated_at": 1181241960000, + "updated_by": 1085, + "published_at": 1181241960000, + "published_by": 1085 + }, + { + "id": 92, + "title": "HTCs svar på iPhone", + "slug": "htcs-svar-pa-iphone", + "markdown": "\r\n\r\n\r\nInte riktigt lika cool och snygg som iPhone, men visar verkligen potentialen för iPhones goda inverkan på övriga mobiltillverkare och Windows Mobile.\r\n\r\n\r\nTitta på touch-filmen så förstår du hur gränssnittet funkar: http://www.htctouch.com/. Navigeringskuben är riktigt smart!\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/htc_touch.png)", + "html": "


    Inte riktigt lika cool och snygg som iPhone, men visar verkligen potentialen för iPhones goda inverkan på övriga mobiltillverkare och Windows Mobile.


    Titta på touch-filmen så förstår du hur gränssnittet funkar: http://www.htctouch.com/. Navigeringskuben är riktigt smart!


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1181223360000, + "created_by": 6, + "updated_at": 1181223360000, + "updated_by": 6, + "published_at": 1181223360000, + "published_by": 6 + }, + { + "id": 93, + "title": "En ny värld med Microsoft Silverlight", + "slug": "en-ny-varld-med-microsoft-silverlight", + "markdown": "\r\n\r\n\r\nMacromedias (numera Adobes) plattform Flash innebar en revolution för avancerat webbinnehåll. Flash har gjort det möjligt att skapa webbplatser med s.k. \"rika gränssnitt\", helt enkelt funktioner som inte går att göra skapa i HTML -  animeringar, ljud, filmer, korrekta typsnitt och mycket annat.\r\n\r\n\r\nNu har Microsoft släppt sin konkurrerande plattform Silverlight. Silverlight är mer än bara en konkurrent till Flash - det har potential att starta en ny gränssnittsrevolution på webben.\r\n\r\n\r\n\r\nNågra godbitar som gör att Silverlight känns mer spännande än Flash:\r\n\r\n\r\n\r\n\r\nSilverlight är sammankopplat med Microsofts utvecklingsmiljö Visual Studio, vilket gör det enklare för .NET-programmerare att utveckla \"rika gränssnitt\". Behovet av extremt specialiserade Flash-programmerare blir inte lika stort, man kan instället arbeta i vanliga teamkonstellationer med formgivare och programmerare.\r\nSilverlight stödjer Windows gränssnittsspråk XAML, vilket gör det enkelt att utveckla riktiga applikationer som körs på webben.\r\nSilverlight-animeringar baseras på tid (\"något ska hända efter 1,12 sekunder\") istället för baserad på animeringsrutor som i Flash (\"16 rutor in\") vilket gör det mycket enklare att få saker att fungera likadant på olika kraftfulla datorer.\r\nSilverlights filer är i XML-format istället för binära som i Flash, vilket bland annat gör det möjligt att skapa Silverlight-objekt på servern utan att man behöver installera extra serverkomponenter. Det gör det också möjligt att precis som med HTML skapa Silverlight-applikationer \"för hand\" om man inte vill installera Visual Studio.\r\n\r\n\r\nSilverlight stödjer uppspelning av HD-video (Adobe har meddelat att Flash kommer att stödja HD inom kort) \r\n\r\n\r\nMånga av funktionerna har hårdvaruacceleration, vilket gör att allt kommer flyta på extra bra om din dator har ett bra grafikkort. \r\n\r\nEn ny version är redan på gång - version 1.1, som än så länge finns i testversion - med massor av nyheter. De två största är utökat stöd för XAML med gränssnittselement som fönster, textboxar, knappar o.s.v, och stöd för att programmera i C# vilket kommer att göra det ännu enklare för .NET-programmerare.\r\n\r\n\r\nVi tror att vi inom kort kommer att få se en mängd nya applikationer på webben, först ut säkerligen spel och mediespelare av olika slag men ganska snart riktiga applikationer. Google kan få sig en match på Apps-fronten, tänk dig t.ex. en webbaserad ordbehandlare som faktiskt funkar som Word. \r\n\r\n\r\nFör den som är .NET-utvecklare är fördelarna uppenbara. För alla andra kommer den verkligt stora fördelen med Silverlight vara att det plötsligt finns konkurrens inom området rika gränssnitt på webben, och att fler kommer att kunna skapa rika gränssnitt. Om man ser till vilken skjuts i utveckling FireFox bidrog till på webbläsarfronten tror jag att den kommande tiden kommer att bli riktigt spännande.\r\n\r\n\r\nLadda ner Silverlight här: http://www.microsoft.com/silverlight/install.aspx\r\nMicrosoft i Slovenien har byggt en riktigt cool \"Vistasimulator\" som visar lite vad Silverlight går för: http://www.windowsvista.si\r\n![Bild](http://tekniken.nu/uploads/silverlight.jpg)", + "html": "


    Macromedias (numera Adobes) plattform Flash innebar en revolution för avancerat webbinnehåll. Flash har gjort det möjligt att skapa webbplatser med s.k. \"rika gränssnitt\", helt enkelt funktioner som inte går att göra skapa i HTML -  animeringar, ljud, filmer, korrekta typsnitt och mycket annat.


    Nu har Microsoft släppt sin konkurrerande plattform Silverlight. Silverlight är mer än bara en konkurrent till Flash - det har potential att starta en ny gränssnittsrevolution på webben.



    Några godbitar som gör att Silverlight känns mer spännande än Flash:




    • Silverlight är sammankopplat med Microsofts utvecklingsmiljö Visual Studio, vilket gör det enklare för .NET-programmerare att utveckla \"rika gränssnitt\". Behovet av extremt specialiserade Flash-programmerare blir inte lika stort, man kan instället arbeta i vanliga teamkonstellationer med formgivare och programmerare.

    • Silverlight stödjer Windows gränssnittsspråk XAML, vilket gör det enkelt att utveckla riktiga applikationer som körs på webben.

    • Silverlight-animeringar baseras på tid (\"något ska hända efter 1,12 sekunder\") istället för baserad på animeringsrutor som i Flash (\"16 rutor in\") vilket gör det mycket enklare att få saker att fungera likadant på olika kraftfulla datorer.

    • Silverlights filer är i XML-format istället för binära som i Flash, vilket bland annat gör det möjligt att skapa Silverlight-objekt på servern utan att man behöver installera extra serverkomponenter. Det gör det också möjligt att precis som med HTML skapa Silverlight-applikationer \"för hand\" om man inte vill installera Visual Studio.



    • Silverlight stödjer uppspelning av HD-video (Adobe har meddelat att Flash kommer att stödja HD inom kort)



    • Många av funktionerna har hårdvaruacceleration, vilket gör att allt kommer flyta på extra bra om din dator har ett bra grafikkort.

    • En ny version är redan på gång - version 1.1, som än så länge finns i testversion - med massor av nyheter. De två största är utökat stöd för XAML med gränssnittselement som fönster, textboxar, knappar o.s.v, och stöd för att programmera i C# vilket kommer att göra det ännu enklare för .NET-programmerare.


    Vi tror att vi inom kort kommer att få se en mängd nya applikationer på webben, först ut säkerligen spel och mediespelare av olika slag men ganska snart riktiga applikationer. Google kan få sig en match på Apps-fronten, tänk dig t.ex. en webbaserad ordbehandlare som faktiskt funkar som Word.


    För den som är .NET-utvecklare är fördelarna uppenbara. För alla andra kommer den verkligt stora fördelen med Silverlight vara att det plötsligt finns konkurrens inom området rika gränssnitt på webben, och att fler kommer att kunna skapa rika gränssnitt. Om man ser till vilken skjuts i utveckling FireFox bidrog till på webbläsarfronten tror jag att den kommande tiden kommer att bli riktigt spännande.


    Ladda ner Silverlight här: http://www.microsoft.com/silverlight/install.aspx

    Microsoft i Slovenien har byggt en riktigt cool \"Vistasimulator\" som visar lite vad Silverlight går för: http://www.windowsvista.si
    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1189071180000, + "created_by": 6, + "updated_at": 1189071180000, + "updated_by": 6, + "published_at": 1189071180000, + "published_by": 6 + }, + { + "id": 94, + "title": "Nya Ipods", + "slug": "nya-ipods", + "markdown": "\r\n\r\n\r\nPå Apples keynote igår presenterade Steve jobs tre nya eller uppdaterade iPods:\r\n\r\n\r\niPod Classic - en modell som ser ut som den första, vita iPoden som kom, men uppdaterad med video och en hårddisk på upp till 160 GB.\r\niPod Nano - en ny Nano med större skärm och video, flashminne på upp till 8 GB\r\niPod Touch - den på förhand mest omtalade, men inte förrän nu officiellt bekräfta modellen. Till utseende och storlek väldigt lik iPhone, en iPhone utan telefon helt enkelt. Har multitouch, WLAN, webbläsare, video och minne upp till 16 GB.\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/ipods.png)", + "html": "


    På Apples keynote igår presenterade Steve jobs tre nya eller uppdaterade iPods:



    • iPod Classic - en modell som ser ut som den första, vita iPoden som kom, men uppdaterad med video och en hårddisk på upp till 160 GB.

    • iPod Nano - en ny Nano med större skärm och video, flashminne på upp till 8 GB

    • iPod Touch - den på förhand mest omtalade, men inte förrän nu officiellt bekräfta modellen. Till utseende och storlek väldigt lik iPhone, en iPhone utan telefon helt enkelt. Har multitouch, WLAN, webbläsare, video och minne upp till 16 GB.









    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1189094940000, + "created_by": 6, + "updated_at": 1189094940000, + "updated_by": 6, + "published_at": 1189094940000, + "published_by": 6 + }, + { + "id": 95, + "title": "Microsoft Popfly™", + "slug": "microsoft-popfly", + "markdown": "\r\n\r\nUtvecklarna på Microsoft arbetar på en webbtjänst som de kallar för Popfly. Det handlar framförallt om en dynamisk Mashup-generator som via webservices låter användaren själv integrera olika webbtjänster. Användaren kan via ett snyggt Silverlightgränssnitt länka in olika byggblock, högnivåkoda lite och generera egna mashups. Popfly innehåller också en motor för att skapa webbsidor, men det känns inte i närheten lika nyskapande.\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/popfly1.png)\r\n\r\nI teorin skall man alltså tex kunna skapa en roterande boll\r\nmed fotografier på dem som mailat dig senaste dagen genom att länka in en\r\nHotmail-, Facebook- och Photosphere koppling. Eller varför inte koppla ihop\r\ngoogle maps med nyhetsflödet från CNN för att i realtid kunna se vad som händer\r\nvar i världen.\r\n\r\nProjektet befinner sig ännu på alfastadiet, men man kan\r\nregistrera sig för att tävla om de invites som lottas ut.\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/popfly2.png)\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/popfly3.png)", + "html": "


    Utvecklarna på Microsoft arbetar på en webbtjänst som de kallar för Popfly. Det handlar framförallt om en dynamisk Mashup-generator som via webservices låter användaren själv integrera olika webbtjänster. Användaren kan via ett snyggt Silverlightgränssnitt länka in olika byggblock, högnivåkoda lite och generera egna mashups. Popfly innehåller också en motor för att skapa webbsidor, men det känns inte i närheten lika nyskapande.








    I teorin skall man alltså tex kunna skapa en roterande boll
    med fotografier på dem som mailat dig senaste dagen genom att länka in en
    Hotmail-, Facebook- och Photosphere koppling. Eller varför inte koppla ihop
    google maps med nyhetsflödet från CNN för att i realtid kunna se vad som händer
    var i världen.


    Projektet befinner sig ännu på alfastadiet, men man kan
    registrera sig för att tävla om de invites som lottas ut.








    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "ande boll med bilder på de som har mailat dig under dagen genom att koppla ihop Hotmail, FaceBook och Photosphere?", + "author_id": 1085, + "created_at": 1189176840000, + "created_by": 1085, + "updated_at": 1189176840000, + "updated_by": 1085, + "published_at": 1189176840000, + "published_by": 1085 + }, + { + "id": 98, + "title": "Köp inte iPhone i USA!", + "slug": "kop-inte-iphone-i-usa", + "markdown": "\r\n\r\nOm du är sugen på att köpa en iPhone i USA så kan du redan\r\nnu börja tänka om. Om man ska tro rykten som går runt på nätet just nu planeras\r\ndet nämligen i november lansering av den europeiska versionen av iPhone, som dessutom ska stöda HSDPA (även känt i Sverige som turbo-3G) vilket ger en nedladdningshastighet på 3,6Mbit/s i\r\ntelefonen. Europeiska versionen av iPhone kommer även ha 16 GB inbyggt minne till skillnad från 8GB\r\nför den amerikanska modellen vilket ökar ha-begäret ytterligare för oss\r\nteknikälskare.\r\n\r\nUppgifterna är än så länge obekräftade och kommer efter att\r\nnyfikna surfare hade hittat opublicerade bilder på webbservern hos tyska\r\ntelekombolaget T-Mobile. \r\n\r\nVi är väldigt nyfikna på vilken av de svenska\r\nmobiloperatörerna som först kommer lansera telefonen. \r\n\r\nKälla: http://www.electronista.com/articles/07/09/08/t.mobile.germany.ad/\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/iphone_ad.png)", + "html": "


    Om du är sugen på att köpa en iPhone i USA så kan du redan
    nu börja tänka om. Om man ska tro rykten som går runt på nätet just nu planeras
    det nämligen i november lansering av den europeiska versionen av iPhone, som dessutom ska stöda HSDPA (även känt i Sverige som turbo-3G) vilket ger en nedladdningshastighet på 3,6Mbit/s i
    telefonen. Europeiska versionen av iPhone kommer även ha 16 GB inbyggt minne till skillnad från 8GB
    för den amerikanska modellen vilket ökar ha-begäret ytterligare för oss
    teknikälskare.


    Uppgifterna är än så länge obekräftade och kommer efter att
    nyfikna surfare hade hittat opublicerade bilder på webbservern hos tyska
    telekombolaget T-Mobile.


    Vi är väldigt nyfikna på vilken av de svenska
    mobiloperatörerna som först kommer lansera telefonen.


    Källa: http://www.electronista.com/articles/07/09/08/t.mobile.germany.ad/





    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "i de svenska mobilnäten. Det finns dock mycket goda skäl att vänta!", + "author_id": 1087, + "created_at": 1189444620000, + "created_by": 1087, + "updated_at": 1189444620000, + "updated_by": 1087, + "published_at": 1189444620000, + "published_by": 1087 + }, + { + "id": 99, + "title": "Facebook för iPhone", + "slug": "facebook-for-iphone", + "markdown": "\r\n\r\nFacebook har släppt ett mobilgränssnitt av sin site\r\nspeciellt för Apple Iphone som tydligt visar hur mycket mer avancerad\r\näppellurens webbläsare är jämfört med motsvarigheterna i Symbian och Windows\r\nMobile.\r\n\r\nIphonevarianten finns på iphone.facebook.com.\r\n\r\n(Fungerar fint att testa i Firefox om du inte har en Iphone,\r\nser dock inget vidare ut i IE.)\r\n\r\nVi som inte har en Iphone får hålla till godo med m.facebook.com för vårt mobila Facebookande.\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/facebook-logo.jpg)\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n", + "html": "


    Facebook har släppt ett mobilgränssnitt av sin site
    speciellt för Apple Iphone som tydligt visar hur mycket mer avancerad
    äppellurens webbläsare är jämfört med motsvarigheterna i Symbian och Windows
    Mobile.


    Iphonevarianten finns på iphone.facebook.com.


    (Fungerar fint att testa i Firefox om du inte har en Iphone,
    ser dock inget vidare ut i IE.)


    Vi som inte har en Iphone får hålla till godo med m.facebook.com för vårt mobila Facebookande.













    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1085, + "created_at": 1189533600000, + "created_by": 1085, + "updated_at": 1189533600000, + "updated_by": 1085, + "published_at": 1189533600000, + "published_by": 1085 + }, + { + "id": 100, + "title": "5 skäl till att Google Analytics är världsbäst på webbstatistik", + "slug": "5-skal-till-att-google-analytics-ar-varldsbast-pa-webbstatistik", + "markdown": "\r\n\r\n\r\nFör att börja använda Google Analytics på din webbplats så registrerar du ett konto på Google och loggar in på analytics.google.com. Har du redan ett GMail-konto kan du använda det. När du har registrerat din site får du en kort javascript-kodsnutt som du ska klistra in i din webbsida. Inga installationer, inga komponenter på servern, inga loggfiler etc.\r\n\r\n\r\nAndra statistikverktyg har ofta mängder av obegripliga rapporter. Google Analytics har en mängd enkla rapporter som man kan använda direkt, men man kan också gå på djupet och skapa egna rapporter. En av de bästa funktionerna är att man kan sätt upp mål som verktyget sedan följer upp. Ett mål kan bestå i t.ex. hur många besökare som tar sig igenom sidorna i en köpprocess eller hur många som går från startsidan till att prenumerera på ett nyhetsbrev.\r\n\r\n\r\nMina två favoritfunktioner i Google Analytics är Map Overlay och Site Overlay. Map Overlay visar ner på stadsnivå varifrån dina besökare kommer i världen. Site Overlay visar din site och lägger ovanpå ett lager med diagram över vilka länkar besökarna klickar mest på.\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/mapoverlay.png)\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/siteoverlay.png)\r\n\r\n\r\nPrecis som alla Googles andra webbtjänster är Analytics byggd med Webb 2.0-teknik. Ajaxfunktioner gör att uppslagningar, ändringar av intervall, byta diagramtyp o.s.v. görs utan sidomladdningar och väldigt smidigt för användaren.\r\n\r\n\r\n\r\n\r\nEn tjänst blir inte bra bara för att den är gratis, ibland tvärt om. Men en tjänst som är riktigt bra blir ännu bättre när den inte kostar något.\r\n\r\n", + "html": "


    För att börja använda Google Analytics på din webbplats så registrerar du ett konto på Google och loggar in på analytics.google.com. Har du redan ett GMail-konto kan du använda det. När du har registrerat din site får du en kort javascript-kodsnutt som du ska klistra in i din webbsida. Inga installationer, inga komponenter på servern, inga loggfiler etc.




    Andra statistikverktyg har ofta mängder av obegripliga rapporter. Google Analytics har en mängd enkla rapporter som man kan använda direkt, men man kan också gå på djupet och skapa egna rapporter. En av de bästa funktionerna är att man kan sätt upp mål som verktyget sedan följer upp. Ett mål kan bestå i t.ex. hur många besökare som tar sig igenom sidorna i en köpprocess eller hur många som går från startsidan till att prenumerera på ett nyhetsbrev.



    Mina två favoritfunktioner i Google Analytics är Map Overlay och Site Overlay. Map Overlay visar ner på stadsnivå varifrån dina besökare kommer i världen. Site Overlay visar din site och lägger ovanpå ett lager med diagram över vilka länkar besökarna klickar mest på.











    Precis som alla Googles andra webbtjänster är Analytics byggd med Webb 2.0-teknik. Ajaxfunktioner gör att uppslagningar, ändringar av intervall, byta diagramtyp o.s.v. görs utan sidomladdningar och väldigt smidigt för användaren.





    En tjänst blir inte bra bara för att den är gratis, ibland tvärt om. Men en tjänst som är riktigt bra blir ännu bättre när den inte kostar något.


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1189598280000, + "created_by": 6, + "updated_at": 1189598280000, + "updated_by": 6, + "published_at": 1189598280000, + "published_by": 6 + }, + { + "id": 107, + "title": "Officiellt besked: Ingen 3G i Europa-iPhone", + "slug": "officiellt-besked-ingen-3g-i-europa-iphone", + "markdown": "\r\n\r\nApple höll imorse presskonferens i\r\nLondon angående UK-lanseringen av iPhone, och tyvärr blev det officiellt att\r\ntelefonen inte heller på den europeiska marknaden kommer att förses med\r\n3G-kretsar.\r\n\r\nAnledningen till detta är enligt\r\nSteve Jobs att dagens 3G-kretsar helt enkelt drar för mycket batteri, något som\r\nde inte var beredda att offra. Apple kommer istället att satsa på samma\r\nGPRS/Edge teknik som man använder i USA, i kombination med WiFi. I de brittiska\r\nabonnemangen, som erbjuds exklusivt via operatören O2, ingår såväl fri GPRS/EDGE-data\r\nsamt tillgång till WiFi via 7 000 hotspots i landet. Grundpriset på iPhone i\r\nStorbritannien antyds ligga på c:a £269 (motsvarande c:a 3 700 kr).\r\n\r\nSteve Jobs uteslöt dock inte\r\n3G-stöd i kommande versioner av iPhone, förutsatt att nya energisnålare\r\nkretsar utvecklas.\r\n\r\nBild:\r\n\r\n\r\nhttp://www.riskinit.com/images/misc/thumbs/iphone377.jpg\r\n\r\n\r\nEngadgets reportage från\r\npresskonferensen:\r\n\r\n\r\nhttp://www.engadget.com/2007/09/18/live-from-apples-mum-is-no-longer-the-word-event-in-london/\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/iphone-no3g.png)", + "html": "


    Apple höll imorse presskonferens i
    London angående UK-lanseringen av iPhone, och tyvärr blev det officiellt att
    telefonen inte heller på den europeiska marknaden kommer att förses med
    3G-kretsar.


    Anledningen till detta är enligt
    Steve Jobs att dagens 3G-kretsar helt enkelt drar för mycket batteri, något som
    de inte var beredda att offra. Apple kommer istället att satsa på samma
    GPRS/Edge teknik som man använder i USA, i kombination med WiFi. I de brittiska
    abonnemangen, som erbjuds exklusivt via operatören O2, ingår såväl fri GPRS/EDGE-data
    samt tillgång till WiFi via 7 000 hotspots i landet. Grundpriset på iPhone i
    Storbritannien antyds ligga på c:a £269 (motsvarande c:a 3 700 kr).


    Steve Jobs uteslöt dock inte
    3G-stöd i kommande versioner av iPhone, förutsatt att nya energisnålare
    kretsar utvecklas.


    Bild:



    http://www.riskinit.com/images/misc/thumbs/iphone377.jpg


    Engadgets reportage från
    presskonferensen:



    http://www.engadget.com/2007/09/18/live-from-apples-mum-is-no-longer-the-word-event-in-london/


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1085, + "created_at": 1190117100000, + "created_by": 1085, + "updated_at": 1190117100000, + "updated_by": 1085, + "published_at": 1190117100000, + "published_by": 1085 + }, + { + "id": 108, + "title": "Veckans fråga: Resultat!", + "slug": "veckans-fraga-resultat", + "markdown": "\r\n\r\n\r\nPå TV - varför ändra ett vinnande lag?: 14\r\nItunes eller annan laglig nedladdningstjänst: 3\r\nAnnat: 35\r\nAntal som svarat: 44\r\n\r\n\r\n\r\n(Detta var en flervalsfråga där man kunde välja flera alternativ, därför blir inte summan av antalet svarande samma som summan av svaren).\r\n\r\n\r\n\r\nIngen överraskning direkt... Att Itunes och andra lagliga nedladdningstjänster kommer så lågt beror antagligen på att det inte finns några tjänster riktade till svenska marknaden. För att få köpa TV-serier på Itunes måste man t.ex. ha ett amerikanskt kreditkort. Nu har dessutom NBC dragit tillbaka sina serier från Itunes, så de går inte att köpa alls.\r\n\r\n\r\nNär kommer vettiga lagliga alternativ?\r\n\r\n", + "html": "



    • På TV - varför ändra ett vinnande lag?: 14

    • Itunes eller annan laglig nedladdningstjänst: 3

    • Annat: 35

    • Antal som svarat: 44



    (Detta var en flervalsfråga där man kunde välja flera alternativ, därför blir inte summan av antalet svarande samma som summan av svaren).


    Ingen överraskning direkt... Att Itunes och andra lagliga nedladdningstjänster kommer så lågt beror antagligen på att det inte finns några tjänster riktade till svenska marknaden. För att få köpa TV-serier på Itunes måste man t.ex. ha ett amerikanskt kreditkort. Nu har dessutom NBC dragit tillbaka sina serier från Itunes, så de går inte att köpa alls.


    När kommer vettiga lagliga alternativ?


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1190124000000, + "created_by": 6, + "updated_at": 1190124000000, + "updated_by": 6, + "published_at": 1190124000000, + "published_by": 6 + }, + { + "id": 113, + "title": "Bevaka Blocket med RSS", + "slug": "bevaka-blocket-med-rss", + "markdown": "\r\n\r\nAtt Sveriges största annonsmarknad, Blocket, saknar RSS-bevakningar\r\när något som jag stört mig på länge. Som tur är verkar några utvecklare ha\r\nstört sig på samma sak och tagit saken i egna händer. Resultatet är en mycket\r\nväl fungerande RSS-bevakarare som man själv kan skräddarsy: den ännu ganska\r\nsparsmakade somrss.se. Dock kan man ännu inte kombinera fler sökningar i samma\r\nRSS, men det är ett mindre problem om man har en bra RSS-läsare.\r\n\r\nBlocket: Inse att detta är kanon och köp upp funktionen!\r\n\r\n\r\nhttp://somrss.se/\r\n\r\n\r\n\r\n\r\n\r\n\r\nTyvärr verkar Blocket ha spärrat möjligheten att skapa dessa RSS-länkar via somrss.se. Dock har bloggbesökaren Jonas knåpat en egen RSS-generator för blocket med hjälp av Yahoo Pipes, vilket vi tackar och bockar för!http://pipes.yahoo.com/jonas/blocket\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/rss-3d.png)\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/blocketrss.png)", + "html": "


    Att Sveriges största annonsmarknad, Blocket, saknar RSS-bevakningar
    är något som jag stört mig på länge. Som tur är verkar några utvecklare ha
    stört sig på samma sak och tagit saken i egna händer. Resultatet är en mycket
    väl fungerande RSS-bevakarare som man själv kan skräddarsy: den ännu ganska
    sparsmakade somrss.se. Dock kan man ännu inte kombinera fler sökningar i samma
    RSS, men det är ett mindre problem om man har en bra RSS-läsare.


    Blocket: Inse att detta är kanon och köp upp funktionen!



    http://somrss.se/




    Tyvärr verkar Blocket ha spärrat möjligheten att skapa dessa RSS-länkar via somrss.se. Dock har bloggbesökaren Jonas knåpat en egen RSS-generator för blocket med hjälp av Yahoo Pipes, vilket vi tackar och bockar för!

    http://pipes.yahoo.com/jonas/blocket






    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "ng!", + "author_id": 1085, + "created_at": 1190376000000, + "created_by": 1085, + "updated_at": 1190376000000, + "updated_by": 1085, + "published_at": 1190376000000, + "published_by": 1085 + }, + { + "id": 119, + "title": "Resultat: Veckans fråga!", + "slug": "resultat-veckans-fraga", + "markdown": "\r\n\r\n\r\nTid över för att labba på Microsoft Silverlight: 11\r\nWindows Server 2008: 4\r\nAtt Dexter ska börja på svensk TV: 4\r\nAntal som svarat: 19\r\n\r\n\r\nUppenbarligen fler än jag som tycker att Silverlight känns hetast just nu! Jag hoppas dock att ni redan har sett eller kommer att se Dexter, som är årets bästa TV-serier ihop med Heroes.\r\n\r\n", + "html": "



    • Tid över för att labba på Microsoft Silverlight: 11

    • Windows Server 2008: 4

    • Att Dexter ska börja på svensk TV: 4

    • Antal som svarat: 19


    Uppenbarligen fler än jag som tycker att Silverlight känns hetast just nu! Jag hoppas dock att ni redan har sett eller kommer att se Dexter, som är årets bästa TV-serier ihop med Heroes.


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1191254400000, + "created_by": 6, + "updated_at": 1191254400000, + "updated_by": 6, + "published_at": 1191254400000, + "published_by": 6 + }, + { + "id": 121, + "title": "Svensk site för laglig DVD-nedladdning närmar sig lansering", + "slug": "svensk-site-for-laglig-dvd-nedladdning-narmar-sig-lansering", + "markdown": "\r\n\r\n\r\n\r\n\r\n\r\nStockholmsbaserade företaget Headweb ligger i startgroparna\r\nför att lansera sin webbtjänst som skall förse oss konsumenter med en möjlighet att\r\nlagligt köpa och ladda ner DVD-filmer utan DRM (Digital Rights Management - digitalt kopieringsskydd).\r\n\r\nHeadwebs teknik skiljer sig en hel del mot tidigare\r\nsatsningar inom området, framförallt genom att inte begränsa användarens\r\nmöjlighet att spela upp filmen med krångliga DRM-lösningar. För att begränsa\r\nolaglig spridning kommer istället varje kunds kopia av filmen att göras unik\r\nmed hjälp av digital vattenmärkning. Väl köpta och nedladdade kan man antingen\r\nse filmerna direkt i datorn eller bränna dem till DVD och se på dem i sin\r\nhemmabioanläggning.\r\n\r\nDen mest intressanta delen av tjänsten är dock\r\ndistributionen, som baserats helt på Bit Torrent-teknik. Här har man vänt\r\nfildelningstekniken till sin fördel och uppmuntrar kunderna att göra sina köpta\r\nfiler tillgängliga för andra kunder genom ett bonussystem. Headwebs\r\ntrackermjukvara håller koll på hur mycket data du delat med dig av och\r\növersätter datamängden till poäng som du kan använda för att köpa filmer. Smart\r\nom det fungerar!\r\n\r\nDet stora problemet jag ser inför release är som vanligt\r\nutbudet. Headweb säger enligt IDG att c:a 500 titlar\r\nskall finnas tillgängliga vid release, men att det mest rör sig om svensk och\r\neuropeisk film. De stora amerikanska bolagen verkar vilja se att allt fungerar\r\ninnan de ger sig in i leken.\r\n\r\nSpännande angreppsätt på ett krångligt problem, vi följer\r\nmed spänning och ser om det blir Headweb som först lyckas få\r\ninternetgenerationen att öppna plånboken för att köpa digital film.\r\n\r\n\r\n\r\nLäs mer här: www.headweb.com\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/hw_logo2.png)", + "html": "




    Stockholmsbaserade företaget Headweb ligger i startgroparna
    för att lansera sin webbtjänst som skall förse oss konsumenter med en möjlighet att
    lagligt köpa och ladda ner DVD-filmer utan DRM (Digital Rights Management - digitalt kopieringsskydd).


    Headwebs teknik skiljer sig en hel del mot tidigare
    satsningar inom området, framförallt genom att inte begränsa användarens
    möjlighet att spela upp filmen med krångliga DRM-lösningar. För att begränsa
    olaglig spridning kommer istället varje kunds kopia av filmen att göras unik
    med hjälp av digital vattenmärkning. Väl köpta och nedladdade kan man antingen
    se filmerna direkt i datorn eller bränna dem till DVD och se på dem i sin
    hemmabioanläggning.


    Den mest intressanta delen av tjänsten är dock
    distributionen, som baserats helt på Bit Torrent-teknik. Här har man vänt
    fildelningstekniken till sin fördel och uppmuntrar kunderna att göra sina köpta
    filer tillgängliga för andra kunder genom ett bonussystem. Headwebs
    trackermjukvara håller koll på hur mycket data du delat med dig av och
    översätter datamängden till poäng som du kan använda för att köpa filmer. Smart
    om det fungerar!


    Det stora problemet jag ser inför release är som vanligt
    utbudet. Headweb säger enligt IDG att c:a 500 titlar
    skall finnas tillgängliga vid release, men att det mest rör sig om svensk och
    europeisk film. De stora amerikanska bolagen verkar vilja se att allt fungerar
    innan de ger sig in i leken.


    Spännande angreppsätt på ett krångligt problem, vi följer
    med spänning och ser om det blir Headweb som först lyckas få
    internetgenerationen att öppna plånboken för att köpa digital film.



    Läs mer här: www.headweb.com


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1085, + "created_at": 1191334800000, + "created_by": 1085, + "updated_at": 1191334800000, + "updated_by": 1085, + "published_at": 1191334800000, + "published_by": 1085 + }, + { + "id": 122, + "title": "HTC släpper nya telefoner", + "slug": "htc-slapper-nya-telefoner", + "markdown": "\r\n\r\n\r\n\r\n\r\n\r\nDet är få företag som vi hyser sådan hatkärlek till som\r\nTawanesiska HTC. Historiskt har de släppt de absolut snyggaste windowsmobilerna\r\nmen samtidigt dragits med högst tvivelaktig kvalitet på bygge och batteri. Nu\r\när det dags för nya lurar, vi hoppas att de lärt av misstagen!\r\n\r\n\r\n\r\n\r\n\r\n\r\nHTC S730\r\n\r\n\r\n\r\n\r\n\r\n\r\nDet här är 3G-uppföljaren till S710; en superslim candybartelefon med utfällbart QWERTY-tangentbord, HSDPA och WiFi. Telefonen vi väntat på!\r\n\r\n\r\n\r\n \r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/s730_2.png)\r\n\r\n\r\n\r\n\r\nHTC Touch Dual\r\n\r\n\r\n\r\n\r\n\r\nUppföljare till HTCs Iphone- liknande telefon (HTC Touch), nu med utfällbar knappsats. Även denna lur är utrustad med 3G och HSDPA, dock ej WiFi. HTC har för sin Touchserie utvecklat ett gränssnitt som de kallar för TouchFLO™, kolla in det \r\n\r\nhär\r\n\r\n\r\n.\r\n\r\n\r\n\r\n\r\n\r\n \r\n\r\n \r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/touchduo.png)\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nHTC P6500\r\n\r\n\r\n\r\n\r\n\r\n\r\nNy telefon i segmentet PDA-telefon. Det handlar såklart om en stor telefon med stor (3.5”) tryckkänslig skärm, HSDPSA och WiFi. Vill folk verkligen ha dessa bjässar fortfarande?\r\n\r\n\r\n\r\n\r\n \r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/p6500.png)\r\n\r\n\r\n\r\n\r\nHTC Shift\r\n\r\n\r\n\r\n\r\n\r\n\r\nAtt kalla detta för en telefon är en ganska stor underdrift, det rör sig istället om en ultraportabel Windows Vista PC utrustad med 3G, HSDPA och WiFi. Skall bli intressant att se den i verkligheten!\r\n\r\n\r\n\r\n\r\n\r\n \r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/shift.png)\r\n\r\n\r\n\r\nJag lovar att rapportera mer så fort vi fått sätta tänderna i dessa telefoner!\r\n\r\n\r\n\r\n", + "html": "




    Det är få företag som vi hyser sådan hatkärlek till som
    Tawanesiska HTC. Historiskt har de släppt de absolut snyggaste windowsmobilerna
    men samtidigt dragits med högst tvivelaktig kvalitet på bygge och batteri. Nu
    är det dags för nya lurar, vi hoppas att de lärt av misstagen!








    HTC S730





    Det här är 3G-uppföljaren till S710; en superslim candybartelefon med utfällbart QWERTY-tangentbord, HSDPA och WiFi. Telefonen vi väntat på!


     








    HTC Touch Dual




    Uppföljare till HTCs Iphone- liknande telefon (HTC Touch), nu med utfällbar knappsats. Även denna lur är utrustad med 3G och HSDPA, dock ej WiFi. HTC har för sin Touchserie utvecklat ett gränssnitt som de kallar för TouchFLO™, kolla in det

    här


    .




     


     














    HTC P6500





    Ny telefon i segmentet PDA-telefon. Det handlar såklart om en stor telefon med stor (3.5”) tryckkänslig skärm, HSDPSA och WiFi. Vill folk verkligen ha dessa bjässar fortfarande?




     








    HTC Shift





    Att kalla detta för en telefon är en ganska stor underdrift, det rör sig istället om en ultraportabel Windows Vista PC utrustad med 3G, HSDPA och WiFi. Skall bli intressant att se den i verkligheten!




     







    Jag lovar att rapportera mer så fort vi fått sätta tänderna i dessa telefoner!


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "HTC släpper nya telefoner", + "meta_description": "", + "author_id": 1085, + "created_at": 1191517380000, + "created_by": 1085, + "updated_at": 1191517380000, + "updated_by": 1085, + "published_at": 1191517380000, + "published_by": 1085 + }, + { + "id": 125, + "title": "Paint.NET - ett riktigt bra gratisprogram för bildbehandling", + "slug": "paintnet---ett-riktigt-bra-gratisprogram-for-bildbehandling", + "markdown": "\r\n\r\n\r\nPaint.NET är ett gratis bildbehandlingsprogram som klarar mycket av det du normalt behöver, t.ex. för att hantera alla bilder du ska publicera på din blogg eller använda i PowerPoint. Projektet startade som ett universitetsprojekt handlett av Microsoft, med planen att ersätta gamla MS Paint. Efter ursprungsprojektets slut har flera av de elever som deltog arbetat vidare, och idag är Paint.NET ett riktigt bra bildbehandlingsprogram för enklare uppgifter.\r\n\r\n\r\n\r\nFördelar\r\n\r\n\r\n\r\nLöser de vanligaste bildbehandlingsuppgifterna\r\nGratis\r\nLätt att ladda ner och installera\r\nLätt att utveckla plugins - vilket gör att det finns massor av gratis tredjepartsplugins för nya effekter, läsa nya filformat etc.\r\n\r\n\r\nNackdelar\r\n\r\n\r\n\r\nLäser inte Photoshop-filer (det finns plugins för det, men de klarar inte alla PS-filer)\r\nDålig prestanda när man hanterar stora filer.\r\n\r\n\r\n\r\n\r\nSammanfattning\r\n\r\n\r\n\r\nPaint.NET är ett riktigt bra komplement till Photoshop i en organisation där man arbetar mycket med enklare bildbehandling. Den dag Paint.NET klarar att öppna alla Photoshopfiler kommer kanske behovet av Photoshop att försvinna helt för den som inte arbetar som formgivare.\r\n\r\n\r\nLadda ner här: www.getpaint.net\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/logo3.png)\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/paintnet.png)", + "html": "


    Paint.NET är ett gratis bildbehandlingsprogram som klarar mycket av det du normalt behöver, t.ex. för att hantera alla bilder du ska publicera på din blogg eller använda i PowerPoint. Projektet startade som ett universitetsprojekt handlett av Microsoft, med planen att ersätta gamla MS Paint. Efter ursprungsprojektets slut har flera av de elever som deltog arbetat vidare, och idag är Paint.NET ett riktigt bra bildbehandlingsprogram för enklare uppgifter.



    Fördelar



    • Löser de vanligaste bildbehandlingsuppgifterna

    • Gratis

    • Lätt att ladda ner och installera

    • Lätt att utveckla plugins - vilket gör att det finns massor av gratis tredjepartsplugins för nya effekter, läsa nya filformat etc.



    Nackdelar



    • Läser inte Photoshop-filer (det finns plugins för det, men de klarar inte alla PS-filer)

    • Dålig prestanda när man hanterar stora filer.




    Sammanfattning


    Paint.NET är ett riktigt bra komplement till Photoshop i en organisation där man arbetar mycket med enklare bildbehandling. Den dag Paint.NET klarar att öppna alla Photoshopfiler kommer kanske behovet av Photoshop att försvinna helt för den som inte arbetar som formgivare.


    Ladda ner här: www.getpaint.net





    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1192549020000, + "created_by": 6, + "updated_at": 1192549020000, + "updated_by": 6, + "published_at": 1192549020000, + "published_by": 6 + }, + { + "id": 126, + "title": "Digg Labs som skärmsläckare", + "slug": "digg-labs-som-skarmslackare", + "markdown": "\r\n\r\n\r\nAllas vår favoritnyhetskälla, Digg, har utvecklat en hel del roliga applikationer för att i realtid visualisera användarnas aktivitet på deras webbplats. Hittills har fyra program utvecklats som presenterar nyhetsflödet och diggandet på olika sätt: Swarm, Stack, Big Spy samt senaste tillskottet Arc.\r\n\r\n\r\nNu finns alltså samtliga att ladda ner som skärmsläckare för Windows. Jag har redan installerat!\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/digglogo.png)\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/diggarcsc.png)\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/diggswarmsc.png)\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/diggspyc.png)\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/diggstacksc.png)", + "html": "


    Allas vår favoritnyhetskälla, Digg, har utvecklat en hel del roliga applikationer för att i realtid visualisera användarnas aktivitet på deras webbplats. Hittills har fyra program utvecklats som presenterar nyhetsflödet och diggandet på olika sätt: Swarm, Stack, Big Spy samt senaste tillskottet Arc.


    Nu finns alltså samtliga att ladda ner som skärmsläckare för Windows. Jag har redan installerat!














    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Digg Labs som skärmsläckare", + "meta_description": "ndows.", + "author_id": 1085, + "created_at": 1192572720000, + "created_by": 1085, + "updated_at": 1192572720000, + "updated_by": 1085, + "published_at": 1192572720000, + "published_by": 1085 + }, + { + "id": 127, + "title": "Apple släpper SDK till iPhone i vinter", + "slug": "apple-slapper-sdk-till-iphone-i-vinter", + "markdown": "\r\n\r\n\r\nEn av de hetaste potatisarna på Internet de senaste månaderna har varit Apples val att inte tillåta tredjepartsprogram i iPhone och iPod Touch. Detta faktum har fått många att protestera och olika kodgrupper har tävlat om vem som snabbast kan hacka Apples mjukvara.\r\n\r\n\r\nIdag bekräftade dock Steve Jobs, via Apples hemsida, att Apple inte alls har något emot tredjepartskod samt att ett SDK (för både iPhone och iPod Touch) kommer att släppas senast i februari. Anledningen till att det dröjt är enligt Steve att de velat hantera säkerhetsproblemen som tredjepartskod kan medföra. Det kommer alltså förmodligen inte röra sig om en total upplåsning av mjukvaran, men förhoppningsvis tillräckligt mycket för att ge utvecklare ordentligt med spelrum.\r\n\r\n\r\nFörhoppningsvis innebär detta många trevliga och lagliga applikationer i våra framtida äppellurar!\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/iphone.png)\r\n\r\n\r\n\r\n\r\nThird Party Applications on the iPhoneLet me just say it: We want native third party applications on the iPhone, and we plan to have an SDK in developers’ hands in February. We are excited about creating a vibrant third party developer community around the iPhone and enabling hundreds of new applications for our users. With our revolutionary multi-touch interface, powerful hardware and advanced software architecture, we believe we have created the best mobile platform ever for developers.\r\n\r\n\r\nIt will take until February to release an SDK because we’re trying to do two diametrically opposed things at once—provide an advanced and open platform to developers while at the same time protect iPhone users from viruses, malware, privacy attacks, etc. This is no easy task. Some claim that viruses and malware are not a problem on mobile phones—this is simply not true. There have been serious viruses on other mobile phones already, including some that silently spread from phone to phone over the cell network. As our phones become more powerful, these malicious programs will become more dangerous. And since the iPhone is the most advanced phone ever, it will be a highly visible target.\r\n\r\n\r\nSome companies are already taking action. Nokia, for example, is not allowing any applications to be loaded onto some of their newest phones unless they have a digital signature that can be traced back to a known developer. While this makes such a phone less than “totally open,” we believe it is a step in the right direction. We are working on an advanced system which will offer developers broad access to natively program the iPhone’s amazing software platform while at the same time protecting users from malicious programs.\r\n\r\n\r\nWe think a few months of patience now will be rewarded by many years of great third party applications running on safe and reliable iPhones.\r\n\r\n\r\nSteve\r\n\r\n\r\nP.S.: The SDK will also allow developers to create applications for iPod touch. [Oct 17, 2007]\r\n\r\n\r\nKälla: http://www.apple.com/hotnews", + "html": "


    En av de hetaste potatisarna på Internet de senaste månaderna har varit Apples val att inte tillåta tredjepartsprogram i iPhone och iPod Touch. Detta faktum har fått många att protestera och olika kodgrupper har tävlat om vem som snabbast kan hacka Apples mjukvara.


    Idag bekräftade dock Steve Jobs, via Apples hemsida, att Apple inte alls har något emot tredjepartskod samt att ett SDK (för både iPhone och iPod Touch) kommer att släppas senast i februari. Anledningen till att det dröjt är enligt Steve att de velat hantera säkerhetsproblemen som tredjepartskod kan medföra. Det kommer alltså förmodligen inte röra sig om en total upplåsning av mjukvaran, men förhoppningsvis tillräckligt mycket för att ge utvecklare ordentligt med spelrum.


    Förhoppningsvis innebär detta många trevliga och lagliga applikationer i våra framtida äppellurar!







    Third Party Applications on the iPhone
    Let me just say it: We want native third party applications on the iPhone, and we plan to have an SDK in developers’ hands in February. We are excited about creating a vibrant third party developer community around the iPhone and enabling hundreds of new applications for our users. With our revolutionary multi-touch interface, powerful hardware and advanced software architecture, we believe we have created the best mobile platform ever for developers.


    It will take until February to release an SDK because we’re trying to do two diametrically opposed things at once—provide an advanced and open platform to developers while at the same time protect iPhone users from viruses, malware, privacy attacks, etc. This is no easy task. Some claim that viruses and malware are not a problem on mobile phones—this is simply not true. There have been serious viruses on other mobile phones already, including some that silently spread from phone to phone over the cell network. As our phones become more powerful, these malicious programs will become more dangerous. And since the iPhone is the most advanced phone ever, it will be a highly visible target.


    Some companies are already taking action. Nokia, for example, is not allowing any applications to be loaded onto some of their newest phones unless they have a digital signature that can be traced back to a known developer. While this makes such a phone less than “totally open,” we believe it is a step in the right direction. We are working on an advanced system which will offer developers broad access to natively program the iPhone’s amazing software platform while at the same time protecting users from malicious programs.


    We think a few months of patience now will be rewarded by many years of great third party applications running on safe and reliable iPhones.


    Steve


    P.S.: The SDK will also allow developers to create applications for iPod touch. [Oct 17, 2007]



    Källa: http://www.apple.com/hotnews", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Apple släpper SDK till iPhone i vinter", + "meta_description": "läppas senast i februari och att säkerhetsproblem med tredjepartskod är anledningen till att det dröjt.", + "author_id": 1085, + "created_at": 1192660560000, + "created_by": 1085, + "updated_at": 1192660560000, + "updated_by": 1085, + "published_at": 1192660560000, + "published_by": 1085 + }, + { + "id": 132, + "title": "Webbaserad version av TPTEST", + "slug": "webbaserad-version-av-tptest", + "markdown": "\r\n\r\n\r\nKonsumentverket, Post- och Telestyrelsen och domännamnsregistret .SE har tidigare skapat det utmärkta programmet TPTEST för att göra tester av hastighet i nätet. Man måste dock ladda ner TPTEST och installera på sin dator, och det innehåller ganska många krångliga val. \r\n\r\n\r\nNu tipsar Tommy k Johansson på sin blogg om att det har kommit en helt ny version som är helt webbaserad. Bredbandskollen.se innehåller inga krånliga installationer - bara att trycka på testknappen.\r\n\r\n\r\nDet samlas redan nu in statistik från varje test, men den är inte offentlig och kan bara användas för att benchmarka sina egna körningar mot varandra. Det självklara nästa steget tycker jag är att publicera statistisk över körningar från olika internetleverantörer, kanske ordnat per område. Det är nog fler än jag som tänker att allt inte alltid står rätt till med ens uppkoppling, och det skulle ju vara ett utmärkt verktyg för att få internetleverantörerna att höja sin kvalitet.\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/bredbandskollen.png)", + "html": "


    Konsumentverket, Post- och Telestyrelsen och domännamnsregistret .SE har tidigare skapat det utmärkta programmet TPTEST för att göra tester av hastighet i nätet. Man måste dock ladda ner TPTEST och installera på sin dator, och det innehåller ganska många krångliga val.


    Nu tipsar Tommy k Johansson på sin blogg om att det har kommit en helt ny version som är helt webbaserad. Bredbandskollen.se innehåller inga krånliga installationer - bara att trycka på testknappen.


    Det samlas redan nu in statistik från varje test, men den är inte offentlig och kan bara användas för att benchmarka sina egna körningar mot varandra. Det självklara nästa steget tycker jag är att publicera statistisk över körningar från olika internetleverantörer, kanske ordnat per område. Det är nog fler än jag som tänker att allt inte alltid står rätt till med ens uppkoppling, och det skulle ju vara ett utmärkt verktyg för att få internetleverantörerna att höja sin kvalitet.


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1193228220000, + "created_by": 6, + "updated_at": 1193228220000, + "updated_by": 6, + "published_at": 1193228220000, + "published_by": 6 + }, + { + "id": 136, + "title": "Mer frihet för användare och applikationer i communities", + "slug": "mer-frihet-for-anvandare-och-applikationer-i-communities", + "markdown": "\r\n\r\n\r\nGoogle släppte igår specifikationen på en ny öppen standard för integration av applikationer i sociala medier (communities) kallad OpenSocial. Fördelen med att ha en öppen standard för detta är många: \r\n\r\n\r\nApplikationstillverkarna kan utveckla applikationer som kan köras i många communities samtidigt.\r\nUtvecklarna av communities behöver bara stödja ett format för att få många applikationer från dag ett.\r\nAnvändarna kan välja fritt mellan olika communities och ändå ha kvar sin historik och känna igen sig i applikationerna.\r\n\r\n\r\nEn av de stora framgångarna för t.ex. FaceBook är ju att de tillåter externa utvecklare att utveckla nya applikationer som tillför mervärde för både användarna, applikationsutvecklarna men framför allt FaceBook.\r\n\r\n\r\nStödet är redan stort på nätet och det intressanta att följa är om Facebook kommer att anamma denna standard – min gissning är att de kommer hålla kvar så länge de kan i sin egen standard då det är deras största konkurrensfördel och för att OpenSocial tillåter mer anpassningar än Facebooks API. Dessutom kan man se detta som en framryckning av Google som inte kommer låta Facebook fortsätta ta så stor andel av denna intressanta marknad. Google har ju ett eget nätverk som heter Orkut som självklart redan stöder denna standard.\r\n\r\n\r\nTekniskt sett är API:t helt byggt i Javascript/AJAX och vill man se ett enkelt kodexempel kan man titta här:http://code.google.com/apis/opensocial/articles/firstgadget.html (Hello World)\r\n\r\n\r\nLäs mer om OpenSocial här:http://code.google.com/apis/opensocial/\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/opensocial.png)", + "html": "


    Google släppte igår specifikationen på en ny öppen standard för integration av applikationer i sociala medier (communities) kallad OpenSocial. Fördelen med att ha en öppen standard för detta är många:



    1. Applikationstillverkarna kan utveckla applikationer som kan köras i många communities samtidigt.

    2. Utvecklarna av communities behöver bara stödja ett format för att få många applikationer från dag ett.

    3. Användarna kan välja fritt mellan olika communities och ändå ha kvar sin historik och känna igen sig i applikationerna.


    En av de stora framgångarna för t.ex. FaceBook är ju att de tillåter externa utvecklare att utveckla nya applikationer som tillför mervärde för både användarna, applikationsutvecklarna men framför allt FaceBook.


    Stödet är redan stort på nätet och det intressanta att följa är om Facebook kommer att anamma denna standard – min gissning är att de kommer hålla kvar så länge de kan i sin egen standard då det är deras största konkurrensfördel och för att OpenSocial tillåter mer anpassningar än Facebooks API. Dessutom kan man se detta som en framryckning av Google som inte kommer låta Facebook fortsätta ta så stor andel av denna intressanta marknad. Google har ju ett eget nätverk som heter Orkut som självklart redan stöder denna standard.


    Tekniskt sett är API:t helt byggt i Javascript/AJAX och vill man se ett enkelt kodexempel kan man titta här:
    http://code.google.com/apis/opensocial/articles/firstgadget.html (Hello World)


    Läs mer om OpenSocial här:
    http://code.google.com/apis/opensocial/


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "es.", + "author_id": 1087, + "created_at": 1194003360000, + "created_by": 1087, + "updated_at": 1194003360000, + "updated_by": 1087, + "published_at": 1194003360000, + "published_by": 1087 + }, + { + "id": 137, + "title": "Resultat: Hur står det till med dina backuper?", + "slug": "resultat-hur-star-det-till-med-dina-backuper", + "markdown": "\r\n\r\n\r\nBackuper? En gång brände jag semesterbilder till en CD... tror jag...: 19\r\nPå jobbet görs det backuper regelbundet: 19\r\nHemma görs det backuper regelbundet: 13\r\nAntal som svarat: 36\r\n\r\n\r\nDet var väl inte så oväntat att det finns en bättre beredskap runt om på företag än hemma, men skillnaden är mindre än väntat. Det är förvånansvärt många av er som saknar ordentlig backup på jobbet, medan det är förhållandevis många som gör ordentliga backuper hemma. Den information man har hemma har ju blivit allt mer värdefull - vi är många som har i princip alla våra foton från livet i digital form, inget man vill förlora om hårddisken skulle gå sönder.\r\n\r\n\r\nMed en syster som just har haft inbrott och fått sin laptop stulen vill jag också påminna er som är familjens datorkunniga person att inte glömma nära och kära. Cobian är ett riktigt bra gratis backupprogram som väl täcker hemmabehov med smarta funktioner som inkrementella backuper, backuper till FTP och automatiska mailrapporter. Det är mycket enklare att använda än Windows inbyggda backupprogram.\r\n\r\n\r\nFör professionella backupbehov som kan centraliseras och har större krav på återställningstider, datasäkerhet och hantering av öppna filer, kanske också med applikationer som SQL Server, Exchange och SharePoint rekommenderar vi en professionell lösning, t.ex. Symantec Backup Exec. Fråga oss om du vill veta mer!\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/backup-tape.jpg)", + "html": "



    • Backuper? En gång brände jag semesterbilder till en CD... tror jag...: 19

    • På jobbet görs det backuper regelbundet: 19

    • Hemma görs det backuper regelbundet: 13

    • Antal som svarat: 36


    Det var väl inte så oväntat att det finns en bättre beredskap runt om på företag än hemma, men skillnaden är mindre än väntat. Det är förvånansvärt många av er som saknar ordentlig backup på jobbet, medan det är förhållandevis många som gör ordentliga backuper hemma. Den information man har hemma har ju blivit allt mer värdefull - vi är många som har i princip alla våra foton från livet i digital form, inget man vill förlora om hårddisken skulle gå sönder.


    Med en syster som just har haft inbrott och fått sin laptop stulen vill jag också påminna er som är familjens datorkunniga person att inte glömma nära och kära. Cobian är ett riktigt bra gratis backupprogram som väl täcker hemmabehov med smarta funktioner som inkrementella backuper, backuper till FTP och automatiska mailrapporter. Det är mycket enklare att använda än Windows inbyggda backupprogram.


    För professionella backupbehov som kan centraliseras och har större krav på återställningstider, datasäkerhet och hantering av öppna filer, kanske också med applikationer som SQL Server, Exchange och SharePoint rekommenderar vi en professionell lösning, t.ex. Symantec Backup Exec. Fråga oss om du vill veta mer!


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1194859740000, + "created_by": 6, + "updated_at": 1194859740000, + "updated_by": 6, + "published_at": 1194859740000, + "published_by": 6 + }, + { + "id": 138, + "title": "Här fungerar laglig nedladdning på riktigt", + "slug": "har-fungerar-laglig-nedladdning-pa-riktigt", + "markdown": "\r\n\r\n\r\nIDG rapporterar idag att spelbranschen går mot ett rekordår 2007. Det säljs massor av spelkonsoller, men också massor av spel - och ungefär hälften av de spel som säljs är spel till PC. Detta trot att spelbranschen har alltid har behövt kämpa mot piratkopiering, långt innan format som MP3 alls var uppfunna (eller finns det kanske t.o.m. ett omvänt samband här – kan stor spridning via piratkopiering samtidigt driva försäljningen? Intressant, men en fråga för ett annat blogginlägg).\r\n\r\n\r\nSpelleverantörerna har precis film- och musikleverantörer börjat distribuera sina verk digitalt. Det finns dock en stor skillnad: där musik- och filmtjänsterna känns som en sämre sätt att köpa produkterna. Man får dem visserligen snabbt, men i sämre kvalitet (mp3) och med kopieringsskydd med oöverskådliga följder för hur produkten faktiskt kan användas (kan jag spela mina Itunes-låtar i min mobiltelefon? Hur mycket skadestånd kan jag få betala om min vattenstämplade film av misstag råkar läcka ut på nätet?).\r\n\r\n\r\nSpeltjänsterna erbjuder istället något mer än den traditionella distributionen. Ett exempel är Steam, den största nedladdningstjänsten för spel som distributören Valve står bakom. För någon jul sedan fick jag spelet Half-Life 2 i present, ett helt vanligt spel på DVD-ROM i paket. Jag installerade spelet och fick med Steam på köpet – inte utan viss irritation ska erkännas. Jag registrerade ett Steam-konto och Half-Life 2 registrerades som ett av mina spel (med serienumret). Den stora ahaupplevelsen kom för mig för snart ett år sen när jag köpte ny dator. En av de första grejerna man gör med sin nya dator är förstås att ta fram något bra spel för att häpna över den nya prestandan. Problemet var bara att jag inte kunde hitta Half-Life 2-skivan... Asken stod i hyllan, men innehöll bara en manual. Plötsligt insåg jag att spelet ju var registrerat på Steam. Jag installerade Steam på nya datorn och loggade in med mailadress och lösenord – och vips kunde jag ladda ner hela spelet. Det är i exakt samma version som det på skivan, och visst, det tog nog en arbetsdag ungefär att ladda ner, men det funkar precis som det ska. När det sen kom en fortsättning var det bara att ladda ner den också, med lite rabatt eftersom man köpt föregångaren.\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/steam-logo.jpg)\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/crysis_banner_v5.png)\r\n\r\n\r\nEtt annat exempel är EA Downloader som värdens störa distributör Electronic Arts står bakom. 16 november släpps det omtalade Crysis som ska vrida sista prestandadroppen ur alla idag existerande datorer, men redan nu kan man ladda ner spelet till sin dator. Det är låst och väntar på en aktiveringsnyckel, men du kan börja spela 00:00 på releasedagen (om inte ryktet är sant som säger att det blir release redan imorgon för de som laddat ner).\r\n\r\n\r\nVisst, jag vet att spel och musik inte är exakt samma sorts produkt, och man kan inte jämföra dem rakt av - men jag lovar att det finns mycket musikbranschen skulle kunna lära sig av spelbranschen!\r\n\r\n", + "html": "


    IDG rapporterar idag att spelbranschen går mot ett rekordår 2007. Det säljs massor av spelkonsoller, men också massor av spel - och ungefär hälften av de spel som säljs är spel till PC. Detta trot att spelbranschen har alltid har behövt kämpa mot piratkopiering, långt innan format som MP3 alls var uppfunna (eller finns det kanske t.o.m. ett omvänt samband här – kan stor spridning via piratkopiering samtidigt driva försäljningen? Intressant, men en fråga för ett annat blogginlägg).


    Spelleverantörerna har precis film- och musikleverantörer börjat distribuera sina verk digitalt. Det finns dock en stor skillnad: där musik- och filmtjänsterna känns som en sämre sätt att köpa produkterna. Man får dem visserligen snabbt, men i sämre kvalitet (mp3) och med kopieringsskydd med oöverskådliga följder för hur produkten faktiskt kan användas (kan jag spela mina Itunes-låtar i min mobiltelefon? Hur mycket skadestånd kan jag få betala om min vattenstämplade film av misstag råkar läcka ut på nätet?).


    Speltjänsterna erbjuder istället något mer än den traditionella distributionen. Ett exempel är Steam, den största nedladdningstjänsten för spel som distributören Valve står bakom. För någon jul sedan fick jag spelet Half-Life 2 i present, ett helt vanligt spel på DVD-ROM i paket. Jag installerade spelet och fick med Steam på köpet – inte utan viss irritation ska erkännas. Jag registrerade ett Steam-konto och Half-Life 2 registrerades som ett av mina spel (med serienumret). Den stora ahaupplevelsen kom för mig för snart ett år sen när jag köpte ny dator. En av de första grejerna man gör med sin nya dator är förstås att ta fram något bra spel för att häpna över den nya prestandan. Problemet var bara att jag inte kunde hitta Half-Life 2-skivan... Asken stod i hyllan, men innehöll bara en manual. Plötsligt insåg jag att spelet ju var registrerat på Steam. Jag installerade Steam på nya datorn och loggade in med mailadress och lösenord – och vips kunde jag ladda ner hela spelet. Det är i exakt samma version som det på skivan, och visst, det tog nog en arbetsdag ungefär att ladda ner, men det funkar precis som det ska. När det sen kom en fortsättning var det bara att ladda ner den också, med lite rabatt eftersom man köpt föregångaren.








    Ett annat exempel är EA Downloader som värdens störa distributör Electronic Arts står bakom. 16 november släpps det omtalade Crysis som ska vrida sista prestandadroppen ur alla idag existerande datorer, men redan nu kan man ladda ner spelet till sin dator. Det är låst och väntar på en aktiveringsnyckel, men du kan börja spela 00:00 på releasedagen (om inte ryktet är sant som säger att det blir release redan imorgon för de som laddat ner).


    Visst, jag vet att spel och musik inte är exakt samma sorts produkt, och man kan inte jämföra dem rakt av - men jag lovar att det finns mycket musikbranschen skulle kunna lära sig av spelbranschen!


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "ckats med digital distribution där film- och musikbransch fortsättningsvis går bet.", + "author_id": 6, + "created_at": 1194976920000, + "created_by": 6, + "updated_at": 1194976920000, + "updated_by": 6, + "published_at": 1194976920000, + "published_by": 6 + }, + { + "id": 144, + "title": "Fiffig funktion för att göra skärmdumpar i Vista", + "slug": "fiffig-funktion-for-att-gora-skarmdumpar-i-vista", + "markdown": "\r\n\r\n\r\nInbyggt i Vista finns ett riktigt fiffigt program för att göra skärmdumpar. Det heter Snipping Tool (vet inte riktigt vad det kan heta på svenska). Med det kan man göra skärmdumpar av hela skärmen, ett fönster, en rektangel eller ett område man ritar på fri hand. Sedan lägger man enkelt till markeringar, t.ex. överstrykningar eller egna små ritningar och kan direkt maila iväg skärmdumpen eller spara den i alla vanliga bildformat.\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/snip.png)\r\n\r\n\r\nDet enda som fattas är en inbyggd funktion för att lägga till text...\r\n\r\n\r\nDu hittar Snipping Tool under accessories/tillbehör i startmenyn och kan läsa mer om verktyget här.\r\n\r\n", + "html": "


    Inbyggt i Vista finns ett riktigt fiffigt program för att göra skärmdumpar. Det heter Snipping Tool (vet inte riktigt vad det kan heta på svenska). Med det kan man göra skärmdumpar av hela skärmen, ett fönster, en rektangel eller ett område man ritar på fri hand. Sedan lägger man enkelt till markeringar, t.ex. överstrykningar eller egna små ritningar och kan direkt maila iväg skärmdumpen eller spara den i alla vanliga bildformat.








    Det enda som fattas är en inbyggd funktion för att lägga till text...


    Du hittar Snipping Tool under accessories/tillbehör i startmenyn och kan läsa mer om verktyget här.


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "inbyggt program som gör processen extremt kort.", + "author_id": 6, + "created_at": 1195639020000, + "created_by": 6, + "updated_at": 1195639020000, + "updated_by": 6, + "published_at": 1195639020000, + "published_by": 6 + }, + { + "id": 145, + "title": "Amazon släpper E-bok", + "slug": "amazon-slapper-e-bok", + "markdown": "\r\n\r\n\r\nAmazon släppte i dagarna sin egen hårdvara för att läsa e-böcker, Amazon Kindle. I praktiken är det en monokrom 6-tumsskärm med en upplösning på 800x600 och ett linuxbaserat operativsystem. Kindle skeppas med 256MB minne, utbyggbart med SD, batteriet skall enl Amazon hålla ca 30h. Inbyggt trådlöst nätverk (Sprint EVDO) skall också göra det möjligt att köpa böcker direkt från Amazon.\r\n\r\n\r\nKindle är framförallt anpassad för att visa Amazons egna proprietära format (AZW), men skall även kunna visa Mobipocket och oformaterad text. Amazon verkar också tillhandahålla möjlighet att konvertera en drös andra filformat via en emailtjänst, förmodligen mot en kostnad. E-böckerna hos Amazon verkar kosta ca $10.\r\n\r\n\r\nDet roliga är att det börjar ta fart på allvar med e-böcker, Amazon har redan ca 90.000 titlar till försäljning. Det tråkiga är att utvecklingen leds av innehållsägarna, vilket gör att vi riskerar att få samma problem med DRM och proprietära format som musikbranchen dragits med. Att Amazon tagit fram ett eget filformat känns som helt fel väg att gå, och man lär få problem att läsa Amazons böcker på någon annan läsare än Kindle (tex Sonys Reader). Bokbranchen borde verkligen enas om ett standardformat, även om det kommer knäckas (it will). Om alternativet är att kunderna måste köpa en hårdvara per bokaffär så kommer kunderna att ledsna helt och känna att det är ok att piratkopiera.\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/kindle.png)", + "html": "


    Amazon släppte i dagarna sin egen hårdvara för att läsa e-böcker, Amazon Kindle. I praktiken är det en monokrom 6-tumsskärm med en upplösning på 800x600 och ett linuxbaserat operativsystem. Kindle skeppas med 256MB minne, utbyggbart med SD, batteriet skall enl Amazon hålla ca 30h. Inbyggt trådlöst nätverk (Sprint EVDO) skall också göra det möjligt att köpa böcker direkt från Amazon.


    Kindle är framförallt anpassad för att visa Amazons egna proprietära format (AZW), men skall även kunna visa Mobipocket och oformaterad text. Amazon verkar också tillhandahålla möjlighet att konvertera en drös andra filformat via en emailtjänst, förmodligen mot en kostnad. E-böckerna hos Amazon verkar kosta ca $10.


    Det roliga är att det börjar ta fart på allvar med e-böcker, Amazon har redan ca 90.000 titlar till försäljning. Det tråkiga är att utvecklingen leds av innehållsägarna, vilket gör att vi riskerar att få samma problem med DRM och proprietära format som musikbranchen dragits med. Att Amazon tagit fram ett eget filformat känns som helt fel väg att gå, och man lär få problem att läsa Amazons böcker på någon annan läsare än Kindle (tex Sonys Reader). Bokbranchen borde verkligen enas om ett standardformat, även om det kommer knäckas (it will). Om alternativet är att kunderna måste köpa en hårdvara per bokaffär så kommer kunderna att ledsna helt och känna att det är ok att piratkopiera.


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1085, + "created_at": 1195647240000, + "created_by": 1085, + "updated_at": 1195647240000, + "updated_by": 1085, + "published_at": 1195647240000, + "published_by": 1085 + }, + { + "id": 147, + "title": "Resultat: Ska du köpa en iPhone?", + "slug": "resultat-ska-du-kopa-en-iphone", + "markdown": "\r\n\r\n\r\nDet blir ju som bekant inga iPhones i Sverige innan jul om man inte väljer att importera själv. Men hur starkt är suget i Sverige? Enligt vår ovetenskapliga undersökning så är svaret \"mittemellan\". Det är ganska många som längtar efter en Sverigelansering, men många vill hellre ha en annan telefon.\r\n\r\n\r\nFörra veckan tog nya rykten fart om en 3G-variant av iPhone första halvåret 2008. Enligt Prylfeber förväntar sig spanska Telefonica att kunna sälja en 3G-iPhone redan i maj 2008. Om det är sant kommer kanske nuvarande iPhone 2G aldrig att börja säljas i Sverige, och därmed kanske vi får lite rätt i vår egen spekulation trots allt.\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/polliphone.png)", + "html": "


    Det blir ju som bekant inga iPhones i Sverige innan jul om man inte väljer att importera själv. Men hur starkt är suget i Sverige? Enligt vår ovetenskapliga undersökning så är svaret \"mittemellan\". Det är ganska många som längtar efter en Sverigelansering, men många vill hellre ha en annan telefon.


    Förra veckan tog nya rykten fart om en 3G-variant av iPhone första halvåret 2008. Enligt Prylfeber förväntar sig spanska Telefonica att kunna sälja en 3G-iPhone redan i maj 2008. Om det är sant kommer kanske nuvarande iPhone 2G aldrig att börja säljas i Sverige, och därmed kanske vi får lite rätt i vår egen spekulation trots allt.


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1196085660000, + "created_by": 6, + "updated_at": 1196085660000, + "updated_by": 6, + "published_at": 1196085660000, + "published_by": 6 + }, + { + "id": 148, + "title": "15 tips för att få ditt nyhetsbrev att komma igenom spam-filtren", + "slug": "15-tips-for-att-fa-ditt-nyhetsbrev-att-komma-igenom-spam-filtren", + "markdown": "\r\n\r\n\r\n\r\nAnvänd inte enbart bilder. Att lägga hela innehållet i en bild för att spam-filtren inte skulle kunna läsa innehållet var väldigt populärt ett tag bland spammare, vilket gör att många filter direkt rensar bort epost som bara innehåller bilder. Dessutom har c:a 40% av användarna visning av bilder avstängt i sina epostprogram.\r\n\r\nAnvänd inte för lite text. Om ett mail innehåller väldigt lite text i kombination med en bild fångas det lätt av samma regler som i punkt 1 ovan.\r\n\r\nUpprepa inte ämnesraden - särskilt inte i rubriker och länkar\r\n\r\nUndvik stora typsnitt - större grad än 12 punkter i rubriker och länkar kan ge spampoäng\r\n\r\nUndvik Arial storlek 2/10 punkter. Mycket spam innehåller en bild med budskapet och en nonsenstext i arial 10 punkter.\r\n\r\nAnvänd inte uteslutande versaler, särskilt i ämnesraden.\r\n\r\nUndvik många teckenfärger\r\n\r\n\r\nUndvik vissa ord. Ord som \"kontakt\" och \"kontaktformulär\" kan ge spampoäng. Detta är ett problem framför allt på engelska, men filtren blir kontinuerligt mer anpassade även för andra språk.\r\n\r\nUndvik för många utropstecken\r\n\r\n\r\nSkapa inte för avancerad layout. Nyhetsbrev med många tabeller, omfattande HTML-kod etc. kan ge spam-poäng\r\n\r\nFrontpage och DreamWeaver kan ge spampoäng. Redigeringsprogram för HTML har en tendens att lagra information om sig själva (alltså vilket program som har skapat HTML-koden) vilket kan ge spampoäng. Om du använder ett redigeringsverktyg kan du själv ta bort sådana referenser i koden.\r\n\r\nAnvänd inte fältet hemlig kopia. Hemlig kopia (BCC) är en indikation på att ett epostmeddelande har sänts till många mottagare. Om det är möjligt är det bättre att skicka ut nyhetsbrevet som ett separat meddelande till varje mottagare.\r\n\r\nAnvänd inte fältet kopia av samma skäl som ovan.\r\n\r\nUndvik dynamiska IP-nummer. De flesta vanliga bredbandsuppkopplingar, särskilt för privatabonnemang, delar ut en ny adress varje gång man ansluter. Vissa spam-filter tolkar detta som ett försök att dölja varifrån utskicket kommer.\r\n\r\nKontrollera ditt IP-nummer. Kontroller att ditt IP-nummer inte har hamnat i någon av de stora svartlistesföretagens (som SpamCop eller MAPS) databaser.\r\n\r\n\r\nDessa utmärkta tips kom till oss i ett nyhetsbrev från SamLogic som säljer verktyg för epostutskick. Enda överraskningen var att det kom på papper via posten istället för som ett epostnyhetsbrev...\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/spam_boy.png)", + "html": "




    1. Använd inte enbart bilder. Att lägga hela innehållet i en bild för att spam-filtren inte skulle kunna läsa innehållet var väldigt populärt ett tag bland spammare, vilket gör att många filter direkt rensar bort epost som bara innehåller bilder. Dessutom har c:a 40% av användarna visning av bilder avstängt i sina epostprogram.


    2. Använd inte för lite text. Om ett mail innehåller väldigt lite text i kombination med en bild fångas det lätt av samma regler som i punkt 1 ovan.


    3. Upprepa inte ämnesraden - särskilt inte i rubriker och länkar


    4. Undvik stora typsnitt - större grad än 12 punkter i rubriker och länkar kan ge spampoäng


    5. Undvik Arial storlek 2/10 punkter. Mycket spam innehåller en bild med budskapet och en nonsenstext i arial 10 punkter.


    6. Använd inte uteslutande versaler, särskilt i ämnesraden.


    7. Undvik många teckenfärger


    8. Undvik vissa ord. Ord som \"kontakt\" och \"kontaktformulär\" kan ge spampoäng. Detta är ett problem framför allt på engelska, men filtren blir kontinuerligt mer anpassade även för andra språk.


    9. Undvik för många utropstecken


    10. Skapa inte för avancerad layout. Nyhetsbrev med många tabeller, omfattande HTML-kod etc. kan ge spam-poäng


    11. Frontpage och DreamWeaver kan ge spampoäng. Redigeringsprogram för HTML har en tendens att lagra information om sig själva (alltså vilket program som har skapat HTML-koden) vilket kan ge spampoäng. Om du använder ett redigeringsverktyg kan du själv ta bort sådana referenser i koden.


    12. Använd inte fältet hemlig kopia. Hemlig kopia (BCC) är en indikation på att ett epostmeddelande har sänts till många mottagare. Om det är möjligt är det bättre att skicka ut nyhetsbrevet som ett separat meddelande till varje mottagare.


    13. Använd inte fältet kopia av samma skäl som ovan.


    14. Undvik dynamiska IP-nummer. De flesta vanliga bredbandsuppkopplingar, särskilt för privatabonnemang, delar ut en ny adress varje gång man ansluter. Vissa spam-filter tolkar detta som ett försök att dölja varifrån utskicket kommer.


    15. Kontrollera ditt IP-nummer. Kontroller att ditt IP-nummer inte har hamnat i någon av de stora svartlistesföretagens (som SpamCop eller MAPS) databaser.


    Dessa utmärkta tips kom till oss i ett nyhetsbrev från SamLogic som säljer verktyg för epostutskick. Enda överraskningen var att det kom på papper via posten istället för som ett epostnyhetsbrev...


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1196098920000, + "created_by": 6, + "updated_at": 1196098920000, + "updated_by": 6, + "published_at": 1196098920000, + "published_by": 6 + }, + { + "id": 157, + "title": "Resultat: Vilket är ditt favorit-OS just nu?", + "slug": "resultat-vilket-ar-ditt-favorit-os-just-nu", + "markdown": "\r\n\r\n\r\nEn jämn omröstning skulle jag säga. Förhållandet Vista/Leopard avspeglar ganska väl försäljningssiffrorna som senast jag såg dem låg ganska lika. Att det är lite Vista-övertag här är kanske inte så konstigt - vi skriver ju mycket om .NET och andra Microsoft-tekniker.\r\n\r\n\r\nMer intressant är egentligen att jämföra med vilka operativsystem ni läsare faktiskt använder (enligt Google Analytics, med oss på Iteam borträknade):\r\n\r\n\r\nWindows XP: 64,79%\r\nWindows Vista: 25,06%\r\nMacOSX (alla versioner): 5,03%\r\nLinux (alla distributioner): 1,90%\r\n\r\n\r\nHedersomnämnande till den person som har gjort ett besök sedan starten med sin iPhone :-).\r\n\r\n\r\nListan skiljer sig väldigt från omröstningsresultatet. Men det är ju också många faktorer som styr vilket operativsystem man använder - kostnad, vilken hårdvara man har tillgänglig och policies på arbetsplatser.\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/os-vote.png)", + "html": "


    En jämn omröstning skulle jag säga. Förhållandet Vista/Leopard avspeglar ganska väl försäljningssiffrorna som senast jag såg dem låg ganska lika. Att det är lite Vista-övertag här är kanske inte så konstigt - vi skriver ju mycket om .NET och andra Microsoft-tekniker.


    Mer intressant är egentligen att jämföra med vilka operativsystem ni läsare faktiskt använder (enligt Google Analytics, med oss på Iteam borträknade):



    1. Windows XP: 64,79%

    2. Windows Vista: 25,06%

    3. MacOSX (alla versioner): 5,03%

    4. Linux (alla distributioner): 1,90%


    Hedersomnämnande till den person som har gjort ett besök sedan starten med sin iPhone :-).


    Listan skiljer sig väldigt från omröstningsresultatet. Men det är ju också många faktorer som styr vilket operativsystem man använder - kostnad, vilken hårdvara man har tillgänglig och policies på arbetsplatser.


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1197556920000, + "created_by": 6, + "updated_at": 1197556920000, + "updated_by": 6, + "published_at": 1197556920000, + "published_by": 6 + }, + { + "id": 160, + "title": "Tekniken.nus bästa julklappstips", + "slug": "teknikennus-basta-julklappstips", + "markdown": "\r\n\r\n\r\nAllt det som är bra med iPhone - stor touch-skärm, filmvisning, WLAN, webbläsare, som vanligt paketerat i  Apples grymma design. Finns till skillnad från iPhone tillgänglig redan nu, även i Sverige, med inbyggt minne på 8 eller 16 GB.\r\n\r\n\r\n\r\nhttp://www.apple.com/ipodtouch/\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/ipod-touch-video.png)\r\n\r\n\r\nEn väckarklocka som via ett armband mäter när det fysiologiskt passar bäst att väcka dig, inom den tidsperiod du har ställt in (t.ex. \"mellan 7:00 och 7:30\"). Gör att klockan ringer när det passar din sömncykel och att du (typ) alltid vaknar utvilad!\r\n\r\n\r\n\r\nFinns på Dustin\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/axbo.png)\r\n\r\n\r\nOne Laptop Per Child (OLPC) är ett projekt för att utrusta barnen i världens utvecklingsländer med datorer, något som kommer att vara absolut nödvändigt för hjälpa dessa länder vidare i utvecklingen. Målet är att alla skolbarn ska få en egen. Om du skänker $200 så kommer en laptop att byggas och skickas till ett skolbarn, om du skänker $399 så får du dessutom en egen att ge till ett barn i din närhet.\r\n\r\nhttp://laptopgiving.org/en/index.php\r\n \r\n![Bild](http://tekniken.nu/uploads/xo.png)\r\n\r\n\r\nEtt problem många lär känna igen sig i är att ta hand om alla sina växande mängder digitala data - t.ex. alla de foton man tar med sin digitalkamera. Till släkt och vänner som har filer att vara rädda om är en tjänst för nätbackup som Diino.se en perfekt julklapp.\r\n\r\n\r\n\r\nhttp://www.diino.se\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/diino_purple_large.png)\r\n\r\n\r\nMediespelare med touchscreen på 4,3\" som har WLAN, visar film i DVD-upplösning i många format, visar PDF-filer och kan spela in från TV med ett tillbehör. Finns med hårddisk upp till 160 GB och är den perfekta prylen på en långtråkig resa.\r\n\r\n\r\n\r\nhttp://www.archos.com\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/archos605.png)\r\n\r\n\r\nFör den som vill liva upp julledigheten lite finns ett paket med två radiostyrda helikoptrar gjorda för inomhusflygning! Helikoptrarna är utrustade med IR-sensor och IR-kanon - när en helikopter blir träffad stannar stjärtrotorn och helikoptern störtar.\r\n\r\n\r\n\r\nFinns på Teknikmagasinet\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/silverlit.png)\r\n\r\n\r\nMX Air är en mus som är gjord för att hållas fritt i luften, perfekt för att styra t.ex. en dator kopplad till TV:n. Man håller den som en fjärrkontroll (med handflatan under och tummen ovanpå) och den är förvånansvärt lätthanterad när man övat sig lite. MX Air går just nu under det putslustiga namnet \"MX-pekaren\" på kontoret.\r\n\r\n\r\nMer info hos Logitech\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/mxair.png)\r\n\r\n\r\nEn perfekt present till en kompis eller släkting som spelar elgitarr är hörlursförstärkaren amPlug. Den är ungefär stor som en tändsticksask, går på batterier och har uttag för både hörlurar och ingång för MP3-spelare om man vill ha backtracks. amPlug finns i tre varianter beroende på vilket musik man spelar - AC30, Classic Rock och Metal.\r\n\r\n\r\n\r\nhttp://www.voxamps.co.uk/amplug/\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/amplug.png)", + "html": "


    Allt det som är bra med iPhone - stor touch-skärm, filmvisning, WLAN, webbläsare, som vanligt paketerat i  Apples grymma design. Finns till skillnad från iPhone tillgänglig redan nu, även i Sverige, med inbyggt minne på 8 eller 16 GB.



    http://www.apple.com/ipodtouch/






    En väckarklocka som via ett armband mäter när det fysiologiskt passar bäst att väcka dig, inom den tidsperiod du har ställt in (t.ex. \"mellan 7:00 och 7:30\"). Gör att klockan ringer när det passar din sömncykel och att du (typ) alltid vaknar utvilad!



    Finns på Dustin





    One Laptop Per Child (OLPC) är ett projekt för att utrusta barnen i världens utvecklingsländer med datorer, något som kommer att vara absolut nödvändigt för hjälpa dessa länder vidare i utvecklingen. Målet är att alla skolbarn ska få en egen. Om du skänker $200 så kommer en laptop att byggas och skickas till ett skolbarn, om du skänker $399 så får du dessutom en egen att ge till ett barn i din närhet.


    http://laptopgiving.org/en/index.php

     



    Ett problem många lär känna igen sig i är att ta hand om alla sina växande mängder digitala data - t.ex. alla de foton man tar med sin digitalkamera. Till släkt och vänner som har filer att vara rädda om är en tjänst för nätbackup som Diino.se en perfekt julklapp.



    http://www.diino.se





    Mediespelare med touchscreen på 4,3\" som har WLAN, visar film i DVD-upplösning i många format, visar PDF-filer och kan spela in från TV med ett tillbehör. Finns med hårddisk upp till 160 GB och är den perfekta prylen på en långtråkig resa.



    http://www.archos.com





    För den som vill liva upp julledigheten lite finns ett paket med två radiostyrda helikoptrar gjorda för inomhusflygning! Helikoptrarna är utrustade med IR-sensor och IR-kanon - när en helikopter blir träffad stannar stjärtrotorn och helikoptern störtar.



    Finns på Teknikmagasinet





    MX Air är en mus som är gjord för att hållas fritt i luften, perfekt för att styra t.ex. en dator kopplad till TV:n. Man håller den som en fjärrkontroll (med handflatan under och tummen ovanpå) och den är förvånansvärt lätthanterad när man övat sig lite. MX Air går just nu under det putslustiga namnet \"MX-pekaren\" på kontoret.


    Mer info hos Logitech





    En perfekt present till en kompis eller släkting som spelar elgitarr är hörlursförstärkaren amPlug. Den är ungefär stor som en tändsticksask, går på batterier och har uttag för både hörlurar och ingång för MP3-spelare om man vill ha backtracks. amPlug finns i tre varianter beroende på vilket musik man spelar - AC30, Classic Rock och Metal.



    http://www.voxamps.co.uk/amplug/


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1197988380000, + "created_by": 6, + "updated_at": 1197988380000, + "updated_by": 6, + "published_at": 1197988380000, + "published_by": 6 + }, + { + "id": 161, + "title": "IE8 kommer och den följer standarder", + "slug": "ie8-kommer-och-den-foljer-standarder", + "markdown": "\r\nEnligt utvecklingsteamet för Internet Explorer har utvecklingen av nya versionen av Microsofts webbläsare nu kommit passerat en viktig milstolpe. IE8 har klarat av \"the acid test\" som är ett test av hur webbläsaren följer CSS-standarder. Microsoft har ju med rätta blivit kritiserat för att välja egna lösningar istället för att följa standarder och har nog känt av den senaste tidens konkurrens från bland andra FireFox. Det glädjer oss webbutvecklare som framöver får en enklare vardag när alla browsers stöder samma standarder.\r\nNär IE8 planeras att släppas är ännu oklart.\r\n\r\nSe intervju med utvecklingsteamet på Channel 9.\r\n\r\n![Bild](http://tekniken.nu/uploads/internetexplorer.gif)", + "html": "

    Enligt utvecklingsteamet för Internet Explorer har utvecklingen av nya versionen av Microsofts webbläsare nu kommit passerat en viktig milstolpe. IE8 har klarat av \"the acid test\" som är ett test av hur webbläsaren följer CSS-standarder. Microsoft har ju med rätta blivit kritiserat för att välja egna lösningar istället för att följa standarder och har nog känt av den senaste tidens konkurrens från bland andra FireFox. Det glädjer oss webbutvecklare som framöver får en enklare vardag när alla browsers stöder samma standarder.

    När IE8 planeras att släppas är ännu oklart.

    Se intervju med utvecklingsteamet på Channel 9.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1087, + "created_at": 1198150680000, + "created_by": 1087, + "updated_at": 1198150680000, + "updated_by": 1087, + "published_at": 1198150680000, + "published_by": 1087 + }, + { + "id": 167, + "title": "Resultat: Julklappsläget", + "slug": "resultat-julklappslaget", + "markdown": "\r\n\r\n\r\nMånga väntar med sina inköp, vissa med godmodighet andra med en viss stress :-).\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/julklappar.png)", + "html": "


    Många väntar med sina inköp, vissa med godmodighet andra med en viss stress :-).


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1199799420000, + "created_by": 6, + "updated_at": 1199799420000, + "updated_by": 6, + "published_at": 1199799420000, + "published_by": 6 + }, + { + "id": 169, + "title": "Macbook Air - Världens tunnaste laptop?", + "slug": "macbook-air---varldens-tunnaste-laptop", + "markdown": "\r\n\r\n\r\nSteve Jobs höll idag sin årliga keynote på Macworld Expo, något som blivit synonymt med en lansering av banbrytande nyheter från Apple. I år blev det en laptop, en tunn sådan.\r\n\r\n\r\nMacbook Air är alltså senaste tillskottet i Apples familj bärbara datorer. Enligt Apple rör det sig om den tunnaste bärbara datorn i världen, knappa två centimeter som tjockast. Som vanligt är det en riktigt snygg pjäs Apples designers fått ur sig.\r\n\r\n\r\nUnder huven sitter dock inga haktappargrejer, en Core 2 Duo på 1,6 eller 1,8 GHz. Det enda som imponerar är att styrplattan har sk multitouch, samt att man kan få en solid state hårddisk som tillval.\r\n\r\n\r\nSer fram emot att få klämma på en snart!\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/macbookair.png)\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/design_gal01_20080115.jpg)\r\n\r\n\r\n\r\n", + "html": "


    Steve Jobs höll idag sin årliga keynote på Macworld Expo, något som blivit synonymt med en lansering av banbrytande nyheter från Apple. I år blev det en laptop, en tunn sådan.


    Macbook Air är alltså senaste tillskottet i Apples familj bärbara datorer. Enligt Apple rör det sig om den tunnaste bärbara datorn i världen, knappa två centimeter som tjockast. Som vanligt är det en riktigt snygg pjäs Apples designers fått ur sig.


    Under huven sitter dock inga haktappargrejer, en Core 2 Duo på 1,6 eller 1,8 GHz. Det enda som imponerar är att styrplattan har sk multitouch, samt att man kan få en solid state hårddisk som tillval.


    Ser fram emot att få klämma på en snart!










    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1085, + "created_at": 1200430800000, + "created_by": 1085, + "updated_at": 1200430800000, + "updated_by": 1085, + "published_at": 1200430800000, + "published_by": 1085 + }, + { + "id": 171, + "title": "Solid state på frammarsch – men varning för varierande kvalitet!", + "slug": "solid-state-pa-frammarsch--men-varning-for-varierande-kvalitet", + "markdown": "\r\n\r\n\r\nSolid state diskar (SSD) är hårddiskar som använder sig av minneskretsar istället för traditionella magnetskivor. Fördelarna med dessa diskar är många. En hårddisk\r\nutan rörliga delar har högre tillförlitlighet, drar mindre ström och kan vara\r\nflera gånger snabbare än en vanlig hårddisk. SSD är nu också kraftigt på väg ned i pris och de flesta datortillverkare har börjat erbjuda dem som alternativ på framförallt bärbara datorer. Att vi står inför ett generationsskifte inom hårddiskar känns väldigt tydligt.\r\n\r\n\r\nHär är det dock läge för en varning, SSD-enheterna\r\ntillverkas med två olika tekniker, SLC och MLC. För närvarande är SLC i snitt\r\ntre gånger snabbare än MLC på grund av en bättre arkitektur. SLC-tekniken ger\r\nockså mycket högre tillförlitlighet. \r\n\r\n\r\nSom vanligt är det bättre alternativet dyrare. Om du vill\r\nvara tidig med SSD-baserad lagring gäller alltså att noga läsa på om produkten\r\nförst!\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/ssd.png)\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/ssd_compare.png)", + "html": "


    Solid state diskar (SSD) är hårddiskar som använder sig av minneskretsar istället för traditionella magnetskivor. Fördelarna med dessa diskar är många. En hårddisk
    utan rörliga delar har högre tillförlitlighet, drar mindre ström och kan vara
    flera gånger snabbare än en vanlig hårddisk. SSD är nu också kraftigt på väg ned i pris och de flesta datortillverkare har börjat erbjuda dem som alternativ på framförallt bärbara datorer. Att vi står inför ett generationsskifte inom hårddiskar känns väldigt tydligt.


    Här är det dock läge för en varning, SSD-enheterna
    tillverkas med två olika tekniker, SLC och MLC. För närvarande är SLC i snitt
    tre gånger snabbare än MLC på grund av en bättre arkitektur. SLC-tekniken ger
    också mycket högre tillförlitlighet.


    Som vanligt är det bättre alternativet dyrare. Om du vill
    vara tidig med SSD-baserad lagring gäller alltså att noga läsa på om produkten
    först!





    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "med stor skillnad i hastighet och tillförlitlighet.", + "author_id": 1088, + "created_at": 1200568860000, + "created_by": 1088, + "updated_at": 1200568860000, + "updated_by": 1088, + "published_at": 1200568860000, + "published_by": 1088 + }, + { + "id": 178, + "title": "Squeezebox Duet", + "slug": "squeezebox-duet", + "markdown": "\r\n\r\n\r\nSqueezebox är i mina ögon det absolut bästa produktvalet för den som på ett smidigt sätt vill kunna lyssna på sin (lagliga) MP3-samling i sin ordinarie musikanläggning. Genom att installera en servermjukvara på sin dator får man tillgång till allt musikinnehåll via fjärrkontroll i soffan, samt ett helt godkänt webbgränssnitt för att bygga spellistor etc. Det finns en handfull konkurrenter, men Squeezebox brukar oftast ta hem de tester som görs. Jag har haft deras första trådlösa modell i ett antal år och har alltid varit ruggigt nöjd.\r\n\r\n\r\nFör något år sedan köpte Logitech upp företaget bakom Squeezebox (Slim Devices) och sedan dess har det varit tämligen tyst. Men nu kommer första riktiga resultatet av samarbetet: Squeezebox Duet.\r\n\r\n\r\nDen stora skillnaden i Duet är att spelaren bara blivit en svart låda att placera i stereohyllan, displayen har istället flyttats till fjärrkontrollen som även den försetts med trådlöst nätverk. Den nya färgdisplayen ser riktigt fin ut och förhoppningsvis är gränssnittet utformat på ett trevligt ipod-aktigt sätt.\r\n\r\n\r\nSqueezebox Duet kostar $399 i USA, så i Sverige lär vi väl få betala upp emot 4000:-.\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/squeezeboxduet1.png)\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/squeezeboxduet2.png)", + "html": "


    Squeezebox är i mina ögon det absolut bästa produktvalet för den som på ett smidigt sätt vill kunna lyssna på sin (lagliga) MP3-samling i sin ordinarie musikanläggning. Genom att installera en servermjukvara på sin dator får man tillgång till allt musikinnehåll via fjärrkontroll i soffan, samt ett helt godkänt webbgränssnitt för att bygga spellistor etc. Det finns en handfull konkurrenter, men Squeezebox brukar oftast ta hem de tester som görs. Jag har haft deras första trådlösa modell i ett antal år och har alltid varit ruggigt nöjd.


    För något år sedan köpte Logitech upp företaget bakom Squeezebox (Slim Devices) och sedan dess har det varit tämligen tyst. Men nu kommer första riktiga resultatet av samarbetet: Squeezebox Duet.


    Den stora skillnaden i Duet är att spelaren bara blivit en svart låda att placera i stereohyllan, displayen har istället flyttats till fjärrkontrollen som även den försetts med trådlöst nätverk. Den nya färgdisplayen ser riktigt fin ut och förhoppningsvis är gränssnittet utformat på ett trevligt ipod-aktigt sätt.


    Squeezebox Duet kostar $399 i USA, så i Sverige lär vi väl få betala upp emot 4000:-.





    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1085, + "created_at": 1202295600000, + "created_by": 1085, + "updated_at": 1202295600000, + "updated_by": 1085, + "published_at": 1202295600000, + "published_by": 1085 + }, + { + "id": 182, + "title": "Omröstningen: Vilket format vinner?", + "slug": "omrostningen-vilket-format-vinner", + "markdown": "\r\n\r\n\r\nVi frågade om vilket format som kommer vinna filmkriget - här är resultatet! Helt tippat tror de flesta att Blu-ray kommer gå vinnande ur striden. Sedan frågan ställdes har ännu fler tecken dykt upp som avgör hela frågan, bland annat har SF och Scanbox valt att bara distribuera Blu-ray i Sverige. De senaste nyheterna säger att en av HD DVD-lägrets starkast förkämpar kommer att ge upp kampen - Toshiba planerar att lägga ner tillverkningen av HD DVD-spelare.\r\n\r\n\r\nAtt HD DVD har förlorat kriget känns uppenbart, men själv tycker jag dock att det är för tidigt att säga att Blu-ray har vunnit. Som Tommy K Johansson påpekade i sin blogg för några veckor sedan så är den helt digitala distributionen (nedladdning, inga plastskivor inblandade) den intressantaste kanalen och den som rimligen borde vara största hotet mot Blu-ray.\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/hdbluray.png)", + "html": "


    Vi frågade om vilket format som kommer vinna filmkriget - här är resultatet! Helt tippat tror de flesta att Blu-ray kommer gå vinnande ur striden. Sedan frågan ställdes har ännu fler tecken dykt upp som avgör hela frågan, bland annat har SF och Scanbox valt att bara distribuera Blu-ray i Sverige. De senaste nyheterna säger att en av HD DVD-lägrets starkast förkämpar kommer att ge upp kampen - Toshiba planerar att lägga ner tillverkningen av HD DVD-spelare.


    Att HD DVD har förlorat kriget känns uppenbart, men själv tycker jag dock att det är för tidigt att säga att Blu-ray har vunnit. Som Tommy K Johansson påpekade i sin blogg för några veckor sedan så är den helt digitala distributionen (nedladdning, inga plastskivor inblandade) den intressantaste kanalen och den som rimligen borde vara största hotet mot Blu-ray.


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1203333540000, + "created_by": 6, + "updated_at": 1203333540000, + "updated_by": 6, + "published_at": 1203333540000, + "published_by": 6 + }, + { + "id": 187, + "title": "Första betaversionen av Internet Explorer 8 finns nu att ladda ner", + "slug": "forsta-betaversionen-av-internet-explorer-8-finns-nu-att-ladda-ner", + "markdown": "\r\n\r\n\r\nNu när konkurrensen från andra webbläsare som FireFox och Safari har börjat bli hårdare så har Microsoft lovat att nya versioner av Internet Explorer komma oftare. Detta verkar besannas i och med att första betaversionen av Internet Explorer 8 idag har lagts upp för nedladdning.\r\n\r\n\r\nSom vi tidigare skrivit om klarade utvecklingsversionen standardtestet ACID2 och Microsofts eget IE-team har också berättat om en helt ny syn på att följa standarder (i korthet kommer standardbeteendet i IE8 vara det som följer standarder bäst istället för att standardbeteendet skulle likna IE6/IE7 för bakåtkompatibilitet som man tänkt tidigare).\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/ie8.png)", + "html": "


    Nu när konkurrensen från andra webbläsare som FireFox och Safari har börjat bli hårdare så har Microsoft lovat att nya versioner av Internet Explorer komma oftare. Detta verkar besannas i och med att första betaversionen av Internet Explorer 8 idag har lagts upp för nedladdning.


    Som vi tidigare skrivit om klarade utvecklingsversionen standardtestet ACID2 och Microsofts eget IE-team har också berättat om en helt ny syn på att följa standarder (i korthet kommer standardbeteendet i IE8 vara det som följer standarder bäst istället för att standardbeteendet skulle likna IE6/IE7 för bakåtkompatibilitet som man tänkt tidigare).


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "t ladda ner för den som vill testa första betaversionen!", + "author_id": 6, + "created_at": 1204810800000, + "created_by": 6, + "updated_at": 1204810800000, + "updated_by": 6, + "published_at": 1204810800000, + "published_by": 6 + }, + { + "id": 188, + "title": "Apple släpper iPhone SDK samt specar Mobile OSX 2.0", + "slug": "apple-slapper-iphone-sdk-samt-specar-mobile-osx-20", + "markdown": "\r\n\r\n\r\nIdag släpper Apple såväl sitt SDK till iPhone/iPod Touch som specar på version 2.0 av operativsystemet Mobile OSX, och det är en imponerande lista av funktioner som finns tillgängliga. Bland annat finns tillgång till \"Location Core\" som är ett api för GPS och cellposition, Exchange Active Sync och Cisco vpn klient inbyggt i operativsystemet. Vidare finns tillgång till OpenGL ES vilket är en lightversion av OpenGL för mobila klienter.\r\n\r\n\r\nDet finns även verktyg så som iPhone simulator så det kittlar ju i fingrarna att börja testa utveckla någon roligt redan nu!\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/iphone.png)", + "html": "


    Idag släpper Apple såväl sitt SDK till iPhone/iPod Touch som specar på version 2.0 av operativsystemet Mobile OSX, och det är en imponerande lista av funktioner som finns tillgängliga. Bland annat finns tillgång till \"Location Core\" som är ett api för GPS och cellposition, Exchange Active Sync och Cisco vpn klient inbyggt i operativsystemet. Vidare finns tillgång till OpenGL ES vilket är en lightversion av OpenGL för mobila klienter.


    Det finns även verktyg så som iPhone simulator så det kittlar ju i fingrarna att börja testa utveckla någon roligt redan nu!


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1087, + "created_at": 1204885800000, + "created_by": 1087, + "updated_at": 1204885800000, + "updated_by": 1087, + "published_at": 1204885800000, + "published_by": 1087 + }, + { + "id": 193, + "title": "Nya och bättre kodexempel", + "slug": "nya-och-battre-kodexempel", + "markdown": "\r\n\r\n\r\nTack vare att min kollega Erik hittade ett otroligt fiffigt JavaScript för att syntax highlighting så har tekniken.nu numera fina och ytterst läsbara kodexempel. Här är ett exempel:\r\n\r\n\r\n```prettyprint lang-c-sharp\r\nclass Hello\r\n{\r\n\tpublic static void Main()\r\n\t{\r\n\t\tConsole.WriteLine(\"Pretty code!\");\r\n\t}\r\n}\r\n```\r\n\r\n\r\n\r\n(En stund under releasen så pekade siten på vår utvecklingsdatabas. Ledsen om någons RSS har fått konstiga artiklar och konstigt kodade åäö, nu fungerar allt som det ska igen!). \r\n\r\n", + "html": "


    Tack vare att min kollega Erik hittade ett otroligt fiffigt JavaScript för att syntax highlighting så har tekniken.nu numera fina och ytterst läsbara kodexempel. Här är ett exempel:





    (En stund under releasen så pekade siten på vår utvecklingsdatabas. Ledsen om någons RSS har fått konstiga artiklar och konstigt kodade åäö, nu fungerar allt som det ska igen!).


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1207583940000, + "created_by": 6, + "updated_at": 1207583940000, + "updated_by": 6, + "published_at": 1207583940000, + "published_by": 6 + }, + { + "id": 195, + "title": "Nyheter från RSA", + "slug": "nyheter-fran-rsa", + "markdown": "\r\n\r\n\r\nRSA håller i veckorna sina partnerkonferenser i Europa och USA och lanserar i samband med dem ett antal större nyheter för 2008. Här är ett axplock:\r\n\r\nEnhancements to RSA Data Loss Prevention (DLP) Suite \r\n\r\nExpanded Partnership Between Cisco and RSA \r\n\r\nIntegration between EMC’s Voyence Control and RSA’s enVision™ products \r\n\r\nNext phase of RSA’s Identity Assurance solution \r\n\r\nLaunch of RSA® Authentication Manager 7.1 \r\n\r\nLaunch of RSA® Key Manager for the Datacenter \r\n\r\nEMC’s launch of 5 new information-centric security services \r\n\r\n\r\n\r\nFramförallt intressant är att gamla trotjänaren i SecureID plattformen - Authentication Manager 6.1 - uppgraderas till version 7.1. Med på featurelistan är SMS-tokens samt nytt utökat webGUI. En fullständig belysning av produktuppgraderingen kommer så fort vi hunnit uppgradera!\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/14555__rsa_security.png)", + "html": "


    RSA håller i veckorna sina partnerkonferenser i Europa och USA och lanserar i samband med dem ett antal större nyheter för 2008. Här är ett axplock:


  • Enhancements to RSA Data Loss Prevention (DLP) Suite

  • Expanded Partnership Between Cisco and RSA

  • Integration between EMC’s Voyence Control and RSA’s enVision™ products

  • Next phase of RSA’s Identity Assurance solution

  • Launch of RSA® Authentication Manager 7.1

  • Launch of RSA® Key Manager for the Datacenter

  • EMC’s launch of 5 new information-centric security services


  • Framförallt intressant är att gamla trotjänaren i SecureID plattformen - Authentication Manager 6.1 - uppgraderas till version 7.1. Med på featurelistan är SMS-tokens samt nytt utökat webGUI. En fullständig belysning av produktuppgraderingen kommer så fort vi hunnit uppgradera!


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1085, + "created_at": 1207656000000, + "created_by": 1085, + "updated_at": 1207656000000, + "updated_by": 1085, + "published_at": 1207656000000, + "published_by": 1085 + }, + { + "id": 197, + "title": "Backup Exec 12 - Värt att uppgradera?", + "slug": "backup-exec-12---vart-att-uppgradera", + "markdown": "\r\n\r\n\r\nSymantec släppte Backup Exec 12 i slutet av februari, vi har kollat på nyheterna i Windowsversionen.\r\n\r\n\r\nSpontant är det stöd för Windows Server 2008 som är den stora nyheten, men det finns några fler intressanta förändringar:\r\n\r\n\r\nAdvanced Open File Option och Intelligent Disaster Recovery ingår numera i grundlicenser från att tidigare varit tillvalsagenter. Man skall även kunna utvärdera tillägsfunktioner efter att man aktiverat grundlicensen, något som tidigare inte var möjligt. Integration med Virtual Server kan också visa sig värdefull om man arbetar mycket med virtualisering.\r\n\r\n\r\nSymantec Protection Network är namnet på Symantecs satsning på Onlinebackup. Integration mot onlinelagringen finns med i BE12. Det här kan vara intressant att titta mer på om man är ute efter en onlinebackuplösning som integrerar med befintlig backupstruktur. Läs mer om SPN hos Symantec.\r\n\r\n\r\nHär är hela listan med nya funktioner:\r\n\r\nWindows Server 2008 support (both as a remote system, and as a media server) \r\n\r\nWindows Server 2008 Core support (as a remote system only, and not with Exchange, Sharepoint or SQL agent) \r\n\r\nSupport for Microsoft Virtual Server (backups up VSS snapshots of virtual machines) \r\n\r\nT10 hardware encryption support \r\n\r\nYou can now evaluate options after licensing Backup Exec \r\n\r\nImproved Calendar view \r\n\r\nAlert to renew Backup Exec support contract \r\n\r\nAdvanced Open File Option and Intelligent Disaster Recovery are now included \r\n\r\nEnterprise Vault Agent (Enterprise Vault is an information archiving solution from Symantec.) \r\n\r\nExchange Off-Host backups are now supported \r\n\r\nIntegration with the Symantec Protection Network online backup service. \r\n\r\nIntegration with Symantec Endpoint Protection. \r\n\r\nBackup to disk folders storing Granular Restore Technology data now adhere to media set rules. \r\n\r\n![Bild](http://tekniken.nu/uploads/symantec-logo.png)", + "html": "


    Symantec släppte Backup Exec 12 i slutet av februari, vi har kollat på nyheterna i Windowsversionen.


    Spontant är det stöd för Windows Server 2008 som är den stora nyheten, men det finns några fler intressanta förändringar:


    Advanced Open File Option och Intelligent Disaster Recovery ingår numera i grundlicenser från att tidigare varit tillvalsagenter. Man skall även kunna utvärdera tillägsfunktioner efter att man aktiverat grundlicensen, något som tidigare inte var möjligt. Integration med Virtual Server kan också visa sig värdefull om man arbetar mycket med virtualisering.


    Symantec Protection Network är namnet på Symantecs satsning på Onlinebackup. Integration mot onlinelagringen finns med i BE12. Det här kan vara intressant att titta mer på om man är ute efter en onlinebackuplösning som integrerar med befintlig backupstruktur. Läs mer om SPN hos Symantec.


    Här är hela listan med nya funktioner:


  • Windows Server 2008 support (both as a remote system, and as a media server)

  • Windows Server 2008 Core support (as a remote system only, and not with Exchange, Sharepoint or SQL agent)

  • Support for Microsoft Virtual Server (backups up VSS snapshots of virtual machines)

  • T10 hardware encryption support

  • You can now evaluate options after licensing Backup Exec

  • Improved Calendar view

  • Alert to renew Backup Exec support contract

  • Advanced Open File Option and Intelligent Disaster Recovery are now included

  • Enterprise Vault Agent (Enterprise Vault is an information archiving solution from Symantec.)

  • Exchange Off-Host backups are now supported

  • Integration with the Symantec Protection Network online backup service.

  • Integration with Symantec Endpoint Protection.

  • Backup to disk folders storing Granular Restore Technology data now adhere to media set rules.

  • ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1088, + "created_at": 1207930200000, + "created_by": 1088, + "updated_at": 1207930200000, + "updated_by": 1088, + "published_at": 1207930200000, + "published_by": 1088 + }, + { + "id": 199, + "title": "Linksys-router föds på nytt med open source-firmware", + "slug": "linksys-router-fods-pa-nytt-med-open-source-firmware", + "markdown": "\r\n\r\n\r\nEfter att jag bytte router från en Netgear till en Linksys WRT54GL (eller Cisco heter de väl egentligen nuförtiden) så började några småsaker krångla. Bland annat slutade min IP-telefonibox från D-link att fungera helt som den skulle. Eftersom min kollega Magnus Rygart redan hade testat och var nöjd med en open source-variant av firmware för Linksysen som heter DD-WRT så tänkte jag att det kanske också skulle lösa mina problem.\r\n\r\n\r\nDet man får med den nya firmwaren är bland annat:\r\n\r\n\r\n Stöd för att reservera DHCP-adresser\r\n Massa av inbyggda tjänster (SNMP, syslog, SSH, telnet)\r\n Stöd för virtuella LAN\r\n Funktioner för att ändra signalstyrka\r\n Överklockning av den inbyggda processorn\r\n Bättre Quality of Service\r\n Wake on LAN\r\n IPv6\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/wrt54gl.png)\r\n\r\n\r\nSagt och gjort - jag laddade ner senaste stabila versionen av DD-WRT\r\n(v23SP2) och installerade. Man måste göra installationen i två steg\r\neftersom den nya firmwaren inte ryms i minnet om man försöker\r\nuppgradera inifrån Linksys originalfirmware. Såhär gör man:\r\n\r\n\r\nLadda ner miniversionen av DD-WRT.\r\nUppgradera routern till miniversionen med den inbyggda uppgraderingsfunktion i routerns webbgränssnitt.\r\nGör\r\nen reset (tryck in resetknappen, dra ur sladden, stoppa tillbaka, vänta\r\n30s, släpp reset). Detta är ett viktigt moment - hade några svettiga\r\nminuter där routern inte svarade och jag inte hade kommit ihåg att läsa\r\nhela instruktionen, och förstås inte kunde surfa upp den igen.\r\nUppgradera\r\nroutern till standardversionen av DD-WRT (det finns en VPN-version och\r\nen VOIP-version, de behöver du bara om du ska köra VPN-server eller\r\nSIP-server på själva routern).\r\n\r\n\r\n\r\n\r\nEfter uppgradering hade jag ett nytt fint gränssnitt med massor av nya funktioner. Ganska snabbt (efter c:a 30 minuter) förbyttes dock glädjen i irritation - att surfa på webbsidor slutade i princip helt att fungera. Konstigt nog fortsatte dock en fjärrstyrning som var igång att fungera alldeles utmärkt. Lite Googlande senare kunde jag konstatera att version 23 av DD-WRT tydligen har lite problem med att antalet IP-anslutningar är begränsat. Det i kombination med en applikation som ger upphov till många anslutningar, t.ex. en BitTorrent-klient som utorrent, gör att anslutningarna lätt tar slut. Den uppenbara lösningen - att ställa ner antalet anslutningar i utorrent - hjälper tyvärr inte, eftersom den anslutningarna kommer utifrån och utorrent inte kan avvisa dem på routernivå. När anslutningen har avvisats av applikationen så kommer det att ta en stund för routern att känna av det och under den tiden kommer antalet anslutningar att slå i taket.\r\n\r\n\r\nVersion 24 beta av DD-WRT har bättre funktioner för att kontrollera anslutningar, så jag installerade den istället. Jag ställde upp antalet samtidiga anslutningar från 500 till 1000, jag lät utorrent ligga kvar på 250 anslutningar och sänkte timeouttiden för IP-anslutningar ganska rejält. Nu ligger antalet aktiva anslutningar på c:a 500 av 1000 och routern fungerar fint.\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/dd-wrt-ports.png)\r\n\r\n\r\nNu fungerar allt fint! En av de nya funktioner jag gillar mest är Wake on LAN. Det betyder att routern kan skicka ett s.k. \"Magic Packet\" som gör att en dator på det lokala nätverket sätts igång, trots att den tidigare var helt avstängd. Jag har haft min hemmadator påslagen på dagarna rätt mycket, ifall man skulle behöva några filer eller testa en webbplats från ett annat nät än kontorets. Det har dock känts lite onödigt och miljöovänligt. Nu kan jag fjärrlogga in på routern och slå på datorn ifall jag behöver den.\r\n\r\n\r\nAlltsomallt är DD-WRT ett riktigt lyft för WRT54GL. Om du är beredd på lite strul i installation och konfiguration så kommer du att få en mycket bättre router. Nu återstår bara för mig att undersöka om mitt originalproblem är löst - kommer SIP-boxen att kunna ansluta?\r\n\r\n", + "html": "


    Efter att jag bytte router från en Netgear till en Linksys WRT54GL (eller Cisco heter de väl egentligen nuförtiden) så började några småsaker krångla. Bland annat slutade min IP-telefonibox från D-link att fungera helt som den skulle. Eftersom min kollega Magnus Rygart redan hade testat och var nöjd med en open source-variant av firmware för Linksysen som heter DD-WRT så tänkte jag att det kanske också skulle lösa mina problem.


    Det man får med den nya firmwaren är bland annat:



    •  Stöd för att reservera DHCP-adresser

    •  Massa av inbyggda tjänster (SNMP, syslog, SSH, telnet)

    •  Stöd för virtuella LAN

    •  Funktioner för att ändra signalstyrka

    •  Överklockning av den inbyggda processorn

    •  Bättre Quality of Service

    •  Wake on LAN

    •  IPv6





    Sagt och gjort - jag laddade ner senaste stabila versionen av DD-WRT
    (v23SP2) och installerade. Man måste göra installationen i två steg
    eftersom den nya firmwaren inte ryms i minnet om man försöker
    uppgradera inifrån Linksys originalfirmware. Såhär gör man:



    1. Ladda ner miniversionen av DD-WRT.

    2. Uppgradera routern till miniversionen med den inbyggda uppgraderingsfunktion i routerns webbgränssnitt.

    3. Gör
      en reset (tryck in resetknappen, dra ur sladden, stoppa tillbaka, vänta
      30s, släpp reset). Detta är ett viktigt moment - hade några svettiga
      minuter där routern inte svarade och jag inte hade kommit ihåg att läsa
      hela instruktionen, och förstås inte kunde surfa upp den igen.

    4. Uppgradera
      routern till standardversionen av DD-WRT (det finns en VPN-version och
      en VOIP-version, de behöver du bara om du ska köra VPN-server eller
      SIP-server på själva routern).





    Efter uppgradering hade jag ett nytt fint gränssnitt med massor av nya funktioner. Ganska snabbt (efter c:a 30 minuter) förbyttes dock glädjen i irritation - att surfa på webbsidor slutade i princip helt att fungera. Konstigt nog fortsatte dock en fjärrstyrning som var igång att fungera alldeles utmärkt. Lite Googlande senare kunde jag konstatera att version 23 av DD-WRT tydligen har lite problem med att antalet IP-anslutningar är begränsat. Det i kombination med en applikation som ger upphov till många anslutningar, t.ex. en BitTorrent-klient som utorrent, gör att anslutningarna lätt tar slut. Den uppenbara lösningen - att ställa ner antalet anslutningar i utorrent - hjälper tyvärr inte, eftersom den anslutningarna kommer utifrån och utorrent inte kan avvisa dem på routernivå. När anslutningen har avvisats av applikationen så kommer det att ta en stund för routern att känna av det och under den tiden kommer antalet anslutningar att slå i taket.


    Version 24 beta av DD-WRT har bättre funktioner för att kontrollera anslutningar, så jag installerade den istället. Jag ställde upp antalet samtidiga anslutningar från 500 till 1000, jag lät utorrent ligga kvar på 250 anslutningar och sänkte timeouttiden för IP-anslutningar ganska rejält. Nu ligger antalet aktiva anslutningar på c:a 500 av 1000 och routern fungerar fint.








    Nu fungerar allt fint! En av de nya funktioner jag gillar mest är Wake on LAN. Det betyder att routern kan skicka ett s.k. \"Magic Packet\" som gör att en dator på det lokala nätverket sätts igång, trots att den tidigare var helt avstängd. Jag har haft min hemmadator påslagen på dagarna rätt mycket, ifall man skulle behöva några filer eller testa en webbplats från ett annat nät än kontorets. Det har dock känts lite onödigt och miljöovänligt. Nu kan jag fjärrlogga in på routern och slå på datorn ifall jag behöver den.


    Alltsomallt är DD-WRT ett riktigt lyft för WRT54GL. Om du är beredd på lite strul i installation och konfiguration så kommer du att få en mycket bättre router. Nu återstår bara för mig att undersöka om mitt originalproblem är löst - kommer SIP-boxen att kunna ansluta?


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "irmware med helt nya funktioner öppnades en helt ny värld!", + "author_id": 6, + "created_at": 1208339220000, + "created_by": 6, + "updated_at": 1208339220000, + "updated_by": 6, + "published_at": 1208339220000, + "published_by": 6 + }, + { + "id": 202, + "title": "Inget SP3 för XP denna gång...", + "slug": "inget-sp3-for-xp-denna-gang", + "markdown": "\r\n\r\n\r\nWindows XP servicepack 3 skulle enligt plan ha släppts igår kväll, men i elfte timmen upptäckte Microsoft ett kompatabilitetsproblem med den för gemene man okända produkten Microsoft Dynamics Retail Management System (RMS). Problemet ansågs tydligen tillräckligt allvarligt för att skjuta hela släppet på obestämd tid.\r\n\r\n\r\nVi som fortfarande installerar en och annan Windows XP åt kunder ser fram emot att få alla säkerhetspatchar sedan SP2 i ett och samma paket, som det är idag kan Windows Update patchning lätt ta 40 minuter på en nyinstallerad XP SP2.\r\n\r\n\r\nKälla: IDG\r\n\r\n\r\n\r\nFotnot: TechReef länkar till den här filen på Microsofts egen nedladdningsserver, som ser ut att vara den osläppta SP3: \"windowsxp-kb936929-sp3-x86-enu.exe\". Jag har dock inte testat den, så labbmiljöer endast...\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/vista.png)", + "html": "


    Windows XP servicepack 3 skulle enligt plan ha släppts igår kväll, men i elfte timmen upptäckte Microsoft ett kompatabilitetsproblem med den för gemene man okända produkten Microsoft Dynamics Retail Management System (RMS). Problemet ansågs tydligen tillräckligt allvarligt för att skjuta hela släppet på obestämd tid.


    Vi som fortfarande installerar en och annan Windows XP åt kunder ser fram emot att få alla säkerhetspatchar sedan SP2 i ett och samma paket, som det är idag kan Windows Update patchning lätt ta 40 minuter på en nyinstallerad XP SP2.


    Källa: IDG



    Fotnot: TechReef länkar till den här filen på Microsofts egen nedladdningsserver, som ser ut att vara den osläppta SP3: \"windowsxp-kb936929-sp3-x86-enu.exe\". Jag har dock inte testat den, så labbmiljöer endast...


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1085, + "created_at": 1209576600000, + "created_by": 1085, + "updated_at": 1209576600000, + "updated_by": 1085, + "published_at": 1209576600000, + "published_by": 1085 + }, + { + "id": 203, + "title": "Google Translate nu på svenska!", + "slug": "google-translate-nu-pa-svenska", + "markdown": "\r\n\r\n\r\nIDG berättar idag om att Google Translate har kommit på svenska. Som frekvent användare av Altavistas Babelfish (bland annat för att översätta från kinesiska och japanska) så har jag varit lite skeptisk till Translate, som jag tycker har varit lite sämre. Men nu har Google hittat sin killer app - i alla fall för oss svenskar: översättning till och från svenska!\r\n\r\n\r\nVisst blir det fel ibland som med all maskinöversättning, men jag tycker att följande slumpvis valda stycke från DNs webbupplaga är riktigt imponerande:\r\n\r\nHan påpekar att deka-BDE är bioackumulerande, det vill säga ämnet lagras i kroppen hos levande organismer. Det kan skada nervsystemet och reproduktionen, och är möjligen också cancerframkallande.\r\n\r\nblir\r\n\r\n\r\n\r\nHe points out that deca-BDE are bioaccumulative, that is to say the substance is stored in the body of living organisms. It can damage the nervous system and reproduction, and is possibly carcinogenic.\r\n\r\n\r\n\r\nSjälvklart finns i god webb 2.0-anda också funktioner för att rätta felaktiga översättningar och skicka in som feedback.\r\n\r\n\r\nTesta själv detta inlägg översatt till engelska.\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/google_logo.png)", + "html": "


    IDG berättar idag om att Google Translate har kommit på svenska. Som frekvent användare av Altavistas Babelfish (bland annat för att översätta från kinesiska och japanska) så har jag varit lite skeptisk till Translate, som jag tycker har varit lite sämre. Men nu har Google hittat sin killer app - i alla fall för oss svenskar: översättning till och från svenska!


    Visst blir det fel ibland som med all maskinöversättning, men jag tycker att följande slumpvis valda stycke från DNs webbupplaga är riktigt imponerande:


    Han påpekar att deka-BDE är bioackumulerande, det vill säga ämnet lagras i kroppen hos levande organismer. Det kan skada nervsystemet och reproduktionen, och är möjligen också cancerframkallande.

    blir



    He points out that deca-BDE are bioaccumulative, that is to say the substance is stored in the body of living organisms. It can damage the nervous system and reproduction, and is possibly carcinogenic.


    Självklart finns i god webb 2.0-anda också funktioner för att rätta felaktiga översättningar och skicka in som feedback.


    Testa själv detta inlägg översatt till engelska.


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "rän nu, när Translate har fått stöd för svenska!", + "author_id": 6, + "created_at": 1210262700000, + "created_by": 6, + "updated_at": 1210262700000, + "updated_by": 6, + "published_at": 1210262700000, + "published_by": 6 + }, + { + "id": 206, + "title": "Vista på eller av?", + "slug": "vista-pa-eller-av", + "markdown": "\r\n\r\n\r\nVista väcker starka åsikter! Cirka 60% av de röstande vill ha eller har Vista, men SP1 verkar inte ha påverkat den åsikten i någon större omfattning (kan väl inte påstå att jag har märkt någon större skillnad efter installationen heller precis). 40% vill inte ha Vista.\r\n\r\n\r\nGlöm inte att rösta på den nya frågan som handlar om mobiltelefoner!\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/vistasp1.png)", + "html": "


    Vista väcker starka åsikter! Cirka 60% av de röstande vill ha eller har Vista, men SP1 verkar inte ha påverkat den åsikten i någon större omfattning (kan väl inte påstå att jag har märkt någon större skillnad efter installationen heller precis). 40% vill inte ha Vista.


    Glöm inte att rösta på den nya frågan som handlar om mobiltelefoner!


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1211565240000, + "created_by": 6, + "updated_at": 1211565240000, + "updated_by": 6, + "published_at": 1211565240000, + "published_by": 6 + }, + { + "id": 207, + "title": "Nya funktioner i Google Maps och Google Earth direkt i webbläsaren", + "slug": "nya-funktioner-i-google-maps-och-google-earth-direkt-i-webblasaren", + "markdown": "\r\n\r\n\r\nFör några dagar sedan uttökade Google sin Google Maps med möjligheten att enkelt visa bilder och information från Wikipedia direkt i webbläsaren. En ny knapp vid namn \"More...\" finns uppe i högra hörnet vilken ger tillgång till dessa funktioner. Det blir riktigt snyggt med svå bilder utspridda kartan.\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/gmaps-small2.png)\r\n\r\n\r\nIdag släppte de även en webbläsarplugin för Google Earth (det fristående programmet som visar en 3d-rendering av jordklotet). Än så länge bara tillgänglig för Windows, och fortfarande i utvecklingsstadiet, men redan nu ganska stabil och snabb. På utvecklingssiten för Google Earth API har de även demos där de gör olika mashups, bl.a. ett där man får köra omkring med en mjölkbil i 3d-världen.\r\n\r\n\r\nDet nya API:et är såpass likt det befintliga API som finns för Google Maps att Google hävdar att om man redan använder Maps så skall det enkelt gå att byta över till Earth.\r\n\r\n\r\n\r\nDet här släpps samtidigt som Google har sin stora I/O-konferens), vars fokus är just på mashups och nya användingar av olika webbkomponenter. Förmodligen kommer vi inom snart se många mer innovativa användingsområden för Google Earth i webbläsare.\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/gmaps2.png)\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/gmaps3.png)", + "html": "


    För några dagar sedan uttökade Google sin Google Maps med möjligheten att enkelt visa bilder och information från Wikipedia direkt i webbläsaren. En ny knapp vid namn \"More...\" finns uppe i högra hörnet vilken ger tillgång till dessa funktioner. Det blir riktigt snyggt med svå bilder utspridda kartan.





    Idag släppte de även en webbläsarplugin för Google Earth (det fristående programmet som visar en 3d-rendering av jordklotet). Än så länge bara tillgänglig för Windows, och fortfarande i utvecklingsstadiet, men redan nu ganska stabil och snabb. På utvecklingssiten för Google Earth API har de även demos där de gör olika mashups, bl.a. ett där man får köra omkring med en mjölkbil i 3d-världen.


    Det nya API:et är såpass likt det befintliga API som finns för Google Maps att Google hävdar att om man redan använder Maps så skall det enkelt gå att byta över till Earth.



    Det här släpps samtidigt som Google har sin stora I/O-konferens), vars fokus är just på mashups och nya användingar av olika webbkomponenter. Förmodligen kommer vi inom snart se många mer innovativa användingsområden för Google Earth i webbläsare.








    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": " i webbläsaren.", + "author_id": 1086, + "created_at": 1212069480000, + "created_by": 1086, + "updated_at": 1212069480000, + "updated_by": 1086, + "published_at": 1212069480000, + "published_by": 1086 + }, + { + "id": 209, + "title": "Första tjuvtitten på Android", + "slug": "forsta-tjuvtitten-pa-android", + "markdown": "\r\n\r\n\r\nGoogle tycker att det saknas en vettig mobil plattform som kan hantera applikationer med avancerade webbgränssnitt. Därför har man startat projektet Android - ett Linuxbaserat operativsystem för mobiltelefoner, open source och med ett kraftfullt API. Webbläsaren har man valt att basera på Webkit, samma renderingsplattform som används i Safari. Stora mobiltillverkare som Samsung, LG och HTC har redan meddelat att de kommer att släppa Android-baserade mobiler.\r\n\r\n\r\nPå Googles I/O-konferens visades en prototyp av en Android-mobil för första gången (spola fram till c:a 23 minuter för Android-delen):\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/androiddemo.png)", + "html": "


    Google tycker att det saknas en vettig mobil plattform som kan hantera applikationer med avancerade webbgränssnitt. Därför har man startat projektet Android - ett Linuxbaserat operativsystem för mobiltelefoner, open source och med ett kraftfullt API. Webbläsaren har man valt att basera på Webkit, samma renderingsplattform som används i Safari. Stora mobiltillverkare som Samsung, LG och HTC har redan meddelat att de kommer att släppa Android-baserade mobiler.


    Googles I/O-konferens visades en prototyp av en Android-mobil för första gången (spola fram till c:a 23 minuter för Android-delen):








    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1212144900000, + "created_by": 6, + "updated_at": 1212144900000, + "updated_by": 6, + "published_at": 1212144900000, + "published_by": 6 + }, + { + "id": 210, + "title": "iPhone 3G i Sverige 11 juli!", + "slug": "iphone-3g-i-sverige-11-juli", + "markdown": "\r\n\r\n\r\nDen nya iPhone som alla har spekulerat om (även vi - redan 10 september förra året, även\r\nom ryktet då var falskt) utannonserades på Apples keynote-presentation\r\ni förrgår kväll. Den nya iPhonen kommer att ha:\r\n\r\n\r\n3G (HSPDA, aka \"Turbo-3G\")\r\nInbyggd GPS\r\nNy mjukvara med en massa fiffiga funktioner för utvecklare, iPhone 2.0 (gamla iPhones och iPod Touch kan uppgraderas till 2.0)\r\nBättre stöd för Office och Exchange\r\nLägre pris\r\n\r\n\r\nSverige\r\nhar placerats i listan över de 22 länder som kommer att få den nya\r\niPhonen först - redan 11 juli, vilket är mycket tidigare än vad jag\r\nsjälv hade gissat på. Telia är den operatör som kommer att få ensamrätt\r\nunder en period. I USA kostar iPhone 3G $199 men måste köpas ihop med\r\nett abonnemang med bindningstid, och så kommer det gissningsvis att\r\nvara även här.\r\n\r\n\r\nFör den som inte orkar titta på 107 minuter Steve Jobs så har\r\nbloggen Mahalo Daily klippt ihop en version på 60 sekunder som\r\ninnehåller det viktigaste (hittad på både Digg och Macfeber).\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/iphone3g.png)\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n", + "html": "


    Den nya iPhone som alla har spekulerat om (även vi - redan 10 september förra året, även
    om ryktet då var falskt) utannonserades på Apples keynote-presentation
    i förrgår kväll. Den nya iPhonen kommer att ha:



    • 3G (HSPDA, aka \"Turbo-3G\")

    • Inbyggd GPS

    • Ny mjukvara med en massa fiffiga funktioner för utvecklare, iPhone 2.0 (gamla iPhones och iPod Touch kan uppgraderas till 2.0)

    • Bättre stöd för Office och Exchange

    • Lägre pris


    Sverige
    har placerats i listan över de 22 länder som kommer att få den nya
    iPhonen först - redan 11 juli, vilket är mycket tidigare än vad jag
    själv hade gissat på. Telia är den operatör som kommer att få ensamrätt
    under en period. I USA kostar iPhone 3G $199 men måste köpas ihop med
    ett abonnemang med bindningstid, och så kommer det gissningsvis att
    vara även här.


    För den som inte orkar titta på 107 minuter Steve Jobs så har
    bloggen Mahalo Daily klippt ihop en version på 60 sekunder som
    innehåller det viktigaste (hittad på både Digg och Macfeber).











    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1213202580000, + "created_by": 6, + "updated_at": 1213202580000, + "updated_by": 6, + "published_at": 1213202580000, + "published_by": 6 + }, + { + "id": 212, + "title": "SQL Server 2008 finns nu som Release Candidate", + "slug": "sql-server-2008-finns-nu-som-release-candidate", + "markdown": "\r\n\r\n\r\n\r\nJohan Lindfors tipsar på sin blogg om att det förra veckan släpptes en s.k. Release Candidate av SQL Server 2008. En RC är en version som enligt plan ska bli den skarpa versionen om inga buggar hittas. Hittar man fel försöker man igen och släpper en ny RC till dess att man är nöjd (FireFox 3 hann t.ex. komma upp i RC3, som nu är den skarpa versionen). Microsoft kallar den här versionen för RC0 vilket väl får vittna om att det ändå inte är så sannolikt att det blir just den här versionen som släpps senare i år.\r\n\r\n\r\nEtt axplock i salig röra över nya funktioner i SQL Server 2008:\r\n\r\n\r\nKryptering den lagrade information på disken (utan att applikationer som använder databasen behöver känna till eller anpassas för det)\r\nInbyggd komprimering av backuper\r\nIntegration med filsystemet - man kan specificera att vissa kolumner ska lagras som filer, kan vara fiffigt för t.ex. dokument och bilder som lagras i databasen. Detta sker helt transparent för applikationerna.\r\nMöjlighet att tilldela SQL Servern fler CPU:er under drift\r\nBättre övervakning och styrning av prestanda\r\nIntellisense (kommandohjälp) i Management Studio\r\nEn ny datumtyp med stöd för tidzoner och endast datum eller endast tid\r\nÄndringshantering - man kan spåra ändringar i tabeller över tid\r\nNytt SQL-kommando: MERGE. MERGE gör UPDATE om raden redan finns och INSERT om den inte finns.\r\nDatatyper för geografiska data och geometriska data\r\nBättre stöd för XML\r\nIntegrerad fulltextsökning (inga externa tjänster behövs längre)\r\nNya indextyper\r\nInbyggt stöd för Reporting Services (IIS behövs inte längre) som numera också kan producera Word-rapporter\r\nStar Join (be mig inte förklara :-))\r\nMöjlighet att skicka in tabeller som argument till funktioner\r\nSQL Server 2008 RC0 har en tidsbegränsning på 180 dagar. Ladda ner och testa här!\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/logo_sql_2008_microsoft_2.jpg)", + "html": "



    Johan Lindfors tipsar på sin blogg om att det förra veckan släpptes en s.k. Release Candidate av SQL Server 2008. En RC är en version som enligt plan ska bli den skarpa versionen om inga buggar hittas. Hittar man fel försöker man igen och släpper en ny RC till dess att man är nöjd (FireFox 3 hann t.ex. komma upp i RC3, som nu är den skarpa versionen). Microsoft kallar den här versionen för RC0 vilket väl får vittna om att det ändå inte är så sannolikt att det blir just den här versionen som släpps senare i år.


    Ett axplock i salig röra över nya funktioner i SQL Server 2008:



    • Kryptering den lagrade information på disken (utan att applikationer som använder databasen behöver känna till eller anpassas för det)

    • Inbyggd komprimering av backuper

    • Integration med filsystemet - man kan specificera att vissa kolumner ska lagras som filer, kan vara fiffigt för t.ex. dokument och bilder som lagras i databasen. Detta sker helt transparent för applikationerna.

    • Möjlighet att tilldela SQL Servern fler CPU:er under drift

    • Bättre övervakning och styrning av prestanda

    • Intellisense (kommandohjälp) i Management Studio

    • En ny datumtyp med stöd för tidzoner och endast datum eller endast tid

    • Ändringshantering - man kan spåra ändringar i tabeller över tid

    • Nytt SQL-kommando: MERGE. MERGE gör UPDATE om raden redan finns och INSERT om den inte finns.

    • Datatyper för geografiska data och geometriska data

    • Bättre stöd för XML

    • Integrerad fulltextsökning (inga externa tjänster behövs längre)

    • Nya indextyper

    • Inbyggt stöd för Reporting Services (IIS behövs inte längre) som numera också kan producera Word-rapporter

    • Star Join (be mig inte förklara :-))

    • Möjlighet att skicka in tabeller som argument till funktioner

    • SQL Server 2008 RC0 har en tidsbegränsning på 180 dagar. Ladda ner och testa här!


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1213871100000, + "created_by": 6, + "updated_at": 1213871100000, + "updated_by": 6, + "published_at": 1213871100000, + "published_by": 6 + }, + { + "id": 214, + "title": "Storleken har betydelse", + "slug": "storleken-har-betydelse", + "markdown": "\r\n\r\n\r\nMed tjänsten sizeeasy kan man enkelt jämföra olika sakers storlek. Det finns ett antal färdiga referensobjekt som en tändsticksask, en kortlek, ett A4-papper, en TV-apparat och en innerdörr (!). Man kan också enkelt mata in egna objekt, som kan visas bredvid varandra i 3D eller lagda ovanpå varandra i någon av de tre dimensionerna.\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/sizeeasy.png)\r\n\r\n\r\nNär man har matat in ett gäng objekt man är nöjd med kan man spara jämförelsen som då får en egen adress, som den ovan: http://www.sizeasy.com/page/size_comparison/14707-iPhone-3G-vs-Touch-Pro-vs-Xperia-vs-MTeoR-vs-Touch-Diamond. Man kan också titta på andras jämförelser - jag kan skvallra om att jämförelser med iPhone är ganska populära.\r\n\r\n", + "html": "


    Med tjänsten sizeeasy kan man enkelt jämföra olika sakers storlek. Det finns ett antal färdiga referensobjekt som en tändsticksask, en kortlek, ett A4-papper, en TV-apparat och en innerdörr (!). Man kan också enkelt mata in egna objekt, som kan visas bredvid varandra i 3D eller lagda ovanpå varandra i någon av de tre dimensionerna.








    När man har matat in ett gäng objekt man är nöjd med kan man spara jämförelsen som då får en egen adress, som den ovan: http://www.sizeasy.com/page/size_comparison/14707-iPhone-3G-vs-Touch-Pro-vs-Xperia-vs-MTeoR-vs-Touch-Diamond. Man kan också titta på andras jämförelser - jag kan skvallra om att jämförelser med iPhone är ganska populära.


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "te testa en telefon i verkligheten så kan man åtminstone jämföra den med andra telefoner med den smarta tjänsten sizeeasy.", + "author_id": 6, + "created_at": 1215534600000, + "created_by": 6, + "updated_at": 1215534600000, + "updated_by": 6, + "published_at": 1215534600000, + "published_by": 6 + }, + { + "id": 215, + "title": "iPhone 3G - Jesustelefon?", + "slug": "iphone-3g---jesustelefon", + "markdown": "\r\n\r\n\r\nEfter några semesterveckors intensivt användande tänkte jag dela med mig av mina erfarenheter till eventuella spekulanter för nästa leverans.\r\n\r\n\r\nFörst och främst, det första intrycket av telefonen är att den är grymt genomarbetad! Active sync konfigurerades på tre sekunder och är fullt integrerat i telefonen. Tangent- bordet är till en början svårt att skriva på men efter en stunds tragglande går det riktigt fort att skriva sina meningar.\r\n\r\n\r\nNär man använt iphonen en stund och sedan provar en vanlig gammal telefon så inser man att det inte finns någon återvändo. Detta är annat än en ny telefon.\r\n\r\n\r\nAllt prat om nackdelarna kan riskera att överskugga den revolutionerande telefon som detta ändå är. Men det finns ändå några brister som man bör känna till:\r\n\r\nDen går ej att använda som modem. Bluetooth profilen som finns stödjer endast handsfree. \r\n\r\nCut&paste. Finns ännu inte, det spekuleras om varför men jag gissar att de inte kan få till det tillräckligt enkelt och utan konflikt med tex navigation och multitouch. \r\n\r\nBilladdare för iPod/iPhone 2G fungerar ej, Apple har frångått den gamla firewire laddningspinnen och laddar nu endast på usb pinnen vilket inte stöds av någon billaddare utom Belkins men det kommer nog snart bli bättre, men håll utkik efter detta innan du investerar i ny docka eller laddare. \r\n\r\nGPS:en är inte så tillförlitlig, man måste vara utomhus för att få täckning men då är den grym. Att den inte ersätter en vanlig bil gps är det många som varit irriterade över men fördelen med att kunna i realtid få fram sökresultat från Google när man går eller kör bil bygger ett nytt begär. Jag hade tex en aktiv sökning igång efter systembolag när jag var påväg till Smögen och inväntade ett som var nära vägen. Sökningen resulterade i fallande nålar på kartan när jag körde. Riktigt coolt! \r\n\r\nKalendern är inte tillräckligt avancerad, man kan tex inte dra och släppa ett möte utan behöver klicka och redigera. Man kan inte heller se översikt över en vecka. \r\n\r\nTodos (uppgifter) synkas ej, det finns inte ens en todo applikation. \r\n\r\nToyota Prius telefonbok synkroniseras ej från iPhone, tydligen gäller samma sak med mercedes men detta skall eventuellt vara löst iom 2.01 releasen. \r\n\r\nMMS går ej att varken skicka eller ta emot men det kommer antagligen en ny applikation för detta inom kort. Dessutom verkar jpeg formatet som kameran bifogar sina bilder med inte riktigt vara kompatibelt med sony ericsson telefoner, så för oss som suttit med en Sony Ericsson M600 och äntligen ska kunna ta bilder och skicka till nära och kära är skillnaden inte så stor. \r\n\r\nDet saknas också en generell filhanterare för att kunna flytta filer, arrangera om och skicka via bluetooth etc, men återigen : när apple inte hittat en enkel lösning så väntar dom hellre, och det hedrar dem! \r\n\r\n![Bild](http://tekniken.nu/uploads/iphone.png)", + "html": "


    Efter några semesterveckors intensivt användande tänkte jag dela med mig av mina erfarenheter till eventuella spekulanter för nästa leverans.


    Först och främst, det första intrycket av telefonen är att den är grymt genomarbetad! Active sync konfigurerades på tre sekunder och är fullt integrerat i telefonen. Tangent- bordet är till en början svårt att skriva på men efter en stunds tragglande går det riktigt fort att skriva sina meningar.


    När man använt iphonen en stund och sedan provar en vanlig gammal telefon så inser man att det inte finns någon återvändo. Detta är annat än en ny telefon.


    Allt prat om nackdelarna kan riskera att överskugga den revolutionerande telefon som detta ändå är. Men det finns ändå några brister som man bör känna till:


  • Den går ej att använda som modem. Bluetooth profilen som finns stödjer endast handsfree.

  • Cut&paste. Finns ännu inte, det spekuleras om varför men jag gissar att de inte kan få till det tillräckligt enkelt och utan konflikt med tex navigation och multitouch.

  • Billaddare för iPod/iPhone 2G fungerar ej, Apple har frångått den gamla firewire laddningspinnen och laddar nu endast på usb pinnen vilket inte stöds av någon billaddare utom Belkins men det kommer nog snart bli bättre, men håll utkik efter detta innan du investerar i ny docka eller laddare.

  • GPS:en är inte så tillförlitlig, man måste vara utomhus för att få täckning men då är den grym. Att den inte ersätter en vanlig bil gps är det många som varit irriterade över men fördelen med att kunna i realtid få fram sökresultat från Google när man går eller kör bil bygger ett nytt begär. Jag hade tex en aktiv sökning igång efter systembolag när jag var påväg till Smögen och inväntade ett som var nära vägen. Sökningen resulterade i fallande nålar på kartan när jag körde. Riktigt coolt!

  • Kalendern är inte tillräckligt avancerad, man kan tex inte dra och släppa ett möte utan behöver klicka och redigera. Man kan inte heller se översikt över en vecka.

  • Todos (uppgifter) synkas ej, det finns inte ens en todo applikation.

  • Toyota Prius telefonbok synkroniseras ej från iPhone, tydligen gäller samma sak med mercedes men detta skall eventuellt vara löst iom 2.01 releasen.

  • MMS går ej att varken skicka eller ta emot men det kommer antagligen en ny applikation för detta inom kort. Dessutom verkar jpeg formatet som kameran bifogar sina bilder med inte riktigt vara kompatibelt med sony ericsson telefoner, så för oss som suttit med en Sony Ericsson M600 och äntligen ska kunna ta bilder och skicka till nära och kära är skillnaden inte så stor.

  • Det saknas också en generell filhanterare för att kunna flytta filer, arrangera om och skicka via bluetooth etc, men återigen : när apple inte hittat en enkel lösning så väntar dom hellre, och det hedrar dem!

  • ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1087, + "created_at": 1218452400000, + "created_by": 1087, + "updated_at": 1218452400000, + "updated_by": 1087, + "published_at": 1218452400000, + "published_by": 1087 + }, + { + "id": 216, + "title": "iPhone 3G: Världens bästa telefon", + "slug": "iphone-3g-varldens-basta-telefon", + "markdown": "\r\n\r\n\r\nSåhär en månad efter inköpet och tillbaka på jobbet känns det som att det är dags för en utvärdering av min nya telefon: iPhone 3G. Jag kan direkt säga att iPhone är den bästa telefon jag har haft! Den känns som ett otroligt stort steg från min förra telefon, som inte alls var dålig (hoppet till iPhone känns större än det förra verkliga generationsskiftet, som för mig var mellan en svartvit Nokia 6210 till SonyEricssons revolutionerande T610 med färgskärm, GPRS och kamera).\r\n\r\n\r\n\r\n\r\n\r\n## Bäst\r\n\r\n\r\nHelheten\r\n\r\niPhone känns extremt genomarbetad. Exteriören, det sjukt snygga och funktionella gränssnittet och applikationerna gör iPhone till något helt unikt. Man blir fortfarande lika glad när man tar fram sin telefon efter att ha haft den en månad. Den växlar snabbt mellan 3G och WLAN, att konfigurera och läsa mail med bilagor av olika slag är enkelt. Den har en riktigt stor och bra skärm, men trots yttermåtten är den så platt att den ligger extremt bra i fickan - man tänker inte på att den är där. Jag som regelbundet har tittat på film och TV-serier på en mobil med högst hälften så stor skärm tidigare, tycker förstås att den stora skärmen är en av de riktigt stora fördelarna (även om det inte är unikt för iPhone på något sätt). \r\n\r\n\r\n\r\n\r\nSafari\r\n\r\nAtt surfa på iPhone är något helt annat än vanligt mobilsurfande. En i princip fullfjädrad Safari gör att man kan surfa på nästan alla sidor som man kan med sin vanliga dator, till och med vissa Internetbanker. Den smarta zoomfunktionen gör att man får överblick över webbplatser på ett sätt som ofta tappas helt på andra mobiltelefoner. Det finns inget Flash-stöd, men det har åtminstone jag inte lidit över så särskilt. Det har ryktats om stöd för Flash och Java, så det hoppas jag kommer inom kort.\r\n\r\n\r\n\r\n\r\nApp Store\r\n\r\nApple har fått mycket kritik från utvecklare för att den inbyggda mjukvarudistributionsplattformen App Store är krånglig att få med sina alster i, och jag kan bara hålla med. Men trots detta är App Store en riktig vinnare för slutanvändaren. Det är oerhört simpelt att bläddra eller söka fram program som är gratis eller kostar väldigt lite. Under mina fyra veckor med iPhone har jag redan installerat fler applikationer än under 4 år med olika Windows Mobile-enheter. Man vet att applikationerna man laddar ner kommer att fungera, och man behöver inte leta själv och på samma sätt lita på att olika tillverkare håller vad de lovar i kompatibilitet.\r\n\r\n\r\n## Sämst\r\n\r\n\r\nDet sämsta med iPhone är att är den är låst. Apple har satt ihop ett attraktivt paket med många kraftfulla funktioner, men passar det inte så kan du som användare inte göra särskilt mycket åt det. Ett exempel är applikationer - man kan bara installera via App Store, det går inte att erbjuda en applikation för nedladdning via en webbplats eller liknande.\r\n\r\n\r\nEtt annat exempel är att alla musik- och videofiler måste överföras via Itunes. Itunes är en ny och väldigt hemsk bekantskap - jag måste säga att jag verkligen hatar Itunes. Förutom att det är extremt prestandakrävande och långsamt (iaf i Windows) så kan man bara synkronisera sin iPhone med en Itunes-installation. Om du vill ta med dig musik från kontoret är det bara att glömma om du synkar din telefon med Itunes hemma. Om du vill ha egna ringsignaler så går det just nu genom att man pysslar lite och döper om filer, men det har varit spärrat i vissa versioner av Itunes och vem vet när det spärras igen.\r\n\r\n\r\nSom om inte den tekniska låsningen skulle räcka har Apple har dessutom låst sig till en enda operatör i varje land. Det här är verkligen inte konsumentvänligt! Jag hoppas att Apple ändrar sig på den här punkten och inte dödar en plattform genom ett alltför stort kontrollbehov (titta bara på hur det gick för Sony PSP).\r\n\r\n\r\n## Summering\r\n\r\n\r\nTrots den stora invändningen ovan är jag helt såld på den här telefonen, om det inte framgått redan. Mitt råd: köp en så fort det går!\r\n\r\n\r\n\r\nJag är inget Apple-fan alls sen tidigare (jag har fortfarande mardrömmar om viktiga labbar som gick förlorade när jag pluggade för att applikationerna inte kunde öka sin minnesmängd efter att man startat dem - här pratar vi System 7 - och ibland fick \"för lite minne för att kunna spara arbetet\"). Men iPhone är så bra att jag gladeligen accepterar alla de små saker som är dumma och kan göras mycket bättre och bara ser den fantastiska helheten.\r\n\r\n\r\n## 10 saker jag önskar mig av/till iPhone:\r\n\r\nRiktig filhantering där man kan komma åt alla filer från datorn, utan den dumma omvägen via Itunes.\r\nÅÄÖ som egna knappar på tangentbordet\r\nNavigeringsprogram med turn-by-turn\r\nStöd för Safari på Skandiabanken\r\nLjus- och kontrastinställningar när man spelar video i iPod-applikationen\r\nRemote Desktop-klient (VNC finns redan)\r\nEtt riktigt bra Formel 1-spel\r\nMöjlighet att själv välja ifall man vill skala om bilder som bifogas i mail\r\nVridbar mailklient (alla andra program går ju att vrida på)\r\nSmartare autotext (just nu stjälper den den lika ofta som den hjälper)\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/iphone.png)", + "html": "


    Såhär en månad efter inköpet och tillbaka på jobbet känns det som att det är dags för en utvärdering av min nya telefon: iPhone 3G. Jag kan direkt säga att iPhone är den bästa telefon jag har haft! Den känns som ett otroligt stort steg från min förra telefon, som inte alls var dålig (hoppet till iPhone känns större än det förra verkliga generationsskiftet, som för mig var mellan en svartvit Nokia 6210 till SonyEricssons revolutionerande T610 med färgskärm, GPRS och kamera).




    Bäst



    Helheten


    iPhone känns extremt genomarbetad. Exteriören, det sjukt snygga och funktionella gränssnittet och applikationerna gör iPhone till något helt unikt. Man blir fortfarande lika glad när man tar fram sin telefon efter att ha haft den en månad. Den växlar snabbt mellan 3G och WLAN, att konfigurera och läsa mail med bilagor av olika slag är enkelt. Den har en riktigt stor och bra skärm, men trots yttermåtten är den så platt att den ligger extremt bra i fickan - man tänker inte på att den är där. Jag som regelbundet har tittat på film och TV-serier på en mobil med högst hälften så stor skärm tidigare, tycker förstås att den stora skärmen är en av de riktigt stora fördelarna (även om det inte är unikt för iPhone på något sätt).



    Safari


    Att surfa på iPhone är något helt annat än vanligt mobilsurfande. En i princip fullfjädrad Safari gör att man kan surfa på nästan alla sidor som man kan med sin vanliga dator, till och med vissa Internetbanker. Den smarta zoomfunktionen gör att man får överblick över webbplatser på ett sätt som ofta tappas helt på andra mobiltelefoner. Det finns inget Flash-stöd, men det har åtminstone jag inte lidit över så särskilt. Det har ryktats om stöd för Flash och Java, så det hoppas jag kommer inom kort.



    App Store


    Apple har fått mycket kritik från utvecklare för att den inbyggda mjukvarudistributionsplattformen App Store är krånglig att få med sina alster i, och jag kan bara hålla med. Men trots detta är App Store en riktig vinnare för slutanvändaren. Det är oerhört simpelt att bläddra eller söka fram program som är gratis eller kostar väldigt lite. Under mina fyra veckor med iPhone har jag redan installerat fler applikationer än under 4 år med olika Windows Mobile-enheter. Man vet att applikationerna man laddar ner kommer att fungera, och man behöver inte leta själv och på samma sätt lita på att olika tillverkare håller vad de lovar i kompatibilitet.


    Sämst



    Det sämsta med iPhone är att är den är låst. Apple har satt ihop ett attraktivt paket med många kraftfulla funktioner, men passar det inte så kan du som användare inte göra särskilt mycket åt det. Ett exempel är applikationer - man kan bara installera via App Store, det går inte att erbjuda en applikation för nedladdning via en webbplats eller liknande.


    Ett annat exempel är att alla musik- och videofiler måste överföras via Itunes. Itunes är en ny och väldigt hemsk bekantskap - jag måste säga att jag verkligen hatar Itunes. Förutom att det är extremt prestandakrävande och långsamt (iaf i Windows) så kan man bara synkronisera sin iPhone med en Itunes-installation. Om du vill ta med dig musik från kontoret är det bara att glömma om du synkar din telefon med Itunes hemma. Om du vill ha egna ringsignaler så går det just nu genom att man pysslar lite och döper om filer, men det har varit spärrat i vissa versioner av Itunes och vem vet när det spärras igen.


    Som om inte den tekniska låsningen skulle räcka har Apple har dessutom låst sig till en enda operatör i varje land. Det här är verkligen inte konsumentvänligt! Jag hoppas att Apple ändrar sig på den här punkten och inte dödar en plattform genom ett alltför stort kontrollbehov (titta bara på hur det gick för Sony PSP).


    Summering



    Trots den stora invändningen ovan är jag helt såld på den här telefonen, om det inte framgått redan. Mitt råd: köp en så fort det går!



    Jag är inget Apple-fan alls sen tidigare (jag har fortfarande mardrömmar om viktiga labbar som gick förlorade när jag pluggade för att applikationerna inte kunde öka sin minnesmängd efter att man startat dem - här pratar vi System 7 - och ibland fick \"för lite minne för att kunna spara arbetet\"). Men iPhone är så bra att jag gladeligen accepterar alla de små saker som är dumma och kan göras mycket bättre och bara ser den fantastiska helheten.


    10 saker jag önskar mig av/till iPhone:



    • Riktig filhantering där man kan komma åt alla filer från datorn, utan den dumma omvägen via Itunes.

    • ÅÄÖ som egna knappar på tangentbordet

    • Navigeringsprogram med turn-by-turn

    • Stöd för Safari på Skandiabanken

    • Ljus- och kontrastinställningar när man spelar video i iPod-applikationen

    • Remote Desktop-klient (VNC finns redan)

    • Ett riktigt bra Formel 1-spel

    • Möjlighet att själv välja ifall man vill skala om bilder som bifogas i mail

    • Vridbar mailklient (alla andra program går ju att vrida på)

    • Smartare autotext (just nu stjälper den den lika ofta som den hjälper)


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1218561420000, + "created_by": 6, + "updated_at": 1218561420000, + "updated_by": 6, + "published_at": 1218561420000, + "published_by": 6 + }, + { + "id": 220, + "title": "Microsoft SQL Server 2008 i skarp version", + "slug": "microsoft-sql-server-2008-i-skarp-version", + "markdown": "\r\n\r\n\r\nNu finns SQL Server 2008 äntligen i skarp version att ladda ner.\r\n\r\n\r\n\r\nViktigt att hålla koll på om man ska installera det är att det kräver .NET Framework 3.5. Kör du vista och vill använda Express-versionen måste du ha .NET Framework 3.5 SP1.\r\n\r\n\r\n\r\nBland dom största nyheterna för utvecklare (i Management Studio) är:\r\n\r\n\r\n\r\nIntellisense, d.v.s. nu behöver man inte komma ihåg alla tabellnamn och kolumnnamn utantill utan får hjälp av editorn.\r\nNamnge flikarna i query editor så man slipper dom helt intetsägande namnen.\r\n\r\n\r\n\r\nNär man kopierar SQL-resultaten går det att få med rubrikerna både när man väljer rader men även om man väljer enskilda celler, det lär spara en del tid när man vill göra en enkel export till Excel.\r\n\r\n\r\n\r\nPrestanda, Senaste versionerna har ju varit seg som sirap så det är skönt att se att det finns med en hel del prestandafixar i nyheterna.\r\n\r\n\r\n\r\nInbyggd debugger! Nu går det alltså att debugga en SQL-fråga, detta har tidigare bara varit möjligt inifrån Visual Studio men nu är det möjligt direkt inifrån Management Studio.\r\n\r\n\r\nAndra nyheter i SQL Server 2008 har vi berättat om tidigare\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/logo_sql_2008_microsoft_2.jpg)", + "html": "


    Nu finns SQL Server 2008 äntligen i skarp version att ladda ner.



    Viktigt att hålla koll på om man ska installera det är att det kräver .NET Framework 3.5. Kör du vista och vill använda Express-versionen måste du ha .NET Framework 3.5 SP1.



    Bland dom största nyheterna för utvecklare (i Management Studio) är:



    • Intellisense, d.v.s. nu behöver man inte komma ihåg alla tabellnamn och kolumnnamn utantill utan får hjälp av editorn.

    • Namnge flikarna i query editor så man slipper dom helt intetsägande namnen.





    • När man kopierar SQL-resultaten går det att få med rubrikerna både när man väljer rader men även om man väljer enskilda celler, det lär spara en del tid när man vill göra en enkel export till Excel.





    • Prestanda, Senaste versionerna har ju varit seg som sirap så det är skönt att se att det finns med en hel del prestandafixar i nyheterna.





    • Inbyggd debugger! Nu går det alltså att debugga en SQL-fråga, detta har tidigare bara varit möjligt inifrån Visual Studio men nu är det möjligt direkt inifrån Management Studio.


    • Andra nyheter i SQL Server 2008 har vi berättat om tidigare




    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1089, + "created_at": 1219145100000, + "created_by": 1089, + "updated_at": 1219145100000, + "updated_by": 1089, + "published_at": 1219145100000, + "published_by": 1089 + }, + { + "id": 221, + "title": "HTC Touch Diamond - första intrycket", + "slug": "htc-touch-diamond---forsta-intrycket", + "markdown": "\r\n\r\n\r\nDå min tidigare telefon var en Sony Ericsson K750i kommer alla jämförelser ske mot den telefonen och eftersom jag aldrig tidigare använt en windows mobile telefon så får man se mig som en absolut nybörjare.\r\n\r\n\r\n## Uppackning och installation\r\n\r\n\r\nTelefonen kommer i en pyramidformad låda som definitivt sticker ut ur mängden. Efter att ha svurit lite över hur hårt igentejpat locket var så uppenbarade sig telefonen och gav sitt första intryck. Den är hälften så tjock som min gamla mobil, c:a 0,5 cm bredare och aning kortare. Allt detta gör att den passar väldigt bra i jeansfickan trots att den delar plats med en (Onico) snusdosa. Min gamla telefon passade inte alls lika bra utan kändes aning klumpig.\r\n\r\n\r\n\r\nInnan jag kunde använda telefonen var jag tvungen att ladda den vilket tog c:a 2 timmar (normalt ska en full laddning från tom ta ca 3 timmar men batteriet är delvis laddat från fabrik). Under tiden förberedde jag mig genom att säkerhetskopiera kontakterna på simkortet (bara utifall att...) och ladda ner de program och uppdateringar jag behövde. Eftersom jag hade läst en del om telefonen innan så visste jag vikten av att ha ett nytt ROM (alltså firmware) eftersom prestandan var under all kritik i tidigare versioner, så jag valde att installera det nya rommet innan jag testade nånting alls. Då telefonen hade ett svenskt rom och jag ville ha engelskt (av gammal vana) så krävdes en del pill och hack (se hur man gör på http://www.modmydiamond.info) för att få in det nya rommet.\r\n\r\n## Gränssnittet\r\n\r\nTelefonen använder Windows Mobile 6.1 i grunden men kör även sitt eget gränsnitt som heter TouchFlow 3D ovanpå. Windows Mobile lider ganska mycket av att det är gjort för att styra med en tunn pennspets istället för fingarna. Touchflow är gjort specifikt för den här mobilen och är anpassad till den höga upplösningen och för fingerstyrning. Dock hamnar man ofta i windows mobile läget och där kan det vara svårt att pricka de små knapparna med fingrarna. Med telefonen medföljer med en penna med det känns ju nesligt att ta fram den för att trycka på ett par knappar.\r\n\r\n## Hårdvaran\r\n\r\nDen 2.5\" stora skärmen på 640x480 är imponerande skarp och ser verkligen grym ut trots att den bara har 65 000 färger. Under den grymma skärmen sitter det ett gäng knappar: hemknappen, tillbakaknappen, svara(ok) och lägg på(avbryt) samt en snurrplatta i mitten. Knapparna har en lite underlig känsla, nästan som dom gamla ZX Spectrum-tangentborden. Längst upp sitter på/av/sov-knappen och den sticker verkligen inte ut mer än nödvändigt och klarar knappt att man trycker med den köttiga delen av fingerspetsen, detsamma gäller volymknapparna på sidan som också är aning hårda att trycka in. Inbyggt är också en accerelometer som gör det möjligt att styra mjukvaran med att vinkla mobilen.\r\n\r\n## Som telefon\r\n\r\nFör att kunna använda kontakterna på SIM-kortet importerade jag dem via en SIM-kortsmanager, detta resulterade dock i att alla telefonnummer fick en egen rad (hade 2-3 telefonnummer per kontakt tidigare) så det blev lite rörigt. Jag lade upp 2 av dom vanligaste numren som favorit i Touchflow och där gick det enklare att hitta förstås. Under dom kortare samtal jag ringt både med och utan det medföljande headset så upplevde jag ljudet som aning kallt och lätt metalliskt vilket jag också märkt när jag testat lyssna på musik (bara genom headsetet då förstås).\r\n\r\n## Väckarklocka\r\n\r\nEftersom jag använde min gamla telefon som väckarklocka var jag förstås tvungen att använda denna funktionen också - därav den egna rubriken. Glädjande är att man kan lägg upp flera olika repeterande larm (bra om man vill ha en tid för att hinna med måndagsmötet och en annan tid för resten av arbetsveckan). Jag vaknade innan väckaren som vanligt och märkte att larmsignalen var rätt tyst, så den måste jag kolla på ikväll. Ville snooza en stund som vanligt och hittade under menyn där bl.a. snooze var med (d.v.s. inte helt intitutivt och kräver lite fingerfärdighet) och där kom faktiskt en positiv överraskning, det gick att välja flera snoozelängder som t.ex. 5, 10, 15 eller 20 minuter så nu behöver man inte dubbelsnooza för att få sova 20 minuter till!\r\n\r\n## Nästa blogpost\r\n\r\nEftersom detta bara är första intrycket från en helt ovan användare utan igentliga referenspunkter så räknar jag med att behöva en inkörning på några veckor för att hitta styrkorna och svagheterna i telefonen så om några veckor kommer en ny recension där jag går igenom hur bra/dålig telefonen faktiskt är.\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/htc_touch_diamond.png)", + "html": "


    Då min tidigare telefon var en Sony Ericsson K750i kommer alla jämförelser ske mot den telefonen och eftersom jag aldrig tidigare använt en windows mobile telefon så får man se mig som en absolut nybörjare.


    Uppackning och installation



    Telefonen kommer i en pyramidformad låda som definitivt sticker ut ur mängden. Efter att ha svurit lite över hur hårt igentejpat locket var så uppenbarade sig telefonen och gav sitt första intryck. Den är hälften så tjock som min gamla mobil, c:a 0,5 cm bredare och aning kortare. Allt detta gör att den passar väldigt bra i jeansfickan trots att den delar plats med en (Onico) snusdosa. Min gamla telefon passade inte alls lika bra utan kändes aning klumpig.


    Innan jag kunde använda telefonen var jag tvungen att ladda den vilket tog c:a 2 timmar (normalt ska en full laddning från tom ta ca 3 timmar men batteriet är delvis laddat från fabrik). Under tiden förberedde jag mig genom att säkerhetskopiera kontakterna på simkortet (bara utifall att...) och ladda ner de program och uppdateringar jag behövde. Eftersom jag hade läst en del om telefonen innan så visste jag vikten av att ha ett nytt ROM (alltså firmware) eftersom prestandan var under all kritik i tidigare versioner, så jag valde att installera det nya rommet innan jag testade nånting alls. Då telefonen hade ett svenskt rom och jag ville ha engelskt (av gammal vana) så krävdes en del pill och hack (se hur man gör på http://www.modmydiamond.info) för att få in det nya rommet.


    Gränssnittet


    Telefonen använder Windows Mobile 6.1 i grunden men kör även sitt eget gränsnitt som heter TouchFlow 3D ovanpå. Windows Mobile lider ganska mycket av att det är gjort för att styra med en tunn pennspets istället för fingarna. Touchflow är gjort specifikt för den här mobilen och är anpassad till den höga upplösningen och för fingerstyrning. Dock hamnar man ofta i windows mobile läget och där kan det vara svårt att pricka de små knapparna med fingrarna. Med telefonen medföljer med en penna med det känns ju nesligt att ta fram den för att trycka på ett par knappar.


    Hårdvaran


    Den 2.5\" stora skärmen på 640x480 är imponerande skarp och ser verkligen grym ut trots att den bara har 65 000 färger. Under den grymma skärmen sitter det ett gäng knappar: hemknappen, tillbakaknappen, svara(ok) och lägg på(avbryt) samt en snurrplatta i mitten. Knapparna har en lite underlig känsla, nästan som dom gamla ZX Spectrum-tangentborden. Längst upp sitter på/av/sov-knappen och den sticker verkligen inte ut mer än nödvändigt och klarar knappt att man trycker med den köttiga delen av fingerspetsen, detsamma gäller volymknapparna på sidan som också är aning hårda att trycka in. Inbyggt är också en accerelometer som gör det möjligt att styra mjukvaran med att vinkla mobilen.


    Som telefon


    För att kunna använda kontakterna på SIM-kortet importerade jag dem via en SIM-kortsmanager, detta resulterade dock i att alla telefonnummer fick en egen rad (hade 2-3 telefonnummer per kontakt tidigare) så det blev lite rörigt. Jag lade upp 2 av dom vanligaste numren som favorit i Touchflow och där gick det enklare att hitta förstås. Under dom kortare samtal jag ringt både med och utan det medföljande headset så upplevde jag ljudet som aning kallt och lätt metalliskt vilket jag också märkt när jag testat lyssna på musik (bara genom headsetet då förstås).


    Väckarklocka


    Eftersom jag använde min gamla telefon som väckarklocka var jag förstås tvungen att använda denna funktionen också - därav den egna rubriken. Glädjande är att man kan lägg upp flera olika repeterande larm (bra om man vill ha en tid för att hinna med måndagsmötet och en annan tid för resten av arbetsveckan). Jag vaknade innan väckaren som vanligt och märkte att larmsignalen var rätt tyst, så den måste jag kolla på ikväll. Ville snooza en stund som vanligt och hittade under menyn där bl.a. snooze var med (d.v.s. inte helt intitutivt och kräver lite fingerfärdighet) och där kom faktiskt en positiv överraskning, det gick att välja flera snoozelängder som t.ex. 5, 10, 15 eller 20 minuter så nu behöver man inte dubbelsnooza för att få sova 20 minuter till!


    Nästa blogpost


    Eftersom detta bara är första intrycket från en helt ovan användare utan igentliga referenspunkter så räknar jag med att behöva en inkörning på några veckor för att hitta styrkorna och svagheterna i telefonen så om några veckor kommer en ny recension där jag går igenom hur bra/dålig telefonen faktiskt är.


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1089, + "created_at": 1219248960000, + "created_by": 1089, + "updated_at": 1219248960000, + "updated_by": 1089, + "published_at": 1219248960000, + "published_by": 1089 + }, + { + "id": 224, + "title": "Google släpper en egen webbläsare", + "slug": "google-slapper-en-egen-webblasare", + "markdown": "\r\n\r\n\r\nEtt mycket löst rykte från förra året har visat sig bli verklighet\r\nsnabbare än någon hade trott. Google kommer att släppa en egen\r\nwebbläsare med namnet Google Chrome. Lanseringen kommer snart, kanske\r\nredan imorgon onsdag.\r\n\r\n\r\nGoogle Chrome kommer att bygga på webkit,\r\nsamma renderingsmotor som Apples Safari är byggd på. Utöver detta har\r\nman lagt till en helt egen inpluggad motor för JavaScript och ett\r\nmycket mer avancerat sätt att se på hur interna processer och trådar\r\noch deras minne ska hanteras än vad som finns i andra webbläsare. Allt förklaras i en mycket pedagogisk men\r\nkanske lite långdragen serietidning(!).\r\n\r\n\r\nOrsaken till att Google vill ha en egen webbläsare är officiellt sett\r\ninte riktigt uttalad. Man kan dock dra en del slutsatser av det som sas på lanseringskonferensen för Googles mobilplattform Android. Där\r\nframhöll man behovet av en mobil webbplattform som man vet klarar av\r\natt köra de applikationer som (enligt Google) utgör den stora delen av\r\nsurfandet nuförtiden. Analogt kan man tänka sig att man vill erbjuda en\r\nstabil webbläsare för kontorsbruk där man har lagt extra kraft på det\r\nsom behövs för att köra Google Documents och liknande webbapplikationer\r\n- sådant som processhantering, minneshantering och JavaScript-hastighet.\r\n\r\n\r\nKonkurrens är alltid bra, så vi är spända på att se hur Google\r\nChrome kommer att fungera. Samtidigt kan man ju som webbutvecklare\r\nibland fundera över hur mycket dyrare alla webbprojekt blir per ny\r\nwebbläsare som ska stödjas...\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/google_chrome.png)", + "html": "


    Ett mycket löst rykte från förra året har visat sig bli verklighet
    snabbare än någon hade trott. Google kommer att släppa en egen
    webbläsare med namnet Google Chrome. Lanseringen kommer snart, kanske
    redan imorgon onsdag.


    Google Chrome kommer att bygga på webkit,
    samma renderingsmotor som Apples Safari är byggd på. Utöver detta har
    man lagt till en helt egen inpluggad motor för JavaScript och ett
    mycket mer avancerat sätt att se på hur interna processer och trådar
    och deras minne ska hanteras än vad som finns i andra webbläsare. Allt förklaras i en mycket pedagogisk men
    kanske lite långdragen serietidning(!).


    Orsaken till att Google vill ha en egen webbläsare är officiellt sett
    inte riktigt uttalad. Man kan dock dra en del slutsatser av det som sas på lanseringskonferensen för Googles mobilplattform Android. Där
    framhöll man behovet av en mobil webbplattform som man vet klarar av
    att köra de applikationer som (enligt Google) utgör den stora delen av
    surfandet nuförtiden. Analogt kan man tänka sig att man vill erbjuda en
    stabil webbläsare för kontorsbruk där man har lagt extra kraft på det
    som behövs för att köra Google Documents och liknande webbapplikationer
    - sådant som processhantering, minneshantering och JavaScript-hastighet.


    Konkurrens är alltid bra, så vi är spända på att se hur Google
    Chrome kommer att fungera. Samtidigt kan man ju som webbutvecklare
    ibland fundera över hur mycket dyrare alla webbprojekt blir per ny
    webbläsare som ska stödjas...






    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "ra processer och JavaScript.", + "author_id": 6, + "created_at": 1220359500000, + "created_by": 6, + "updated_at": 1220359500000, + "updated_by": 6, + "published_at": 1220359500000, + "published_by": 6 + }, + { + "id": 225, + "title": "Teknikfrågan: Vilken blir din nästa mobiltelefon?", + "slug": "teknikfragan-vilken-blir-din-nasta-mobiltelefon", + "markdown": "\r\n\r\n\r\nUngefär dött lopp mellan iPhone 3G och de nya Windows Mobile-mobilerna, där Windows Mobile har ett litet övertag.\r\n\r\n\r\nSvar att notera bland fritextsvaren: \"Sony Ericsson\", \"har redan en iPhone\", \"Nokia N96\", \"Android\" och \"Ingen alls\"\r\n\r\n\r\nSom ni säkert har märkt så har iaf två av tekniken.nus skribenter valt iPhone (och de exempellösa hyllningarna vet inga gränser) och en har valt HTC Touch Diamond.\r\n\r\n\r\nGlöm inte att svara på den nya frågan om Google Chrome\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/mobilfragan.png)", + "html": "


    Ungefär dött lopp mellan iPhone 3G och de nya Windows Mobile-mobilerna, där Windows Mobile har ett litet övertag.


    Svar att notera bland fritextsvaren: \"Sony Ericsson\", \"har redan en iPhone\", \"Nokia N96\", \"Android\" och \"Ingen alls\"


    Som ni säkert har märkt så har iaf två av tekniken.nus skribenter valt iPhone (och de exempellösa hyllningarna vet inga gränser) och en har valt HTC Touch Diamond.


    Glöm inte att svara på den nya frågan om Google Chrome


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 6, + "created_at": 1220440200000, + "created_by": 6, + "updated_at": 1220440200000, + "updated_by": 6, + "published_at": 1220440200000, + "published_by": 6 + }, + { + "id": 226, + "title": "Gör en egen ringsingnal till iPhone", + "slug": "gor-en-egen-ringsingnal-till-iphone", + "markdown": "\r\n\r\n\r\nFixa en egen ringsignal på iPhone såhär:\r\n\r\n\r\nPlocka fram en valfri MP3-fil. Se till att den är max 30 sekunder lång.\r\nImportera filen i Itunes.\r\nHögerklicka på filen och välj \"Konvertera till AAC-format\r\nLeta upp var den konverterade filen har hamnat. Vanligen ligger den på ett krångligt ställe i din användarprofil. Den är dock lätt att hitta om du högerklickar på filen och väljer \"Visa information\", och sen högerklickar på sökvägen och väljer \"visa i windows-utforskaren\"\r\nDöp om filen från minfil.m4a till minfil.m4r\r\nImportera filen på nytt, och nu har den blivit en ringsignal som kan synkas till telefonen!\r\n\r\n\r\nDet är rätt snålt av Apple att det här inte är en inbyggd funktion i Itunes tycker jag. Det här tricket har dessutom varit avstängt i vissa versioner av Itunes - så passa på medan det fortfarande funkar!\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/itunes.png)", + "html": "


    Fixa en egen ringsignal på iPhone såhär:



    1. Plocka fram en valfri MP3-fil. Se till att den är max 30 sekunder lång.

    2. Importera filen i Itunes.

    3. Högerklicka på filen och välj \"Konvertera till AAC-format

    4. Leta upp var den konverterade filen har hamnat. Vanligen ligger den på ett krångligt ställe i din användarprofil. Den är dock lätt att hitta om du högerklickar på filen och väljer \"Visa information\", och sen högerklickar på sökvägen och väljer \"visa i windows-utforskaren\"

    5. Döp om filen från minfil.m4a till minfil.m4r

    6. Importera filen på nytt, och nu har den blivit en ringsignal som kan synkas till telefonen!


    7. Det är rätt snålt av Apple att det här inte är en inbyggd funktion i Itunes tycker jag. Det här tricket har dessutom varit avstängt i vissa versioner av Itunes - så passa på medan det fortfarande funkar!



    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "går finns det ett trick som gör att man slipper det!", + "author_id": 6, + "created_at": 1220441820000, + "created_by": 6, + "updated_at": 1220441820000, + "updated_by": 6, + "published_at": 1220441820000, + "published_by": 6 + }, + { + "id": 227, + "title": "Nja, jag använder nog hellre Internet Explorer", + "slug": "nja-jag-anvander-nog-hellre-internet-explorer", + "markdown": "\r\n\r\n\r\nI användarvillkoren för Googles nya webbläsare Google Chrome så tar sig Google lite väl stora friheter tycker jag. Följande paragraf finns med i de licensvillkor man måste godkänna för att använda Google Chrome. Jag vill ju inte att Google ska ha rätt att reproducera och ändra material som jag skickar in till olika webbplatser jag besöker, eller intranät för den delen. Om anledningen och syftet är att göra reklam gör det mig ännu mindre sugen. \r\n\r\n\r\n\r\nOm jag vore författare och klistrade in mitt manus i webmailen och mailade till en kollega skulle rent teoretiskt Google kunna visa manuset fritt till resten av världen utan att jag ger min tillåtelse. \r\n\r\n\r\n\r\n\r\n11.1 Du behåller upphovsrätten och alla andra rättigheter som du redan har för innehåll som du skickar, lägger upp eller visar på eller via tjänsterna. Genom att skicka, lägga upp eller visa innehållet beviljar du Google en evig, ouppsägbar, världsomspännande, royaltyfri och icke-exklusiv licens att reproducera, anpassa, ändra, översätta, publicera, distribuera och offentligt utföra eller visa allt innehåll som du skickar, lägger upp eller visar på eller via tjänsterna. Denna licens har det enda syftet att göra det möjligt för Google att visa, distribuera och göra reklam för tjänsterna och kan återkallas för vissa tjänster enligt definitionen i tjänsternas ytterligare villkor.\r\n\r\n\r\n\r\n\r\nDon’t be evil Google!\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/incognito.png)", + "html": "


    I användarvillkoren för Googles nya webbläsare Google Chrome så tar sig Google lite väl stora friheter tycker jag. Följande paragraf finns med i de licensvillkor man måste godkänna för att använda Google Chrome. Jag vill ju inte att Google ska ha rätt att reproducera och ändra material som jag skickar in till olika webbplatser jag besöker, eller intranät för den delen. Om anledningen och syftet är att göra reklam gör det mig ännu mindre sugen.



    Om jag vore författare och klistrade in mitt manus i webmailen och mailade till en kollega skulle rent teoretiskt Google kunna visa manuset fritt till resten av världen utan att jag ger min tillåtelse.




    11.1 Du behåller upphovsrätten och alla andra rättigheter som du redan har för innehåll som du skickar, lägger upp eller visar på eller via tjänsterna. Genom att skicka, lägga upp eller visa innehållet beviljar du Google en evig, ouppsägbar, världsomspännande, royaltyfri och icke-exklusiv licens att reproducera, anpassa, ändra, översätta, publicera, distribuera och offentligt utföra eller visa allt innehåll som du skickar, lägger upp eller visar på eller via tjänsterna. Denna licens har det enda syftet att göra det möjligt för Google att visa, distribuera och göra reklam för tjänsterna och kan återkallas för vissa tjänster enligt definitionen i tjänsternas ytterligare villkor.



    Don’t be evil Google!


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": "", + "author_id": 1087, + "created_at": 1220485860000, + "created_by": 1087, + "updated_at": 1220485860000, + "updated_by": 1087, + "published_at": 1220485860000, + "published_by": 1087 + }, + { + "id": 230, + "title": "Canon släpper en efterlängtad uppföljare till EOS 5D", + "slug": "canon-slapper-en-efterlangtad-uppfoljare-till-eos-5d", + "markdown": "\r\n\r\nCanon EOS 5D släpptes 2005 och var en mindre revolution - den första systemkameran för konsumentmarknaden med en fullstor bildsensor (de flesta systemkameror för konsumentmarknaden har en mindre sensor av samma storlek som APS-kameror). Efter det hände inte mycket, fram till det att Nikon tidigare i år släppte sin fullsensormodell D700. \r\n\r\nIgår kunde man läsa på Fotofeber att Canon nu äntligen har släppt sin nya fullsensorkamera under det fantasifulla namnet EOS 5D Mark II till i princip exakt samma pris som D700 (26 000:-). Det här med systemkameror är precis som med operativsystem lite som religion – man har/gillar antingen Nikon eller Canon. Själv är jag en Canon-människa, men jag tycker ändå att man rent objektivt bara kan imponeras av specifikationerna:\r\n21,1 megapixelISO-tal upp till 25 600Videoinspelning i HD (1080, 30fps, upp till 29 minuter per klipp)Magnesiumhus\r\n![Bild](http://tekniken.nu/uploads/633573373285857679-EOS 5D Mark II.png)\r\n\r\nUppdatering: Gizmodo har fått tag i bilder där man har testat videofunktionen: http://gizmodo.com/5052767/a-taste-of-the-canon-5d-mark-iis-mindblowing-full-hd-video. Bilderna är alltså skärmdumpar från videon, inte fotografier. Verkar helt sjukt lovande!\r\n", + "html": "

    Canon EOS 5D släpptes 2005 och var en mindre revolution - den första systemkameran för konsumentmarknaden med en fullstor bildsensor (de flesta systemkameror för konsumentmarknaden har en mindre sensor av samma storlek som APS-kameror). Efter det hände inte mycket, fram till det att Nikon tidigare i år släppte sin fullsensormodell D700.

    Igår kunde man läsa på Fotofeber att Canon nu äntligen har släppt sin nya fullsensorkamera under det fantasifulla namnet EOS 5D Mark II till i princip exakt samma pris som D700 (26 000:-). Det här med systemkameror är precis som med operativsystem lite som religion – man har/gillar antingen Nikon eller Canon. Själv är jag en Canon-människa, men jag tycker ändå att man rent objektivt bara kan imponeras av specifikationerna:

    • 21,1 megapixel
    • ISO-tal upp till 25 600
    • Videoinspelning i HD (1080, 30fps, upp till 29 minuter per klipp)
    • Magnesiumhus


    Uppdatering: Gizmodo har fått tag i bilder där man har testat videofunktionen: http://gizmodo.com/5052767/a-taste-of-the-canon-5d-mark-iis-mindblowing-full-hd-video. Bilderna är alltså skärmdumpar från videon, inte fotografier. Verkar helt sjukt lovande!

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Canon släpper en efterlängtad uppföljare till EOS 5D", + "meta_description": "", + "author_id": 6, + "created_at": 1221740528000, + "created_by": 6, + "updated_at": 1221740528000, + "updated_by": 6, + "published_at": 1221740528000, + "published_by": 6 + }, + { + "id": 233, + "title": "Ikväll kommer den - HTC Dream är första Android-telefonen", + "slug": "ikvall-kommer-den---htc-dream-ar-forsta-android-telefonen", + "markdown": "\r\n\r\nSom vi har berättat om tidigare så har Google utvecklat Android, en Linux-baserad Open Source-plattform för mobiltelefoner. Det var länge oklart när de första telefonerna skulle dyka upp, men för några veckor sen annonserade HTC att deras telefon Dream skulle bli först. Oväntat nog har lanseringen tidigarelagts, och HTC Dream ska officiellt lanseras redan ikväll!\r\n\r\nIDG har tagit del av en läckt specifikationslista:\r\n\r\nUtfällbart tangentbordSkärm på 480x320 med 65 000 färger (samma som iPhone alltså, även om den till ytan är mindre)Processor med två kärnorGPSKamera på 3,1 megapixelPlats för minneskort upp till 8 GBStöd för Gmail, Youtube och Google MapsMått: 116 x 54 x 16 mmVikt: 150g\r\n\r\nSjälv tycker jag att den är riktigt ful (den svarta är lite bättre än den 80-talsdatorfärgade som först visades). Oavsett utseendet så känns det här dock som en otroligt spännande början på en ny era inom mobiltelefoner. Mitt tips är att hela mobilmarknaden kommer att domineras av Windows Mobile, iPhone och Android ganska snart. Egenutvecklade mobil-OS kommer att vara alldeles för dyra, och jag tror att vi är i början till slutet för Symbian, även om de är stora nu.\r\n\r\n![Bild](http://tekniken.nu/uploads/633577650189824448-htcdream.png)", + "html": "

    Som vi har berättat om tidigare så har Google utvecklat Android, en Linux-baserad Open Source-plattform för mobiltelefoner. Det var länge oklart när de första telefonerna skulle dyka upp, men för några veckor sen annonserade HTC att deras telefon Dream skulle bli först. Oväntat nog har lanseringen tidigarelagts, och HTC Dream ska officiellt lanseras redan ikväll!

    IDG har tagit del av en läckt specifikationslista:

    • Utfällbart tangentbord
    • Skärm på 480x320 med 65 000 färger (samma som iPhone alltså, även om den till ytan är mindre)
    • Processor med två kärnor
    • GPS
    • Kamera på 3,1 megapixel
    • Plats för minneskort upp till 8 GB
    • Stöd för Gmail, Youtube och Google Maps
    • Mått: 116 x 54 x 16 mm
    • Vikt: 150g

    Själv tycker jag att den är riktigt ful (den svarta är lite bättre än den 80-talsdatorfärgade som först visades). Oavsett utseendet så känns det här dock som en otroligt spännande början på en ny era inom mobiltelefoner. Mitt tips är att hela mobilmarknaden kommer att domineras av Windows Mobile, iPhone och Android ganska snart. Egenutvecklade mobil-OS kommer att vara alldeles för dyra, och jag tror att vi är i början till slutet för Symbian, även om de är stora nu.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Ikväll kommer den - HTC Dream är första Android-telefonen", + "meta_description": "", + "author_id": 6, + "created_at": 1222168218000, + "created_by": 6, + "updated_at": 1222168218000, + "updated_by": 6, + "published_at": 1222168218000, + "published_by": 6 + }, + { + "id": 234, + "title": "Minibärbar - den nya datortrenden?", + "slug": "minibarbar---den-nya-datortrenden", + "markdown": "\r\nDet kommer allt fler pyttesmå bärbara datorer. Den här nya klassen av ultraportabla bärbara, som ibland kallas Netbooks, har i regel väldigt små yttermått, låg vikt, lågt pris (3000-4000 är inte ovanligt) och levereras i regel med en Linux-variant eller med Windows XP (Vista är oftast lite för resurskrävande). Jag tror att tanken är en sån här dator ska vara ett komplement, en verkligt mobil arbetsplats som det inte ska vara jobbigt att alltid ha med sig, men kanske inte är någons enda dator. Först ut var ASUS Eee PC, och nu har den fått en uppsjö uppföljare från både kända och okända tillverkare. Trenden började redan i slutet av förra året, men med senaste tidens produktregn i den här kategorin verkar den vara här för att stanna.\r\n\r\nTommy K Johansson har skrivit en hel kavalkad av blogginlägg om Netbooks (här är ett urval):\r\n\r\nhttp://blogg.tkj.se/toshiba-nb100/\r\n\r\nhttp://blogg.tkj.se/lg-x110-sverige/\r\n\r\nhttp://blogg.tkj.se/samsung-nc10/\r\n\r\nhttp://blogg.tkj.se/lg-netbook-x110/\r\n\r\nhttp://blogg.tkj.se/hp-2133-mini-note/\r\n\r\nhttp://blogg.tkj.se/msi-wind-test/\r\n\r\nhttp://blogg.tkj.se/dell-ultraportabel-bilder/\r\n\r\nhttp://blogg.tkj.se/dell-umpc/\r\n\r\nhttp://blogg.tkj.se/kopa-asus-eee-pc-901/\r\n\r\nhttp://blogg.tkj.se/category/hardvara/asus-eee-pc/\r\n\r\nhttp://blogg.tkj.se/category/hardvara/acer-aspire-one/\r\n\r\nhttp://blogg.tkj.se/arets-julklapp-2008-minidator/\r\n\r\nhttp://blogg.tkj.se/minidatorer-populara/\r\n![Bild](http://tekniken.nu/uploads/633577855830854100-eee-pc-1.jpg)", + "html": "

    Det kommer allt fler pyttesmå bärbara datorer. Den här nya klassen av ultraportabla bärbara, som ibland kallas Netbooks, har i regel väldigt små yttermått, låg vikt, lågt pris (3000-4000 är inte ovanligt) och levereras i regel med en Linux-variant eller med Windows XP (Vista är oftast lite för resurskrävande). Jag tror att tanken är en sån här dator ska vara ett komplement, en verkligt mobil arbetsplats som det inte ska vara jobbigt att alltid ha med sig, men kanske inte är någons enda dator. Först ut var ASUS Eee PC, och nu har den fått en uppsjö uppföljare från både kända och okända tillverkare. Trenden började redan i slutet av förra året, men med senaste tidens produktregn i den här kategorin verkar den vara här för att stanna.

    Tommy K Johansson har skrivit en hel kavalkad av blogginlägg om Netbooks (här är ett urval):

    http://blogg.tkj.se/toshiba-nb100/

    http://blogg.tkj.se/lg-x110-sverige/

    http://blogg.tkj.se/samsung-nc10/

    http://blogg.tkj.se/lg-netbook-x110/

    http://blogg.tkj.se/hp-2133-mini-note/

    http://blogg.tkj.se/msi-wind-test/

    http://blogg.tkj.se/dell-ultraportabel-bilder/

    http://blogg.tkj.se/dell-umpc/

    http://blogg.tkj.se/kopa-asus-eee-pc-901/

    http://blogg.tkj.se/category/hardvara/asus-eee-pc/

    http://blogg.tkj.se/category/hardvara/acer-aspire-one/

    http://blogg.tkj.se/arets-julklapp-2008-minidator/

    http://blogg.tkj.se/minidatorer-populara/", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Minibärbar - den nya datortrenden?", + "meta_description": "", + "author_id": 6, + "created_at": 1222188782000, + "created_by": 6, + "updated_at": 1222188782000, + "updated_by": 6, + "published_at": 1222188782000, + "published_by": 6 + }, + { + "id": 235, + "title": "Saknat stöd för ActiveSync gör Android G1 till en ren konsumentlur?", + "slug": "saknat-stod-for-activesync-gor-android-g1-till-en-ren-konsumentlur", + "markdown": "\r\n\r\nSom ingen lär ha missat lanserade Google och T-mobile i veckan den första telefonen baserad på operativsystemet Android. Efter att allt mer av specifikationerna släppts börjar det bli tydligt att man inte haft företagsanvändarna i fokus, utan att man snarare i denna första generation byggt en konsumenttelefon. Framförallt är det avsaknaden av stöd för Exchange ActiveSync som gör den kraftigt begränsad som mobil plattform för allt annat än de minsta företagen.\r\n\r\nDet är oklart om detta rör sig om licensproblematik, ofärdig mjukvara eller ett konkurrensmässigt vägval. Gmail (som Android synkar med) som företagsplattform är dock ännu långt ifrån Exchange, tekniskt så väl som informationssäkerhetsmässigt.\r\n\r\nOm man vill ta upp kampen om företagsanvändarna med Symbian, Windows Mobile och iPhone så är detta något som Android-teamet borde ha högst upp på sin lista att åtgärda.\r\n\r\n![Bild](http://tekniken.nu/uploads/633578528966451276-Android-logo.png)", + "html": "

    Som ingen lär ha missat lanserade Google och T-mobile i veckan den första telefonen baserad på operativsystemet Android. Efter att allt mer av specifikationerna släppts börjar det bli tydligt att man inte haft företagsanvändarna i fokus, utan att man snarare i denna första generation byggt en konsumenttelefon. Framförallt är det avsaknaden av stöd för Exchange ActiveSync som gör den kraftigt begränsad som mobil plattform för allt annat än de minsta företagen.

    Det är oklart om detta rör sig om licensproblematik, ofärdig mjukvara eller ett konkurrensmässigt vägval. Gmail (som Android synkar med) som företagsplattform är dock ännu långt ifrån Exchange, tekniskt så väl som informationssäkerhetsmässigt.

    Om man vill ta upp kampen om företagsanvändarna med Symbian, Windows Mobile och iPhone så är detta något som Android-teamet borde ha högst upp på sin lista att åtgärda.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Saknat stöd för ActiveSync gör Android G1 till en ren konsumentlur?", + "meta_description": "", + "author_id": 1085, + "created_at": 1222256096000, + "created_by": 1085, + "updated_at": 1222256096000, + "updated_by": 1085, + "published_at": 1222256096000, + "published_by": 1085 + }, + { + "id": 236, + "title": "Ny version av Adobes kreativa applikationer under hösten", + "slug": "ny-version-av-adobes-kreativa-applikationer-under-hosten", + "markdown": "\r\n\r\nAdobes Creative Suite med extremt populära applikationer som PhotoShop, Illustrator och Premiere släpps i ny version. Adobe har nu officiellt meddelat att man kommer att släppa version CS4 under hösten och vad den kommer innehålla. Det finns massor av nya funktioner i alla applikationerna, men den största nyheten (åtminstone för en tekniker) är att Adobe har byggt in stöd för användning av grafikkortets processor. I tidigare versioner har datorns CPU fått göra allt arbete, men i CS4 används också grafikkortet. Stödet är baserat på OpenGL och i PhotoShop funkar det med de flesta nya grafikkort. I Premiere krävs ett grafikkort baserat på Nvidias Quadro-processor.\r\n\r\n\r\n\r\nSkillnaden kommer inte att märkas i slutresultatet men kommer att göra programmen mycket snabbare att arbeta med. I PhotoShop används grafikkortet för att rotera och skala om bilder i realtid, och till kantutjämning och HDR-bearbetning. Jag tror dock att den största skillnaden kommer märkas i Premiere – ett grafikkort med hårdvarustöd för HD-video borde kunna göra under för förhandgranskning av övergångar och liknande.\r\n\r\n![Bild](http://tekniken.nu/uploads/633579374306709762-adobe_photoshop_cs4.png)", + "html": "

    Adobes Creative Suite med extremt populära applikationer som PhotoShop, Illustrator och Premiere släpps i ny version. Adobe har nu officiellt meddelat att man kommer att släppa version CS4 under hösten och vad den kommer innehålla. Det finns massor av nya funktioner i alla applikationerna, men den största nyheten (åtminstone för en tekniker) är att Adobe har byggt in stöd för användning av grafikkortets processor. I tidigare versioner har datorns CPU fått göra allt arbete, men i CS4 används också grafikkortet. Stödet är baserat på OpenGL och i PhotoShop funkar det med de flesta nya grafikkort. I Premiere krävs ett grafikkort baserat på Nvidias Quadro-processor.

    Skillnaden kommer inte att märkas i slutresultatet men kommer att göra programmen mycket snabbare att arbeta med. I PhotoShop används grafikkortet för att rotera och skala om bilder i realtid, och till kantutjämning och HDR-bearbetning. Jag tror dock att den största skillnaden kommer märkas i Premiere – ett grafikkort med hårdvarustöd för HD-video borde kunna göra under för förhandgranskning av övergångar och liknande.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Adobe släpper CS4 under hösten", + "meta_description": "", + "author_id": 6, + "created_at": 1222340630000, + "created_by": 6, + "updated_at": 1222340630000, + "updated_by": 6, + "published_at": 1222340630000, + "published_by": 6 + }, + { + "id": 238, + "title": "Därför är DRM så urbota dumt", + "slug": "darfor-ar-drm-sa-urbota-dumt", + "markdown": "\r\n\r\nI dagarna kommer Wal-Mart att stänga av sina DRM-servrar, alltså de som sköter koperingsskyddet på köpta musikfiler. Sedan i februari har Wal-Mart slutat lägga kopieringsskydd på den musik de säljer digitalt, och det är förstås bra! Problemet är bara alla de som gick i ”fällan” att köpa musik tidigare. Deras musikfiler kommer att bli obrukbara inom två veckor. Sedan tidigare har Yahoos och Microsofts musikaffärer tagit bort DRM och samma problem har drabbat deras kunder, som har fått tipset att bränna ut alla köpta filer på ljud-CD för att de inte ska bli meningslösa skräpfiler på hårddisken. Varför envisas stora företag med försöka stävja illegal nedladdning genom att behandla dem som faktiskt betalar med rent förakt?\r\n\r\n\r\n\r\nDen stora frågan är nu när Apple ska inse samma sak – bara en liten del av musiken i Itunes ingår i Itunes plus och är därmed DRM-fri.\r\n\r\n![Bild](http://tekniken.nu/uploads/633582954538700004-drmdeathwatch.gif)", + "html": "

    I dagarna kommer Wal-Mart att stänga av sina DRM-servrar, alltså de som sköter koperingsskyddet på köpta musikfiler. Sedan i februari har Wal-Mart slutat lägga kopieringsskydd på den musik de säljer digitalt, och det är förstås bra! Problemet är bara alla de som gick i ”fällan” att köpa musik tidigare. Deras musikfiler kommer att bli obrukbara inom två veckor. Sedan tidigare har Yahoos och Microsofts musikaffärer tagit bort DRM och samma problem har drabbat deras kunder, som har fått tipset att bränna ut alla köpta filer på ljud-CD för att de inte ska bli meningslösa skräpfiler på hårddisken. Varför envisas stora företag med försöka stävja illegal nedladdning genom att behandla dem som faktiskt betalar med rent förakt?

    Den stora frågan är nu när Apple ska inse samma sak – bara en liten del av musiken i Itunes ingår i Itunes plus och är därmed DRM-fri.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Därför är DRM så urbota dumt", + "meta_description": "", + "author_id": 6, + "created_at": 1222698653000, + "created_by": 6, + "updated_at": 1222698653000, + "updated_by": 6, + "published_at": 1222698653000, + "published_by": 6 + }, + { + "id": 240, + "title": "Xperia kommer på fredag", + "slug": "xperia-kommer-pa-fredag", + "markdown": "\r\n\r\nPå fredag kommer Sony Ericssons nya flaggskepp Xperia X1 att släppas i affärerna. Den har attraktiva specifikationer och många har väntat på att den ska släppas (och den var den telefon som jag själv väntade mest på innan jag valde en iPhone):\r\n\r\n\r\n\r\nWindows Mobile (6.1) med eget gränssnitt ovanpåUtdragbart tangentbord trots ganska behändiga måttTouchskärm i widescreen med den grymma upplösningen 800 x 480 (65k färger)GPSMinneskortsplats (vilket t.ex. både iPhone och HTC Touch Diamond har missat)Kamera på 3,2 megapixel med lampaBluetooth med stereo\r\n\r\nIDG har gjort första testet i Sverige av den skarpa versionen av Xperia X1. De är överlag nöjda med allt utom prestanda. De och vi hoppas att detta kommer att lösa sig med kommande firmware-uppgraderingar, det gjorde enorma skillnader på HTC Touch Diamond i alla fall (och X1 är ju som bekant byggd av HTC).\r\n\r\n![Bild](http://tekniken.nu/uploads/633589847629332159-xperiax1.jpg)", + "html": "

    På fredag kommer Sony Ericssons nya flaggskepp Xperia X1 att släppas i affärerna. Den har attraktiva specifikationer och många har väntat på att den ska släppas (och den var den telefon som jag själv väntade mest på innan jag valde en iPhone):

    • Windows Mobile (6.1) med eget gränssnitt ovanpå
    • Utdragbart tangentbord trots ganska behändiga mått
    • Touchskärm i widescreen med den grymma upplösningen 800 x 480 (65k färger)
    • GPS
    • Minneskortsplats (vilket t.ex. både iPhone och HTC Touch Diamond har missat)
    • Kamera på 3,2 megapixel med lampa
    • Bluetooth med stereo

    IDG har gjort första testet i Sverige av den skarpa versionen av Xperia X1. De är överlag nöjda med allt utom prestanda. De och vi hoppas att detta kommer att lösa sig med kommande firmware-uppgraderingar, det gjorde enorma skillnader på HTC Touch Diamond i alla fall (och X1 är ju som bekant byggd av HTC).

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Xperia kommer på fredag", + "meta_description": "", + "author_id": 6, + "created_at": 1223387962000, + "created_by": 6, + "updated_at": 1223387962000, + "updated_by": 6, + "published_at": 1223387962000, + "published_by": 6 + }, + { + "id": 241, + "title": "Högst upp på önskelistan: Canon 5D Mark II", + "slug": "hogst-upp-pa-onskelistan-canon-5d-mark-ii", + "markdown": "\r\nFör oss som har hakade på full-HD racet har redan behövt köpa ny LCD-TV, Playstation 3, HD-box, HD-programkort, HD videokamera – med andra ord – vi har redan behövt lägga ut en hel del pengar för att få se våra pixlar i allra högsta upplösning. I dagarna blev vår framtida plånbok ännu tunnare för nu har Canon släppt det som nu hamnar högst upp på önskelistan: Canon 5D Mark II. Det låter inte så mycket men de tekniska specifikationerna är fantastiska och framför allt: den här systemkameran har videoinspelningsstöd i full HD upplösning, dvs 1080p. Nikon har också släppt sin D90 som har HD inspelning men tyvärr bara i 720p.\r\n\r\nNär jag 2005 köpte min Canon D20 så sade jag till mig själv att det är helt klart värt pengarna för det här är en kamera jag faktiskt kan ha i tio år och jag kunde inte då drömma om att jag redan tre år senare skulle överväga att köpa en ny kamera för 23 000 kr, speciellt inte då jag också däremellan hunnit köpa en full-HD videokamera.. Vad är det då som gör att man blir så sugen?\r\n\r\nPoängen är att man nu för första gången som amatör kan börja spela in filmer som får samma känsla som en riktig bio-film, speciellt med fokusdjup och ljuskänslighet. Titta på den här filmen så förstår ni vad jag menar: (självklart gjord med proffsljus, tio olika proffsobjektiv osv) \r\n\r\nhttp://blog.vincentlaforet.com/\r\n\r\nKameran kommer till Sverige senare i höst. Vi på tekniken skulle gärna få en provkamera och labba med, Canon, lyssnar ni?\r\n\r\nChristian Landgren", + "html": "

    För oss som har hakade på full-HD racet har redan behövt köpa ny LCD-TV, Playstation 3, HD-box, HD-programkort, HD videokamera – med andra ord – vi har redan behövt lägga ut en hel del pengar för att få se våra pixlar i allra högsta upplösning. I dagarna blev vår framtida plånbok ännu tunnare för nu har Canon släppt det som nu hamnar högst upp på önskelistan: Canon 5D Mark II. Det låter inte så mycket men de tekniska specifikationerna är fantastiska och framför allt: den här systemkameran har videoinspelningsstöd i full HD upplösning, dvs 1080p. Nikon har också släppt sin D90 som har HD inspelning men tyvärr bara i 720p.

    När jag 2005 köpte min Canon D20 så sade jag till mig själv att det är helt klart värt pengarna för det här är en kamera jag faktiskt kan ha i tio år och jag kunde inte då drömma om att jag redan tre år senare skulle överväga att köpa en ny kamera för 23 000 kr, speciellt inte då jag också däremellan hunnit köpa en full-HD videokamera.. Vad är det då som gör att man blir så sugen?

    Poängen är att man nu för första gången som amatör kan börja spela in filmer som får samma känsla som en riktig bio-film, speciellt med fokusdjup och ljuskänslighet. Titta på den här filmen så förstår ni vad jag menar: (självklart gjord med proffsljus, tio olika proffsobjektiv osv)

    http://blog.vincentlaforet.com/

    Kameran kommer till Sverige senare i höst. Vi på tekniken skulle gärna få en provkamera och labba med, Canon, lyssnar ni?

    Christian Landgren", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Högst upp på önskelistan: Canon 5D Mark II", + "meta_description": null, + "author_id": 1087, + "created_at": 1223387964000, + "created_by": 1087, + "updated_at": 1223387964000, + "updated_by": 1087, + "published_at": 1223387964000, + "published_by": 1087 + }, + { + "id": 246, + "title": "Ett rum med fokus på att skriva", + "slug": "ett-rum-med-fokus-pa-att-skriva", + "markdown": "\r\n\r\nOffice-programmen får i varje version nya funktioner, många är bra men det finns en stark motrörelse som tycker att nya funktioner, knappar och blinkande lampor stör den kreativa processen – särskilt när det gäller skrivande – mer än det hjälper författaren. Konkret har detta tagit sig uttryck i nya ordbehandlare som bara fokuserar på texten. De tar upp hela skärmen för att dölja alla andra applikationer som kan pocka på uppmärksamheten, och har i regel svart bakgrund och grön text (någonstans finns också en stark retroinfluens). Första varianten heter WriteRoom och finns till MacOSX, och senare har en Windows-variant kommit som heter Dark Room.\r\n\r\n\r\n\r\nFör den som vill testa den här metoden att skriva men inte lämna sin vanliga ordbehandlare så finns nu ett tillägg som Johan Lindfors tipsar om som ger Word 2007 en WriteRoom-vy! Jag har inte testat att installera den än, men fungerar den så är det bästa av två världar. Jag gillar verkligen idén med WriteRoom, men jag vill också ha rättstavning, möjlighet att göra textformattering (när själva skrivprocessen är klar), svensk rättstavning och allt annat man är van vid.\r\n\r\nTillägget heter WriteSpace och hämtas här. Den är än så länge inte i skarp version, så se till att spara dokument ordentligt innan du testar.\r\n\r\n![Bild](http://tekniken.nu/uploads/633594910264480593-margin1.png)", + "html": "

    Office-programmen får i varje version nya funktioner, många är bra men det finns en stark motrörelse som tycker att nya funktioner, knappar och blinkande lampor stör den kreativa processen – särskilt när det gäller skrivande – mer än det hjälper författaren. Konkret har detta tagit sig uttryck i nya ordbehandlare som bara fokuserar på texten. De tar upp hela skärmen för att dölja alla andra applikationer som kan pocka på uppmärksamheten, och har i regel svart bakgrund och grön text (någonstans finns också en stark retroinfluens). Första varianten heter WriteRoom och finns till MacOSX, och senare har en Windows-variant kommit som heter Dark Room.

    För den som vill testa den här metoden att skriva men inte lämna sin vanliga ordbehandlare så finns nu ett tillägg som Johan Lindfors tipsar om som ger Word 2007 en WriteRoom-vy! Jag har inte testat att installera den än, men fungerar den så är det bästa av två världar. Jag gillar verkligen idén med WriteRoom, men jag vill också ha rättstavning, möjlighet att göra textformattering (när själva skrivprocessen är klar), svensk rättstavning och allt annat man är van vid.

    Tillägget heter WriteSpace och hämtas här. Den är än så länge inte i skarp version, så se till att spara dokument ordentligt innan du testar.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Ett rum med fokus på att skriva", + "meta_description": "g som ger Word en sån här avskalad skrivarmiljö.", + "author_id": 6, + "created_at": 1223894226000, + "created_by": 6, + "updated_at": 1223894226000, + "updated_by": 6, + "published_at": 1223894226000, + "published_by": 6 + }, + { + "id": 247, + "title": "Silverlight 2 släppt idag", + "slug": "silverlight-2-slappt-idag", + "markdown": "\r\n\r\nNu finns äntligen ett bra alternativ till Flash för oss dotnet-utvecklare. Redan förra året släpptes Silverlight 1.0 men det var en release främst för att konkurrera med Flash som videospelare då det inte följde med några vanliga kontroller alls och då programmeringsstödet var begränsat till Javascript. Version 2 bygger på en dotnet-miljö d.v.s. ger stöd för C#/VB, dessutom följer det med mängder av användbara kontroller vilket gör det möjligt att bygga kompletta webbapplikationer utan att behöva skriva en enda rad kod html/javascript/css (förutom för att starta Silverlight-applikationen förstås).\r\n## Varför Silverlight istället för Flash?\r\nC#/VB-programmerare kan ta sin kunskap och använda den direkt i klientmiljön utan att behöva lära sig ett nytt språk.\r\n\r\nVisual Studio är inte bara en riktigt bra utvecklingsmiljö även gratis (Expressversionen).\r\n\r\nAlla kontroller i Silverlight har ett standardutseende, men till skillnad från i HTML finns det inga Windows-kontroller i botten. Det gör det mycket enkelt att skapa sina egna teman och utseenden, så det är enklare än nånsin att skräddarsy utseendet på sin applikation utan att behöva bygga sina egna lösningar som sällan fungerar exakt som man förväntar sig (som t.ex. scrollbars som inte reagerar på  mushjul t.ex.)\r\n\r\nÅteranvända kod och kunskap: då grunden är dotnet så är många bibliotek identiska vilket gör att man inte behöver fundera hur man t.ex. jämför datum eller sorterar en lista.\r\n\r\nInbyggt stöd för LINQ som kanske är den största nyheten i dotnet sen, tja nånsin!\r\n## Varför Flash istället för Silverlight?\r\nFlash finns på nästan alla datorer så länge man inte använder den absolut senaste versionen och detta gör det riskfritt att använda till även mer grundläggande funktioner medan Silverlight i dagsläget är främst användbart till icke-kritiska sajter som t.ex spel och nöjen samt intranät där man har kontroll över installerad mjukvara. Detta kommer förstås att förändras, så om ett år bör det vara OK även på mer publika sajter.\r\n\r\nSilverlight har ett begränsat Linux-stöd i form a Mono-projektet Moonlight som än så länge inte är redo för skarp användning även om detta kommer lösa sig med tiden.\r\n## Varför VARKEN Flash eller Silverlight?\r\nÄven om Visual Studio Express är gratis så ”kräver” mer avancerade animeringar Blend (ingen vill väl försöka göra Disney-liknande animationer genom att hacka XML i notepad?), vilket också är problemet med Flash som också kostar en hel del pengar.\r\n\r\nDe sajter som har större fokus på innehåll än funktioner bör fortfarande byggas i ren och framtidssäker HTML då detta stöds av alla webbläsare och alla webbläsande maskiner (t.ex. mobiler). Dessutom så föredrar fortfarande sökmotorer ren och enkel html.\r\n\r\nOm du har som krav att alla oavsett webbläsare, operativsystem och bredbandsuppkoppling skall kunna använda din sajt så har du heller inget val, även om Flash/Silverlight bara är några megabyte stora nerladdningar så kan det vara tekniskt omöjligt att installera (folk kör fortfarande Windows 95 och många har begränsade rättigheter på jobbet att installera tilläggsprogram).\r\n\r\nDå Javascript-biblioteken blivit riktigt avancerade idag (se t.ex. Extjs) så finns det nästan ingenting numera som är omöjligt utan Flash eller Silverlight, så man måste väga utvecklingstid, tillgänglighet och slutkundsupplevelse (nedladdningstider, svarstider och liknande).\r\n## Framtiden för Silverlight\r\nDå det är en helt ny teknik som främst riktar sig till utvecklare och inte slutkund så kommer mer tekniskt riktade sajter bli de första som använder Silverlight i nån större utsträckning. Min gissning är spelsajter och grafiskt tunga reklamsajter för t.ex. nya biofilmer i första läget för att sedan dyka upp i mer seriösa sajter som t.ex. webbshoppar.\r\n\r\nTyvärr finns det inget stöd för 3D i denna version men med lite tur så kommer det i nästa version. Detta skulle verkligen kunna ge en stor fördel över rena HTML-/Javascript-sajter och kommer att bli nödvändigt för att kunna tävla med Flash som är på gång med grundläggande 3D.\r\n## Användbara Silverlight-länkar\r\nSilverlights plugin finns att ladda ner på microsoft.com men den mest användbara länken idag är är silverlight.net som innehåller allt som behövs för att lära sig utveckla sajter i Silverlight och innehåller dessutom mängder av exempel (även om det kan bli tunt med exempel första dagarna som funkar i skarpa versionen då betan och skarpa inte är kompatibla).\r\n\r\n![Bild](http://tekniken.nu/uploads/633595753314463065-Sl_v_rgb_r.png)", + "html": "

    Nu finns äntligen ett bra alternativ till Flash för oss dotnet-utvecklare. Redan förra året släpptes Silverlight 1.0 men det var en release främst för att konkurrera med Flash som videospelare då det inte följde med några vanliga kontroller alls och då programmeringsstödet var begränsat till Javascript. Version 2 bygger på en dotnet-miljö d.v.s. ger stöd för C#/VB, dessutom följer det med mängder av användbara kontroller vilket gör det möjligt att bygga kompletta webbapplikationer utan att behöva skriva en enda rad kod html/javascript/css (förutom för att starta Silverlight-applikationen förstås).

    Varför Silverlight istället för Flash?

    C#/VB-programmerare kan ta sin kunskap och använda den direkt i klientmiljön utan att behöva lära sig ett nytt språk.

    Visual Studio är inte bara en riktigt bra utvecklingsmiljö även gratis (Expressversionen).

    Alla kontroller i Silverlight har ett standardutseende, men till skillnad från i HTML finns det inga Windows-kontroller i botten. Det gör det mycket enkelt att skapa sina egna teman och utseenden, så det är enklare än nånsin att skräddarsy utseendet på sin applikation utan att behöva bygga sina egna lösningar som sällan fungerar exakt som man förväntar sig (som t.ex. scrollbars som inte reagerar på  mushjul t.ex.)

    Återanvända kod och kunskap: då grunden är dotnet så är många bibliotek identiska vilket gör att man inte behöver fundera hur man t.ex. jämför datum eller sorterar en lista.

    Inbyggt stöd för LINQ som kanske är den största nyheten i dotnet sen, tja nånsin!

    Varför Flash istället för Silverlight?

    Flash finns på nästan alla datorer så länge man inte använder den absolut senaste versionen och detta gör det riskfritt att använda till även mer grundläggande funktioner medan Silverlight i dagsläget är främst användbart till icke-kritiska sajter som t.ex spel och nöjen samt intranät där man har kontroll över installerad mjukvara. Detta kommer förstås att förändras, så om ett år bör det vara OK även på mer publika sajter.

    Silverlight har ett begränsat Linux-stöd i form a Mono-projektet Moonlight som än så länge inte är redo för skarp användning även om detta kommer lösa sig med tiden.

    Varför VARKEN Flash eller Silverlight?

    Även om Visual Studio Express är gratis så ”kräver” mer avancerade animeringar Blend (ingen vill väl försöka göra Disney-liknande animationer genom att hacka XML i notepad?), vilket också är problemet med Flash som också kostar en hel del pengar.

    De sajter som har större fokus på innehåll än funktioner bör fortfarande byggas i ren och framtidssäker HTML då detta stöds av alla webbläsare och alla webbläsande maskiner (t.ex. mobiler). Dessutom så föredrar fortfarande sökmotorer ren och enkel html.

    Om du har som krav att alla oavsett webbläsare, operativsystem och bredbandsuppkoppling skall kunna använda din sajt så har du heller inget val, även om Flash/Silverlight bara är några megabyte stora nerladdningar så kan det vara tekniskt omöjligt att installera (folk kör fortfarande Windows 95 och många har begränsade rättigheter på jobbet att installera tilläggsprogram).

    Då Javascript-biblioteken blivit riktigt avancerade idag (se t.ex. Extjs) så finns det nästan ingenting numera som är omöjligt utan Flash eller Silverlight, så man måste väga utvecklingstid, tillgänglighet och slutkundsupplevelse (nedladdningstider, svarstider och liknande).

    Framtiden för Silverlight

    Då det är en helt ny teknik som främst riktar sig till utvecklare och inte slutkund så kommer mer tekniskt riktade sajter bli de första som använder Silverlight i nån större utsträckning. Min gissning är spelsajter och grafiskt tunga reklamsajter för t.ex. nya biofilmer i första läget för att sedan dyka upp i mer seriösa sajter som t.ex. webbshoppar.

    Tyvärr finns det inget stöd för 3D i denna version men med lite tur så kommer det i nästa version. Detta skulle verkligen kunna ge en stor fördel över rena HTML-/Javascript-sajter och kommer att bli nödvändigt för att kunna tävla med Flash som är på gång med grundläggande 3D.

    Användbara Silverlight-länkar

    Silverlights plugin finns att ladda ner på microsoft.com men den mest användbara länken idag är är silverlight.net som innehåller allt som behövs för att lära sig utveckla sajter i Silverlight och innehåller dessutom mängder av exempel (även om det kan bli tunt med exempel första dagarna som funkar i skarpa versionen då betan och skarpa inte är kompatibla).

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Silverlight 2 släppt idag", + "meta_description": "r bland .NET-utvecklare. Men vad innebär det egentligen?", + "author_id": 1089, + "created_at": 1223978531000, + "created_by": 1089, + "updated_at": 1223978531000, + "updated_by": 1089, + "published_at": 1223978531000, + "published_by": 1089 + }, + { + "id": 248, + "title": "Snart släpps XBMC Atlantis", + "slug": "snart-slapps-xbmc-atlantis", + "markdown": "\r\n\r\nFör den oinsatte är Xbox Media Center (XBMC) den kanske äldsta och mest ambitiösa open source-baserade mediacentermjukvaran som finns. Som namnet antyder började den utvecklas till moddade första generationens Xbox-konsoler c:a 2002, och har sedan vidareutvecklats i högt tempo genom åren till att idag vara den kanske mest fullfjädrade mediacenterlösningen som finns.\r\n\r\nI och med att Xbox blivit en åldrad och begränsad hårdvara har XBMC på senare tid portats till Mac, Linux och Windows, och eftersom att Xboxen saknar HD-utgångar så är det även i dessa nya miljöer som produktens framtid kommer ligga. I samband med detta har man också kommit över de tveksamma moraliska aspekter man tidigare dragits med (att det krävts en moddad Xbox), något som alltid arbetat emot projektet och hindrat det från att få den uppmärksamhet det förtjänat. Dock känns kanske namnet nu lite förlegat...\r\n\r\nI oktober skall den första stabila \"cross-platform\" versionen släppas, Codename \"Atlantis\" - en version som länge varit under utveckling och testning. Inför denna release har projektet varit stoppat för ny funktionalitet en längre tid, men några nyheter kommer dyka upp:\r\n\r\n1. Först och främst kommer ett nytt HD-skin (PM3.HD), som bygger på det snygga skinnet \"Project Mayhem 3\". Bilder nedan.\r\n\r\n2. Den andra nyheten är \"XBMC Live\", vilket är en isolerad bootbar version av XBMC som kan köras direkt från en CD eller USB-minne, utan att påverka datorns hårddisk. Perfekt för att testa en hårdvara, eller för att sätta upp en tillfällig medialösning.\r\n\r\n3. Sist ut kommer XBMC för Mac att stödja integration med iTunes och iPhoto. Jag är inte säker på exakt hur detta kommer se ut, eller om det innebär att man kan spela DRM-skyddat iTunesinnehåll.\r\n\r\nXBMC Atlantis finns sedan några veckor i en betaversion: http://xbmc.org/download/\r\n\r\nM3 hade i sitt senaste nummer en stor artikel om olika alternativ för Mediacenterlösningar, av någon anledning missade man denna gång helt att nämna XBMC bland mjukvarualternativen vilket förvånar. Jag förutspår att XBMC inom mycket kort kommer vara referensen när det gäller Medialösningar, det krävs ju en hel del arbete att jobba ikapp sex års utveckling och testning... Själv kör jag XBMC sedan 2002 på min gamla Xbox (jag var med på den tiden som det hette XBMP - Xbox Media Player), men kollegornas lovord om hur bra det fungerar på en Mac Mini får mig att känna att det snart kanske börjar bli dags att pensionera krysslådan efter lång och trogen tjänst (tår i ögat).\r\n\r\n![Bild](http://tekniken.nu/uploads/main_logo_3d.png)\r\n\r\nFler skärmdumpar.\r\n", + "html": "

    För den oinsatte är Xbox Media Center (XBMC) den kanske äldsta och mest ambitiösa open source-baserade mediacentermjukvaran som finns. Som namnet antyder började den utvecklas till moddade första generationens Xbox-konsoler c:a 2002, och har sedan vidareutvecklats i högt tempo genom åren till att idag vara den kanske mest fullfjädrade mediacenterlösningen som finns.

    I och med att Xbox blivit en åldrad och begränsad hårdvara har XBMC på senare tid portats till Mac, Linux och Windows, och eftersom att Xboxen saknar HD-utgångar så är det även i dessa nya miljöer som produktens framtid kommer ligga. I samband med detta har man också kommit över de tveksamma moraliska aspekter man tidigare dragits med (att det krävts en moddad Xbox), något som alltid arbetat emot projektet och hindrat det från att få den uppmärksamhet det förtjänat. Dock känns kanske namnet nu lite förlegat...

    I oktober skall den första stabila \"cross-platform\" versionen släppas, Codename \"Atlantis\" - en version som länge varit under utveckling och testning. Inför denna release har projektet varit stoppat för ny funktionalitet en längre tid, men några nyheter kommer dyka upp:

    1. Först och främst kommer ett nytt HD-skin (PM3.HD), som bygger på det snygga skinnet \"Project Mayhem 3\". Bilder nedan.

    2. Den andra nyheten är \"XBMC Live\", vilket är en isolerad bootbar version av XBMC som kan köras direkt från en CD eller USB-minne, utan att påverka datorns hårddisk. Perfekt för att testa en hårdvara, eller för att sätta upp en tillfällig medialösning.

    3. Sist ut kommer XBMC för Mac att stödja integration med iTunes och iPhoto. Jag är inte säker på exakt hur detta kommer se ut, eller om det innebär att man kan spela DRM-skyddat iTunesinnehåll.

    XBMC Atlantis finns sedan några veckor i en betaversion: http://xbmc.org/download/

    M3 hade i sitt senaste nummer en stor artikel om olika alternativ för Mediacenterlösningar, av någon anledning missade man denna gång helt att nämna XBMC bland mjukvarualternativen vilket förvånar. Jag förutspår att XBMC inom mycket kort kommer vara referensen när det gäller Medialösningar, det krävs ju en hel del arbete att jobba ikapp sex års utveckling och testning... Själv kör jag XBMC sedan 2002 på min gamla Xbox (jag var med på den tiden som det hette XBMP - Xbox Media Player), men kollegornas lovord om hur bra det fungerar på en Mac Mini får mig att känna att det snart kanske börjar bli dags att pensionera krysslådan efter lång och trogen tjänst (tår i ögat).



    Fler skärmdumpar.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Snart släpps XBMC Atlantis", + "meta_description": "", + "author_id": 1085, + "created_at": 1223980969000, + "created_by": 1085, + "updated_at": 1223980969000, + "updated_by": 1085, + "published_at": 1223980969000, + "published_by": 1085 + }, + { + "id": 257, + "title": "Flash i 64 bitar", + "slug": "flash-i-64-bitar", + "markdown": "\r\n\r\nAlla som kört 64-bitars desktop ett tag har förmodligen upptäckt att det finns två webbtekniker som desvärre saknar stöd: Flash och Java webb plugin. Resultatet av detta är att man antingen får använda en wrapper-komponent för att kunna köra 32-bitars plugins (”nspluginwrapper” på Linux) eller helt enkelt kör en 32-bitars variant av hela webbläsaren (så är det t.ex. på Windows, där standard-IE på 64-bitars Vista är 32 bitar, även om det finns en undangömd 64-bitarsversion).\r\n\r\nNu verkar det emellertid som om Adobe till slut börjar få ordning på soppan och har en beta version av 64-bitars Flash tillgänglig. Än så länge finns den bara för Linux, men när den väl är skarp så är förmodligen Windows- och OSX-versioner inte långt borta. Lite oklart vad som var så svårt, men det mesta tyder på att huvudproblemet var att Tamarin, den virtuella Javascript-maskinen, var hårdkodad att bara producera 32-bitarskod.\r\n\r\nPå Java-sidan finns det också hopp. Senaste officiella infon från Sun är att Java 6 update 12, vilken är beräknad till tidigt 2009, kommer att innehålla en 64-bitars webb-plugin. Mer info här.\r\n\r\n![Bild](http://tekniken.nu/uploads/633626954944097080-flash-logo.png)", + "html": "

    Alla som kört 64-bitars desktop ett tag har förmodligen upptäckt att det finns två webbtekniker som desvärre saknar stöd: Flash och Java webb plugin. Resultatet av detta är att man antingen får använda en wrapper-komponent för att kunna köra 32-bitars plugins (”nspluginwrapper” på Linux) eller helt enkelt kör en 32-bitars variant av hela webbläsaren (så är det t.ex. på Windows, där standard-IE på 64-bitars Vista är 32 bitar, även om det finns en undangömd 64-bitarsversion).

    Nu verkar det emellertid som om Adobe till slut börjar få ordning på soppan och har en beta version av 64-bitars Flash tillgänglig. Än så länge finns den bara för Linux, men när den väl är skarp så är förmodligen Windows- och OSX-versioner inte långt borta. Lite oklart vad som var så svårt, men det mesta tyder på att huvudproblemet var att Tamarin, den virtuella Javascript-maskinen, var hårdkodad att bara producera 32-bitarskod.

    På Java-sidan finns det också hopp. Senaste officiella infon från Sun är att Java 6 update 12, vilken är beräknad till tidigt 2009, kommer att innehålla en 64-bitars webb-plugin. Mer info här.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Flash i 64 bitar", + "meta_description": "", + "author_id": 1086, + "created_at": 1227098694000, + "created_by": 1086, + "updated_at": 1227098694000, + "updated_by": 1086, + "published_at": 1227098694000, + "published_by": 1086 + }, + { + "id": 259, + "title": "Styr Squeezecenter från din iPhone / iPod Touch", + "slug": "styr-squeezecenter-fran-din-iphone--ipod-touch", + "markdown": "\r\n\r\nÄntligen meddelar utvecklarna bakom iPeng att de släppt första versionen av sin iPhoneapplikation för att styra Squeezecenter till Apples App Store. iPeng har tidigare erbjudit ett webbaserad interface för Sqeezecenter, men pga begränsningar i Safari så blev det aldrig speciellt bra. Utvecklingen av applikationsvarianten har varit igång ett tag och nu är den som sagt släppt. Priset ligger på 75kr.\r\n\r\nFunktioner (klippt ur pressreleasen):\r\nExplore your music library at unprecedented ease: Browse your library categories at our wingtips and select one of “play”, “add” or “add next”. And do that on any level that has playable content with the “touch-and-hold” gesture. Available Categories are Albums, Artists, Genres, Playlists & Favorites.NowPlaying screen with multi-page controls: Let’s you do all player related activities in one placePlay Internet Radio, Music Services and Podcasts: Everything that can be accessed through SqueezeCenter can be accessed through iPeng. Including Search, Artwork and all the other goodies. With the same playback functionality as for the library (as available for streaming content)Manage, simultaneously control and synchronize all your Squeezebox™ players and servers with iPeng’s MultiPlayer control: iPeng’s MultiPlayer control now is the main dashboard to select , manage and control your players. And Servers.Manage your playlist: Re-order and directly play the Tracks on the current playlist.Have full control over your player features: shuffle, repeat, rate songs, love and ban tracks for music services and much more. On the overlay of the artwork screen. Just as you know it from iPeng.Full localization through SqueezeCenter: iPeng itself is currently English only, but most menu items and texts are fully localized as of your server setting.\r\nSqueezebox™ är en hårdvarubaserad musiklösning som gör det möjligt att spela upp ditt MP3-arkiv i din stereo. Genom att installera en servermjukvara (Squeezecenter) i din dator kan Squeezeboxen streama musiken över tex trådlöst nätverk. Det finns ett antal liknande system på marknaden, men Squeezebox har varit med länge och tar ofta hem fina priser i genren, framförallt för att man satsat ordentligt på att få högkvalitativt ljud (i boxen sitter en 24-bitars Burr-Brown™ DAC).\r\n\r\nProdukten utvecklades av USA-baserade SlimDevices som köptes upp av Logitech 2006.\r\n\r\nMer om Squeezebox och Squeezecenter hos SlimDevices.\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/ipeng_logo.png)", + "html": "

    Äntligen meddelar utvecklarna bakom iPeng att de släppt första versionen av sin iPhoneapplikation för att styra Squeezecenter till Apples App Store. iPeng har tidigare erbjudit ett webbaserad interface för Sqeezecenter, men pga begränsningar i Safari så blev det aldrig speciellt bra. Utvecklingen av applikationsvarianten har varit igång ett tag och nu är den som sagt släppt. Priset ligger på 75kr.

    Funktioner (klippt ur pressreleasen):

    • Explore your music library at unprecedented ease: Browse your library categories at our wingtips and select one of “play”, “add” or “add next”. And do that on any level that has playable content with the “touch-and-hold” gesture. Available Categories are Albums, Artists, Genres, Playlists & Favorites.
    • NowPlaying screen with multi-page controls: Let’s you do all player related activities in one place
    • Play Internet Radio, Music Services and Podcasts: Everything that can be accessed through SqueezeCenter can be accessed through iPeng. Including Search, Artwork and all the other goodies. With the same playback functionality as for the library (as available for streaming content)
    • Manage, simultaneously control and synchronize all your Squeezebox™ players and servers with iPeng’s MultiPlayer control: iPeng’s MultiPlayer control now is the main dashboard to select , manage and control your players. And Servers.
    • Manage your playlist: Re-order and directly play the Tracks on the current playlist.
    • Have full control over your player features: shuffle, repeat, rate songs, love and ban tracks for music services and much more. On the overlay of the artwork screen. Just as you know it from iPeng.
    • Full localization through SqueezeCenter: iPeng itself is currently English only, but most menu items and texts are fully localized as of your server setting.

    Squeezebox™ är en hårdvarubaserad musiklösning som gör det möjligt att spela upp ditt MP3-arkiv i din stereo. Genom att installera en servermjukvara (Squeezecenter) i din dator kan Squeezeboxen streama musiken över tex trådlöst nätverk. Det finns ett antal liknande system på marknaden, men Squeezebox har varit med länge och tar ofta hem fina priser i genren, framförallt för att man satsat ordentligt på att få högkvalitativt ljud (i boxen sitter en 24-bitars Burr-Brown™ DAC).

    Produkten utvecklades av USA-baserade SlimDevices som köptes upp av Logitech 2006.

    Mer om Squeezebox och Squeezecenter hos SlimDevices.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Styr Squeezecenter från din iPhone / iPod Touch", + "meta_description": "", + "author_id": 1085, + "created_at": 1227708580000, + "created_by": 1085, + "updated_at": 1227708580000, + "updated_by": 1085, + "published_at": 1227708580000, + "published_by": 1085 + }, + { + "id": 261, + "title": "Vill du också blogga på tekniken.nu?", + "slug": "vill-du-ocksa-blogga-pa-teknikennu", + "markdown": "\r\n\r\nTekniken.nu skrivs av Iteams konsulter och just nu söker vi duktiga drivna personer till både till vårt team av utvecklare och teamet av tekniker, så är du grym på C# och Ajax eller Exchange och Windows 2008 är chansen stor att du kan komma med i vårt team och få börja labba med ny teknik och skriva bloggar och samtidigt bygga vinnande system!\r\n\r\nLäs mer om tjänsterna på Iteam.se:http://www.iteam.se/work_at_iteam\r\n\r\nOch här:\r\n\r\nServiceinriktad IT-tekniker\r\n\r\nSmart och kreativ systemutvecklare\r\n\r\nVälkommen!\r\n\r\n// Christian Landgren\r\n\r\n![Bild](http://tekniken.nu/uploads/633645033962338060-img_logo_big.png)", + "html": "

    Tekniken.nu skrivs av Iteams konsulter och just nu söker vi duktiga drivna personer till både till vårt team av utvecklare och teamet av tekniker, så är du grym på C# och Ajax eller Exchange och Windows 2008 är chansen stor att du kan komma med i vårt team och få börja labba med ny teknik och skriva bloggar och samtidigt bygga vinnande system!

    Läs mer om tjänsterna på Iteam.se:
    http://www.iteam.se/work_at_iteam

    Och här:

    Serviceinriktad IT-tekniker

    Smart och kreativ systemutvecklare

    Välkommen!

    // Christian Landgren

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Vill du också blogga på tekniken.nu?", + "meta_description": "", + "author_id": 1087, + "created_at": 1228907700000, + "created_by": 1087, + "updated_at": 1228907700000, + "updated_by": 1087, + "published_at": 1228907700000, + "published_by": 1087 + }, + { + "id": 263, + "title": "FW: Mail to self: Har det här hänt? :)", + "slug": "fw-mail-to-self-har-det-har-hant-", + "markdown": "\r\n\r\nI januari 2007 kåserade jag i en blog om olika trender/nyheter jag trodde skulle hända inom ett år, nu har det snart gått två år och här är nuvarande status:\r\n\r\n1. Laglig film och tv med BitTorrent som distribution och full HDTV kvalitet till rimlig kostnad startar\r\n\r\nHeadWeb erbjuder numera HD-film distribuerat via BitTorrent till en rimlig kostnad (läs mer på : http://www.headweb.com/sv/client)\r\n\r\n2. Windows Vista på Mac hårdvara - Apple tar stora marknadsandelar från Dell\r\n\r\nApple har numera 10,6% marknadsandel för laptops i USA jämfört med 6,6% för ett år sedan – dock är det osagt om folk verkligen installerar Vista på dem?\r\n\r\n3. Windows Mobile på Nokia eller Sony Ericsson mobil\r\n\r\nXperia – Windows Mobile på en Sony Ericsson.\r\n\r\n4. Första spelet med Raytracing släpps :)\r\n\r\nTyvärr, ett år till? Det verkar dock röra på sig, läs mer om Quake 4 med Ray Tracing här: http://www.pcper.com/article.php?aid=506 och se demo på Quake 3 RT här:\r\n\r\n\r\n\r\n5. WPF/E får ett nytt namn och börjar användas av Google för något coolt projekt\r\n\r\nWPF/E heter numera coola Silverlight men har inte börjat användas ordentligt än. Vi väntar fortfarande på den riktigt coola killer-appen!\r\n\r\n6. Någon större svensk mediaprofil (Birgersson, Stael eller Niklas Zennström) startar ett svenskt gratis trådlöst bredbandsnätverk\r\n\r\nTyvärr inget trådlöst nätverk än av Birgersson eller Stael, men det kanske kommer Wimax-nät istället?\r\n\r\n7. Microsoft släpper sin första SIP-växel som blir succé för småföretag\r\n\r\nTyvärr ingen SIP-växel än.\r\n\r\n8. Sverige återtar platsen som IT-nation nr 1\r\n\r\nSverige ligger numera fyra på listan (2007 låg vi sjua) http://global.bsa.org/2008eiu/study/2008-eiu-study.pdf\r\n\r\n9. Google börjar indexera torrentsajter i realtid och får massiv kritik från RIAA\r\n\r\nJapp, Google indexerar numera alla torrentsajter varje timme så det går bra att söka torrents via Google, dock har inte RIAA upptäckt detta än.\r\n\r\n10. Bränsleceller börjar slå igenom\r\n\r\nTyvärr, vi fortsätter vänta på bränsleceller.\r\n\r\nDet som däremot har hänt är:\r\nApple har gett sig in i mobilmarknaden och släppt en fantastisk mobil - Apple iPhone.Google har släppt ett mobiloperativsystem som HTC har byggt in i sin G1 och som både Motorola och Sony Ericsson sneglar på.Mer som vi missat? Lägg gärna till viktiga händelser i kommentarerna nedan!\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/633645053481244310-image001.png@01C95AB7.FE8565C0__image001.png)", + "html": "

    I januari 2007 kåserade jag i en blog om olika trender/nyheter jag trodde skulle hända inom ett år, nu har det snart gått två år och här är nuvarande status:

    1. Laglig film och tv med BitTorrent som distribution och full HDTV kvalitet till rimlig kostnad startar

    HeadWeb erbjuder numera HD-film distribuerat via BitTorrent till en rimlig kostnad (läs mer på : http://www.headweb.com/sv/client)

    2. Windows Vista på Mac hårdvara - Apple tar stora marknadsandelar från Dell

    Apple har numera 10,6% marknadsandel för laptops i USA jämfört med 6,6% för ett år sedan – dock är det osagt om folk verkligen installerar Vista på dem?

    3. Windows Mobile på Nokia eller Sony Ericsson mobil

    Xperia – Windows Mobile på en Sony Ericsson.

    4. Första spelet med Raytracing släpps :)

    Tyvärr, ett år till? Det verkar dock röra på sig, läs mer om Quake 4 med Ray Tracing här: http://www.pcper.com/article.php?aid=506 och se demo på Quake 3 RT här:

    5. WPF/E får ett nytt namn och börjar användas av Google för något coolt projekt

    WPF/E heter numera coola Silverlight men har inte börjat användas ordentligt än. Vi väntar fortfarande på den riktigt coola killer-appen!

    6. Någon större svensk mediaprofil (Birgersson, Stael eller Niklas Zennström) startar ett svenskt gratis trådlöst bredbandsnätverk

    Tyvärr inget trådlöst nätverk än av Birgersson eller Stael, men det kanske kommer Wimax-nät istället?

    7. Microsoft släpper sin första SIP-växel som blir succé för småföretag

    Tyvärr ingen SIP-växel än.

    8. Sverige återtar platsen som IT-nation nr 1

    Sverige ligger numera fyra på listan (2007 låg vi sjua) http://global.bsa.org/2008eiu/study/2008-eiu-study.pdf

    9. Google börjar indexera torrentsajter i realtid och får massiv kritik från RIAA

    Japp, Google indexerar numera alla torrentsajter varje timme så det går bra att söka torrents via Google, dock har inte RIAA upptäckt detta än.

    10. Bränsleceller börjar slå igenom

    Tyvärr, vi fortsätter vänta på bränsleceller.

    Det som däremot har hänt är:

    1. Apple har gett sig in i mobilmarknaden och släppt en fantastisk mobil - Apple iPhone.
    2. Google har släppt ett mobiloperativsystem som HTC har byggt in i sin G1 och som både Motorola och Sony Ericsson sneglar på.
    3. Mer som vi missat? Lägg gärna till viktiga händelser i kommentarerna nedan!


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Mail to self: Har det här hänt? :)", + "meta_description": "", + "author_id": 1087, + "created_at": 1228909860000, + "created_by": 1087, + "updated_at": 1228909860000, + "updated_by": 1087, + "published_at": 1228909860000, + "published_by": 1087 + }, + { + "id": 264, + "title": "Dagens julklapp: Airport Express", + "slug": "dagens-julklapp-airport-express", + "markdown": "\r\n\r\n\r\n\r\n Denna fantastiska produkt gör att du kan spela upp din musik från iTunes till alla rum i ditt hem. Du kanske har mediadatorn i arbetsrummet men vill kunna lyssna på musiken i vardagsrummet. Detta är den perfekta julklappen till den som redan har följt Magnus Tjernelds julklappstips från förra året och köpt en iPod Touch eller stått i kö i somras och köpt iPhone eller kanske får en iPhone i julklapp? Hur som helst kan denna lyckliga julklappsmottagare nu styra all musik med hjälp av programmet Remote som finns gratis att ladda ner på iTunes Store, direkt i det programmet kan du nu välja vilket rum din musik ska spelas i:\r\n\r\n\r\n\r\n\r\n\r\nhttp://www.apple.com/se/airportexpress/features/airtunes.html\r\n\r\nAllt ljud går utan sladdar i högsta möjliga digitala kvalitet och kopplas in till stereon med den optiska utgången. Som ett plus i kanten kan dessutom Airport Express förlänga ditt trådlösa nätverk om du råkar ha en nätverkssladd i närheten eller göra tvärtom, dela ut ditt (eller grannens?) trådlösa nätverk till dina sladdbaserad nätverksenheter. Har du en skrivare så kan du koppla in den i USB uttaget och dela ut den på nätverket utan sladdar.\r\n\r\nDen stöder alla moderna standarder inklusive 802.11n vilket har betydligt högre räckvidd och bandbredd. Funkar både för PC och Mac.\r\n\r\nTips är också att ta med Airport Express på resan så gör du enkelt om vilket nätverksuttag till ditt personliga trådlösa nätverk utan konfigurationer.\r\n\r\nSkicka gärna tips på julklappsrim för en Airport Express i kommentarerna nedan!\r\n\r\n![Bild](http://tekniken.nu/uploads/633646802003037210-image002.png@01C95BAF.7CA0FEE0__image002.png)", + "html": "

    Denna fantastiska produkt gör att du kan spela upp din musik från iTunes till alla rum i ditt hem. Du kanske har mediadatorn i arbetsrummet men vill kunna lyssna på musiken i vardagsrummet. Detta är den perfekta julklappen till den som redan har följt Magnus Tjernelds julklappstips från förra året och köpt en iPod Touch eller stått i kö i somras och köpt iPhone eller kanske får en iPhone i julklapp? Hur som helst kan denna lyckliga julklappsmottagare nu styra all musik med hjälp av programmet Remote som finns gratis att ladda ner på iTunes Store, direkt i det programmet kan du nu välja vilket rum din musik ska spelas i:

    http://www.apple.com/se/airportexpress/features/airtunes.html

    Allt ljud går utan sladdar i högsta möjliga digitala kvalitet och kopplas in till stereon med den optiska utgången. Som ett plus i kanten kan dessutom Airport Express förlänga ditt trådlösa nätverk om du råkar ha en nätverkssladd i närheten eller göra tvärtom, dela ut ditt (eller grannens?) trådlösa nätverk till dina sladdbaserad nätverksenheter. Har du en skrivare så kan du koppla in den i USB uttaget och dela ut den på nätverket utan sladdar.

    Den stöder alla moderna standarder inklusive 802.11n vilket har betydligt högre räckvidd och bandbredd. Funkar både för PC och Mac.

    Tips är också att ta med Airport Express på resan så gör du enkelt om vilket nätverksuttag till ditt personliga trådlösa nätverk utan konfigurationer.

    Skicka gärna tips på julklappsrim för en Airport Express i kommentarerna nedan!

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Dagens julklappstips: Airport Express", + "meta_description": "", + "author_id": 1087, + "created_at": 1229083398000, + "created_by": 1087, + "updated_at": 1229083398000, + "updated_by": 1087, + "published_at": 1229083398000, + "published_by": 1087 + }, + { + "id": 265, + "title": "Dagens julklappstips: Spotify", + "slug": "dagens-julklappstips-spotify", + "markdown": "\r\n\r\nDet är ju nästan töntigt att framhålla Spotify och därmed sälla sig till alla andra (teknik)bloggare i Sverige, men man kan ju inte låta bli! Spotify är gratis för den som har fått en inbjudan, men kostar 99:-/månad för den som inte är bland de utvalda – och då slipper man dessutom reklamavbrotten, som jag misstänker kommer bli alltmer frekventa framöver. Vi på tekniken.nu har tjatat länge o men tjänst där man kan prenumerera på musik, och nu har den äntligen kommit!\r\n\r\nDet är med en viss känsla av overklighet som man faktiskt lagligt kan lyssna på nästan vilken musik man vill omedelbart. Spotifys katalog är inte komplett, men hittills har den bara gått bet på det extremt hårda testet ”Fönt ja en körv så höpper ja i älva” – i övrigt har allt dykt upp i sökresultaten. Man kan lägga upp spellistor och enkelt skicka länkar till både spellistorna och enskilda låtar (om mottagaren har ett konto). För de som har kommit förbi självändamålet i att ha en massa plastaskar att visa upp för sina gäster så är detta den perfekta tjänsten.\r\n\r\nSpotify Premium heter månadsprenumerationen som kostar 99:-/månad, och den kan köpas som presentkort. Vad bättre som present än nyckeln till en oändlig källa till musik, både ny och gammal! Eftersom det är en månadsprenumeration så blir den också lätt att anpassa den till alla julklappsbudgetar.\r\n\r\nFinns det inget dåligt med Spotify då? Jo, det är klart att det finns några saker som man önskar sig:\r\n\r\niPhone-applikation – utan mobila möjligheter så måste man ju ändå skaffa musik man kan ta med sigBättre rekommendationer – jag är lite överraskad att det inte finns fler möjligheter att få förslag på ny musik, men det är alldeles säkert på gång.Volymnivån – tyvärr har Spotify normaliserat alla låtar till en ganska låg nivå, vilket gör att man måste dra på ganska bra. Systemljuden blir onödigt höga i jämförelse och har man ett klent ljudkort kan ljudkvaliteten bli lidande när man måste maxa uteffekten.\r\n\r\nTrots ovanstående – Spotify är en grym julklapp till musikintresserade släktingar och vänner!\r\n\r\n![Bild](http://tekniken.nu/uploads/633650376701340156-spotify.png)", + "html": "

    Det är ju nästan töntigt att framhålla Spotify och därmed sälla sig till alla andra (teknik)bloggare i Sverige, men man kan ju inte låta bli! Spotify är gratis för den som har fått en inbjudan, men kostar 99:-/månad för den som inte är bland de utvalda – och då slipper man dessutom reklamavbrotten, som jag misstänker kommer bli alltmer frekventa framöver. Vi på tekniken.nu har tjatat länge o men tjänst där man kan prenumerera på musik, och nu har den äntligen kommit!

    Det är med en viss känsla av overklighet som man faktiskt lagligt kan lyssna på nästan vilken musik man vill omedelbart. Spotifys katalog är inte komplett, men hittills har den bara gått bet på det extremt hårda testet ”Fönt ja en körv så höpper ja i älva” – i övrigt har allt dykt upp i sökresultaten. Man kan lägga upp spellistor och enkelt skicka länkar till både spellistorna och enskilda låtar (om mottagaren har ett konto). För de som har kommit förbi självändamålet i att ha en massa plastaskar att visa upp för sina gäster så är detta den perfekta tjänsten.

    Spotify Premium heter månadsprenumerationen som kostar 99:-/månad, och den kan köpas som presentkort. Vad bättre som present än nyckeln till en oändlig källa till musik, både ny och gammal! Eftersom det är en månadsprenumeration så blir den också lätt att anpassa den till alla julklappsbudgetar.

    Finns det inget dåligt med Spotify då? Jo, det är klart att det finns några saker som man önskar sig:

    • iPhone-applikation – utan mobila möjligheter så måste man ju ändå skaffa musik man kan ta med sig
    • Bättre rekommendationer – jag är lite överraskad att det inte finns fler möjligheter att få förslag på ny musik, men det är alldeles säkert på gång.
    • Volymnivån – tyvärr har Spotify normaliserat alla låtar till en ganska låg nivå, vilket gör att man måste dra på ganska bra. Systemljuden blir onödigt höga i jämförelse och har man ett klent ljudkort kan ljudkvaliteten bli lidande när man måste maxa uteffekten.

    Trots ovanstående – Spotify är en grym julklapp till musikintresserade släktingar och vänner!

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Dagens julklappstips: Spotify", + "meta_description": "", + "author_id": 6, + "created_at": 1229440869000, + "created_by": 6, + "updated_at": 1229440869000, + "updated_by": 6, + "published_at": 1229440869000, + "published_by": 6 + }, + { + "id": 266, + "title": "Dagens julklappstips: Bärbar dator", + "slug": "dagens-julklappstips-barbar-dator", + "markdown": "\r\n\r\nNu undrar ni förmodligen vad jag menar med att något så gammalt som en laptop skulle vara årets julklapp, men självklart pratar vi här om två nya väldigt populära nya bärbara segment: Budget- och minilaptops.\r\n\r\n\r\n# Minilaptop / ULCPC / NetBook\r\nEfter att Asus släppte sin Eee PC förra året har dessa små ”surfdatorer” har exploderat i popularitet under 2008 och alla datortillverkare värda namnet har sett till att få in minst en i sortimentet. Vi pratar här om ytterst små, lätta och billiga bärbara datorer som i huvudsak är anpassade för att websurf och mail och som samtidigt är enklare att ta med sig på semestern. Prestandan i dessa datorer är oftast betydligt lägre än i vanliga bärbara, men alldeles tillräcklig för avsedda ändamål. Tex har Intels nya Atom-serie här blivit populär.\r\n\r\nMicrosoft har satt följande hårdvarukrav på datorer som kvalificerar som en ULCPC:\r\n\r\n\r\nMinne: 1 GB RAM eller mindreSkärm: 10.2\" eller mindreLagring: 80 GB traditionell hårddisk eller 16 GB SSDGrafik: DirectX version 9 GPU eller lägreStrömförsörjning: Advanced Configuration and Power Interface (ACPI)Övrigt: Ingen tablet PC-funktionalitet\r\nOfta är dessa förinstallerade med lätta linuxdistributioner men Microsoft har också fått en ny marknad för Windows XP Home, och valt att förlänga operativsystemets garanti för ULCPCs.\r\n\r\n\r\n\r\n\r\n\r\nExempel: HP 2133, kostar ca 4000:- inkl moms.\r\n# Budgetlaptop\r\nFör den som tycker att en minilaptop inte riktigt fyller hela behovet och som gärna vill ha lite mer prestanda och större skärm så finns det numera gott om budgetlaptops som håller riktigt hög kvalitet. Grundförutsättningarna här är att man vill ha en vettig processor , minst 1GB RAM, >100GB hårddisk, operativsystem och en 15” skärm men inte betala mer än 3995:- inkl moms.\r\n\r\nJag köpte under året en HP 530 som gav mig allt ovanstående. Efter att dessutom konfigurerat upp den att dual-boota Windows Vista Home Basic och Mandriva Linux så har jag fått en grymt mångsidig dator som lämpar sig perfekt till allt utom tungt grafikarbete och spel.\r\n\r\n\r\n\r\nExempel: HP 530, kostar också ca 4000:- inkl moms.\r\n\r\n![Bild](http://tekniken.nu/uploads/633651963452275438-ASUS_Eee_White_Alt-small.png)", + "html": "

    Nu undrar ni förmodligen vad jag menar med att något så gammalt som en laptop skulle vara årets julklapp, men självklart pratar vi här om två nya väldigt populära nya bärbara segment: Budget- och minilaptops.


    Minilaptop / ULCPC / NetBook

    Efter att Asus släppte sin Eee PC förra året har dessa små ”surfdatorer” har exploderat i popularitet under 2008 och alla datortillverkare värda namnet har sett till att få in minst en i sortimentet. Vi pratar här om ytterst små, lätta och billiga bärbara datorer som i huvudsak är anpassade för att websurf och mail och som samtidigt är enklare att ta med sig på semestern. Prestandan i dessa datorer är oftast betydligt lägre än i vanliga bärbara, men alldeles tillräcklig för avsedda ändamål. Tex har Intels nya Atom-serie här blivit populär.

    Microsoft har satt följande hårdvarukrav på datorer som kvalificerar som en ULCPC:

    • Minne: 1 GB RAM eller mindre
    • Skärm: 10.2\" eller mindre
    • Lagring: 80 GB traditionell hårddisk eller 16 GB SSD
    • Grafik: DirectX version 9 GPU eller lägre
    • Strömförsörjning: Advanced Configuration and Power Interface (ACPI)
    • Övrigt: Ingen tablet PC-funktionalitet

    Ofta är dessa förinstallerade med lätta linuxdistributioner men Microsoft har också fått en ny marknad för Windows XP Home, och valt att förlänga operativsystemets garanti för ULCPCs.

    Exempel: HP 2133, kostar ca 4000:- inkl moms.

    Budgetlaptop

    För den som tycker att en minilaptop inte riktigt fyller hela behovet och som gärna vill ha lite mer prestanda och större skärm så finns det numera gott om budgetlaptops som håller riktigt hög kvalitet. Grundförutsättningarna här är att man vill ha en vettig processor , minst 1GB RAM, >100GB hårddisk, operativsystem och en 15” skärm men inte betala mer än 3995:- inkl moms.

    Jag köpte under året en HP 530 som gav mig allt ovanstående. Efter att dessutom konfigurerat upp den att dual-boota Windows Vista Home Basic och Mandriva Linux så har jag fått en grymt mångsidig dator som lämpar sig perfekt till allt utom tungt grafikarbete och spel.

    Exempel: HP 530, kostar också ca 4000:- inkl moms.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Dagens julklappstips: Bärbar dator", + "meta_description": "", + "author_id": 1085, + "created_at": 1229599544000, + "created_by": 1085, + "updated_at": 1229599544000, + "updated_by": 1085, + "published_at": 1229599544000, + "published_by": 1085 + }, + { + "id": 267, + "title": "Sista bastionen faller - all musik på Itunes blir DRM-fri", + "slug": "sista-bastionen-faller---all-musik-pa-itunes-blir-drm-fri", + "markdown": "\r\n\r\nSom vi tidigare har skrivit om så har flera distributörer av digital musik tagit bort DRM (det digitala kopieringsskyddet) och stängt av servrarna som hanterar det, ibland med tråkiga följder för kunderna.\r\n\r\n\r\n\r\nPå keynote-föreläsningen från MacWorld 2009 som hölls igår annonserade Apple att DRM ska försvinna även från Itunes! Det är glädjande att även världens största digitala skivbutik har tagit sitt förnuft till fånga (även om Apple själva har hävdat att det är skivbolagen som inte har velat släppa DRM). Innan detta kvartal är slut så kommer all musik att vara DRM-fri, och den musik man köpt sedan tidigare kan ”uppgraderas” för c:a en mindre summa per låt. I praktiken innebär det att man som kund kan flytta musiken till andra datorer, spela den på icke-ipods och känna sig rätt säker på att den går att spela även i en framtid där Itunes och/eller Apple skulle försvinna från marknaden.\r\n\r\nJag är själv väldigt nöjd med detta beslut från Apple och skivbolagen, och hoppas att det kommer att driva på att vi i Sverige får tillgång till Itunes video-delar och att även de blir DRM-fria (det är bara musiken som påverkas i nuläget). Jag tror att det huvudsakligen är Spotify och liknande tjänster har drivit på förändringen. Ett annat bidragande skäl kan vara att det faktiskt är dyrt att driva och underhålla de servrar som måste finnas tillgängliga för att hantera licenser och liknande för DRM.\r\n\r\n![Bild](http://tekniken.nu/uploads/633669244302711006-PNG-iTunes.png-256x256.png)", + "html": "

    Som vi tidigare har skrivit om så har flera distributörer av digital musik tagit bort DRM (det digitala kopieringsskyddet) och stängt av servrarna som hanterar det, ibland med tråkiga följder för kunderna.

    På keynote-föreläsningen från MacWorld 2009 som hölls igår annonserade Apple att DRM ska försvinna även från Itunes! Det är glädjande att även världens största digitala skivbutik har tagit sitt förnuft till fånga (även om Apple själva har hävdat att det är skivbolagen som inte har velat släppa DRM). Innan detta kvartal är slut så kommer all musik att vara DRM-fri, och den musik man köpt sedan tidigare kan ”uppgraderas” för c:a en mindre summa per låt. I praktiken innebär det att man som kund kan flytta musiken till andra datorer, spela den på icke-ipods och känna sig rätt säker på att den går att spela även i en framtid där Itunes och/eller Apple skulle försvinna från marknaden.

    Jag är själv väldigt nöjd med detta beslut från Apple och skivbolagen, och hoppas att det kommer att driva på att vi i Sverige får tillgång till Itunes video-delar och att även de blir DRM-fria (det är bara musiken som påverkas i nuläget). Jag tror att det huvudsakligen är Spotify och liknande tjänster har drivit på förändringen. Ett annat bidragande skäl kan vara att det faktiskt är dyrt att driva och underhålla de servrar som måste finnas tillgängliga för att hantera licenser och liknande för DRM.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Sista bastionen faller - all musik på Itunes blir DRM-fri", + "meta_description": "", + "author_id": 6, + "created_at": 1231327629000, + "created_by": 6, + "updated_at": 1231327629000, + "updated_by": 6, + "published_at": 1231327629000, + "published_by": 6 + }, + { + "id": 269, + "title": "Vänta lite med Chrome 2.0", + "slug": "vanta-lite-med-chrome-20", + "markdown": "\r\n\r\nGoogle har släppte för några veckor sedan sin webbläsare Chrome i skarp version. Tydligen spelar det stor roll för många IT-avdelningar att det inte står ”beta” någonstans på applikationer man rullar ut som en del av sitt standardpaket. Google ligger dock inte på latsidan bara för att första skarpa versionen är klar – man kan redan nu testa Chrome version 2.0. De här efterlängtade funktionerna har dykt upp i senaste versionen:\r\nAutokomplettering i formulärRiktig zoom-funktion (den zoomar hela sidan som i alla andra moderna browsers, inte genom att bara öka typsnitten som i Chrome 1)Profiler för att kunna köra Chrome med olika uppsättningar inställningarStöd för GreaseMonkey, vilket är öppningen för användarskapade plugins av den typ som har gjort FireFox så populärDiverse uppdateringar i kärnan (både webkit och javascriptmotorn V8).\r\nI samband med att skarpa version 1 och version 2 ”pre-beta” släpptes så har alla användare flyttats ett hack upp i versionskanalerna. De som tidigare hörde till kanalen ”beta”, d.v.s. det stora flertalet, hör nu till ”stable”. De som hörde till ”dev” hör nu till ”beta” och får betaversioner av version 1.0. För att få den nya Chrome 2.0 så måste man själv flytta till den nya dev-kanalen. Det gör man med Chrome channel-changer 2.0\r\n\r\n (den gamla funkar inte längre).\r\n\r\nSom den early adopter man är så kunde jag inte låta bli att flytta över till dev-kanalen för att få den nyaste Chrome-versionen. Tvärt om mot vad man är van vid så fungerar den dock inte alls så felfritt som man skulle önska (säkert därför man kallar den för ”pre-beta”). Förutom ett par renderingsbuggar som man kan leva med så har den stora problem med att bilder försvinner från webbsidorna. Jag har inte lyckats hitta något mönster – ibland försvinner de vid mouseover och ibland när man växlar tab. Mitt råd är att oavsett om du gillar Chrome och använder den som din standardwebbläsare eller har den som testmiljö vid webbutveckling så är det vettigt att vänta lite innan du går över till dev-kanalen.\r\n\r\n![Bild](http://tekniken.nu/uploads/633679678138376136-chromelogo.png)", + "html": "

    Google har släppte för några veckor sedan sin webbläsare Chrome i skarp version. Tydligen spelar det stor roll för många IT-avdelningar att det inte står ”beta” någonstans på applikationer man rullar ut som en del av sitt standardpaket. Google ligger dock inte på latsidan bara för att första skarpa versionen är klar – man kan redan nu testa Chrome version 2.0. De här efterlängtade funktionerna har dykt upp i senaste versionen:

    • Autokomplettering i formulär
    • Riktig zoom-funktion (den zoomar hela sidan som i alla andra moderna browsers, inte genom att bara öka typsnitten som i Chrome 1)
    • Profiler för att kunna köra Chrome med olika uppsättningar inställningar
    • Stöd för GreaseMonkey, vilket är öppningen för användarskapade plugins av den typ som har gjort FireFox så populär
    • Diverse uppdateringar i kärnan (både webkit och javascriptmotorn V8).

    I samband med att skarpa version 1 och version 2 ”pre-beta” släpptes så har alla användare flyttats ett hack upp i versionskanalerna. De som tidigare hörde till kanalen ”beta”, d.v.s. det stora flertalet, hör nu till ”stable”. De som hörde till ”dev” hör nu till ”beta” och får betaversioner av version 1.0. För att få den nya Chrome 2.0 så måste man själv flytta till den nya dev-kanalen. Det gör man med Chrome channel-changer 2.0

    (den gamla funkar inte längre).

    Som den early adopter man är så kunde jag inte låta bli att flytta över till dev-kanalen för att få den nyaste Chrome-versionen. Tvärt om mot vad man är van vid så fungerar den dock inte alls så felfritt som man skulle önska (säkert därför man kallar den för ”pre-beta”). Förutom ett par renderingsbuggar som man kan leva med så har den stora problem med att bilder försvinner från webbsidorna. Jag har inte lyckats hitta något mönster – ibland försvinner de vid mouseover och ibland när man växlar tab. Mitt råd är att oavsett om du gillar Chrome och använder den som din standardwebbläsare eller har den som testmiljö vid webbutveckling så är det vettigt att vänta lite innan du går över till dev-kanalen.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Vänta lite med Chrome 2.0", + "meta_description": "\"-version än så länge, så vill du ha en pålitlig webbläsare är det bättre att vänta.", + "author_id": 6, + "created_at": 1232371012000, + "created_by": 6, + "updated_at": 1232371012000, + "updated_by": 6, + "published_at": 1232371012000, + "published_by": 6 + }, + { + "id": 271, + "title": "Några tips för Windows 7 beta", + "slug": "nagra-tips-for-windows-7-beta", + "markdown": "\r\n\r\nWindows 7 har som de flesta säkert känner till släppts i publik betaversion. Den har beskrivits som en av de mest kompletta betaversionerna som Microsoft någonsin har släppt. Det mesta tycks redan vara på plats, och prestandan känns redan bättre än Vistas. Jag är benägen att hålla med, men det finns en del saker som inte fungerar riktigt. Här är mina tips!\r\n\r\nGrafikkort\r\n\r\nJag hade jätteproblem med att installera drivrutiner för mitt ATI-kort. ATI har släppt en beta för Windows 7, problemet är bara att den inte stödjer mitt gamla 1950 PRO. Jag försökte ett antal gånger utan framgång innan jag till slut såg att mitt grafikkort inte fanns med i listan. Näst bäst kändes den senaste drivrutinen för Vista x64, men den ville inte heller installeras ordentligt via ATIs eget installationsprogram. Därför fick jag göra såhär:\r\n\r\n\r\nLadda ner drivrutinerna och Catalyst Control Center som två separata installationerPacka upp drivrutinernaInstallera drivrutinerna via Windows egna funktioner (öppna Device Manager, välja Update Driver, Have Disk och så vidare)Installera CCC med hjälp av installationsprogrammet (det fungerade bra)\r\n\r\n\r\nWindows Media Center\r\n\r\nMedia center liknar Vistas Media Center ganska mycket, lite uppfräschat grafiskt. Windows 7 har ett inbyggt stöd för DivX/XviD som är riktigt bra, det enda som fattas är egentligen bara stöd för textning och riktigt gamla DivX-kodningar (version 3 funkar inte). Däremot finns tvärt emot ryktena inget stöd för MKV. Jag gissar att det kommer, men tills vidare måste man installera fler codecs och splitters. Tvärt emot min grundfilosofi så valde jag ett färdigt codec-pack. Media Center verkar lite selektivt med vilka codecs den bryr sig om – den verkar använda den nya splittern (eftersom MKV-filer funkar) men den inbyggda h264-codecen.\r\n\r\nEn sak jag hade glömt när det gäller inställningen av Media Center som är likadan i Vista är inställningen av upplösning på TVn. Om man som jag fortfarande har en tjock-TV (ta det lugnt, den är på väg att bytas ut :-) ) så gäller det att inte välja att den är ansluten via S-Videokabel, trots att den är det. Om man inte väljer att TVn är ansluten via DVI så får man inte välja upplösning av någon anledning.\r\n\r\nDet enda strulet med Media Center jag har haft är med inspelningsservicen som slänger .NET-felmeddelanden varje gång jag startar Media Center. Ingenting som hindrar funktionen, men lite irriterande. Den rapporterade buggen som förstör MP3-filer har fått en HotFix som man får automatiskt via Windows Update när man installerar Windows 7.\r\n\r\nLjudkort\r\n\r\nJag har ett Terratec 7.1-ljudkort som jag köpte enbart eftersom det har en optisk utgång. Terratec har fått mycket skäll för bristfälliga drivrutiner, men det fungerade faktiskt helt felfritt med Vista-drivrutinerna. Inte nog med det, ”AC3 passthrough” som skickar en surroundsignal direkt till förstärkaren utan omkodning fungerar plötsligt fint! (fick det aldrig att funka bra i Vista).\r\n\r\nGoogle Chrome\r\n\r\nChrome fungerar inte av sig själv på x64 (varken Windows 7 eller Vista). Det är som tur är lätt att åtgärda:\r\n\r\n\r\nHögerklicka på Chrome-ikonenI Target-fältet, lägg till ”--in-process-plugins”: ”C:\\Users\\MyUserName\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe --in-process-plugins”\r\n\r\n\r\nNågra fotnoter\r\n\r\nJag valde att gå från 32-bitars Vista till 64-bitars Windows 7, så vissa av de problem jag stötte kanske jag skulle ha fått även om jag hade bytt till Vista x64. Jag hade också ett problem med att det första användarkontot jag skapade av någon anledning gick sönder efter ett kort tag – Media Center ville inte starta, ljudkortets kontrollpanel hängde sig varje gång, Outlook hängde sig etc. När jag skapade ett nytt användarkonto försvann alla de problemen.\r\n\r\n![Bild](http://tekniken.nu/uploads/633691686685725180-202px-Windows_Media_Center_logo.png)", + "html": "

    Windows 7 har som de flesta säkert känner till släppts i publik betaversion. Den har beskrivits som en av de mest kompletta betaversionerna som Microsoft någonsin har släppt. Det mesta tycks redan vara på plats, och prestandan känns redan bättre än Vistas. Jag är benägen att hålla med, men det finns en del saker som inte fungerar riktigt. Här är mina tips!

    Grafikkort

    Jag hade jätteproblem med att installera drivrutiner för mitt ATI-kort. ATI har släppt en beta för Windows 7, problemet är bara att den inte stödjer mitt gamla 1950 PRO. Jag försökte ett antal gånger utan framgång innan jag till slut såg att mitt grafikkort inte fanns med i listan. Näst bäst kändes den senaste drivrutinen för Vista x64, men den ville inte heller installeras ordentligt via ATIs eget installationsprogram. Därför fick jag göra såhär:

    • Ladda ner drivrutinerna och Catalyst Control Center som två separata installationer
    • Packa upp drivrutinerna
    • Installera drivrutinerna via Windows egna funktioner (öppna Device Manager, välja Update Driver, Have Disk och så vidare)
    • Installera CCC med hjälp av installationsprogrammet (det fungerade bra)

    Windows Media Center

    Media center liknar Vistas Media Center ganska mycket, lite uppfräschat grafiskt. Windows 7 har ett inbyggt stöd för DivX/XviD som är riktigt bra, det enda som fattas är egentligen bara stöd för textning och riktigt gamla DivX-kodningar (version 3 funkar inte). Däremot finns tvärt emot ryktena inget stöd för MKV. Jag gissar att det kommer, men tills vidare måste man installera fler codecs och splitters. Tvärt emot min grundfilosofi så valde jag ett färdigt codec-pack. Media Center verkar lite selektivt med vilka codecs den bryr sig om – den verkar använda den nya splittern (eftersom MKV-filer funkar) men den inbyggda h264-codecen.

    En sak jag hade glömt när det gäller inställningen av Media Center som är likadan i Vista är inställningen av upplösning på TVn. Om man som jag fortfarande har en tjock-TV (ta det lugnt, den är på väg att bytas ut :-) ) så gäller det att inte välja att den är ansluten via S-Videokabel, trots att den är det. Om man inte väljer att TVn är ansluten via DVI så får man inte välja upplösning av någon anledning.

    Det enda strulet med Media Center jag har haft är med inspelningsservicen som slänger .NET-felmeddelanden varje gång jag startar Media Center. Ingenting som hindrar funktionen, men lite irriterande. Den rapporterade buggen som förstör MP3-filer har fått en HotFix som man får automatiskt via Windows Update när man installerar Windows 7.

    Ljudkort

    Jag har ett Terratec 7.1-ljudkort som jag köpte enbart eftersom det har en optisk utgång. Terratec har fått mycket skäll för bristfälliga drivrutiner, men det fungerade faktiskt helt felfritt med Vista-drivrutinerna. Inte nog med det, ”AC3 passthrough” som skickar en surroundsignal direkt till förstärkaren utan omkodning fungerar plötsligt fint! (fick det aldrig att funka bra i Vista).

    Google Chrome

    Chrome fungerar inte av sig själv på x64 (varken Windows 7 eller Vista). Det är som tur är lätt att åtgärda:

    • Högerklicka på Chrome-ikonen
    • I Target-fältet, lägg till ”--in-process-plugins”: ”C:\\Users\\MyUserName\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe --in-process-plugins”

    Några fotnoter

    Jag valde att gå från 32-bitars Vista till 64-bitars Windows 7, så vissa av de problem jag stötte kanske jag skulle ha fått även om jag hade bytt till Vista x64. Jag hade också ett problem med att det första användarkontot jag skapade av någon anledning gick sönder efter ett kort tag – Media Center ville inte starta, ljudkortets kontrollpanel hängde sig varje gång, Outlook hängde sig etc. När jag skapade ett nytt användarkonto försvann alla de problemen.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Några tips för Windows 7", + "meta_description": " så här kommer några tips på vägen.", + "author_id": 6, + "created_at": 1233571867000, + "created_by": 6, + "updated_at": 1233571867000, + "updated_by": 6, + "published_at": 1233571867000, + "published_by": 6 + }, + { + "id": 273, + "title": "Foxmarks: världens bästa bokmärkessynkroniserare", + "slug": "foxmarks-varldens-basta-bokmarkessynkroniserare", + "markdown": "\r\n\r\nÄnda sedan webbens begynnelse har det varit ett problem att man surfar på flera datorer och att ens bokmärken ganska snart spretar åt olika håll. Ofta vill jag spara en sida jag har hittat på jobbet för att läsa ordentligt hemma och tvärt om. Det finns och har funnits en massa webbplatser som erbjuder bokmärkeshantering som en webbsida, och det var ju faktiskt så begreppet hemsida uppstod – det var en sida som man själv hade kodat ihop i HTML som innehöll ens viktigaste länkarna. Jag tycker dock att bokmärken på en webbsida fungerar rätt dåligt, jag vill ha mina bokmärken i själva webbläsaren.\r\n\r\n\r\n\r\nSom tur är så finns det en lösning, som är riktigt bra! Den heter Foxmarks. Foxmarks började som en plugin till FireFox och den har jag använt flitigt i över ett år. Det fina är att Foxmarks nu har kommit för Internet Explorer och Safari också! Förutom ett webbläsartillägg som hanterar synkroniseringen av bokmärkena får man också tillgång sina bokmärken som en länksida (lösningen jag sågade ovan), ifall man sitter på en dator där man inte vill/kan installera tilläget. Foxmarks kan också synkronisera sparade lösenord mellan datorer.\r\n\r\nDet enda smolket i glädjebägaren är att Foxmarks inte finns för Chrome, men enligt Foxmarks blog kommer detta i den nära framtiden!\r\n\r\n![Bild](http://tekniken.nu/uploads/633697753877144671-foxmarks.PNG)", + "html": "

    Ända sedan webbens begynnelse har det varit ett problem att man surfar på flera datorer och att ens bokmärken ganska snart spretar åt olika håll. Ofta vill jag spara en sida jag har hittat på jobbet för att läsa ordentligt hemma och tvärt om. Det finns och har funnits en massa webbplatser som erbjuder bokmärkeshantering som en webbsida, och det var ju faktiskt så begreppet hemsida uppstod – det var en sida som man själv hade kodat ihop i HTML som innehöll ens viktigaste länkarna. Jag tycker dock att bokmärken på en webbsida fungerar rätt dåligt, jag vill ha mina bokmärken i själva webbläsaren.

    Som tur är så finns det en lösning, som är riktigt bra! Den heter Foxmarks. Foxmarks började som en plugin till FireFox och den har jag använt flitigt i över ett år. Det fina är att Foxmarks nu har kommit för Internet Explorer och Safari också! Förutom ett webbläsartillägg som hanterar synkroniseringen av bokmärkena får man också tillgång sina bokmärken som en länksida (lösningen jag sågade ovan), ifall man sitter på en dator där man inte vill/kan installera tilläget. Foxmarks kan också synkronisera sparade lösenord mellan datorer.

    Det enda smolket i glädjebägaren är att Foxmarks inte finns för Chrome, men enligt Foxmarks blog kommer detta i den nära framtiden!

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Foxmarks: världens bästa bokmärkessynkroniserare", + "meta_description": "", + "author_id": 6, + "created_at": 1234178586000, + "created_by": 6, + "updated_at": 1234178586000, + "updated_by": 6, + "published_at": 1234178586000, + "published_by": 6 + }, + { + "id": 277, + "title": "Äntligen: Aftonbladet uppmanar till uppgradering från IE6", + "slug": "antligen-aftonbladet-uppmanar-till-uppgradering-fran-ie6", + "markdown": "\r\n\r\nSom utvecklare så kämpar vi fortfarande dagligen med att testa våra webbplatser i en uppsjö av olika webbläsare. Värst är IE6, som skiljer sig mest från de andra i hur den tolkar HTML och CSS. Den börjar ju bli ganska rejält till åren, så det är inte så konstigt. Konstigare är att så många användare och företag fortfarande håller fast vid den.\r\n\r\nDärför är det extra glädjande med en kampanj som startade i Norge med bland annat dagstidningen Verdens Gang som nu Aftonbladet har hoppat på! Såhär ser det ut när man surfar till Aftonbladet med IE6:\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/633707291283107022-IE_logo.png)\r\n\r\nTack för tipset från Oh so hightech: \r\n\r\nhttp://ohsohightech.se/norge-startar-uppgradera-internet-explorer-6-kampanj/\r\n", + "html": "

    Som utvecklare så kämpar vi fortfarande dagligen med att testa våra webbplatser i en uppsjö av olika webbläsare. Värst är IE6, som skiljer sig mest från de andra i hur den tolkar HTML och CSS. Den börjar ju bli ganska rejält till åren, så det är inte så konstigt. Konstigare är att så många användare och företag fortfarande håller fast vid den.

    Därför är det extra glädjande med en kampanj som startade i Norge med bland annat dagstidningen Verdens Gang som nu Aftonbladet har hoppat på! Såhär ser det ut när man surfar till Aftonbladet med IE6:



    Tack för tipset från Oh so hightech: 

    http://ohsohightech.se/norge-startar-uppgradera-internet-explorer-6-kampanj/

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Äntligen: Aftonbladet uppmanar till uppgradering från IE6", + "meta_description": "", + "author_id": 6, + "created_at": 1235132328000, + "created_by": 6, + "updated_at": 1235132328000, + "updated_by": 6, + "published_at": 1235132328000, + "published_by": 6 + }, + { + "id": 281, + "title": "Vinnarna i EPiServer Awards 2009", + "slug": "vinnarna-i-episerver-awards-2009", + "markdown": "\r\n\r\nIgår avgjordes EPiServer Awards 2009 på bästa galamanér. Närmare 400 personer fick se oss ta hem priset för bästa intranät, och vi är förstås omåttligt glada och stolta!\r\n### Best Web Site\r\nBYGGMax, utvecklad av Cloud Nine\r\n\r\n### Best Web Site Public Sector\r\nStockholm Stad, utvecklad av Creuna\r\n### Best Intranet\r\nThe Absolut Company, utvecklad av Iteam\r\n### Best Online Social Community\r\nCommunity of Sweden, utvecklad av Getupdated\r\n### Best Innovation\r\n3onDisplay, utvecklad Ottoboni\r\n\r\nStort grattis till alla de andra vinnarna!\r\n\r\nVi vill tacka vår kund The Absolut Company för att vi har fått förtroendet att utveckla ABSOLUT FORUM, och även våra samarbetspartners i projektet: Supernative, Pronto, Springtime och Subset.\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/633723696350529079-Banner 367 eng.jpg)", + "html": "

    Igår avgjordes EPiServer Awards 2009 på bästa galamanér. Närmare 400 personer fick se oss ta hem priset för bästa intranät, och vi är förstås omåttligt glada och stolta!

    Best Web Site

    BYGGMax, utvecklad av Cloud Nine

    Best Web Site Public Sector

    Stockholm Stad, utvecklad av Creuna

    Best Intranet

    The Absolut Company, utvecklad av Iteam

    Best Online Social Community

    Community of Sweden, utvecklad av Getupdated

    Best Innovation

    3onDisplay, utvecklad Ottoboni

    Stort grattis till alla de andra vinnarna!

    Vi vill tacka vår kund The Absolut Company för att vi har fått förtroendet att utveckla ABSOLUT FORUM, och även våra samarbetspartners i projektet: Supernative, Pronto, Springtime och Subset.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Vinnarna i EPiServer Awards 2009", + "meta_description": "", + "author_id": 6, + "created_at": 1236772833000, + "created_by": 6, + "updated_at": 1236772833000, + "updated_by": 6, + "published_at": 1236772833000, + "published_by": 6 + }, + { + "id": 282, + "title": "iPhone OS 3.0 - nu är det officiellt!", + "slug": "iphone-os-30---nu-ar-det-officiellt", + "markdown": "\r\n\r\nNästa uppdatering av iPhone OS kommer att vara stor. De uppdateringar som har släpts hittills har varit nya versioner av iPhone OS 2, men nästa steg kommer att vara iPhone OS 3. Förhoppningarna har varit stora på både det ena och det andra, men nu ikväll svensk tid så vet vi – nu har nämligen Apple hållit sin officiella presentation.\r\n\r\nDe stora nyheterna som alla väntat på:\r\n\r\nKlipp och klistra! Kanske den mest efterlängtade versionen av alla på iPhone? En rolig detalj är att man skakar på telefonen för att ångra urklipp och inklistringar som blivit fel :-).Widescreenläge på tangentbordet i mail, SMS och anteckningarPush – något som skulle ha varit med redan från början i iPhone 3G. Apple har nu definitivt valt push framför att låta tredjepartsprogram vara igång i bakgrunden, eftersom det drar mer batteri.Stöd för MMS.Riktig GPS-navigering med turn by turn\r\n\r\nAnnat som också kommer i iPhone OS 3.0:\r\n\r\nMöjlighet för utvecklare att integrera Google Maps direkt i sina applikationerNya sätt att ta betalt – mikrobetalningar inifrån applikationerFunktioner för att koppla ihop två iPhones (för att spela spel mot varandra t.ex.)Bättre hårdvarustöd, bland annat för stereoljud via BlueToothMassor av nyheter i SDK:et, bland annat för streamat ljud och video.DiktafonEn global sökfunktion för all information i telefonen (kontakter, möten, mail, anteckningar etc.)\r\n\r\nDe funktioner som har diskuterats mest på bloggar och i olika forum har därmed till största del kommit med. Den enda som jag direkt ser saknas är videoinspelning. Det återstår också att se om min personliga favorit åäö som egna knappar på tangentbordet finns med, men jag har inte så höga förhoppningar.\r\n\r\nTotalt sett är dock iPhone 3.0 en mycket välkommen uppgradering med riktigt bra funktioner som man knappt kan vänta på! Vänta får man dock göra, uppgraderingen kommer inte förrän i sommar.\r\n\r\nMer detaljer finns på Engadgets liveblog från Apples presentation. Tänk på att läsa nerifrån och upp bara – jag blev rätt förvirrad när jag började läsa baklänges i kronologin :-).\r\n\r\n![Bild](http://tekniken.nu/uploads/633729166749251405-200712723562878177801.png)", + "html": "

    Nästa uppdatering av iPhone OS kommer att vara stor. De uppdateringar som har släpts hittills har varit nya versioner av iPhone OS 2, men nästa steg kommer att vara iPhone OS 3. Förhoppningarna har varit stora på både det ena och det andra, men nu ikväll svensk tid så vet vi – nu har nämligen Apple hållit sin officiella presentation.

    De stora nyheterna som alla väntat på:

    • Klipp och klistra! Kanske den mest efterlängtade versionen av alla på iPhone? En rolig detalj är att man skakar på telefonen för att ångra urklipp och inklistringar som blivit fel :-).
    • Widescreenläge på tangentbordet i mail, SMS och anteckningar
    • Push – något som skulle ha varit med redan från början i iPhone 3G. Apple har nu definitivt valt push framför att låta tredjepartsprogram vara igång i bakgrunden, eftersom det drar mer batteri.
    • Stöd för MMS.
    • Riktig GPS-navigering med turn by turn

    Annat som också kommer i iPhone OS 3.0:

    • Möjlighet för utvecklare att integrera Google Maps direkt i sina applikationer
    • Nya sätt att ta betalt – mikrobetalningar inifrån applikationer
    • Funktioner för att koppla ihop två iPhones (för att spela spel mot varandra t.ex.)
    • Bättre hårdvarustöd, bland annat för stereoljud via BlueTooth
    • Massor av nyheter i SDK:et, bland annat för streamat ljud och video.
    • Diktafon
    • En global sökfunktion för all information i telefonen (kontakter, möten, mail, anteckningar etc.)

    De funktioner som har diskuterats mest på bloggar och i olika forum har därmed till största del kommit med. Den enda som jag direkt ser saknas är videoinspelning. Det återstår också att se om min personliga favorit åäö som egna knappar på tangentbordet finns med, men jag har inte så höga förhoppningar.

    Totalt sett är dock iPhone 3.0 en mycket välkommen uppgradering med riktigt bra funktioner som man knappt kan vänta på! Vänta får man dock göra, uppgraderingen kommer inte förrän i sommar.

    Mer detaljer finns på Engadgets liveblog från Apples presentation. Tänk på att läsa nerifrån och upp bara – jag blev rätt förvirrad när jag började läsa baklänges i kronologin :-).

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "iPhone OS 3.0 - nu är det officiellt!", + "meta_description": "versionen släpps.", + "author_id": 6, + "created_at": 1237319874000, + "created_by": 6, + "updated_at": 1237319874000, + "updated_by": 6, + "published_at": 1237319874000, + "published_by": 6 + }, + { + "id": 284, + "title": "Bästa lösningen för webbaserad RSS-läsning", + "slug": "basta-losningen-for-webbaserad-rss-lasning", + "markdown": "\r\n\r\nDet finns många alternativ för den som vill läsa RSS-feeds. Det finns fristående läsare som FeedReader och SharpReader, det finns inbyggt stöd i webbläsare som FireFox och IE, och det finns gadgets för t.ex. Vista. För mig har dock Google Reader visat sig vara den smartaste och bästa lösningen. Varför?\r\n\r\nKräver ingen installation av extra programKlarar många RSS-standarderBra stöd för kategorisering och mapparIntegration med Feedburner som gör det lätt att lägga till nya flödenFunktion för att kommentera i Reader (inte i källans kommentarsfunktioner) och dela kommentarerna med vännerViktigast: bra version för iPhone. Det är riktigt bra att få samma flöde i telefonen som på datorn. Poster man har läst och flaggat upp som favoriter följer sömlöst med mellan plattformarna.\r\nNackdelar då? Google Reader har vad jag vet ingen alertfunktion som visar när nya poster har kommit in. För mig är det dock bara en fördel, jag har sedan länge stängt av alla notifieringar som går att stänga av (Outlook etc.) eftersom de stör fokus och koncentration när man arbetar. Den enda notifierare jag har igång är den jag har byggt själv som visar nästa låt som spelas i kontorets musiksystem :-).\r\n\r\nJag hörde ett rykte om att Reader är en av de tjänster som Google funderar på att göra sig av med. Hoppas verkligen att det inte blir så!\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/633746136445186676-RSS icon.png)", + "html": "

    Det finns många alternativ för den som vill läsa RSS-feeds. Det finns fristående läsare som FeedReader och SharpReader, det finns inbyggt stöd i webbläsare som FireFox och IE, och det finns gadgets för t.ex. Vista. För mig har dock Google Reader visat sig vara den smartaste och bästa lösningen. Varför?

    • Kräver ingen installation av extra program
    • Klarar många RSS-standarder
    • Bra stöd för kategorisering och mappar
    • Integration med Feedburner som gör det lätt att lägga till nya flöden
    • Funktion för att kommentera i Reader (inte i källans kommentarsfunktioner) och dela kommentarerna med vänner
    • Viktigast: bra version för iPhone. Det är riktigt bra att få samma flöde i telefonen som på datorn. Poster man har läst och flaggat upp som favoriter följer sömlöst med mellan plattformarna.

    Nackdelar då? Google Reader har vad jag vet ingen alertfunktion som visar när nya poster har kommit in. För mig är det dock bara en fördel, jag har sedan länge stängt av alla notifieringar som går att stänga av (Outlook etc.) eftersom de stör fokus och koncentration när man arbetar. Den enda notifierare jag har igång är den jag har byggt själv som visar nästa låt som spelas i kontorets musiksystem :-).

    Jag hörde ett rykte om att Reader är en av de tjänster som Google funderar på att göra sig av med. Hoppas verkligen att det inte blir så!

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Bästa lösningen för webbaserad RSS-läsning", + "meta_description": "viktigast av allt: riktigt bra iPhone-version!", + "author_id": 6, + "created_at": 1239016843000, + "created_by": 6, + "updated_at": 1239016843000, + "updated_by": 6, + "published_at": 1239016843000, + "published_by": 6 + }, + { + "id": 292, + "title": "Så bra är iPhone OS 3.0", + "slug": "sa-bra-ar-iphone-os-30", + "markdown": "\r\n\r\nI juni kommer den nya version av iPhones operativsystem. Om man är registrerad utvecklare har man dock tillgång till det redan nu, i betaversion. Det är ju en sak med en lång lista med funktioner men en annan hur de faktiskt fungerar - så hur bra är iPhone OS 3.0 egentligen?\r\n\r\nDet första man slås av när man har installerat 3.0 är... mest ingenting. För att vara en version som har så många nya funktioner så hade man på något sätt väntat sig en större förändring. När man använder telefonen som vanligt börjar man dock upptäcka att de nya funktionerna är riktigt, riktigt bra.\r\n\r\nHär är mina favoriter:\r\n## Bättre tangentbord\r\nTangentbordet har funnits i landscape-version sedan länge, men bara i vissa applikationer. Det har känns väldigt fånigt att den mest tangentbordsintensiva applikationen – mail – inte har haft landscape-stöd. I OS 3.0 finns det dock, och inte nog med det. Åäö har blivit egna riktiga tangenter! Det kan tyckas vara en liten ändring, men för mig har det gjort extremt stor skillnad. Att skriva mail på telefonen har gått från att vara något som man drar sig för till att bli nästan lika bra som på en telefon med riktigt utdragbart tangentbord. Mycket bra!\r\n## Serverbaserad sökning i mail\r\nTelefonen synkar max 200 mail per mailbox, och har dessutom en tidsspärr för hur gamla mail som kommer med. Vanligtvis räcker det bra, men ofta behöver man tillgång till gamla mail. Nu finns funktionen att söka i hela ens serverkonto (om man är kopplad till Exchange) i alla mappar. Helt suveränt!\r\n\r\n\r\n## Massor med småsaker\r\nMånga har längtat efter klipp-och-klistra. För mig har det aldrig varit någon killer app, men visst är det bekvämt och en funktion man förväntar sig att hitta.\r\n\r\nAtt koppla upp en laptop med telefonen är också bra, fast eftersom jag inte har någon laptop är den kanske inte viktigast för mig.\r\n\r\nEn annan sak som är ny är spolning i mediefiler. Tidigare har det varit en hastighet, som ofta är för snabb. Spolar man i en långfil så innebär varje pixel minst 30 sekunders hopp vilket ofta är för långt och kräver grym pekfingersprecision. Med 3.0 kan man genom att dra fingret i höjdled kan man anpassa spolningshastigheten till väldigt finkorning.\r\n\r\n\r\n\r\nAndra saker som MMS, push etc. har jag inte haft möjlighet att testa än.\r\n## Buggar\r\nVisst finns det buggar, inte så konstigt eftersom det är en beta. Värsta buggen är att den gröna Call-knappen i telefonfönstret är borta ungefär varannan gång jag ska använda den. Det går bra att mata in siffror, men det finns inget sätt att sätta igång samtalet. Det går däremot bra att ringa via telefonboken. En omstart av telefonen trollar fram knappen igen.\r\n\r\nI sammanfattning kan jag bara säga att jag är väldigt nöjd med OS 3.0. Uppgradera så snart du får möjlighet!\r\n\r\n![Bild](http://tekniken.nu/uploads/633761825576050675-iphone-os 3.png)", + "html": "

    I juni kommer den nya version av iPhones operativsystem. Om man är registrerad utvecklare har man dock tillgång till det redan nu, i betaversion. Det är ju en sak med en lång lista med funktioner men en annan hur de faktiskt fungerar - så hur bra är iPhone OS 3.0 egentligen?

    Det första man slås av när man har installerat 3.0 är... mest ingenting. För att vara en version som har så många nya funktioner så hade man på något sätt väntat sig en större förändring. När man använder telefonen som vanligt börjar man dock upptäcka att de nya funktionerna är riktigt, riktigt bra.

    Här är mina favoriter:

    Bättre tangentbord

    Tangentbordet har funnits i landscape-version sedan länge, men bara i vissa applikationer. Det har känns väldigt fånigt att den mest tangentbordsintensiva applikationen – mail – inte har haft landscape-stöd. I OS 3.0 finns det dock, och inte nog med det. Åäö har blivit egna riktiga tangenter! Det kan tyckas vara en liten ändring, men för mig har det gjort extremt stor skillnad. Att skriva mail på telefonen har gått från att vara något som man drar sig för till att bli nästan lika bra som på en telefon med riktigt utdragbart tangentbord. Mycket bra!

    Serverbaserad sökning i mail

    Telefonen synkar max 200 mail per mailbox, och har dessutom en tidsspärr för hur gamla mail som kommer med. Vanligtvis räcker det bra, men ofta behöver man tillgång till gamla mail. Nu finns funktionen att söka i hela ens serverkonto (om man är kopplad till Exchange) i alla mappar. Helt suveränt!

    Massor med småsaker

    Många har längtat efter klipp-och-klistra. För mig har det aldrig varit någon killer app, men visst är det bekvämt och en funktion man förväntar sig att hitta.

    Att koppla upp en laptop med telefonen är också bra, fast eftersom jag inte har någon laptop är den kanske inte viktigast för mig.

    En annan sak som är ny är spolning i mediefiler. Tidigare har det varit en hastighet, som ofta är för snabb. Spolar man i en långfil så innebär varje pixel minst 30 sekunders hopp vilket ofta är för långt och kräver grym pekfingersprecision. Med 3.0 kan man genom att dra fingret i höjdled kan man anpassa spolningshastigheten till väldigt finkorning.

    Andra saker som MMS, push etc. har jag inte haft möjlighet att testa än.

    Buggar

    Visst finns det buggar, inte så konstigt eftersom det är en beta. Värsta buggen är att den gröna Call-knappen i telefonfönstret är borta ungefär varannan gång jag ska använda den. Det går bra att mata in siffror, men det finns inget sätt att sätta igång samtalet. Det går däremot bra att ringa via telefonboken. En omstart av telefonen trollar fram knappen igen.

    I sammanfattning kan jag bara säga att jag är väldigt nöjd med OS 3.0. Uppgradera så snart du får möjlighet!

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Så bra är iPhone OS 3.0", + "meta_description": "en annan hur de faktiskt fungerar - så hur bra är iPhone OS 3.0 egentligen?", + "author_id": 6, + "created_at": 1240585756000, + "created_by": 6, + "updated_at": 1240585756000, + "updated_by": 6, + "published_at": 1240585756000, + "published_by": 6 + }, + { + "id": 295, + "title": "Uppgradera från Windows 7 beta till RC", + "slug": "uppgradera-fran-windows-7-beta-till-rc", + "markdown": "\r\nEgentligen är det inte meningen att man ska kunna uppgradera till Windows 7 RC från något annat än en ren Vista-installation. För de av oss om har installerat Windows 7 beta känns det ju dock träligt att behöva göra en hel ominstallation nu och en till när den skarpa versionen kommer i oktober. Som tur är så är installationsprogrammet för RC-versionen ganska lättlurat:\r\n\r\nhttp://www.nirmaltv.com/2009/05/02/how-to-upgrade-from-windows-7-beta-to-rc-build/\r\n\r\n(jag har dock ännu inte testat själv att uppgradera, så inga garantier utlovas för att det ska funka felfritt).\r\n![Bild](http://tekniken.nu/uploads/633772222063954562-windows72.png)", + "html": "

    Egentligen är det inte meningen att man ska kunna uppgradera till Windows 7 RC från något annat än en ren Vista-installation. För de av oss om har installerat Windows 7 beta känns det ju dock träligt att behöva göra en hel ominstallation nu och en till när den skarpa versionen kommer i oktober. Som tur är så är installationsprogrammet för RC-versionen ganska lättlurat:

    http://www.nirmaltv.com/2009/05/02/how-to-upgrade-from-windows-7-beta-to-rc-build/

    (jag har dock ännu inte testat själv att uppgradera, så inga garantier utlovas för att det ska funka felfritt).", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Uppgradera från Windows 7 beta till RC", + "meta_description": "", + "author_id": 6, + "created_at": 1241625406000, + "created_by": 6, + "updated_at": 1241625406000, + "updated_by": 6, + "published_at": 1241625406000, + "published_by": 6 + }, + { + "id": 297, + "title": "Äntligen stöd för tillägg i Google Chrome", + "slug": "antligen-stod-for-tillagg-i-google-chrome", + "markdown": "\r\n\r\nI den nyaste utvecklarversionen av Chrome så har Google utökat funktionerna med extensions, alltså små tillägg som skapas av tredjepartsutvecklare som gör webbläsaren bättre. FireFox har länge varit kungen på extensions och har tusentals fantastiska tillägg för allt mellan att debugga webbsidor och navigera lättare på Kanye Wests webbplats (hmm...).\r\n\r\nSjälv har jag tyckt att just tillägg har varit det som har saknats från Chrome, men nu finns alltså API:et på plats. Om du vill testa själv, gör såhär:\r\n\r\n\r\nVäxla över Chrome till utvecklarkanalen med Chrome Channel Changer. Det betyder att du oftare får nya versioner och snabbare får ny funktionalitet, men som samtidigt är mindre genomtestade.Ändra genvägen som startar Chrome och lägg till –enable-extensions (två bindestreck först)Testa något av de två exemplen för Gmail och Google Reader som Google själva har byggtVänta på nya grymma tillägg som garanterat är på väg!\r\n\r\n\r\nMina 10 önsketillägg (som finns och inte finns till andra webbläsare)\r\n\r\n\r\nXmarks – grym bokmärkessynkare som finns till FireFox, IE och Safariutorrent – lägga till torrents och hålla koll på nedladdningar på en annan dator (finns redan till FireFox)FireBug – Javascript-debugger och nätverksmonitorGoogle Reader – exemplet gör bara att man kan lägga till feeds, jag vill ha en notifierFacebook notifierCoolIrisSip-uppringare – som går att koppla till vår sip-växel, gör telefonnummer klickbara och ringer med hjälpa av vanliga telefonenBlogga detta på Tekniken – en knapp som automatiskt skapar ramverket till ett blogginlägg utifrån en site man står påAdd this – snabblänkar för att posta på Facebook, Twitter, Tumblr what have youFireshot – grymt skärmpdumpsverktyg som finns för FireFox\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/633779831969469733-Google_Chrome_Browser_logo_ico_by_xplight.png)", + "html": "

    I den nyaste utvecklarversionen av Chrome så har Google utökat funktionerna med extensions, alltså små tillägg som skapas av tredjepartsutvecklare som gör webbläsaren bättre. FireFox har länge varit kungen på extensions och har tusentals fantastiska tillägg för allt mellan att debugga webbsidor och navigera lättare på Kanye Wests webbplats (hmm...).

    Själv har jag tyckt att just tillägg har varit det som har saknats från Chrome, men nu finns alltså API:et på plats. Om du vill testa själv, gör såhär:

    1. Växla över Chrome till utvecklarkanalen med Chrome Channel Changer. Det betyder att du oftare får nya versioner och snabbare får ny funktionalitet, men som samtidigt är mindre genomtestade.
    2. Ändra genvägen som startar Chrome och lägg till –enable-extensions (två bindestreck först)
    3. Testa något av de två exemplen för Gmail och Google Reader som Google själva har byggt
    4. Vänta på nya grymma tillägg som garanterat är på väg!

    Mina 10 önsketillägg (som finns och inte finns till andra webbläsare)

    1. Xmarks – grym bokmärkessynkare som finns till FireFox, IE och Safari
    2. utorrent – lägga till torrents och hålla koll på nedladdningar på en annan dator (finns redan till FireFox)
    3. FireBug – Javascript-debugger och nätverksmonitor
    4. Google Reader – exemplet gör bara att man kan lägga till feeds, jag vill ha en notifier
    5. Facebook notifier
    6. CoolIris
    7. Sip-uppringare – som går att koppla till vår sip-växel, gör telefonnummer klickbara och ringer med hjälpa av vanliga telefonen
    8. Blogga detta på Tekniken – en knapp som automatiskt skapar ramverket till ett blogginlägg utifrån en site man står på
    9. Add this – snabblänkar för att posta på Facebook, Twitter, Tumblr what have you
    10. Fireshot – grymt skärmpdumpsverktyg som finns för FireFox

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Äntligen stöd för tillägg i Google Chrome", + "meta_description": "", + "author_id": 6, + "created_at": 1242386396000, + "created_by": 6, + "updated_at": 1242386396000, + "updated_by": 6, + "published_at": 1242386396000, + "published_by": 6 + }, + { + "id": 300, + "title": "Youtube lanserar TV-gränssnitt", + "slug": "youtube-lanserar-tv-granssnitt", + "markdown": "\r\n\r\nFlera av stora siter som Google och Hulu har gjort särskilda gränssnitt anpassade för att fungera bra på en TV, t.ex. via Wii eller PS3. Nu har turen kommit till Youtube. Youtube XL är ett gränssnitt med extra stora knappar, typsnitt etc. särskild gjort för att funka på större tittavstånd än det brukar vara till datorskärmen. Välkommet tycker jag som med jämna mellanrum febrilt försöker pricka fullskärmsknappen när man kör Youtube på TV:n.\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/633796153019859494-image001.jpg@01C9E427.0FA88690__image001.jpg)", + "html": "

    Flera av stora siter som Google och Hulu har gjort särskilda gränssnitt anpassade för att fungera bra på en TV, t.ex. via Wii eller PS3. Nu har turen kommit till Youtube. Youtube XL är ett gränssnitt med extra stora knappar, typsnitt etc. särskild gjort för att funka på större tittavstånd än det brukar vara till datorskärmen. Välkommet tycker jag som med jämna mellanrum febrilt försöker pricka fullskärmsknappen när man kör Youtube på TV:n.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Youtube lanserar TV-gränssnitt", + "meta_description": "", + "author_id": 6, + "created_at": 1244018500000, + "created_by": 6, + "updated_at": 1244018500000, + "updated_by": 6, + "published_at": 1244018500000, + "published_by": 6 + }, + { + "id": 301, + "title": "Bästa sättet att göra en Flickr-slideshow", + "slug": "basta-sattet-att-gora-en-flickr-slideshow", + "markdown": "\r\n\r\nJag funderade länge innan jag valde var jag ska lägga mina foton, och kom till slut fram till att Flickr var rätt val för mig. Här var kriterierna som fick mig att betala för ett pro-konto:\r\nEtablerat och tryggt (ägs av Yahoo)Lätt att hantera – applikation för  batchuppladdning t.ex.Oändligt (ja faktiskt) med utrymme för bilderSparar originalversionerna av bilderna så att jag samtidigt kan ha det som både fotoalbum och backupRättigheter för att styra vilka bilder som ska vara publika och vilka som bara ska visas för inloggade vänner eller släktingarLätt att djuplänka direkt till bilder om man vill posta på ett diskussionsforum eller liknandeBra API så att man kan använda bilderna lite varstans (eller bygga egna mashups)\r\nFlickrs egen slideshowfunktion som ju också har fullskärmsläge kan du bädda in i vilken webbsida som helst:\r\n\r\nGör såhär:\r\nStarta din slideshow på Flickr, tryck på ShareKopiera det som står i fältet ”Grab the embed HTML”. Om du vill kan du clicka på Customize och bestämma storlek och lite annat på flashen.3a) Klistra in embedkoden på din webbsida.3b) Överkurs: om du är lite händig så funkar det även bra att bara klippa ut adressen till flashen och flashVars. Det gör att det går bra att använda t.ex. SWFObject för att rita ut flashen.\r\nSåhär blir det:\r\n\r\n\r\n \r\n\r\nTips på mändger av andra Flickr-applikationer: http://www.quickonlinetips.com/archives/2005/03/great-flickr-tools-collection/\r\n\r\n![Bild](http://tekniken.nu/uploads/633797285203242309-flickrhai.png)", + "html": "

    Jag funderade länge innan jag valde var jag ska lägga mina foton, och kom till slut fram till att Flickr var rätt val för mig. Här var kriterierna som fick mig att betala för ett pro-konto:

    • Etablerat och tryggt (ägs av Yahoo)
    • Lätt att hantera – applikation för  batchuppladdning t.ex.
    • Oändligt (ja faktiskt) med utrymme för bilder
    • Sparar originalversionerna av bilderna så att jag samtidigt kan ha det som både fotoalbum och backup
    • Rättigheter för att styra vilka bilder som ska vara publika och vilka som bara ska visas för inloggade vänner eller släktingar
    • Lätt att djuplänka direkt till bilder om man vill posta på ett diskussionsforum eller liknande
    • Bra API så att man kan använda bilderna lite varstans (eller bygga egna mashups)

    Flickrs egen slideshowfunktion som ju också har fullskärmsläge kan du bädda in i vilken webbsida som helst:

    Gör såhär:

    1. Starta din slideshow på Flickr, tryck på Share
    2. Kopiera det som står i fältet ”Grab the embed HTML”. Om du vill kan du clicka på Customize och bestämma storlek och lite annat på flashen.
    3. 3a) Klistra in embedkoden på din webbsida.
    4. 3b) Överkurs: om du är lite händig så funkar det även bra att bara klippa ut adressen till flashen och flashVars. Det gör att det går bra att använda t.ex. SWFObject för att rita ut flashen.

    Såhär blir det:


    Tips på mändger av andra Flickr-applikationer: http://www.quickonlinetips.com/archives/2005/03/great-flickr-tools-collection/

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Bästa sättet att göra en Flickr-slideshow", + "meta_description": "", + "author_id": 6, + "created_at": 1244131719000, + "created_by": 6, + "updated_at": 1244131719000, + "updated_by": 6, + "published_at": 1244131719000, + "published_by": 6 + }, + { + "id": 302, + "title": "Windows 7-tips för Vista-användaren", + "slug": "windows-7-tips-for-vista-anvandaren", + "markdown": "\r\n## ”Billig ny dator”\r\n\r\n\r\nOavsett vad dåliga recensioner och tveksamma benchmarks säger så upplevs Windows 7 som snabbare än vista i alla lägen och i många fall snabbare än XP även i benchmarks. Vill du att datorn ska kännas som en ny dator så kommer en Windows 7 uppgradering sannolikt vara värd pengarna.\r\n## Nya trix för fönsterhantering\r\nAtt dra fönster mot kanterna vänster och höger gör att fönstret maximerar och tar halva skärmen, detta kan vara smidigt om man vill ha två fönster precis bredvid varann.\r\n\r\nDrar man fönstret rakt upp mot översta kanten av skärmen maximeras fönstret.\r\n\r\nMaximera på höjden, dubbelklicka på övre kanten av fönstret eller dra den rakt upp till kanten så maximeras fönstret på höjden, perfekt för webbsurfning!\r\n\r\nTa tag i ett fönster och skaka på det så minimeras alla andra fönster. Skaka på det igen så kommer de tillbaka.\r\n## Taskbaren\r\nNya taskbaren är en hybrid av snabbstartsikoner och program som är igång. Programmen som är igång visas med en ram, de andra visas utan ram. Du behöver alltså inte göra skillnad när du vill öppna ett program, klicka på ikonen och då kör den igång programmet eller växlar till det. Om programmet har flera fönster visas en solfjäder av dom öppna fönstren och du kan klicka direkt på det fönstret du vill åt (det är som alt-tab fast per applikation).\r\n\r\nStänga öppna fönster\r\n\r\nI solfjädern finns förutom krysset också möjlighet att stänga med mitten musknapp .\r\n\r\nÖppna en till version av programmet\r\n\r\nKorta versionen är mitten musknappen klicka på ikonen. Mediumversionen är Crtrl + musklick på ikonen. Långa versionen är högerklicka ikonen och klicka sen på applikationens namn.\r\n\r\nNagla fast program i taskbaren.\r\n\r\nHögerklicka på programmet och välj pin to taskbar så finns det alltid tillgängligt.\r\n## Andra trevliga nyheter\r\nGPU-komprimering av film till mobilen – Finns ej i RC versionen men skall komma när skarpa släpps 22 oktober.Mobile Center – Hantera alla mobiler med ett gränssnitt för att t.ex. föra över bilder, synka kontakter osv. Kräver stöd av mobiltillverkaren förstås men ger ett homogent intryck istället för halvtaskigt utvecklade applikationen från tillverkare X.Ribbon i wordpad och paint – Känns helt plötsligt moderna! Men tipset är fortfarande att istället för paint använda paint.net för bättre funktionalitet också helt gratis.Avancerad kalkylator – Kan användas för att t.ex beräkna lånekostnader och sånt som man tidigare ofta valt Excel för.Avancerad felsökning för sleep och hybernate – ”powercfg.exe -ENERGY –OUTPUT ” ny switch som ger en html rapport över möjliga problem.\r\n\r\n![Bild](http://tekniken.nu/uploads/633800535770491494-11284_US_Prd_Bx_Tilt_L_Win_7_Generic.png)", + "html": "

    ”Billig ny dator”

    Oavsett vad dåliga recensioner och tveksamma benchmarks säger så upplevs Windows 7 som snabbare än vista i alla lägen och i många fall snabbare än XP även i benchmarks. Vill du att datorn ska kännas som en ny dator så kommer en Windows 7 uppgradering sannolikt vara värd pengarna.

    Nya trix för fönsterhantering

    Att dra fönster mot kanterna vänster och höger gör att fönstret maximerar och tar halva skärmen, detta kan vara smidigt om man vill ha två fönster precis bredvid varann.

    Drar man fönstret rakt upp mot översta kanten av skärmen maximeras fönstret.

    Maximera på höjden, dubbelklicka på övre kanten av fönstret eller dra den rakt upp till kanten så maximeras fönstret på höjden, perfekt för webbsurfning!

    Ta tag i ett fönster och skaka på det så minimeras alla andra fönster. Skaka på det igen så kommer de tillbaka.

    Taskbaren

    Nya taskbaren är en hybrid av snabbstartsikoner och program som är igång. Programmen som är igång visas med en ram, de andra visas utan ram. Du behöver alltså inte göra skillnad när du vill öppna ett program, klicka på ikonen och då kör den igång programmet eller växlar till det. Om programmet har flera fönster visas en solfjäder av dom öppna fönstren och du kan klicka direkt på det fönstret du vill åt (det är som alt-tab fast per applikation).

    Stänga öppna fönster

    I solfjädern finns förutom krysset också möjlighet att stänga med mitten musknapp .

    Öppna en till version av programmet

    Korta versionen är mitten musknappen klicka på ikonen. Mediumversionen är Crtrl + musklick på ikonen. Långa versionen är högerklicka ikonen och klicka sen på applikationens namn.

    Nagla fast program i taskbaren.

    Högerklicka på programmet och välj pin to taskbar så finns det alltid tillgängligt.

    Andra trevliga nyheter

    • GPU-komprimering av film till mobilen – Finns ej i RC versionen men skall komma när skarpa släpps 22 oktober.
    • Mobile Center – Hantera alla mobiler med ett gränssnitt för att t.ex. föra över bilder, synka kontakter osv. Kräver stöd av mobiltillverkaren förstås men ger ett homogent intryck istället för halvtaskigt utvecklade applikationen från tillverkare X.
    • Ribbon i wordpad och paint – Känns helt plötsligt moderna! Men tipset är fortfarande att istället för paint använda paint.net för bättre funktionalitet också helt gratis.
    • Avancerad kalkylator – Kan användas för att t.ex beräkna lånekostnader och sånt som man tidigare ofta valt Excel för.
    • Avancerad felsökning för sleep och hybernate – ”powercfg.exe -ENERGY –OUTPUT <path\\filename>” ny switch som ger en html rapport över möjliga problem.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Windows 7-tips för Vista-användaren", + "meta_description": "allt prestandamässigt. Dessutom får man en massa små nya features som förhöjer användarupplevelsen.", + "author_id": 1089, + "created_at": 1244456776000, + "created_by": 1089, + "updated_at": 1244456776000, + "updated_by": 1089, + "published_at": 1244456776000, + "published_by": 1089 + }, + { + "id": 303, + "title": "Äntligen ny iPhone!", + "slug": "antligen-ny-iphone", + "markdown": "\r\n\r\nIdag är startdagen på WWDC, Apples utvecklarkonferens som har blivit synonymt med stora nyheter från företaget. Förra året var det på detta event som de nya iPhone 3G telefonerna presenterades. Så vad tror man kommer presenteras idag då?\r\n\r\nGaranterat:\r\niPhone 3.0 – ny mjukvara med copy paste osv, vi har tidigare skrivit och testat om nyheterna här på tekniken.nuDemonstration av nya Apples nya operativsystem Snow Leopard (och spikat släppdatum i höst). Troligtvis är det hastighet som är den stora nyheten – jag själv hoppas på något nytt i gränssnittet, t ex 3D desktop..Quicktime kommer demonstreras med de nyheter som läckt ut (så som skärminspelning och stöd för massor av moderna codecs samt att allt numera är ”Pro”)\r\nAntagligen:\r\nNy snabbare iPhone – Det absolut mest säkra är att det kommer nya modeller med 32gb och matt baksida – det troliga är att Apple kommer att fokusera på snabbheten, både snabbare processor och snabbare inbyggt bredband. Magnetisk kompass och videostöd är också väldigt troligt samt bättre kamera med autofokus. Utöver det vet ingen säkert, OLED skärm vore riktigt kul (drar mindre ström och är ljusstarkare) och många rykten säger att det kommer en billigare variant men där tror jag nog mer på en stor prissänkning på nuvarande 8gb modell snarare. Förhoppningsvis finns telefonerna redan tillverkade så det inte dröjer länge innan vi behöver stå i kö på Kungsgatan ;)Trådlös videostreaming – Podcasts kan ju numera streamas och förhoppningsvis kommer även video (hyrfilm och tv-serier) släppas för trådlös försäljning.\r\nHoppas:\r\nHyrfilm för resten av världen – Usa har ju sen länge kunnat köpa och hyra film. Storbritannien och Tyskland har fått den nyheten under senaste året och nu hoppas jag verkligen på att vi i Sverige ska kunna få en möjlighet att vara lagliga trots att vi vill titta på 24 och Lost samtidigt som de nya avsnitten kommer ut.MacBook mini – Apples svar på alla Intel atom-baserade laptops – billiga strömsnåla och baserade på Apples operativsystem – Förhoppningsvis med pekskärm och garanterat med inbyggd 3G. Väldigt osäkert eftersom de redan släppt MacBook Air – men man vet aldrig med Apple!\r\nFölj händelsen live via Twitter: http://twitter.com/macrumors - börjar klockan 19:00 svensk tid!\r\n\r\n![Bild](http://tekniken.nu/uploads/633761825580894456-__iphone-os 3.png)", + "html": "

    Idag är startdagen på WWDC, Apples utvecklarkonferens som har blivit synonymt med stora nyheter från företaget. Förra året var det på detta event som de nya iPhone 3G telefonerna presenterades. Så vad tror man kommer presenteras idag då?

    Garanterat:

    • iPhone 3.0 – ny mjukvara med copy paste osv, vi har tidigare skrivit och testat om nyheterna här på tekniken.nu
    • Demonstration av nya Apples nya operativsystem Snow Leopard (och spikat släppdatum i höst). Troligtvis är det hastighet som är den stora nyheten – jag själv hoppas på något nytt i gränssnittet, t ex 3D desktop..
    • Quicktime kommer demonstreras med de nyheter som läckt ut (så som skärminspelning och stöd för massor av moderna codecs samt att allt numera är ”Pro”)

    Antagligen:

    • Ny snabbare iPhone – Det absolut mest säkra är att det kommer nya modeller med 32gb och matt baksida – det troliga är att Apple kommer att fokusera på snabbheten, både snabbare processor och snabbare inbyggt bredband. Magnetisk kompass och videostöd är också väldigt troligt samt bättre kamera med autofokus. Utöver det vet ingen säkert, OLED skärm vore riktigt kul (drar mindre ström och är ljusstarkare) och många rykten säger att det kommer en billigare variant men där tror jag nog mer på en stor prissänkning på nuvarande 8gb modell snarare. Förhoppningsvis finns telefonerna redan tillverkade så det inte dröjer länge innan vi behöver stå i kö på Kungsgatan ;)
    • Trådlös videostreaming – Podcasts kan ju numera streamas och förhoppningsvis kommer även video (hyrfilm och tv-serier) släppas för trådlös försäljning.

    Hoppas:

    • Hyrfilm för resten av världen – Usa har ju sen länge kunnat köpa och hyra film. Storbritannien och Tyskland har fått den nyheten under senaste året och nu hoppas jag verkligen på att vi i Sverige ska kunna få en möjlighet att vara lagliga trots att vi vill titta på 24 och Lost samtidigt som de nya avsnitten kommer ut.
    • MacBook mini – Apples svar på alla Intel atom-baserade laptops – billiga strömsnåla och baserade på Apples operativsystem – Förhoppningsvis med pekskärm och garanterat med inbyggd 3G. Väldigt osäkert eftersom de redan släppt MacBook Air – men man vet aldrig med Apple!

    Följ händelsen live via Twitter: http://twitter.com/macrumors - börjar klockan 19:00 svensk tid!

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Äntligen ny iPhone!", + "meta_description": "", + "author_id": 1087, + "created_at": 1244460779000, + "created_by": 1087, + "updated_at": 1244460779000, + "updated_by": 1087, + "published_at": 1244460779000, + "published_by": 1087 + }, + { + "id": 305, + "title": "Skapa enkäter med Google Docs", + "slug": "skapa-enkater-med-google-docs", + "markdown": "\r\n\r\nJag upptäckte av en slump via en läsarundersökning på Prylfeber att Google Docs har fått en ny funktion: frågeformulär. Med hjälp av formulären i Google Docs så kan du:\r\n\r\n\r\nSkapa formuläret med olika frågetyper: flervalsfrågor (välj en med radioknapper eller drop down-meny), flervalsfrågor (välj flera med kryssrutor), fritext, gradera 1-5.Välja bland färdiga grafiska utseenden på formuläret ellerKanske viktigast: bädda in formuläret i din egen webbsidaBjuda in svarande via epostFå ut alla svar som ett kalkylblad (i Google Spreadsheets och därmed också i Excel)Få en sammanställning av alla svar, som man också kan göra tillgänglig för de som svarar\r\n\r\n\r\nDet enda som jag inte har hittat är ett sätt att se till att begränsa så att varje person bara kan svara en gång, eller på andra sätt begränsa vilka som kan svara. Om det fixas (kanske redan är löst och jag inte kan hitta det) så är det här en tjänst som är lika bra som de enkättjänster som man får betala rejält för varje gång man använder.\r\n\r\nSom demonstration på hur det fungerar – var med i tekniken.nus första läsarundersökning:\r\n\r\n\r\nLoading...\r\n\r\n![Bild](http://tekniken.nu/uploads/633802256937753036-googlesummary.PNG)", + "html": "

    Jag upptäckte av en slump via en läsarundersökning på Prylfeber att Google Docs har fått en ny funktion: frågeformulär. Med hjälp av formulären i Google Docs så kan du:

    • Skapa formuläret med olika frågetyper: flervalsfrågor (välj en med radioknapper eller drop down-meny), flervalsfrågor (välj flera med kryssrutor), fritext, gradera 1-5.
    • Välja bland färdiga grafiska utseenden på formuläret eller
    • Kanske viktigast: bädda in formuläret i din egen webbsida
    • Bjuda in svarande via epost
    • Få ut alla svar som ett kalkylblad (i Google Spreadsheets och därmed också i Excel)
    • Få en sammanställning av alla svar, som man också kan göra tillgänglig för de som svarar

    Det enda som jag inte har hittat är ett sätt att se till att begränsa så att varje person bara kan svara en gång, eller på andra sätt begränsa vilka som kan svara. Om det fixas (kanske redan är löst och jag inte kan hitta det) så är det här en tjänst som är lika bra som de enkättjänster som man får betala rejält för varje gång man använder.

    Som demonstration på hur det fungerar – var med i tekniken.nus första läsarundersökning:


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Skapa enkäter med Google Docs", + "meta_description": "", + "author_id": 6, + "created_at": 1244628893000, + "created_by": 6, + "updated_at": 1244628893000, + "updated_by": 6, + "published_at": 1244628893000, + "published_by": 6 + }, + { + "id": 306, + "title": "OSX får stöd för Exchange i Snow Leopard", + "slug": "osx-far-stod-for-exchange-i-snow-leopard", + "markdown": "\r\n\r\nRapporteringen efter Apples keynote på WWDC häromdagen har inte helt otippat mest kommit att handla om iPhone (OS 3.0 och nya modellen 3Gs). Men en nyhet som också presenterades och som jag tycker är väl värd att lyfta fram är att OSX iom nya versionen \"Snow Leopard\" får fullt stöd för Exchange Server i applikationerna Mail, Address Book och iCal.\r\n\r\nVisserligen har Microsoft erbjudit Exchange stöd i OSX ett tag med produkten Entourage, men de flesta Macanvändare jag jobbat med föredrar Apples egna program. Dessutom så kostar Entourage licenspengar, medans detta Exchangestöd ingår i operativet \"gratis\". Bra nyheter för Macanvändare i Windowsmiljöer med andra ord!\r\n\r\nLäs mer om Exchangestödet i OSX hos Apple.\r\n\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/633802273338326749-leopard_logo200.jpg)", + "html": "

    Rapporteringen efter Apples keynote på WWDC häromdagen har inte helt otippat mest kommit att handla om iPhone (OS 3.0 och nya modellen 3Gs). Men en nyhet som också presenterades och som jag tycker är väl värd att lyfta fram är att OSX iom nya versionen \"Snow Leopard\" får fullt stöd för Exchange Server i applikationerna Mail, Address Book och iCal.

    Visserligen har Microsoft erbjudit Exchange stöd i OSX ett tag med produkten Entourage, men de flesta Macanvändare jag jobbat med föredrar Apples egna program. Dessutom så kostar Entourage licenspengar, medans detta Exchangestöd ingår i operativet \"gratis\". Bra nyheter för Macanvändare i Windowsmiljöer med andra ord!

    Läs mer om Exchangestödet i OSX hos Apple.


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "OSX får stöd för Exchange i Snow Leopard", + "meta_description": "", + "author_id": 1085, + "created_at": 1244650740000, + "created_by": 1085, + "updated_at": 1244650740000, + "updated_by": 1085, + "published_at": 1244650740000, + "published_by": 1085 + }, + { + "id": 307, + "title": "Imorgon inför Facebook användarnamn", + "slug": "imorgon-infor-facebook-anvandarnamn", + "markdown": "\r\n\r\nVill du ha ett lätt sätt att länka till din Facebook-profil? Imorgon inför Facebook användarnamn som direkt länkar till en profil – så nu u kan du äntligen få t.ex. http//www.facebook.com/1337h@xx0r som adress till allt om dig själv. 6:01 svensk tid imorgon (lördag 13 juni) öppnar funktionen och kön till populära användarnamn förväntas bli ungefär som till Springsteen-konserterna förra veckan. Vissa svenska bloggare har redan meddelat att väckarklockan står på 05:50 imorgon, orkar du tälta utanför Facebook imorgon för att få ett bra användarnamn?\r\n\r\n![Bild](http://tekniken.nu/uploads/633803985949993367-facebook-small-logo.png)", + "html": "

    Vill du ha ett lätt sätt att länka till din Facebook-profil? Imorgon inför Facebook användarnamn som direkt länkar till en profil – så nu u kan du äntligen få t.ex. http//www.facebook.com/1337h@xx0r som adress till allt om dig själv. 6:01 svensk tid imorgon (lördag 13 juni) öppnar funktionen och kön till populära användarnamn förväntas bli ungefär som till Springsteen-konserterna förra veckan. Vissa svenska bloggare har redan meddelat att väckarklockan står på 05:50 imorgon, orkar du tälta utanför Facebook imorgon för att få ett bra användarnamn?

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Imorgon inför Facebook användarnamn", + "meta_description": "1 imorgon öppnas funktionen.", + "author_id": 6, + "created_at": 1244801794000, + "created_by": 6, + "updated_at": 1244801794000, + "updated_by": 6, + "published_at": 1244801794000, + "published_by": 6 + }, + { + "id": 309, + "title": "Linksys gamla arbetshäst WRT54GL har fått en efterföljare", + "slug": "linksys-gamla-arbetshast-wrt54gl-har-fatt-en-efterfoljare", + "markdown": "\r\n\r\nEn favorit på tekniken.nu är Linksys WRT54GL som har varit lite av standardvalet när det gäller router hemma eller på det lilla kontoret. Med open source-firmware som DD-WRT får man också en grym massa nya funktioner, som normalt kräver stora hårdvaruinvesteringar om man ska köpa dem färdiga – något som vi har skrivit om tidigare och som även IDG har skrivit om nyligen.\r\n\r\nSweclockers rapporterar idag att Cisco har släppt en uppföljare - Linksys WRT160NL. Förutom ett kraftigt förnyat utseende så har WRT160NL:\r\nTrådlöst 802.11n (draft 2.0)4 trådbundna 100 MBit ethernet-portarStorage Link för anslutning av extern hårddisk via USB 2.0UNPNPAV för att strömma mediefiler400 MHz-processor (WRT54GL har en på 200MHz)32 MB minne (mot 16MB i WRT54GL)\r\nDD-WRT och OpenWRT finns inte för WRT160NL än, men jag skulle tro att det bara är en tidsfråga i och med att Linksys original-firmware är Linux-baserad.\r\n\r\nEn annan reflektion är att WRT160NL har en Cisco-logga på ovansidan, och att Linksys webbsida har bytt adress till www.linksysbycisco.com. Frågan är om hemmavarumärket Linksys är på väg att försvinna...\r\n\r\nWRT160BL finns redan att köpa och kostar från 866:- inklusive moms.\r\n\r\n![Bild](http://tekniken.nu/uploads/633814495455454590-wrt160nl.png)", + "html": "

    En favorit på tekniken.nu är Linksys WRT54GL som har varit lite av standardvalet när det gäller router hemma eller på det lilla kontoret. Med open source-firmware som DD-WRT får man också en grym massa nya funktioner, som normalt kräver stora hårdvaruinvesteringar om man ska köpa dem färdiga – något som vi har skrivit om tidigare och som även IDG har skrivit om nyligen.

    Sweclockers rapporterar idag att Cisco har släppt en uppföljare - Linksys WRT160NL. Förutom ett kraftigt förnyat utseende så har WRT160NL:

    • Trådlöst 802.11n (draft 2.0)
    • 4 trådbundna 100 MBit ethernet-portar
    • Storage Link för anslutning av extern hårddisk via USB 2.0
    • UNPNPAV för att strömma mediefiler
    • 400 MHz-processor (WRT54GL har en på 200MHz)
    • 32 MB minne (mot 16MB i WRT54GL)

    DD-WRT och OpenWRT finns inte för WRT160NL än, men jag skulle tro att det bara är en tidsfråga i och med att Linksys original-firmware är Linux-baserad.

    En annan reflektion är att WRT160NL har en Cisco-logga på ovansidan, och att Linksys webbsida har bytt adress till www.linksysbycisco.com. Frågan är om hemmavarumärket Linksys är på väg att försvinna...

    WRT160BL finns redan att köpa och kostar från 866:- inklusive moms.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Linksys gamla arbetshäst WRT54GL har fått en efterföljare", + "meta_description": "", + "author_id": 6, + "created_at": 1245852745000, + "created_by": 6, + "updated_at": 1245852745000, + "updated_by": 6, + "published_at": 1245852745000, + "published_by": 6 + }, + { + "id": 311, + "title": "Äntligen en standard på mobilladdare", + "slug": "antligen-en-standard-pa-mobilladdare", + "markdown": "\r\n\r\nLite otippat men väldigt efterlängtat så har nu ett stort antal mobiltillverkare enats om att använda micro-USB som interface för att ladda mobiltelefonen. Det såg länge ut som att Apple i vanlig ordning skulle gå sin egen väg, men nu är även de med! Från och med 2010 ska Apple, LG, Motorola, NEC, Nec, Nokia, Qualcomm, RIM (Blackberry), Samsung, Sony Ericsson och TI börja leverera alla sina telefoner med laddning via micro-USB. HTC och säkert fler gör det redan.\r\n\r\nÄntligen!\r\n\r\nKälla: Mobilfeber\r\n\r\n![Bild](http://tekniken.nu/uploads/633818866724418073-B2C_Micro USB Data Cable - SKN6238A_lg.png)", + "html": "

    Lite otippat men väldigt efterlängtat så har nu ett stort antal mobiltillverkare enats om att använda micro-USB som interface för att ladda mobiltelefonen. Det såg länge ut som att Apple i vanlig ordning skulle gå sin egen väg, men nu är även de med! Från och med 2010 ska Apple, LG, Motorola, NEC, Nec, Nokia, Qualcomm, RIM (Blackberry), Samsung, Sony Ericsson och TI börja leverera alla sina telefoner med laddning via micro-USB. HTC och säkert fler gör det redan.

    Äntligen!

    Källa: Mobilfeber

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Äntligen en standard på mobilladdare", + "meta_description": "", + "author_id": 6, + "created_at": 1246289872000, + "created_by": 6, + "updated_at": 1246289872000, + "updated_by": 6, + "published_at": 1246289872000, + "published_by": 6 + }, + { + "id": 314, + "title": "Ta över en iPhone via SMS?", + "slug": "ta-over-en-iphone-via-sms", + "markdown": "\r\n\r\nDet är sällan det står någonting om virus eller andra farligheter för Mac men nu har det tydligen uppkommit en för iPhone.\r\n\r\nEnligt Charlie Miller så går det att via ett sms ta över någon annans iPhone.\r\n\r\nMan skall enligt honom kunna via SMS installera program som sedan kan användas för att skicka vidare information till annan server/telefon.\r\n\r\nLite SciFi kanske man kan tycka men betänk då att det är ganska vanligt för våra operatörer att skicka installationsinformation via SMS till våra telefoner, en sådan enkelt sak som informationen att få MMS i min gamla Nokia fick jag via SMS från telia,\r\n\r\nLäs artikeln här:\r\n\r\nhttp://www.engadget.com/2009/07/02/apple-patching-nasty-iphone-sms-vulnerability/\r\n\r\nHur man faktiskt kan gå tillväga skall mr Miller redovisa på ett kommande konvent i USA kallat Black Hat\r\n\r\n![Bild](http://tekniken.nu/uploads/633822104811380123-ipod-touch-iphone-jailbreak.jpg)", + "html": "

    Det är sällan det står någonting om virus eller andra farligheter för Mac men nu har det tydligen uppkommit en för iPhone.

    Enligt Charlie Miller så går det att via ett sms ta över någon annans iPhone.

    Man skall enligt honom kunna via SMS installera program som sedan kan användas för att skicka vidare information till annan server/telefon.

    Lite SciFi kanske man kan tycka men betänk då att det är ganska vanligt för våra operatörer att skicka installationsinformation via SMS till våra telefoner, en sådan enkelt sak som informationen att få MMS i min gamla Nokia fick jag via SMS från telia,

    Läs artikeln här:

    http://www.engadget.com/2009/07/02/apple-patching-nasty-iphone-sms-vulnerability/

    Hur man faktiskt kan gå tillväga skall mr Miller redovisa på ett kommande konvent i USA kallat Black Hat

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Ta över en iPhone via SMS?", + "meta_description": "", + "author_id": 1091, + "created_at": 1246613680000, + "created_by": 1091, + "updated_at": 1246613680000, + "updated_by": 1091, + "published_at": 1246613680000, + "published_by": 1091 + }, + { + "id": 316, + "title": "MindMeister - Gratis online mindmapping", + "slug": "mindmeister---gratis-online-mindmapping", + "markdown": "\r\n\r\nJag har länge använt Mindjets fantastiska program MindManager för att strukturera mitt tänkande både yrkesmässigt och privat. MindManager är en fantastisk applikation, men en stor nackdel är att den just är en applikation. Jag använder i min vardag ett antal olika datorer och har saknat ett bra sätt att få tillgång till mina mindmaps oavsett vilken dator jag sitter på.\r\n\r\nPlats på scen för MindMeister!\r\n\r\n\r\n\r\nMindMeister är ett väl fungerande onlinealternativ till MindManager, som på ett snyggt sätt klarar av de flesta funktionerna i MindManager samt drar nytta av att vara en webapplikation genom att tillföra teamfunktioner. Siten har varit publik sedan 2007 och nuvarande versionen (2.0) lanserades i april förra året så det här kan vara old news för många, men jag hade helt missat dess existens.\r\n\r\nAtt skapa mindmaps är grymt smidigt, och är man van vid MindManager så är de flesta tangentbordskommandon identiska (Insert skapar ny nivå, Enter ny rad etc). En smart funktion är möjligheten att dela mindmaps mellan fler användare och i realtid kunna editera samma mindmap, grymt bra på projektmöten, brainstorms etc.\r\n\r\nEn annan grym tillämpning är att MindMeister har en iPhone applikation i betastadie som kommer låta användaren komma åt och redigera sina mindmaps i sin iPhone/iPod touch.\r\n\r\n\r\n\r\nMindMeister har också en Widget som ger möjligheten att snabbt skjuta in en tanke i sin standardkarta.\r\n\r\nExportmöjligheter finns till en massa olika format (PDF, Outline RTF, JPG, Mindmister.mind, Freemind.mm & MindManager.mmap).\r\n\r\nGratisversionen av tjänsten tillåter sex samtidiga mindmaps, vilket i mitt fall är mer än väl. Vill man dock låsa upp lite fler funktioner såsom export tillexempel brandad företagsversion med egen domän, offlineläge via Google Gears eller exportmöjlighet till Mindmanager så finns betalversioner för $4 (Premium) eller $6 (Business) per månad, samt en studentversion för $15 per år.\r\n\r\nDet här är ett lysande exempel på hur en webapplikation ger mervärde jämfört med en befintlig traditionell applikation. Rekommenderas varmt!\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/633834294657561226-mindmeister.jpg)", + "html": "

    Jag har länge använt Mindjets fantastiska program MindManager för att strukturera mitt tänkande både yrkesmässigt och privat. MindManager är en fantastisk applikation, men en stor nackdel är att den just är en applikation. Jag använder i min vardag ett antal olika datorer och har saknat ett bra sätt att få tillgång till mina mindmaps oavsett vilken dator jag sitter på.

    Plats på scen för MindMeister!

    MindMeister är ett väl fungerande onlinealternativ till MindManager, som på ett snyggt sätt klarar av de flesta funktionerna i MindManager samt drar nytta av att vara en webapplikation genom att tillföra teamfunktioner. Siten har varit publik sedan 2007 och nuvarande versionen (2.0) lanserades i april förra året så det här kan vara old news för många, men jag hade helt missat dess existens.

    Att skapa mindmaps är grymt smidigt, och är man van vid MindManager så är de flesta tangentbordskommandon identiska (Insert skapar ny nivå, Enter ny rad etc). En smart funktion är möjligheten att dela mindmaps mellan fler användare och i realtid kunna editera samma mindmap, grymt bra på projektmöten, brainstorms etc.

    En annan grym tillämpning är att MindMeister har en iPhone applikation i betastadie som kommer låta användaren komma åt och redigera sina mindmaps i sin iPhone/iPod touch.

    MindMeister har också en Widget som ger möjligheten att snabbt skjuta in en tanke i sin standardkarta.

    Exportmöjligheter finns till en massa olika format (PDF, Outline RTF, JPG, Mindmister.mind, Freemind.mm & MindManager.mmap).

    Gratisversionen av tjänsten tillåter sex samtidiga mindmaps, vilket i mitt fall är mer än väl. Vill man dock låsa upp lite fler funktioner såsom export tillexempel brandad företagsversion med egen domän, offlineläge via Google Gears eller exportmöjlighet till Mindmanager så finns betalversioner för $4 (Premium) eller $6 (Business) per månad, samt en studentversion för $15 per år.

    Det här är ett lysande exempel på hur en webapplikation ger mervärde jämfört med en befintlig traditionell applikation. Rekommenderas varmt!

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "MindMeister - Gratis online mindmapping", + "meta_description": "", + "author_id": 1085, + "created_at": 1247832665000, + "created_by": 1085, + "updated_at": 1247832665000, + "updated_by": 1085, + "published_at": 1247832665000, + "published_by": 1085 + }, + { + "id": 317, + "title": "Windows 7 RTM släpps om två veckor", + "slug": "windows-7-rtm-slapps-om-tva-veckor", + "markdown": "\r\n\r\nMicrosoft har via sin devblog bekräftat att RTM versionen (Release To Market) av Windows 7 kommer att släppas i augusti. Till skillnad från RC:n så kommer (såklart) inte RTM versionen att\r\nsläppas till allmänheten utan endast till partners,\r\nTechnet/MSDN-prenumeranter och kunder med gällande SA-avtal. Beroende på partnernivå och/eller avtal får man vänta olika länge:\r\nISV, IHV, Technet och MSDN prenumeranter kommer kunna ladda hem den via MSDN den 6:e augusti. Företagskunder med gällande SA får tillgång till RTM den 7:e augusti.Microsoft Gold och Certified partners kan hämta RTM den 16:e augusti.Microsoft Action Pack prenumeraner får vänta till den 23:e augusti.\r\nPrecis som när RC:n släpptes kommer det förmodligen inte uppgradering att officiellt stödjas, men med lite tur så fungerar samma trick som gällde vid uppgradering från Beta till RC. Vi bloggar om det när vi testat.\r\n\r\n![Bild](http://tekniken.nu/uploads/633772222063954562-windows72.png)", + "html": "

    Microsoft har via sin devblog bekräftat att RTM versionen (Release To Market) av Windows 7 kommer att släppas i augusti. Till skillnad från RC:n så kommer (såklart) inte RTM versionen att
    släppas till allmänheten utan endast till partners,
    Technet/MSDN-prenumeranter och kunder med gällande SA-avtal. Beroende på partnernivå och/eller avtal får man vänta olika länge:

    • ISV, IHV, Technet och MSDN prenumeranter kommer kunna ladda hem den via MSDN den 6:e augusti.
    • Företagskunder med gällande SA får tillgång till RTM den 7:e augusti.
    • Microsoft Gold och Certified partners kan hämta RTM den 16:e augusti.
    • Microsoft Action Pack prenumeraner får vänta till den 23:e augusti.

    Precis som när RC:n släpptes kommer det förmodligen inte uppgradering att officiellt stödjas, men med lite tur så fungerar samma trick som gällde vid uppgradering från Beta till RC. Vi bloggar om det när vi testat.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Windows 7 RTM släpps om två veckor", + "meta_description": "", + "author_id": 1085, + "created_at": 1248300039000, + "created_by": 1085, + "updated_at": 1248300039000, + "updated_by": 1085, + "published_at": 1248300039000, + "published_by": 1085 + }, + { + "id": 318, + "title": "Iphone 3GS är här och den säljs av alla operatörer", + "slug": "iphone-3gs-ar-har-och-den-saljs-av-alla-operatorer", + "markdown": "\r\n\r\nIdag är den stora årliga julafton för alla Apple fans, idag är nämligen dagen då alla kan köpa den nya iPhone 3GS - uppdateringen på en av världens mest uppmärksammade telefoner. Uppdateringen handlar som vi tidigare har berättat om hastighet. Telefonen startar snabbare, internet går snabbare, operativsystemet är optimerat osv. Nyhet är också kameran som är bättre och kan nu spela in video, en inbyggd kompass gör det möjligt för nya gränssnitt som kallas \"Augmented reality\" där man kan lägga en \"overlay\" ovanför den vanliga kamerabilden med information om objekt eller personer. Man kan sammanfatta uppdateringen som en grundnivå att bygga sjukt läckra applikationer och spel med. \r\nNytt är också att den nya telefonen nu säljs inte bara av Telia och Telenor utan även Tre, så för alla som har tre som favoritoperatör går det nu bra att köpa telefonen på tre.se.\r\nVi på tekniken.nu var inbjudna att medverka på Telias förhandsvisning igår torsdag men på grund av semestrar och dålig framförhållning av Telia gick det inte få till men vi ser fram emot att hämta ut våra nya telefoner när semestern är över ;-)\r\nNyhetsvärdet av dagens lanseringen är väl inte jättehögt med tanke på att telefonen har funnits i USA sen i början av juli och nyheterna i den presenterades redan i början av juni men för mig personligen ser jag väldigt mycket fram emot att få den nya telefonen eftersom min kära iPhone 3G blev stulen i Monaco i maj. \r\nFrån semestern hälsar vi på tekniken.nu er alla en glad sommar och njut ordentligt av era nya telefoner!\r\n\r\n![Bild](http://tekniken.nu/uploads/iphone.png)", + "html": "

    Idag är den stora årliga julafton för alla Apple fans, idag är nämligen dagen då alla kan köpa den nya iPhone 3GS - uppdateringen på en av världens mest uppmärksammade telefoner. Uppdateringen handlar som vi tidigare har berättat om hastighet. Telefonen startar snabbare, internet går snabbare, operativsystemet är optimerat osv. Nyhet är också kameran som är bättre och kan nu spela in video, en inbyggd kompass gör det möjligt för nya gränssnitt som kallas \"Augmented reality\" där man kan lägga en \"overlay\" ovanför den vanliga kamerabilden med information om objekt eller personer. Man kan sammanfatta uppdateringen som en grundnivå att bygga sjukt läckra applikationer och spel med.

    Nytt är också att den nya telefonen nu säljs inte bara av Telia och Telenor utan även Tre, så för alla som har tre som favoritoperatör går det nu bra att köpa telefonen på tre.se.

    Vi på tekniken.nu var inbjudna att medverka på Telias förhandsvisning igår torsdag men på grund av semestrar och dålig framförhållning av Telia gick det inte få till men vi ser fram emot att hämta ut våra nya telefoner när semestern är över ;-)

    Nyhetsvärdet av dagens lanseringen är väl inte jättehögt med tanke på att telefonen har funnits i USA sen i början av juli och nyheterna i den presenterades redan i början av juni men för mig personligen ser jag väldigt mycket fram emot att få den nya telefonen eftersom min kära iPhone 3G blev stulen i Monaco i maj.

    Från semestern hälsar vi på tekniken.nu er alla en glad sommar och njut ordentligt av era nya telefoner!

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Iphone 3GS är här och den säljs av alla operatörer", + "meta_description": "", + "author_id": 1087, + "created_at": 1249081200000, + "created_by": 1087, + "updated_at": 1249081200000, + "updated_by": 1087, + "published_at": 1249081200000, + "published_by": 1087 + }, + { + "id": 319, + "title": "Google Chrome får synkronisering av bokmärken", + "slug": "google-chrome-far-synkronisering-av-bokmarken", + "markdown": "\r\nEn av de funktioner jag saknar mest i Chrome är synkronisering av bokmärken. För FireFox, IE och Safari finns Xmarks som löser uppgiften utmärkt, men till Chrome finns ingenting. Nu meddelar dock Chromes utvecklingsteam att en synkroniseringsfunktion för användardata i Chrome är på väg. Först ut är bokmärken, men senare kommer även annat att kunna synkroniseras (som sparade lösenord). En skillnad mot t.ex. Xmarks är att Chromes synkronisering kommer att använda Google Talk. Det betyder, förutom att kommunikationen använder ett välanvänt protokoll, att synkroniseringen sker med push. I samma ögonblick som man lägger till ett bokmärke i Chrome på en dator så läggs det också till på dina andra datorer (om Chrome är igång). Att ha tillgång till samma bokmärken på vilken dator man än sitter är den enda funktionen jag egentligen saknar sen jag bytte standardwebbläsare från FireFox, så jag hoppas att de snabbar på med utvecklingen!\r\n\r\nKälla: Ars Technica\r\n![Bild](http://tekniken.nu/uploads/633857585363435816-google-chrome-logo.png)", + "html": "

    En av de funktioner jag saknar mest i Chrome är synkronisering av bokmärken. För FireFox, IE och Safari finns Xmarks som löser uppgiften utmärkt, men till Chrome finns ingenting. Nu meddelar dock Chromes utvecklingsteam att en synkroniseringsfunktion för användardata i Chrome är på väg. Först ut är bokmärken, men senare kommer även annat att kunna synkroniseras (som sparade lösenord). En skillnad mot t.ex. Xmarks är att Chromes synkronisering kommer att använda Google Talk. Det betyder, förutom att kommunikationen använder ett välanvänt protokoll, att synkroniseringen sker med push. I samma ögonblick som man lägger till ett bokmärke i Chrome på en dator så läggs det också till på dina andra datorer (om Chrome är igång). Att ha tillgång till samma bokmärken på vilken dator man än sitter är den enda funktionen jag egentligen saknar sen jag bytte standardwebbläsare från FireFox, så jag hoppas att de snabbar på med utvecklingen!

    Källa: Ars Technica", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Google Chrome får synkronisering av bokmärken", + "meta_description": "", + "author_id": 6, + "created_at": 1250161735000, + "created_by": 6, + "updated_at": 1250161735000, + "updated_by": 6, + "published_at": 1250161735000, + "published_by": 6 + }, + { + "id": 320, + "title": "Synka din iPhone med iTunes på flera datorer", + "slug": "synka-din-iphone-med-itunes-pa-flera-datorer", + "markdown": "\r\n\r\nEn sak jag har har stört mig på ända sedan jag köpte min iPhone är att man bara kan använda den med en dator. Om man synkar sin iPhone med hemmadatorn går det inte att lägga till låtar på jobbdatorn t.ex. Inte ens om man stänger av synkläget och väljer att hantera musik och film manuellt så kan man använda mer än en dator, trots att det fungerar bra med t.ex. iPod Touch som ju kör nära nog identisk programvara. Det finns dock ett trick som får telefonen att tro att den synkar med samma iTunes-bibliotek trots att man kopplar den till olika datorer.\r\n\r\n\r\n\r\nTricket är att ändra ID:t på iTunes-biblioteken så att de blir samma på de två (eller fler) datorerna. ID:t lagras på två ställen, ett som är lätt att ändra i en XML-fil och ett mer komplicerat i en binärfil. Här finns en guide till hur man gör. Jag testade med Hex-programmet XVI32 men fick det inte att fungera riktigt (den hittade inte mitt ID), men det gick bättre med Hex Editor Neo som också finns i gratisversion.\r\n\r\nJag synkar inte film och musik till min telefon utan kör manuellt och det funkar bra med två datorer. Om jag har fattat det rätt så ska det fungera även om man synkar, men bara på en dator (på de andra får man köra manuella metoden). Lycka till!\r\n\r\n![Bild](http://tekniken.nu/uploads/633863615147414916-Itunes logo Transparent- 2.png)", + "html": "

    En sak jag har har stört mig på ända sedan jag köpte min iPhone är att man bara kan använda den med en dator. Om man synkar sin iPhone med hemmadatorn går det inte att lägga till låtar på jobbdatorn t.ex. Inte ens om man stänger av synkläget och väljer att hantera musik och film manuellt så kan man använda mer än en dator, trots att det fungerar bra med t.ex. iPod Touch som ju kör nära nog identisk programvara. Det finns dock ett trick som får telefonen att tro att den synkar med samma iTunes-bibliotek trots att man kopplar den till olika datorer.

    Tricket är att ändra ID:t på iTunes-biblioteken så att de blir samma på de två (eller fler) datorerna. ID:t lagras på två ställen, ett som är lätt att ändra i en XML-fil och ett mer komplicerat i en binärfil. Här finns en guide till hur man gör. Jag testade med Hex-programmet XVI32 men fick det inte att fungera riktigt (den hittade inte mitt ID), men det gick bättre med Hex Editor Neo som också finns i gratisversion.

    Jag synkar inte film och musik till min telefon utan kör manuellt och det funkar bra med två datorer. Om jag har fattat det rätt så ska det fungera även om man synkar, men bara på en dator (på de andra får man köra manuella metoden). Lycka till!

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Synka din iPhone med iTunes på flera datorer", + "meta_description": "", + "author_id": 6, + "created_at": 1250764714000, + "created_by": 6, + "updated_at": 1250764714000, + "updated_by": 6, + "published_at": 1250764714000, + "published_by": 6 + }, + { + "id": 321, + "title": "Mindmeisters iPhoneapplikation släppt", + "slug": "mindmeisters-iphoneapplikation-slappt", + "markdown": "\r\n\r\nIdag släpper Mindmeister (tankekarteverktyget som vi tidigare skrivit om) sin officiella iPhoneapplikation. För 49 kronor får man tillgång till följande funktioner:\r\n\r\nCreate, view, and edit mapsonline and offline\r\nSeamlessly sync maps with your online MindMeister account\r\nShare maps directly from the device\r\nFull drag & drop support\r\nZoom in and out\r\nAdd children and sibling nodes\r\nSupport for icons, colors, styles\r\nFavorites and pending maps\r\nGeistesblitz view to quickly insert ideas\r\nUse with or without MindMeister account\r\n\r\nKänns som en given investering om man använder mindmeister och äger en iPhone / iPod Touch. Jag har dock inte testat själv ännu, men om den håller ens i närheten av samma kvalitet som webversionen så bör den vara mycket bra.\r\n\r\n\r\n\r\n \r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/633834294657561226-mindmeister.jpg)", + "html": "

    Idag släpper Mindmeister (tankekarteverktyget som vi tidigare skrivit om) sin officiella iPhoneapplikation. För 49 kronor får man tillgång till följande funktioner:


  • Create, view, and edit mapsonline and offline

  • Seamlessly sync maps with your online MindMeister account

  • Share maps directly from the device

  • Full drag & drop support

  • Zoom in and out

  • Add children and sibling nodes

  • Support for icons, colors, styles

  • Favorites and pending maps

  • Geistesblitz view to quickly insert ideas

  • Use with or without MindMeister account

  • Känns som en given investering om man använder mindmeister och äger en iPhone / iPod Touch. Jag har dock inte testat själv ännu, men om den håller ens i närheten av samma kvalitet som webversionen så bör den vara mycket bra.



    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Mindmeisters iPhoneapplikation släppt", + "meta_description": "", + "author_id": 1085, + "created_at": 1250842309000, + "created_by": 1085, + "updated_at": 1250842309000, + "updated_by": 1085, + "published_at": 1250842309000, + "published_by": 1085 + }, + { + "id": 322, + "title": "Apple OS X Snow Leopard kan nu beställas!", + "slug": "apple-os-x-snow-leopard-kan-nu-bestallas", + "markdown": "\r\n\r\nApple har de senaste två åren gjort ungefär samma sak som Microsoft – städat i sin bakomliggande kod. Microsoft har precis blivit klara med sitt operativsystem Windows 7 som är Windows Vista men städat från onödig kod och optimerat för hastighet. Idag släpper Apple sitt nya operativsystem Apple OS X Snow Leopard som är en städad variant av deras tidigare operativsystem Apple OS X Leopard.\r\n\r\nNyheterna är få i gränssnittet men under huven finns det destå mer:\r\nHela operativsystemet är nu i 64-bit. Alla centrala delar är omskrivna för att dra nytta av hela minnet – tidigare var t.ex. Finder 32-bit och kunde inte använda mer än 3gb av det installerade internminnet.OpenCL – alla datorer som säljs numera har en väldigt kraftfull extraprocessor i grafikkortet som inte används annat än när du spelar spel – men nu kan utvecklare skriva applikationer som utnyttjar denna processor och koden skrivs på samma sätt som all övrig kod vilket gör att te.x. mediauppspelning, kodning av filmer osv kommer kunna gå mycket snabbare framöver.Inbyggd multitrådning – En stor utmaning för utvecklare är att utnyttja hela kraften i datorn på ett jämnt sätt. Processorn i en dator är ju numera uppdelad i flera interna kärnor som kör koden helt separat men en stor utmaning för utvecklare är att dela upp koden i lagom stora uppdrag som drar jämnt på alla processorerna. Numera finns det en ”Grand Central Dispatch” inbyggd i kärnan som hanterar denna utmaning och ska avlasta programmen från detta dilemma vilket kommer ge stor effekt för t ex mediauppspelning. Det populära mediauppspelningsprogrammet VLC till exempel kan endast använda 50% av processorkraften i en dual core processor vilket gör att min mac-mini hemma inte klarar av 1080p i mkv-container men andra program (PLEX) klarar av att spela upp 1080p galant på grund av bättre uppdelning av kärnorna.Inbyggt Exchange-stöd som låter applikationer som iCal, Mail och adressboken synkroniseras direkt mot en Exchange-server. Rykten säger också att addressboken uppdaterar status från Twitter och Facebook.Hela installationen är bantad – mest på grund av slopat stöd för PowerPC processorerna men även en hel del annat gammalt är bortrensat. Alla skrivardrivrutiner hämtas till exempel numera direkt från nätet istället för att skickas med installationsskivan. Enligt Apple får du nu 7 gb extra på hårddisken när du uppgraderat.\r\nVi på tekniken.nu gillar att de stora företagen nu vågar prioritera den bakomliggande tekniken så mycket att det blir egna produktversioner med så mycket ståhej som det ändå är kring denna lansering utan att behöva göra om hela användargränssnittet. Vi ser ju såklart dock fram emot vad som nu kommer byggas på detta snabba och stabila ramverk. Kan man våga att få önska sig ett nytt 3D-gränssnitt som liknar gränssnittet i Minority Report som nästa operativsystem från innovatörerna i Cupertino?\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/633867347097612216-image001.jpg@01CA24E4.6CF9BCD0__image001.jpg)", + "html": "

    Apple har de senaste två åren gjort ungefär samma sak som Microsoft – städat i sin bakomliggande kod. Microsoft har precis blivit klara med sitt operativsystem Windows 7 som är Windows Vista men städat från onödig kod och optimerat för hastighet. Idag släpper Apple sitt nya operativsystem Apple OS X Snow Leopard som är en städad variant av deras tidigare operativsystem Apple OS X Leopard.

    Nyheterna är få i gränssnittet men under huven finns det destå mer:

    • Hela operativsystemet är nu i 64-bit. Alla centrala delar är omskrivna för att dra nytta av hela minnet – tidigare var t.ex. Finder 32-bit och kunde inte använda mer än 3gb av det installerade internminnet.
    • OpenCL – alla datorer som säljs numera har en väldigt kraftfull extraprocessor i grafikkortet som inte används annat än när du spelar spel – men nu kan utvecklare skriva applikationer som utnyttjar denna processor och koden skrivs på samma sätt som all övrig kod vilket gör att te.x. mediauppspelning, kodning av filmer osv kommer kunna gå mycket snabbare framöver.
    • Inbyggd multitrådning – En stor utmaning för utvecklare är att utnyttja hela kraften i datorn på ett jämnt sätt. Processorn i en dator är ju numera uppdelad i flera interna kärnor som kör koden helt separat men en stor utmaning för utvecklare är att dela upp koden i lagom stora uppdrag som drar jämnt på alla processorerna. Numera finns det en ”Grand Central Dispatch” inbyggd i kärnan som hanterar denna utmaning och ska avlasta programmen från detta dilemma vilket kommer ge stor effekt för t ex mediauppspelning. Det populära mediauppspelningsprogrammet VLC till exempel kan endast använda 50% av processorkraften i en dual core processor vilket gör att min mac-mini hemma inte klarar av 1080p i mkv-container men andra program (PLEX) klarar av att spela upp 1080p galant på grund av bättre uppdelning av kärnorna.
    • Inbyggt Exchange-stöd som låter applikationer som iCal, Mail och adressboken synkroniseras direkt mot en Exchange-server. Rykten säger också att addressboken uppdaterar status från Twitter och Facebook.
    • Hela installationen är bantad – mest på grund av slopat stöd för PowerPC processorerna men även en hel del annat gammalt är bortrensat. Alla skrivardrivrutiner hämtas till exempel numera direkt från nätet istället för att skickas med installationsskivan. Enligt Apple får du nu 7 gb extra på hårddisken när du uppgraderat.

    Vi på tekniken.nu gillar att de stora företagen nu vågar prioritera den bakomliggande tekniken så mycket att det blir egna produktversioner med så mycket ståhej som det ändå är kring denna lansering utan att behöva göra om hela användargränssnittet. Vi ser ju såklart dock fram emot vad som nu kommer byggas på detta snabba och stabila ramverk. Kan man våga att få önska sig ett nytt 3D-gränssnitt som liknar gränssnittet i Minority Report som nästa operativsystem från innovatörerna i Cupertino?


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Apple OS X Snow Leopard kan nu beställas!", + "meta_description": "", + "author_id": 1087, + "created_at": 1251137909000, + "created_by": 1087, + "updated_at": 1251137909000, + "updated_by": 1087, + "published_at": 1251137909000, + "published_by": 1087 + }, + { + "id": 323, + "title": "18 nya funktioner i Windows 7", + "slug": "18-nya-funktioner-i-windows-7", + "markdown": "\r\n\r\nPå ytan kan Windows 7 verka likt Vista, men i praktiken är det mycket som skiljer. Förutom de små ändringarna i gränssnittet (automatisk fönstermaximering, bättre taskbar etc.) så finns massor av andra förbättringar och nyheter som man kanske inte upptäcker direkt. Tech Radar har samlat 18 av dem! Här är en kort sammanfattning:\r\n\r\n\r\nSkaka fönster för att minimera alla andra fönsterTa tag i titelraden och skaka ett fönster så minimeras alla andra fönster. Skaka igen så kommer de tillbakaSnabblistorOm man högerklickar på ett program i aktivitetsfältet (det som på engelska heter task bar) så visas en meny med de vanligaste kommandona för programmet. Man kan t.ex. ändra status i Messenger eller öppna någon av de senast besökta sidorna i Chrome utan att behöva öppna programmets fönster.Snabbgranska öppna fönsterOm man håller muspekaren över en program i aktivitetsfältet så visas tumnaglar för alla öppna fönster för det programmet.Docka fönsterDra ett fönster mot kanten av skärmen så ändras dess storlek så att det täcker hela eller halva skärmenXP-lägeWindows 7 har en specialvariant av Virtual PC som gör att det går att köra inkompatibla gamla program i Windows XP-läge. XP-läget ingår inte i grundinstallationen utan det måste man ladda ner separat (gratis).Lättare att växla mellan skärmarTryck ner Win+P för att välja hur dina skärmar, ansluten projektor etc. ska visa bilden från datorn.Bättre hantering av anslutna enheterDevices and printers på startmenyn visar bra översikt och gör enhetsrelateradefunktioner lättare att komma åt.Bättre kontroll på notifieringsfältetFältet bredvid klockan i aktivitetsfältet kan styras mycket bättre – du kan ta bort volymikonen t.ex. om du har lust.ProbleminspelareWindows 7 innehåller ett inspelningsläge som gör skärmdumpar och små förklarande texter. Perfekt om du behöver hjälpa kunder eller vänner och bekanta med datorproblem.Bättre zoom-verktygNya zoomen har en zoomruta vid muspekaren istället för att ta upp en stor del av skärmen (som den gjorde i tidigare Windows-versioner)Snabbare musikspelareWindows 7 innehåller en förhandsgranskare för musik som startar blixtsnabbt (en lightversion av Windows Media Player)Förenklade funktioner för hemmanätverkMed homegroup ska det bli enklare att koppla ihop datorerna hemmaStreamingfunktionerOm man använder homegroup-funktionerna så kan man lätt streama t.ex. musik från en dator till en annan.Bättre säkerhetsnotifieringarSecurity Center har blivit Action Center, och har blivit mycket bättre på att samla ihop information och varningar och inte störa så mycket hela tiden.Bättre kontroll över programmen på aktivitetsfältetUtöver att man får tillgång till fler funktioner så är det lättare att hantera vilka program som ska synas permanent i aktivitetsfältet. På det sättet är nya aktivitetsfältet en kombination av det gamla och quick launch (de ikoner som låg permanen brevid startknappen i XP och Vista).Nya touchfunktionerBättre stöd för datorer med touchskärm. Inbyggd ISO-brännareOm man dubbelklickar på en diskavbildning i ISO-format så innehåller Windows 7 en inbyggd applikation för att bränna den till en skiva. ISO-filer är ganska vanligt om man ska installera större saker, t.ex. Visual Studio eller ett service pack.KalibreringWindows 7 har inbyggda funktioner för att kalibrera t.ex. en HDTV som man kopplar till datorn.\r\nTech Radars artikel innehåller grundligare beskrivningar av de 18 punkterna. Om det inte räcker så har de dessutom en artikel med 50 tips och tricks för Windows 7!\r\n\r\n![Bild](http://tekniken.nu/uploads/633869817680314816-windows_7_logo_from_wallpaper.png)", + "html": "

    På ytan kan Windows 7 verka likt Vista, men i praktiken är det mycket som skiljer. Förutom de små ändringarna i gränssnittet (automatisk fönstermaximering, bättre taskbar etc.) så finns massor av andra förbättringar och nyheter som man kanske inte upptäcker direkt. Tech Radar har samlat 18 av dem! Här är en kort sammanfattning:

    1. Skaka fönster för att minimera alla andra fönster
      Ta tag i titelraden och skaka ett fönster så minimeras alla andra fönster. Skaka igen så kommer de tillbaka
    2. Snabblistor
      Om man högerklickar på ett program i aktivitetsfältet (det som på engelska heter task bar) så visas en meny med de vanligaste kommandona för programmet. Man kan t.ex. ändra status i Messenger eller öppna någon av de senast besökta sidorna i Chrome utan att behöva öppna programmets fönster.
    3. Snabbgranska öppna fönster
      Om man håller muspekaren över en program i aktivitetsfältet så visas tumnaglar för alla öppna fönster för det programmet.
    4. Docka fönster
      Dra ett fönster mot kanten av skärmen så ändras dess storlek så att det täcker hela eller halva skärmen
    5. XP-läge
      Windows 7 har en specialvariant av Virtual PC som gör att det går att köra inkompatibla gamla program i Windows XP-läge. XP-läget ingår inte i grundinstallationen utan det måste man ladda ner separat (gratis).
    6. Lättare att växla mellan skärmar
      Tryck ner Win+P för att välja hur dina skärmar, ansluten projektor etc. ska visa bilden från datorn.
    7. Bättre hantering av anslutna enheter
      Devices and printers på startmenyn visar bra översikt och gör enhetsrelateradefunktioner lättare att komma åt.
    8. Bättre kontroll på notifieringsfältet
      Fältet bredvid klockan i aktivitetsfältet kan styras mycket bättre – du kan ta bort volymikonen t.ex. om du har lust.
    9. Probleminspelare
      Windows 7 innehåller ett inspelningsläge som gör skärmdumpar och små förklarande texter. Perfekt om du behöver hjälpa kunder eller vänner och bekanta med datorproblem.
    10. Bättre zoom-verktyg
      Nya zoomen har en zoomruta vid muspekaren istället för att ta upp en stor del av skärmen (som den gjorde i tidigare Windows-versioner)
    11. Snabbare musikspelare
      Windows 7 innehåller en förhandsgranskare för musik som startar blixtsnabbt (en lightversion av Windows Media Player)
    12. Förenklade funktioner för hemmanätverk
      Med homegroup ska det bli enklare att koppla ihop datorerna hemma
    13. Streamingfunktioner
      Om man använder homegroup-funktionerna så kan man lätt streama t.ex. musik från en dator till en annan.
    14. Bättre säkerhetsnotifieringar
      Security Center har blivit Action Center, och har blivit mycket bättre på att samla ihop information och varningar och inte störa så mycket hela tiden.
    15. Bättre kontroll över programmen på aktivitetsfältet
      Utöver att man får tillgång till fler funktioner så är det lättare att hantera vilka program som ska synas permanent i aktivitetsfältet. På det sättet är nya aktivitetsfältet en kombination av det gamla och quick launch (de ikoner som låg permanen brevid startknappen i XP och Vista).
    16. Nya touchfunktioner
      Bättre stöd för datorer med touchskärm. 
    17. Inbyggd ISO-brännare
      Om man dubbelklickar på en diskavbildning i ISO-format så innehåller Windows 7 en inbyggd applikation för att bränna den till en skiva. ISO-filer är ganska vanligt om man ska installera större saker, t.ex. Visual Studio eller ett service pack.
    18. Kalibrering
      Windows 7 har inbyggda funktioner för att kalibrera t.ex. en HDTV som man kopplar till datorn.

    Tech Radars artikel innehåller grundligare beskrivningar av de 18 punkterna. Om det inte räcker så har de dessutom en artikel med 50 tips och tricks för Windows 7!

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "18 nya funktioner i Windows 7", + "meta_description": "", + "author_id": 6, + "created_at": 1251384967000, + "created_by": 6, + "updated_at": 1251384967000, + "updated_by": 6, + "published_at": 1251384967000, + "published_by": 6 + }, + { + "id": 324, + "title": "Spotify godkänt i iPhone App Store", + "slug": "spotify-godkant-i-iphone-app-store", + "markdown": "\r\n\r\nDagens stora tekniknyhet är att Apple, tvärt emot vad många förutspådde, nu har godkänt Spotify för iPhone. Inom några dagar så kommer applikationen att finnas tillgänglig för nedladdning. Det kommer krävas att man har ett premiumkonto (99:-/mån) och applikationen kommer troligen bara att släppas i de länder där Spotify finns tillgängligt på dator. Hur stor är den här nyheten då? Ganska stor skulle jag säga, om man tittar bara på ett axplock av de tidningar och bloggar som redan har rapporterat om nyheten:\r\n\r\n\r\n\r\nWiredFinancial TimesLifehackerGizmodoCNNSVD ITDNDI/ExpressenAftonbladetIDGNikke indexTommy K JohanssonDin IT-kunskapomiPhone\r\n\r\nFör mig är det här ett verkligt sundhetstecken från musikindustrin - man verkar äntligen vilja låta sina kunderna ta del av de senaste årens teknikutveckling utan att riskera åtal. Jag hoppas att ett stort antal nya betalande Spotify-kunder också kan hjälpa till att lösa problemet med artisterna tydligen får ganska lite betalt per spelad låt.\r\n\r\n![Bild](http://tekniken.nu/uploads/633870505752466566-spotify.png)", + "html": "

    Dagens stora tekniknyhet är att Apple, tvärt emot vad många förutspådde, nu har godkänt Spotify för iPhone. Inom några dagar så kommer applikationen att finnas tillgänglig för nedladdning. Det kommer krävas att man har ett premiumkonto (99:-/mån) och applikationen kommer troligen bara att släppas i de länder där Spotify finns tillgängligt på dator. Hur stor är den här nyheten då? Ganska stor skulle jag säga, om man tittar bara på ett axplock av de tidningar och bloggar som redan har rapporterat om nyheten:

    Wired
    Financial Times
    Lifehacker
    Gizmodo
    CNN
    SVD IT
    DN
    DI/Expressen
    Aftonbladet
    IDG
    Nikke index
    Tommy K Johansson
    Din IT-kunskap
    omiPhone

    För mig är det här ett verkligt sundhetstecken från musikindustrin - man verkar äntligen vilja låta sina kunderna ta del av de senaste årens teknikutveckling utan att riskera åtal. Jag hoppas att ett stort antal nya betalande Spotify-kunder också kan hjälpa till att lösa problemet med artisterna tydligen får ganska lite betalt per spelad låt.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Spotify godkänt i iPhone App Store", + "meta_description": "", + "author_id": 6, + "created_at": 1251453774000, + "created_by": 6, + "updated_at": 1251453774000, + "updated_by": 6, + "published_at": 1251453774000, + "published_by": 6 + }, + { + "id": 325, + "title": "Skapa ett typsnitt av din handstil", + "slug": "skapa-ett-typsnitt-av-din-handstil", + "markdown": "\r\n\r\nAtt skapa nya typsnitt är normalt sett en enormt arbetskrävande process som också kräver goda kunskaper i specialprogram. Men nu finns en ny tjänst som heter fontcapture som gör om din handstil till ett typsnitt på ett väldigt enkelt sätt. Man laddar ner ett PDF-formulär där man fyller i bokstäver och siffror och några specialtecken. Totalt ägnade jag max 3 minuter och detta och fick ändå ett typsnitt som jag är riktigt nöjd med! Hade jag läst instruktionen ordentligt och använt en svart tuschpenna istället för en blå bläckpenna och hade hållit mig lite mer till de stödlinjer som fanns :-).\r\n\r\nSåhär blev det:\r\n\r\n\r\n\r\nTypsnittet ser betydligt bättre ut när man skriver ut det jämfört med hur det ser ut på skärmen. Kan säkert bero på att jag använde en för tunn penna i fel färg.\r\n\r\nTesta här: www.fontcapture.com\r\n\r\nKälla: Lifehacker\r\n\r\n![Bild](http://tekniken.nu/uploads/633873281839212466-fontcapture.PNG)", + "html": "

    Att skapa nya typsnitt är normalt sett en enormt arbetskrävande process som också kräver goda kunskaper i specialprogram. Men nu finns en ny tjänst som heter fontcapture som gör om din handstil till ett typsnitt på ett väldigt enkelt sätt. Man laddar ner ett PDF-formulär där man fyller i bokstäver och siffror och några specialtecken. Totalt ägnade jag max 3 minuter och detta och fick ändå ett typsnitt som jag är riktigt nöjd med! Hade jag läst instruktionen ordentligt och använt en svart tuschpenna istället för en blå bläckpenna och hade hållit mig lite mer till de stödlinjer som fanns :-).

    Såhär blev det:

    Typsnittet ser betydligt bättre ut när man skriver ut det jämfört med hur det ser ut på skärmen. Kan säkert bero på att jag använde en för tunn penna i fel färg.

    Testa här: www.fontcapture.com

    Källa: Lifehacker

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Skapa ett typsnitt av din handstil", + "meta_description": null, + "author_id": 6, + "created_at": 1251731383000, + "created_by": 6, + "updated_at": 1251731383000, + "updated_by": 6, + "published_at": 1251731383000, + "published_by": 6 + }, + { + "id": 326, + "title": "Blogga i din egen handstil", + "slug": "blogga-i-din-egen-handstil", + "markdown": "\r\n\r\n\r\n@font-face {\r\n font-family: MyCustomFont;\r\n src: url(\"Anders8.eot\") /* EOT file for IE */\r\n}\r\n@font-face {\r\n font-family: MyCustomFont;\r\n src: url(\"Anders8.ttf\") /* TTF file for CSS3 browsers */\r\n}\r\n.handwriting\r\n{\r\nfont-family:MyCustomFont,Arial;\r\nfont-size:18px;\r\nwidth:350px;\r\n}\r\n\r\n\r\nHej och välkommen till en typsnittsspecial på tekniken.nu. Det här stycket är skrivet i min egen handstil, med ett typsnitt som du inte behöver ladda ner eller installera på din dator – om du har en ny version av någon av de vanliga webbläsarna. Om du inte har det kan du se exempel på hur det ser ut i bilden bredvid det här stycket.\r\n\r\nAtt använda särskilda typsnitt på webben har hittills varit väldigt svårt. Man har snällt fått hålla sig till den typsnitt som alla eller det stora flertalet har installerade på sin dator – Arial, Verdana och Times i princip – eller använda trick som bildrubriker eller flashrubriker. Nu har det dock äntligen kommit en teknik för att använda egna typsnitt, som fungerar eller snart kommer att fungera i nästan alla webbläsare. Med hjälp av tekniken som kallas @font-face kan man nu få Internet Explorer, Safari och nyaste versionen av FireFox att visa riktiga typsnitt på webbsidor, utan att de behöver installeras i användarens dator (tekniken finns också i Chrome men är tillfälligt avstängd, och kommer i version 10 av Opera som släpps idag). Den stora fördelen med riktiga typsnitt är att man dels sparar mycket bandbredd jämfört med bildrubriker och flashrubriker, att den fungerar som vanlig text med klipp-och-klistra, samt framför allt: man kan använda den till brödtext.\r\n\r\n\r\n\r\n\r\n\r\nEn annan typsnittsnyhet är webbtjänsten fontcapture som skapar ett typsnitt av din handstil. Att skapa ett eget typsnitt är traditionellt sett en tidsödande process som kräver mycket tid och kunskaper i specialprogram. Med fontcapture är allt däremot lätt. Man laddar ner ett PDF-formulär där man fyller i bokstäver, siffror och några specialtecken i 140 rutor – kan låta mycket, men det tar max 10 minuter, även om man gör det väldigt noggrannt. Du scannar formuläret och laddar upp det till fontcapture – och vips har du en eget typsnitt som du kan använda t.ex. i Word.\r\n \r\n\r\nVarför inte knyta ihop dessa två funktioner? Vilken modebloggartjej skulle t.ex. inte vilja ha sin blogg i sin egen handstil? Dessutom är det ju garanterat licensfritt - det är ju din handstil! Det är inte svårt, såhär gör man steg för steg:\r\n\r\n1) Skapa ditt eget typsnitt med fontcapture. Följ instruktionerna så går allt enkelt. Tips: använd en svart tuschpenna som inte har för smal spets. Var ganska noga med att hålla dig till stödlinjerna som finns.\r\n\r\n2) Typsnittet du har skapat i punkt 1 är i True-Type-format (.ttf). Det går att använda direkt i t.ex. Word.\r\n\r\n3) För att använda typsnittet på webben behöver du typsnittet i ytterligare ett format – OET. Här finns en bra webbtjänst för att konvertera typsnitt från TTF till OET.\r\n\r\n4) Nu till själva CSS-magin. Infoga följande kod i dina CSS-mallar:\r\n\r\n![Bild](http://tekniken.nu/uploads/633874092048491466-image002.png)\r\n```prettyprint lang-html\r\n\r\n```\r\n\r\n\r\n5) I koden kan du nu enkelt använda ditt nya typsnitt:

    Lorem ipsum dolor sit amet

    \r\n\r\n6) Ladda upp båda typsnittsvarianterna (TTF och OET) till webbservern.\r\n\r\nÄr det då säkert att det är bästa valet av typsnitt för din webbplats är din egen handstil? För att citera Spindelmannens farbror: \"With great power comes great responsibility\". Bara för att man kan göra en sak betyder inte att man måste ;-)\r\n\r\nTips för Chrome-användare: om du vill aktivera @font-face, lägg till --enable-remote-fonts i genvägen som startar Chrome.\r\n\r\n@font-face stöds i följande webbläsare:\r\nInternet Explorer: IE6 och senareFireFox: 3.5 och senareSafari: 3.1 och senareChrome: 3 och senare (med --enable-remote-fonts)Opera: 10 och senareTack för mig och lycka till!\r\n", + "html": "


    Hej och välkommen till en typsnittsspecial på tekniken.nu. Det här stycket är skrivet i min egen handstil, med ett typsnitt som du inte behöver ladda ner eller installera på din dator – om du har en ny version av någon av de vanliga webbläsarna. Om du inte har det kan du se exempel på hur det ser ut i bilden bredvid det här stycket.

    Att använda särskilda typsnitt på webben har hittills varit väldigt svårt. Man har snällt fått hålla sig till den typsnitt som alla eller det stora flertalet har installerade på sin dator – Arial, Verdana och Times i princip – eller använda trick som bildrubriker eller flashrubriker. Nu har det dock äntligen kommit en teknik för att använda egna typsnitt, som fungerar eller snart kommer att fungera i nästan alla webbläsare. Med hjälp av tekniken som kallas @font-face kan man nu få Internet Explorer, Safari och nyaste versionen av FireFox att visa riktiga typsnitt på webbsidor, utan att de behöver installeras i användarens dator (tekniken finns också i Chrome men är tillfälligt avstängd, och kommer i version 10 av Opera som släpps idag). Den stora fördelen med riktiga typsnitt är att man dels sparar mycket bandbredd jämfört med bildrubriker och flashrubriker, att den fungerar som vanlig text med klipp-och-klistra, samt framför allt: man kan använda den till brödtext.



    En annan typsnittsnyhet är webbtjänsten fontcapture som skapar ett typsnitt av din handstil. Att skapa ett eget typsnitt är traditionellt sett en tidsödande process som kräver mycket tid och kunskaper i specialprogram. Med fontcapture är allt däremot lätt. Man laddar ner ett PDF-formulär där man fyller i bokstäver, siffror och några specialtecken i 140 rutor – kan låta mycket, men det tar max 10 minuter, även om man gör det väldigt noggrannt. Du scannar formuläret och laddar upp det till fontcapture – och vips har du en eget typsnitt som du kan använda t.ex. i Word.


    Varför inte knyta ihop dessa två funktioner? Vilken modebloggartjej skulle t.ex. inte vilja ha sin blogg i sin egen handstil? Dessutom är det ju garanterat licensfritt - det är ju din handstil! Det är inte svårt, såhär gör man steg för steg:

    1) Skapa ditt eget typsnitt med fontcapture. Följ instruktionerna så går allt enkelt. Tips: använd en svart tuschpenna som inte har för smal spets. Var ganska noga med att hålla dig till stödlinjerna som finns.

    2) Typsnittet du har skapat i punkt 1 är i True-Type-format (.ttf). Det går att använda direkt i t.ex. Word.

    3) För att använda typsnittet på webben behöver du typsnittet i ytterligare ett format – OET. Här finns en bra webbtjänst för att konvertera typsnitt från TTF till OET.

    4) Nu till själva CSS-magin. Infoga följande kod i dina CSS-mallar:



    5) I koden kan du nu enkelt använda ditt nya typsnitt:
    <p class=”handwriting”>Lorem ipsum dolor sit amet</p>

    6) Ladda upp båda typsnittsvarianterna (TTF och OET) till webbservern.

    Är det då säkert att det är bästa valet av typsnitt för din webbplats är din egen handstil? För att citera Spindelmannens farbror: \"With great power comes great responsibility\". Bara för att man kan göra en sak betyder inte att man måste ;-)

    Tips för Chrome-användare: om du vill aktivera @font-face, lägg till --enable-remote-fonts i genvägen som startar Chrome.

    @font-face stöds i följande webbläsare:

    • Internet Explorer: IE6 och senare
    • FireFox: 3.5 och senare
    • Safari: 3.1 och senare
    • Chrome: 3 och senare (med --enable-remote-fonts)
    • Opera: 10 och senare

    Tack för mig och lycka till!

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Blogga i din egen handstil!", + "meta_description": "t för att skapa ett typsnitt av din handstil - kan det bli personligare?", + "author_id": 6, + "created_at": 1251812404000, + "created_by": 6, + "updated_at": 1251812404000, + "updated_by": 6, + "published_at": 1251812404000, + "published_by": 6 + }, + { + "id": 329, + "title": "Google Analytics kan visa diagram i fem dimensioner", + "slug": "google-analytics-kan-visa-diagram-i-fem-dimensioner", + "markdown": "\r\n\r\nEn traditionellt svår nöt att knäcka är hur man visar flerdimensionell data på en skärm som är två dimensioner. Google Analytics har löst detta genom en graf som de kallar Motion Charts. Motion Charts kan visa data i fem dimensioner:\r\n\r\nXYFärgStorlekTid/Animation\r\n\r\nGenom att lägga olika data på olika axlar/dimensioner kan man hitta mönster som annars skulle varit omöjliga att se – väldigt spännande.\r\n\r\nFunktionen finns tillgänglig på flera rapporter i Analytics och man kommer åt den genom att klicka på knappen Visualize ovanför grafen:\r\n\r\n\r\n\r\nSe demo på Motion Charts här:\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/633876624092493716-image001.png@01CA2D53.43242C20__image001.png)", + "html": "

    En traditionellt svår nöt att knäcka är hur man visar flerdimensionell data på en skärm som är två dimensioner. Google Analytics har löst detta genom en graf som de kallar Motion Charts. Motion Charts kan visa data i fem dimensioner:

    1. X
    2. Y
    3. Färg
    4. Storlek
    5. Tid/Animation

    Genom att lägga olika data på olika axlar/dimensioner kan man hitta mönster som annars skulle varit omöjliga att se – väldigt spännande.

    Funktionen finns tillgänglig på flera rapporter i Analytics och man kommer åt den genom att klicka på knappen Visualize ovanför grafen:

    Se demo på Motion Charts här:

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Google Analytics kan visa diagram i fem dimensioner", + "meta_description": "", + "author_id": 1087, + "created_at": 1252065607000, + "created_by": 1087, + "updated_at": 1252065607000, + "updated_by": 1087, + "published_at": 1252065607000, + "published_by": 1087 + }, + { + "id": 331, + "title": "Spotify släppt både till Apple App Store och Android Market", + "slug": "spotify-slappt-bade-till-apple-app-store-och-android-market", + "markdown": "\r\n\r\nSom vi och alla andra rapporterade förra veckan så godkändes Spotifys mobilklient av Apple för lansering via App Store, och idag är applikationen tillgänglig. En glad nyhet för alla Androidanvändare är att applikationen samtidigt även släpps på Android Market.\r\n\r\nJag antar att detta kommer innebära en enorm ökning av antalet premiumkonton hos Spotify, då ett sådant krävs för att njuta musiken via mobilapplikationerna.\r\n\r\nLäs mer på Spotify Mobile\r\n\r\n(Härnäst hoppas jag nu på officiell integration med Logitech Squeezecenter.)\r\n\r\n![Bild](http://tekniken.nu/uploads/633879151471480066-image001.png@01CA2FA3.9A191430__image001.png)\r\nUpdate: Efter att en kollega snabbtestat kan vi meddela att iPhonevarianten känns grymt snabb och med ett välpolerat gränssnitt.\r\n\r\n", + "html": "

    Som vi och alla andra rapporterade förra veckan så godkändes Spotifys mobilklient av Apple för lansering via App Store, och idag är applikationen tillgänglig. En glad nyhet för alla Androidanvändare är att applikationen samtidigt även släpps på Android Market.

    Jag antar att detta kommer innebära en enorm ökning av antalet premiumkonton hos Spotify, då ett sådant krävs för att njuta musiken via mobilapplikationerna.

    Läs mer på Spotify Mobile

    (Härnäst hoppas jag nu på officiell integration med Logitech Squeezecenter.)



    Update: Efter att en kollega snabbtestat kan vi meddela att iPhonevarianten känns grymt snabb och med ett välpolerat gränssnitt.


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Spotify släppt både till Apple App Store och Android Market", + "meta_description": "", + "author_id": 1085, + "created_at": 1252318346000, + "created_by": 1085, + "updated_at": 1252318346000, + "updated_by": 1085, + "published_at": 1252318346000, + "published_by": 1085 + }, + { + "id": 332, + "title": "Starta egna kampanjer på Twitter", + "slug": "starta-egna-kampanjer-pa-twitter", + "markdown": "\r\n\r\nForatweet.com heter en tjänst som sköter din kampanj och hjälper dig att få ut ditt budskap samtidigt som du kan få statistik på hur bra det går. Vattenfall har hoppat på detta och skänker pengar till välgörenhet för varje Twitterinlägg om deras välgörenhet. Om du vill starta din egen virala kampanj kan du använda tjänsten Foratweet.com. Gissningsvis är detta endast roligt en liten stund till och kommer antagligen självdö på samma sätt som kedjebrev men en liten stund till kan man ta enkla poänger genom denna tjänst.\r\n\r\nGör en sökning på Vattenfall på Twitter så ser du hur snabbt detta får genomslag:\r\n\r\nhttp://twitter.com/#search?q=vattenfall%20childhood\r\n\r\nFör att skapa egen kampanj går du till:\r\n\r\nhttp://foratweet.com/campaign/edit\r\n", + "html": "

    Foratweet.com heter en tjänst som sköter din kampanj och hjälper dig att få ut ditt budskap samtidigt som du kan få statistik på hur bra det går. Vattenfall har hoppat på detta och skänker pengar till välgörenhet för varje Twitterinlägg om deras välgörenhet. Om du vill starta din egen virala kampanj kan du använda tjänsten Foratweet.com. Gissningsvis är detta endast roligt en liten stund till och kommer antagligen självdö på samma sätt som kedjebrev men en liten stund till kan man ta enkla poänger genom denna tjänst.

    Gör en sökning på Vattenfall på Twitter så ser du hur snabbt detta får genomslag:

    http://twitter.com/#search?q=vattenfall%20childhood

    För att skapa egen kampanj går du till:

    http://foratweet.com/campaign/edit

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Starta egna kampanjer på Twitter", + "meta_description": null, + "author_id": 1087, + "created_at": 1252318347000, + "created_by": 1087, + "updated_at": 1252318347000, + "updated_by": 1087, + "published_at": 1252318347000, + "published_by": 1087 + }, + { + "id": 333, + "title": "Nvidia ION 330 + XBMC = Mediacenter i världsklass", + "slug": "nvidia-ion-330--xbmc--mediacenter-i-varldsklass", + "markdown": "\r\n\r\nFör den oinsatte är Xbox Media Center (XBMC) den kanske äldsta och mest ambitiösa open source-baserade mediacentermjukvaran som finns. Som namnet antyder började den utvecklas till moddade första generationens Xbox-konsoler c:a 2002, och har sedan vidareutvecklats i högt tempo genom åren till att idag vara den kanske mest fullfjädrade mediacenterlösningen som finns.\r\n\r\n\r\n\r\n\r\n\r\nI och med att Xbox blivit en åldrad och begränsad hårdvara har XBMC på senare tid portats till Mac, Linux och Windows. Dock har det saknats en optimal hårdvara att köra XBMC (förutom möjligtvis Mac Mini, men den har varit omotiverbart dyr som mediacenter), det stora problemet har varit att XBMC gör sin videoavkodning i CPU, vilket krävt en kraftfull Core2Duo processor för att klara full HD upplösning. Med kraftfull processor kommer mycket värme och behov av  kraftfulla fläktar som snabbt går på högvarv när man börjar se på film.\r\n\r\nI november 2008 släppte Nvidia ett linux/unix-API som möjliggör videoavkodning direkt i grafikkortet - VDPAU. Det här har XBMC dragit nytta av och stöd för VDPAU finns i XBMC sedan Mars 2009. Allt som saknats har bara varit ett chipset i miniformat med ett tillräckligt kraftfullt Nvidia-GPU för att klara full HD via VDPAU. Plats på scen för Nvidia ION!\r\n\r\nNvidia ION är en moderkortsplattform som kombinerar ett Geforce 9400M med Intels strömsnåla Atom processor (som vi vanligtvis ser i Netbooks). Kombinationen är som gjord för att köra XBMC: en strömsnål (ej speciellt värmealstrande) processor och ett GPU som klarar full HD avkodning via VDPAU. ION 330 är den rekommenderade modellen, där dubbelkärniga Intel Atom 330 ingår.\r\n\r\nEtt flertal tillverkare har börjat bygga miniformatsdatorer på ION 330,  Asrock har tex paketerat ION 330 i en snygg låda med HDMI-utgång:\r\n\r\n\r\n\r\nAsrock ION 330 kostar ca 3000 kr (inkl moms) och hanterar XBMC fint som fisken!\r\n\r\nSmidigaste sättet att installera är att ladda hem XBMC Live och köra installation direkt från skivan. Lite fler bloggar om installation och konfiguration kommer snart här på Tekniken.nu, tills dess är Google din vän.\r\n\r\nEfter en olycklig mellanperiod med en Popcorn Hour känns det fantastiskt att ha XBMC tillbaka. Jag har bara hunnit testköra några dagar, men temperaturerna håller sig helt inom rimliga gränser och ljudvolymen har inte varit några problem. Dock behöver man komplettera Asrocklådan med en fjärrkontroll och IR-sensor vilket av någon anledning inte medföljer, här rekommenderas Microsofts MCE fjärrkontroller som stödjs \"out-of-the-box\", eller den klassiska xbox-fjärrkontrollen om man är sugen på lite meckande (mer om det i en separat blogg).\r\n\r\n![Bild](http://tekniken.nu/uploads/xbmcion.png)", + "html": "

    För den oinsatte är Xbox Media Center (XBMC) den kanske äldsta och mest ambitiösa open source-baserade mediacentermjukvaran som finns. Som namnet antyder började den utvecklas till moddade första generationens Xbox-konsoler c:a 2002, och har sedan vidareutvecklats i högt tempo genom åren till att idag vara den kanske mest fullfjädrade mediacenterlösningen som finns.

    I och med att Xbox blivit en åldrad och begränsad hårdvara har XBMC på senare tid portats till Mac, Linux och Windows. Dock har det saknats en optimal hårdvara att köra XBMC (förutom möjligtvis Mac Mini, men den har varit omotiverbart dyr som mediacenter), det stora problemet har varit att XBMC gör sin videoavkodning i CPU, vilket krävt en kraftfull Core2Duo processor för att klara full HD upplösning. Med kraftfull processor kommer mycket värme och behov av  kraftfulla fläktar som snabbt går på högvarv när man börjar se på film.

    I november 2008 släppte Nvidia ett linux/unix-API som möjliggör videoavkodning direkt i grafikkortet - VDPAU. Det här har XBMC dragit nytta av och stöd för VDPAU finns i XBMC sedan Mars 2009. Allt som saknats har bara varit ett chipset i miniformat med ett tillräckligt kraftfullt Nvidia-GPU för att klara full HD via VDPAU. Plats på scen för Nvidia ION!

    Nvidia ION är en moderkortsplattform som kombinerar ett Geforce 9400M med Intels strömsnåla Atom processor (som vi vanligtvis ser i Netbooks). Kombinationen är som gjord för att köra XBMC: en strömsnål (ej speciellt värmealstrande) processor och ett GPU som klarar full HD avkodning via VDPAU. ION 330 är den rekommenderade modellen, där dubbelkärniga Intel Atom 330 ingår.

    Ett flertal tillverkare har börjat bygga miniformatsdatorer på ION 330,  Asrock har tex paketerat ION 330 i en snygg låda med HDMI-utgång:

    Asrock ION 330 kostar ca 3000 kr (inkl moms) och hanterar XBMC fint som fisken!

    Smidigaste sättet att installera är att ladda hem XBMC Live och köra installation direkt från skivan. Lite fler bloggar om installation och konfiguration kommer snart här på Tekniken.nu, tills dess är Google din vän.

    Efter en olycklig mellanperiod med en Popcorn Hour känns det fantastiskt att ha XBMC tillbaka. Jag har bara hunnit testköra några dagar, men temperaturerna håller sig helt inom rimliga gränser och ljudvolymen har inte varit några problem. Dock behöver man komplettera Asrocklådan med en fjärrkontroll och IR-sensor vilket av någon anledning inte medföljer, här rekommenderas Microsofts MCE fjärrkontroller som stödjs \"out-of-the-box\", eller den klassiska xbox-fjärrkontrollen om man är sugen på lite meckande (mer om det i en separat blogg).

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Nvidia ION 330 + XBMC = Mediacenter i världsklass", + "meta_description": "", + "author_id": 1085, + "created_at": 1252928122000, + "created_by": 1085, + "updated_at": 1252928122000, + "updated_by": 1085, + "published_at": 1252928122000, + "published_by": 1085 + }, + { + "id": 341, + "title": "Realtidswebben, det nya web 3.0?", + "slug": "realtidswebben-det-nya-web-30", + "markdown": "\r\n\r\nDet nya ordet på allas läppar den senaste tiden är ”Realtidswebben” eller ”Realtime web”. Konceptet är gammalt men till slut verkar det som om många aktörer nu hänger på och siktar på att göra tjänster och information tillgänglig i realtid. Först var tidningen Wired att inse storheten med realtidswebben - i en artikel från 1997 visionerar tidningen om hur internet kommer att se ut inom några år när alla nyheter pushas ut till användare o.s.v.\r\n\r\nSom alltid tar saker längre tid än man tror och i detta fall tog det ungefär 10 år innan webben hade hunnit anpassa sig till de tekniska och politiska ställningstaganden som krävs för att i realtid kunna pusha ut nyheter, mail,  bloggar osv. Ett viktigt steg på vägen till realtidswebben var/är RSS som numera är standard för att publicera sitt nyhetsinnehåll. Även om RSS kan kännas som realtid så bygger det ändå tekniskt på att man hämtar samma information om och om igen och jämför om något har ändrats. Dock finns det tilläggstjänster/tekniker som baseras på RSS och tillför ett realtidslager, exempel på dessa är Trackback, Ping, Twingly.\r\n\r\nRealtidswebben innebär i praktiken att man får uppdateringar direkt när de händer och behöver inte ladda om sidan, ungefär som en chat. Rent tekniskt är skillnaden att istället för att skicka flera anrop i minuten för att se om någonting har hänt så ligger ett långt anrop igång och väntar på att något händer på servern och man sparar därmed resurser från både klient och server som inte behöver hantera samma innehåll hela tiden. Realtidswebben möjliggörs genom att de flesta stora webbplatserna lanserar API:er för att kommunicera i realtid med deras webbtjänster. Störst på området är Twitter som på sin webbplats i realtid visar nya inlägg kring vissa ämnen och nu lanserar de också sitt Streaming API för att få realtidsfeed på allt som skrivs på Twitter om ett visst ämne. Alla stora nyhetsbolag börjar därför också både prenumerera på nyheter kring vissa heta ämnen och får desa nyheter i realtid samt också publicerar utdrag av viktiga händelser via Twitter. Digg.com har också länge haft realtidsvisualisering av sitt innehåll som vi tidigare berättat om.\r\n\r\nI dagarna släpper Google också sin efterlängtade och hyllade tjänst Google Wave som har realtid som sitt största ledord. Vad Google självklart hoppas på är att detta ska bli en naturlig byggsten för realtidsinformation så att all realtidskommunikation går via deras plattformar istället för den stora konkurrenterna Twitter eller Facebook. Vi på tekniken har fått tillgång till Google Wave och kommer publicera tester av detta här när vi tittat närmare på detta rent tekniskt.\r\n\r\nPå det personliga planet har realtidswebben inneburit att våra mailprogram har direktkontakt med mailservern istället för att kolla efter nya mail varje kvart. Microsoft var här först med sin Microsoft Exchange Server för företag och med hjälp av tekniken ActiveSync som släpptes för flera år sedan blev det för första gången möjligt att få sina mail i realtid i mobilen i fickan. Microsofts teknik ActiveSync har numera även licensierats till de stora konkurrenterna Googles Gmail och IBM’s Lotus Notus och Apple har i och med sitt senaste operativsystem Snow Leopard fått stöd för Exchange-server.\r\n\r\nDet händer väldigt mycket på detta området och det är väldigt spännande att se byggblocken växa fram och alla stora spelare kommer göra allt för att just deras tjänster ska bli ”standard” för att leverera realtidsinformationen mellan systemen och ut till användarna. Tipsa gärna nedan i kommentarerna på andra tjänster som bidrar till realtidswebben!\r\n\r\nVårt bidrag till realtidswebben är datingcommunityn Shakemyworld.com som är helt i realtid, allt som händer på sajten kommuniceras till övriga medlemmar via realtids API. Om du också vill utveckla realtidstjänster i C# kan har vi tidigare skrivit om hur du bygger ett realtids-API i AJAX med hjälp av C# eller så ansöker om att jobba på teknikbyrån Iteam ;)\r\n\r\n![Bild](http://tekniken.nu/uploads/633899907856299311-image001.gif@01CA4271.0FE9D200__image001.gif)", + "html": "

    Det nya ordet på allas läppar den senaste tiden är ”Realtidswebben” eller ”Realtime web”. Konceptet är gammalt men till slut verkar det som om många aktörer nu hänger på och siktar på att göra tjänster och information tillgänglig i realtid. Först var tidningen Wired att inse storheten med realtidswebben - i en artikel från 1997 visionerar tidningen om hur internet kommer att se ut inom några år när alla nyheter pushas ut till användare o.s.v.

    Som alltid tar saker längre tid än man tror och i detta fall tog det ungefär 10 år innan webben hade hunnit anpassa sig till de tekniska och politiska ställningstaganden som krävs för att i realtid kunna pusha ut nyheter, mail,  bloggar osv. Ett viktigt steg på vägen till realtidswebben var/är RSS som numera är standard för att publicera sitt nyhetsinnehåll. Även om RSS kan kännas som realtid så bygger det ändå tekniskt på att man hämtar samma information om och om igen och jämför om något har ändrats. Dock finns det tilläggstjänster/tekniker som baseras på RSS och tillför ett realtidslager, exempel på dessa är Trackback, Ping, Twingly.

    Realtidswebben innebär i praktiken att man får uppdateringar direkt när de händer och behöver inte ladda om sidan, ungefär som en chat. Rent tekniskt är skillnaden att istället för att skicka flera anrop i minuten för att se om någonting har hänt så ligger ett långt anrop igång och väntar på att något händer på servern och man sparar därmed resurser från både klient och server som inte behöver hantera samma innehåll hela tiden. Realtidswebben möjliggörs genom att de flesta stora webbplatserna lanserar API:er för att kommunicera i realtid med deras webbtjänster. Störst på området är Twitter som på sin webbplats i realtid visar nya inlägg kring vissa ämnen och nu lanserar de också sitt Streaming API för att få realtidsfeed på allt som skrivs på Twitter om ett visst ämne. Alla stora nyhetsbolag börjar därför också både prenumerera på nyheter kring vissa heta ämnen och får desa nyheter i realtid samt också publicerar utdrag av viktiga händelser via Twitter. Digg.com har också länge haft realtidsvisualisering av sitt innehåll som vi tidigare berättat om.

    I dagarna släpper Google också sin efterlängtade och hyllade tjänst Google Wave som har realtid som sitt största ledord. Vad Google självklart hoppas på är att detta ska bli en naturlig byggsten för realtidsinformation så att all realtidskommunikation går via deras plattformar istället för den stora konkurrenterna Twitter eller Facebook. Vi på tekniken har fått tillgång till Google Wave och kommer publicera tester av detta här när vi tittat närmare på detta rent tekniskt.

    På det personliga planet har realtidswebben inneburit att våra mailprogram har direktkontakt med mailservern istället för att kolla efter nya mail varje kvart. Microsoft var här först med sin Microsoft Exchange Server för företag och med hjälp av tekniken ActiveSync som släpptes för flera år sedan blev det för första gången möjligt att få sina mail i realtid i mobilen i fickan. Microsofts teknik ActiveSync har numera även licensierats till de stora konkurrenterna Googles Gmail och IBM’s Lotus Notus och Apple har i och med sitt senaste operativsystem Snow Leopard fått stöd för Exchange-server.

    Det händer väldigt mycket på detta området och det är väldigt spännande att se byggblocken växa fram och alla stora spelare kommer göra allt för att just deras tjänster ska bli ”standard” för att leverera realtidsinformationen mellan systemen och ut till användarna. Tipsa gärna nedan i kommentarerna på andra tjänster som bidrar till realtidswebben!

    Vårt bidrag till realtidswebben är datingcommunityn Shakemyworld.com som är helt i realtid, allt som händer på sajten kommuniceras till övriga medlemmar via realtids API. Om du också vill utveckla realtidstjänster i C# kan har vi tidigare skrivit om hur du bygger ett realtids-API i AJAX med hjälp av C# eller så ansöker om att jobba på teknikbyrån Iteam ;)

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Realtidswebben, det nya web 3.0?", + "meta_description": "", + "author_id": 1087, + "created_at": 1254399900000, + "created_by": 1087, + "updated_at": 1254399900000, + "updated_by": 1087, + "published_at": 1254399900000, + "published_by": 1087 + }, + { + "id": 345, + "title": "Drivrutiner, uppgraderarens gissel - tips på fyra drivrutinsproblem i Windows 7 och deras lösningar", + "slug": "drivrutiner-uppgraderarens-gissel---tips-pa-fyra-drivrutinsproblem-i-windows-7-och-deras-losningar", + "markdown": "\r\n\r\nMitt track record när det gäller installationer av Windows är inte så starkt. När jag skulle installera Vista på min dator hemma för några år sedan så vägrade installationen gå igång från DVD-skivan – varje uppstart resulterade i en blåskärm. Jag fick installera XP först och uppgradera, mot bättre vetande men som enda möjlighet. Vistainstallationen blev OK, men att starta s.k. managed shortcuts (sådana som skapas av t.ex. Office och inte pekar på en filsökväg utan på ett magiskt id) gick aldrig i den installationen.\r\n\r\nMin första Windows 7 beta-installation gick bättre, men mitt första användarkonto blev det något fel på vilket gjorde att jag inte kunde installera någonting. Ett nytt användarkonto senare var allt så gott som bra, utom att Media Center hängde sig vid avslut varje gång och startade upp sig själv igen (bara en gång som tur var). Jag uppgraderade Windows 7 till RC, vilket gick bra men inte löste Media Center-problemet. När jag skulle installera Windows 7 RTM på jobbet så stannade den upp c:a 10 minuter mellan varje moment, medan kollegornas installationer tickade på och var klara på en tredjedel av tiden. När installationen väl var klar funkade den fint dock.\r\n\r\nJag uppgraderade till Windows 7 RTM hemma  igår – det gick inte bra :-). Efter installationen gick ett fåtal program att starta ordentligt. Största delen (IE, Chrome, FireFox, Office-programmen etc.) startade men visade inga fönster. Så det fick bli en fullständig ominstallation – lika så bra kanske... Men jag hade lyckats glömma bort några av de fiffiga tricks som hade fått igång alla mina enheter, som tillverkarna i vissa fall har bestämt är för gamla för Windows 7. Så här kommer de bästa råden från en som har fått en Windows 7-installationsförbannelse över sig:\r\n## Grafikkort: ATI X1950 Pro\r\nProblem: Med Microsofts inbyggda drivrutin så funkar allt fint – förutom att man inte kan ställa in overscan på TV out. För mig som har en gammal TV så blir detta lite katastrofalt, med svarta sorgkanter på alla sidor. ATI har bestämt att 1950 Pro är så gammalt att det inte behöver stödjas i de nya versionerna av Catalyst.\r\n\r\nLösning: I Windows 7 beta försökte jag installera Catalyst och lyckades lite halvdant. Jag fick in drivrutinen till slut och ett skakigt men ibland fungerande Catalyst Control Center som åtminstone funkade tillräckligt länge för att ställa in overscan. Nu lagom till Windows 7 RTM har man släppt en s.k. Legacy driver som egentligen bara är till för Vista men som funkar fint i Windows 7. Man varnas om att den inte har stöd för Windows nya grafikkortsdrivrutinsarkitektur (jorå 32 bokstäver) WDDM. Jag har inte märkt några nackdelar, och för mig är det mer värt hursomhelst att få bra TV out.\r\n## Ljudkort: Terratec Aureon 7.1 PCI (och säkerligen även 5.1 PCI)\r\nProblem: Terratec var ganska tidigt ut med 64-bitarsdrivrutiner till Vista, vilket förstås var bra. Från och med Windows 7 beta (fram till och med RTM) så har det dock funnits ett problem. Drivrutinerna funkar fint, men kontrollpanelen fungerar inte. När man startar den så hänger sig datorn i princip helt. Muspekaren går att flytta litegrann, om man har tålamod att vänta 5 minuter varje gång man rör musen. Jag misstänker att något i kontrollpanelen drar 100% CPU i själva drivrutinen, för inte ens Task Manager går att öppna.\r\n\r\nLösning: Efter lite efterforskning så kom jag fram till att Terratec har byggt sina ljudkort med kretsar från Taiwanesiska C Media. I Aureon 7.1 PCI sitter en modifierad C Media-krets som heter 8738. Det visar sig att C Medias egen referensdrivrutin, som också innehåller kontrollpanelen, fungerar fint i Windows 7 x64! Tips till OEM-tillverkare: lägg inte in en massa egna onödiga grejer i drivrutinerna om ni inte orkar hålla jämna steg med originaltillverkaren.\r\n## Externt ljudkort (m.m.): Line6 Monkey\r\nProblem: Line6 är ett företag som gör väldigt trevliga gitarrprodukter, t.ex. multieffekter som Pod X3 Live och USB-ljudkort för gitarrer som Toneport UX2. I Windows 7 x64 funkar dock inte nedladdnings- och inställningsprogrammet Monkey. Drivrutinerna för USB funkar, så att spela in o.s.v. går bra, men att ändra inställningar, uppdatera firmware och annat går inte.\r\n\r\nLösning: Problemet uppstod i Monkey 1.27. Installerar man version 1.26 så funkar allt fint! All annan Line6-programvara kan installeras i senaste version, bara man behåller version 1.26 av Monkey. Line6 behöver jobba lite på drivrutinerna också – även om de i regel funkar så har jag fått flera blåskärmar där det uttryckligen står att det är deras drivrutiner som har kraschat.\r\n## Windows Media Center\r\nProblem: OK, Media Center är ingen hårdvara och det är inte drivrutiner som krånglar – men det kan passa här ändå. Media Center sägs ha stöd för MKV-filer. De funkar dock inte att spela upp. Dessutom kan man hur många codecs och filter man än installerar (t.ex. ffdshow och directvobsub) inte få till textning till filmer i Media Center, trots att det fungerar i Windows Media Player.\r\n\r\nLösning: Orsaken till att ffdshow och andra codecs och filter inte fungerar i Media Center är att Windows 7 innehåller en helt ny arkitektur för video- och ljudavkodning som heter Microsoft Media Foundation (MMF). MMF använder helt enkelt inte DirectShows codecs och filters. Det enklaste sättet att få Media Center att använda DirectShow är genom att ladda ner ett codec-paket som heter Windows 7 Codecs. I normala fall skulle jag avråda från codec-paket, men i det här fallet är det så komplicerat att få till själv att Windows 7 Codecs är enklare. Dessutom finns det en utmärkt kontrollpanel där du kan bestämma själv helt och hållet vilka komponenter som ska användas (glöm inte X64 components om du kör 64-bitars Windows 7). Finns det några nackdelar med denna lösning? Jag tycker själv att Windows 7s inbyggda MMF-codecs ger bättre bildkvalitet än t.ex. ffdshow. Om du inte absolut behöver textning t.ex. så kan du lika gärna fortsätta använda MMF. Knäppast av allt är att MMF faktiskt klarar HD-formatet x264 med bravur, men behöver en s.k. splitter för att klara filformatet MKV. En sån splitter ingår också i Windows 7 Codecs.\r\n\r\nTill ovanstående tillverkares försvar ska sägas att Windows 7 inte släpps officiellt förrän om 17 dagar, 22 oktober. Än så länge är det bara vi som är Microsoft-partners som har tillgång till RTM-versionen.\r\n\r\nHar du några egna tips på saker som har krånglat när du har installerat Windows 7? Ännu bättre – har du lösningen på de problemen? Maila till tekniken.nu så ska vi se till att dina tips kommer resten av världen tillgodo också!\r\n\r\n![Bild](http://tekniken.nu/uploads/633903368504358693-windows7-home-premium.png)", + "html": "

    Mitt track record när det gäller installationer av Windows är inte så starkt. När jag skulle installera Vista på min dator hemma för några år sedan så vägrade installationen gå igång från DVD-skivan – varje uppstart resulterade i en blåskärm. Jag fick installera XP först och uppgradera, mot bättre vetande men som enda möjlighet. Vistainstallationen blev OK, men att starta s.k. managed shortcuts (sådana som skapas av t.ex. Office och inte pekar på en filsökväg utan på ett magiskt id) gick aldrig i den installationen.

    Min första Windows 7 beta-installation gick bättre, men mitt första användarkonto blev det något fel på vilket gjorde att jag inte kunde installera någonting. Ett nytt användarkonto senare var allt så gott som bra, utom att Media Center hängde sig vid avslut varje gång och startade upp sig själv igen (bara en gång som tur var). Jag uppgraderade Windows 7 till RC, vilket gick bra men inte löste Media Center-problemet. När jag skulle installera Windows 7 RTM på jobbet så stannade den upp c:a 10 minuter mellan varje moment, medan kollegornas installationer tickade på och var klara på en tredjedel av tiden. När installationen väl var klar funkade den fint dock.

    Jag uppgraderade till Windows 7 RTM hemma  igår – det gick inte bra :-). Efter installationen gick ett fåtal program att starta ordentligt. Största delen (IE, Chrome, FireFox, Office-programmen etc.) startade men visade inga fönster. Så det fick bli en fullständig ominstallation – lika så bra kanske... Men jag hade lyckats glömma bort några av de fiffiga tricks som hade fått igång alla mina enheter, som tillverkarna i vissa fall har bestämt är för gamla för Windows 7. Så här kommer de bästa råden från en som har fått en Windows 7-installationsförbannelse över sig:

    Grafikkort: ATI X1950 Pro

    Problem: Med Microsofts inbyggda drivrutin så funkar allt fint – förutom att man inte kan ställa in overscan på TV out. För mig som har en gammal TV så blir detta lite katastrofalt, med svarta sorgkanter på alla sidor. ATI har bestämt att 1950 Pro är så gammalt att det inte behöver stödjas i de nya versionerna av Catalyst.

    Lösning: I Windows 7 beta försökte jag installera Catalyst och lyckades lite halvdant. Jag fick in drivrutinen till slut och ett skakigt men ibland fungerande Catalyst Control Center som åtminstone funkade tillräckligt länge för att ställa in overscan. Nu lagom till Windows 7 RTM har man släppt en s.k. Legacy driver som egentligen bara är till för Vista men som funkar fint i Windows 7. Man varnas om att den inte har stöd för Windows nya grafikkortsdrivrutinsarkitektur (jorå 32 bokstäver) WDDM. Jag har inte märkt några nackdelar, och för mig är det mer värt hursomhelst att få bra TV out.

    Ljudkort: Terratec Aureon 7.1 PCI (och säkerligen även 5.1 PCI)

    Problem: Terratec var ganska tidigt ut med 64-bitarsdrivrutiner till Vista, vilket förstås var bra. Från och med Windows 7 beta (fram till och med RTM) så har det dock funnits ett problem. Drivrutinerna funkar fint, men kontrollpanelen fungerar inte. När man startar den så hänger sig datorn i princip helt. Muspekaren går att flytta litegrann, om man har tålamod att vänta 5 minuter varje gång man rör musen. Jag misstänker att något i kontrollpanelen drar 100% CPU i själva drivrutinen, för inte ens Task Manager går att öppna.

    Lösning: Efter lite efterforskning så kom jag fram till att Terratec har byggt sina ljudkort med kretsar från Taiwanesiska C Media. I Aureon 7.1 PCI sitter en modifierad C Media-krets som heter 8738. Det visar sig att C Medias egen referensdrivrutin, som också innehåller kontrollpanelen, fungerar fint i Windows 7 x64! Tips till OEM-tillverkare: lägg inte in en massa egna onödiga grejer i drivrutinerna om ni inte orkar hålla jämna steg med originaltillverkaren.

    Externt ljudkort (m.m.): Line6 Monkey

    Problem: Line6 är ett företag som gör väldigt trevliga gitarrprodukter, t.ex. multieffekter som Pod X3 Live och USB-ljudkort för gitarrer som Toneport UX2. I Windows 7 x64 funkar dock inte nedladdnings- och inställningsprogrammet Monkey. Drivrutinerna för USB funkar, så att spela in o.s.v. går bra, men att ändra inställningar, uppdatera firmware och annat går inte.

    Lösning: Problemet uppstod i Monkey 1.27. Installerar man version 1.26 så funkar allt fint! All annan Line6-programvara kan installeras i senaste version, bara man behåller version 1.26 av Monkey. Line6 behöver jobba lite på drivrutinerna också – även om de i regel funkar så har jag fått flera blåskärmar där det uttryckligen står att det är deras drivrutiner som har kraschat.

    Windows Media Center

    Problem: OK, Media Center är ingen hårdvara och det är inte drivrutiner som krånglar – men det kan passa här ändå. Media Center sägs ha stöd för MKV-filer. De funkar dock inte att spela upp. Dessutom kan man hur många codecs och filter man än installerar (t.ex. ffdshow och directvobsub) inte få till textning till filmer i Media Center, trots att det fungerar i Windows Media Player.

    Lösning: Orsaken till att ffdshow och andra codecs och filter inte fungerar i Media Center är att Windows 7 innehåller en helt ny arkitektur för video- och ljudavkodning som heter Microsoft Media Foundation (MMF). MMF använder helt enkelt inte DirectShows codecs och filters. Det enklaste sättet att få Media Center att använda DirectShow är genom att ladda ner ett codec-paket som heter Windows 7 Codecs. I normala fall skulle jag avråda från codec-paket, men i det här fallet är det så komplicerat att få till själv att Windows 7 Codecs är enklare. Dessutom finns det en utmärkt kontrollpanel där du kan bestämma själv helt och hållet vilka komponenter som ska användas (glöm inte X64 components om du kör 64-bitars Windows 7). Finns det några nackdelar med denna lösning? Jag tycker själv att Windows 7s inbyggda MMF-codecs ger bättre bildkvalitet än t.ex. ffdshow. Om du inte absolut behöver textning t.ex. så kan du lika gärna fortsätta använda MMF. Knäppast av allt är att MMF faktiskt klarar HD-formatet x264 med bravur, men behöver en s.k. splitter för att klara filformatet MKV. En sån splitter ingår också i Windows 7 Codecs.

    Till ovanstående tillverkares försvar ska sägas att Windows 7 inte släpps officiellt förrän om 17 dagar, 22 oktober. Än så länge är det bara vi som är Microsoft-partners som har tillgång till RTM-versionen.

    Har du några egna tips på saker som har krånglat när du har installerat Windows 7? Ännu bättre – har du lösningen på de problemen? Maila till tekniken.nu så ska vi se till att dina tips kommer resten av världen tillgodo också!

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Drivrutiner, uppgraderarens gissel - tips på fyra drivrutinsproblem i Windows 7 och deras lösningar", + "meta_description": "", + "author_id": 6, + "created_at": 1254740049000, + "created_by": 6, + "updated_at": 1254740049000, + "updated_by": 6, + "published_at": 1254740049000, + "published_by": 6 + }, + { + "id": 347, + "title": "Marketplace för Windows Mobile - första intrycket", + "slug": "marketplace-for-windows-mobile---forsta-intrycket", + "markdown": "\r\n\r\nIdag släpps de första officiella Windows Mobile 6.5-telefonerna i världen och i samband med detta släpps även Marketplace som är Microsofts motsvarighet till iPhones App Store. Här kommer mitt första famlande intryck.\r\n\r\n\r\n\r\nInstallationen är på c:a 600 kb och tar nån sekund att installera via wifi och efter några sekunders koll på att man har den senaste versionen är det bara att börja surfa runt bland de applikationer som finns.\r\n\r\nFörmodligen är det lite problem med att det är alltför många som kopplar upp sig alltför snabbt just nu då jag fått trycka retry hela tiden. Jag har inte den officiella 6.5-versionen så en del av problemen jag märkt kan förstås komma från buggar i telefonen också.\r\n\r\nNär man väl hittat nåt program/spel som känns lockande får man logga in med sitt Live-konto för att att köpa/ladda ner. Här fick jag också massa felmedelanden om att marketplace inte kunde komma åt Windows Live ID-tjänsten så det märks att det är första dagenn och dom inte räknat med trycket. Det släppte efter stund och jag fick ett nytt litet biljardspel i telefonen. Installationen gick smärtfritt och programmet dök upp i startmenyn under games så det var bara att börja spela direkt.\r\n\r\nSjälva kategoriseringen och presentationen av de olika programmen är enkelt och tydligt, men det är alldeles för få alternativ och framförallt gratis såna. Just nu är ju förstås en del kategorier rätt meningslösa som t.ex. ”Most popular” och ”What’s new” , men i övrigt så verkar det som den är anpassad för att behålla en vettig struktur även när det blir tusentals applikationer då det går att kategorisera även spel i flera underkategorier.\r\n\r\nEnligt de andra tester jag läst verkar utbudet variera stort mellan olika länder. Då mitt rom är nån engelsk variant är det svårt att säga om det utbud jag ser kommer att gälla i den svenska versionen, men just nu finns c:a 70 spel och ett 90 tal applikationer i olika kategorier vilket förhoppningsvis kommer att öka snabbt nu när den faktiskt släppts. Rykten har snackat om att det skulle finnas c:a 600 vid lanseringen så det finns fortfarande möjlighet att det ser bättre ut redan imorgon.\r\n\r\nDå alla andra på jobbet kör iPhone (utom en rebell som valt Android) som har haft en bra appstore under lång tid och även nykomligen Android har redan en bra online-butik, så känns det skönt att äntligen som numera ensam Windows Mobile-kille ha en central plats att hitta nåt kul till min telefon. Tiden får avgöra om jag kommer fortsätta vara den som har den tråkiga telefonen utan vettigt utbud eller om jag också kommer bli den som sitter och pillar på telefonen vid varje lugn stund för att få min nästa underhållningsfix.\r\n\r\n![Bild](http://tekniken.nu/uploads/633904275575798668-windows-marketplace-ofc-03.jpg)", + "html": "

    Idag släpps de första officiella Windows Mobile 6.5-telefonerna i världen och i samband med detta släpps även Marketplace som är Microsofts motsvarighet till iPhones App Store. Här kommer mitt första famlande intryck.

    Installationen är på c:a 600 kb och tar nån sekund att installera via wifi och efter några sekunders koll på att man har den senaste versionen är det bara att börja surfa runt bland de applikationer som finns.

    Förmodligen är det lite problem med att det är alltför många som kopplar upp sig alltför snabbt just nu då jag fått trycka retry hela tiden. Jag har inte den officiella 6.5-versionen så en del av problemen jag märkt kan förstås komma från buggar i telefonen också.

    När man väl hittat nåt program/spel som känns lockande får man logga in med sitt Live-konto för att att köpa/ladda ner. Här fick jag också massa felmedelanden om att marketplace inte kunde komma åt Windows Live ID-tjänsten så det märks att det är första dagenn och dom inte räknat med trycket. Det släppte efter stund och jag fick ett nytt litet biljardspel i telefonen. Installationen gick smärtfritt och programmet dök upp i startmenyn under games så det var bara att börja spela direkt.

    Själva kategoriseringen och presentationen av de olika programmen är enkelt och tydligt, men det är alldeles för få alternativ och framförallt gratis såna. Just nu är ju förstås en del kategorier rätt meningslösa som t.ex. ”Most popular” och ”What’s new” , men i övrigt så verkar det som den är anpassad för att behålla en vettig struktur även när det blir tusentals applikationer då det går att kategorisera även spel i flera underkategorier.

    Enligt de andra tester jag läst verkar utbudet variera stort mellan olika länder. Då mitt rom är nån engelsk variant är det svårt att säga om det utbud jag ser kommer att gälla i den svenska versionen, men just nu finns c:a 70 spel och ett 90 tal applikationer i olika kategorier vilket förhoppningsvis kommer att öka snabbt nu när den faktiskt släppts. Rykten har snackat om att det skulle finnas c:a 600 vid lanseringen så det finns fortfarande möjlighet att det ser bättre ut redan imorgon.

    Då alla andra på jobbet kör iPhone (utom en rebell som valt Android) som har haft en bra appstore under lång tid och även nykomligen Android har redan en bra online-butik, så känns det skönt att äntligen som numera ensam Windows Mobile-kille ha en central plats att hitta nåt kul till min telefon. Tiden får avgöra om jag kommer fortsätta vara den som har den tråkiga telefonen utan vettigt utbud eller om jag också kommer bli den som sitter och pillar på telefonen vid varje lugn stund för att få min nästa underhållningsfix.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Marketplace för Windows Mobile - första intrycket", + "meta_description": "", + "author_id": 1089, + "created_at": 1254830756000, + "created_by": 1089, + "updated_at": 1254830756000, + "updated_by": 1089, + "published_at": 1254830756000, + "published_by": 1089 + }, + { + "id": 352, + "title": "Remote Desktop på iPhone - nu med stöd för Vista och Windows 7", + "slug": "remote-desktop-pa-iphone---nu-med-stod-for-vista-och-windows-7", + "markdown": "\r\n\r\nEn av de första applikationerna i App Store var Remote Desktop, ett fjärrstyrningsprogram för Windows. Tyvärr fungerade det bara på Windows XP och Server 2003, eftersom det från och med Vista och Server 2008 finns en helt ny version av fjärrskrivbordet som använder ett annat protokoll. Glädjande nog kom en uppgradering igår som klarar både Vista, Windows 7 och Server 2008!\r\n\r\n\r\n\r\nDet fungerar förvånande väl att fjärrstyra en dator trots iPhonens mycket mindre skärm och även över 3G. Det kanske inte är ett arbetsverktyg som jag skulle använda dagligen, men med iPhonens inbyggda VPN-stöd så är detta ett bra katastrofkit där man kan fjärrstyra en server varifrån som helst.\r\n\r\nFinns i gratis liteversion och en betalversion för 45 kronor som har bättre stöd för tangentbord och mus.\r\n\r\nRemote Desktop Lite: http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=288362576&mt=8\r\n\r\nRemote Desktop: http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=288362053&mt=8\r\n\r\n![Bild](http://tekniken.nu/uploads/633906773883473482-RDP.PNG)", + "html": "

    En av de första applikationerna i App Store var Remote Desktop, ett fjärrstyrningsprogram för Windows. Tyvärr fungerade det bara på Windows XP och Server 2003, eftersom det från och med Vista och Server 2008 finns en helt ny version av fjärrskrivbordet som använder ett annat protokoll. Glädjande nog kom en uppgradering igår som klarar både Vista, Windows 7 och Server 2008!

    Det fungerar förvånande väl att fjärrstyra en dator trots iPhonens mycket mindre skärm och även över 3G. Det kanske inte är ett arbetsverktyg som jag skulle använda dagligen, men med iPhonens inbyggda VPN-stöd så är detta ett bra katastrofkit där man kan fjärrstyra en server varifrån som helst.

    Finns i gratis liteversion och en betalversion för 45 kronor som har bättre stöd för tangentbord och mus.

    Remote Desktop Lite: http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=288362576&mt=8

    Remote Desktop: http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=288362053&mt=8

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Remote Desktop på iPhone - nu med stöd för Vista och Windows 7", + "meta_description": "", + "author_id": 6, + "created_at": 1255080588000, + "created_by": 6, + "updated_at": 1255080588000, + "updated_by": 6, + "published_at": 1255080588000, + "published_by": 6 + }, + { + "id": 354, + "title": "Testat: Solid State Drive OCZ Vertex 30gb", + "slug": "testat-solid-state-drive-ocz-vertex-30gb", + "markdown": "\r\n\r\nPriserna för Solid State-hårddiskar börjar äntligen närma sig rimliga nivåer. Förra gången vi testade en SSD var det med tveksamma resultat. Överföringshastigheten var snabb, oftast. Ibland tog det dock stopp och disken verkade vänta på något innan den tog fart igen. Att använda Outlook (i cached Exchange mode) ställde till stora problem med fler stopp än annars.\r\n\r\nDen SSD vi testade då var byggd av Samsung, inbyggd i en Dell-laptop. Vi har nu haft möjlighet att testa en disk från OCZ. Vårt testexemplar är på 30gb vilket verkligen är på gränsen om man vill köra Windows 7 som tar upp hälften av utrymmet direkt.\r\n\r\nDisken känns som ett kvalitétsbygge med stilrent svart metallchassi. Den följer standard och passar perfekt i 2,5” diskplatser.\r\n\r\nMitt första test var att koppla in hårddisken i en av våra äldre laptops och installera Windows 7. Uppstarten av Windows tar runt 20 sekunder från avstängd till fungerande start-meny. Hastigheten i mina första tester blev inte så extrem som jag trodde, disken nådde taket vid 130mb/sek.  Jag installerade om och testade i gamla Windows XP, samma resultat. Insåg att den gamla datorn kör SATA I, inte SATA II, det var alltså antagligen styrenheten för hårddisken som satte stopp.\r\n\r\nOCZ Vertex 30gb, Windows 7 x64 (SATA150):\r\n\r\n\r\n\r\nSiffrorna ovan är fortfarande extremt imponerande för att vara i en laptop. Vanliga mekaniska hårddiskar i laptops brukar snitta runt 65mb/sek.  I mitt tycke är det alltså en väldigt bra uppgradering även för äldre laptops, givet att de är starka nog för Windows 7 i övrigt. Förutom hastighet har vi även två andra stora fördelar mot mekaniska diskar, strömförbrukning och stötkänslighet.\r\n\r\nJag kopplade därefter in OCZ-disken i min stationära dator av modernare snitt. Siffrorna såg genast bättre ut. Läshastigheten ligger stadigt på 220mb/sek och skrivhastigheten på 150mb/sek.\r\n\r\nOCZ Vertex 30gb, Windows 7 x64 (nästan exakt samma i övriga operativsystem)\r\n\r\n\r\n\r\nJag testade även i Windows Server 2008 R2, Windows 7 x86 och Windows XP, resultaten rör sig knappt mellan de olika operativsystemen. Värt att nämna är att inget av operativsystemen kräver drivrutiner för installation på SSD, den känns igen som vilken SATA-hårddisk som helst. Jag testade också Outlook i cached Exchange mode vilket nu fungerade fläckfritt!\r\n\r\nSom jämförelse har jag min vanliga Samsung Spinpoint 1TB hårddisk som jag använder i vanliga fall. Samsung-hårddisken ligger ganska stadigt på 90mb/sek, mindre än halva läshastigheten alltså! Det är dock inte bara läs- och skrivhastighet som avgör hur snabbt det går, intressant är också accesstiden, det vill säga tiden det tar för disken att hitta rätt data innan den börjar läsa eller skriva. För SSD disken tar det i snitt 0,2ms där det för min mekaniska disk springer iväg till 12ms, vilket gör en del skillnad när det handlar om att läsa fragmenterad data.\r\n\r\nSamsung Spinpoint 1TB, Windows 7 x64\r\n\r\n\r\n\r\nFrågan kvarstår dock huruvida det är intressant att använda hårddisken på daglig basis. En SSD hårddisk klarar av ett begränsat antal skrivningar till samma yta på disken. Detta löser tillverkarna genom att markera de datablock som blivit för välanvända så att de inte skrivs till igen. Detta gör att disken krymper sakta men säkert om den används mycket.\r\n\r\nDet gäller därför att se till att det inte skrivs onödig data till din SSD. Som onödigt räknas nu defragmentering då SSD har så kort accesstid oavsett var på disken datan ligger. Se också till att ha tillräckligt med RAM i datorn så att en Pagefile inte behövs på hårddisken, detta går då att stänga av i Windows.\r\n\r\nJag rekommenderar också Windows 7 (eller Server 2008 R2) som har inbyggt stöd för funktionen TRIM, något som saknas i alla tidigare operativsystem. Mer om TRIM-funktionen på Wikipedia.\r\n\r\nDen disken jag har behövde firmware-uppdateras, något som krävde att all data togs bort och att man vet vad man sysslar med. Uppgraderingen skulle förbättra stödet för TRIM-kommandot och lösa en del fel.\r\n\r\nSom slutsats kan sägas att tekniken är i princip mogen för gemene man. Det är fortfarande några småsaker som uppdatering och fininställningar i windows som gör att det fortfarande är en entusiastprodukt.\r\n\r\nFörutom det har vi förstås priset, cirka 25kr/gb jämfört med 0,7kr/gb för en mekanisk hårddisk. Inom ett halvår tror jag dock att tekniken kommer att vara helt klar för användning, både vad gäller pris och användarvänlighet.\r\n\r\n![Bild](http://tekniken.nu/uploads/633909521605255632-image001.png)", + "html": "

    Priserna för Solid State-hårddiskar börjar äntligen närma sig rimliga nivåer. Förra gången vi testade en SSD var det med tveksamma resultat. Överföringshastigheten var snabb, oftast. Ibland tog det dock stopp och disken verkade vänta på något innan den tog fart igen. Att använda Outlook (i cached Exchange mode) ställde till stora problem med fler stopp än annars.

    Den SSD vi testade då var byggd av Samsung, inbyggd i en Dell-laptop. Vi har nu haft möjlighet att testa en disk från OCZ. Vårt testexemplar är på 30gb vilket verkligen är på gränsen om man vill köra Windows 7 som tar upp hälften av utrymmet direkt.

    Disken känns som ett kvalitétsbygge med stilrent svart metallchassi. Den följer standard och passar perfekt i 2,5” diskplatser.

    Mitt första test var att koppla in hårddisken i en av våra äldre laptops och installera Windows 7. Uppstarten av Windows tar runt 20 sekunder från avstängd till fungerande start-meny. Hastigheten i mina första tester blev inte så extrem som jag trodde, disken nådde taket vid 130mb/sek.  Jag installerade om och testade i gamla Windows XP, samma resultat. Insåg att den gamla datorn kör SATA I, inte SATA II, det var alltså antagligen styrenheten för hårddisken som satte stopp.

    OCZ Vertex 30gb, Windows 7 x64 (SATA150):

    Siffrorna ovan är fortfarande extremt imponerande för att vara i en laptop. Vanliga mekaniska hårddiskar i laptops brukar snitta runt 65mb/sek.  I mitt tycke är det alltså en väldigt bra uppgradering även för äldre laptops, givet att de är starka nog för Windows 7 i övrigt. Förutom hastighet har vi även två andra stora fördelar mot mekaniska diskar, strömförbrukning och stötkänslighet.

    Jag kopplade därefter in OCZ-disken i min stationära dator av modernare snitt. Siffrorna såg genast bättre ut. Läshastigheten ligger stadigt på 220mb/sek och skrivhastigheten på 150mb/sek.

    OCZ Vertex 30gb, Windows 7 x64 (nästan exakt samma i övriga operativsystem)

    Jag testade även i Windows Server 2008 R2, Windows 7 x86 och Windows XP, resultaten rör sig knappt mellan de olika operativsystemen. Värt att nämna är att inget av operativsystemen kräver drivrutiner för installation på SSD, den känns igen som vilken SATA-hårddisk som helst. Jag testade också Outlook i cached Exchange mode vilket nu fungerade fläckfritt!

    Som jämförelse har jag min vanliga Samsung Spinpoint 1TB hårddisk som jag använder i vanliga fall. Samsung-hårddisken ligger ganska stadigt på 90mb/sek, mindre än halva läshastigheten alltså! Det är dock inte bara läs- och skrivhastighet som avgör hur snabbt det går, intressant är också accesstiden, det vill säga tiden det tar för disken att hitta rätt data innan den börjar läsa eller skriva. För SSD disken tar det i snitt 0,2ms där det för min mekaniska disk springer iväg till 12ms, vilket gör en del skillnad när det handlar om att läsa fragmenterad data.

    Samsung Spinpoint 1TB, Windows 7 x64

    Frågan kvarstår dock huruvida det är intressant att använda hårddisken på daglig basis. En SSD hårddisk klarar av ett begränsat antal skrivningar till samma yta på disken. Detta löser tillverkarna genom att markera de datablock som blivit för välanvända så att de inte skrivs till igen. Detta gör att disken krymper sakta men säkert om den används mycket.

    Det gäller därför att se till att det inte skrivs onödig data till din SSD. Som onödigt räknas nu defragmentering då SSD har så kort accesstid oavsett var på disken datan ligger. Se också till att ha tillräckligt med RAM i datorn så att en Pagefile inte behövs på hårddisken, detta går då att stänga av i Windows.

    Jag rekommenderar också Windows 7 (eller Server 2008 R2) som har inbyggt stöd för funktionen TRIM, något som saknas i alla tidigare operativsystem. Mer om TRIM-funktionen på Wikipedia.

    Den disken jag har behövde firmware-uppdateras, något som krävde att all data togs bort och att man vet vad man sysslar med. Uppgraderingen skulle förbättra stödet för TRIM-kommandot och lösa en del fel.

    Som slutsats kan sägas att tekniken är i princip mogen för gemene man. Det är fortfarande några småsaker som uppdatering och fininställningar i windows som gör att det fortfarande är en entusiastprodukt.

    Förutom det har vi förstås priset, cirka 25kr/gb jämfört med 0,7kr/gb för en mekanisk hårddisk. Inom ett halvår tror jag dock att tekniken kommer att vara helt klar för användning, både vad gäller pris och användarvänlighet.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Testat: Solid State Drive OCZ Vertex 30gb", + "meta_description": "", + "author_id": 1088, + "created_at": 1255355360000, + "created_by": 1088, + "updated_at": 1255355360000, + "updated_by": 1088, + "published_at": 1255355360000, + "published_by": 1088 + }, + { + "id": 355, + "title": "MDI får känselspröt", + "slug": "mdi-far-kanselsprot", + "markdown": "\r\n\r\nNu börjar det hända saker på ett av de mest eftersatta områdena: hur vi som människor faktiskt interagerar med våra datorer - MDI.\r\n\r\nFärgskärmen och datormusen är ju de största genombrotten på detta område men man kan ju knappast säga att dessa är nya uppfinningar. Skärmen har blivit plattare och musen något mer ergonomisk men så mycket mer har inte hänt.\r\n\r\nDe senaste åren har det dock börjat röra på sig, Apple har banat väg för touchskärmen genom sin iPod Touch och iPhone, mobiltillverkare världen över har varit snabba att haka på men för de stationära datorerna har vi ännu inte sett så mycket av denna touch-hysteri.\r\n\r\nDetta tills nu då det i ganska rask takt kommit upp ett par nya intressanta saker.\r\n\r\nApple har lämnat in en patentansökan om ett helt nytt gränssnitt där man använder alla 10 fingrar för att styra/kommunicera med sin dator10/GUI har tagit fram ett helt nytt sätt att hantera skärmen genom att man med sina händer och i olika finger kombinationer utför olika kommandon\r\n\r\nDessa två tillsammans gör att det nu känns som att vi faktiskt är på väg att ta nästa steg i interaktionen med våra datorer. När man tänker efter så är det ganska begränsande att vi i vårat dagliga liv inte kan använda oss av alla de dimensioner vi har när vi använder oss av våra datorer. Detta område måste förbättras och jag tror att det kommer att hända mycket den närmaste tiden inom MDI.\r\n\r\nApples patentansökan gås igenom här: http://www.engadget.com/2009/10/02/apple-seeks-to-take-multitouch-where-its-never-been-before-in-n/\r\n\r\n10/GUI har en intressant video här: http://ignco.de/199\r\n\r\n![Bild](http://tekniken.nu/uploads/633911970928897582-apple-multitouch-app-2.jpg)", + "html": "

    Nu börjar det hända saker på ett av de mest eftersatta områdena: hur vi som människor faktiskt interagerar med våra datorer - MDI.

    Färgskärmen och datormusen är ju de största genombrotten på detta område men man kan ju knappast säga att dessa är nya uppfinningar. Skärmen har blivit plattare och musen något mer ergonomisk men så mycket mer har inte hänt.

    De senaste åren har det dock börjat röra på sig, Apple har banat väg för touchskärmen genom sin iPod Touch och iPhone, mobiltillverkare världen över har varit snabba att haka på men för de stationära datorerna har vi ännu inte sett så mycket av denna touch-hysteri.

    Detta tills nu då det i ganska rask takt kommit upp ett par nya intressanta saker.

    1. Apple har lämnat in en patentansökan om ett helt nytt gränssnitt där man använder alla 10 fingrar för att styra/kommunicera med sin dator
    2. 10/GUI har tagit fram ett helt nytt sätt att hantera skärmen genom att man med sina händer och i olika finger kombinationer utför olika kommandon

    Dessa två tillsammans gör att det nu känns som att vi faktiskt är på väg att ta nästa steg i interaktionen med våra datorer. När man tänker efter så är det ganska begränsande att vi i vårat dagliga liv inte kan använda oss av alla de dimensioner vi har när vi använder oss av våra datorer. Detta område måste förbättras och jag tror att det kommer att hända mycket den närmaste tiden inom MDI.

    Apples patentansökan gås igenom här: http://www.engadget.com/2009/10/02/apple-seeks-to-take-multitouch-where-its-never-been-before-in-n/

    10/GUI har en intressant video här: http://ignco.de/199

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "MDI får känselspröt", + "meta_description": "", + "author_id": 1091, + "created_at": 1255600292000, + "created_by": 1091, + "updated_at": 1255600292000, + "updated_by": 1091, + "published_at": 1255600292000, + "published_by": 1091 + }, + { + "id": 356, + "title": "Synkronisera filer mellan alla dina datorer och iPhone", + "slug": "synkronisera-filer-mellan-alla-dina-datorer-och-iphone", + "markdown": "\r\n\r\nDropbox är en webbtjänst för att lagra filer. En webbdisk är ju inte direkt något revolutionerande, storheten med Dropbox är istället hur allt är implementerat och hur enkelt det är att använda. Såhär funkar det:\r\n## Webbdelen\r\nDu har ett konto på Dropbox. 2 GB får du gratis, för $10 per månad får du 50GB och för $20 får du 100GB. Inte nog med att Dropbox lagrar dina filer, även gamla versioner sparas (så långt utrymmet räcker) vilket gör att du alltid kan få tillbaka raderade filer. Utöver säker lagring för dig själv så kan du dela ut valda foldrar så att folk i omvärlden kan hämta filer. Även inbyggd fotoalbumfunktion finns.\r\n## Datordelen\r\nPå datorn installerar du Dropbox applikation, som finns för Windows, MacOSX och Linux. Applikationen skapar en magisk folder – när man lägger filer i den mappen så laddas de automatiskt upp till Dropbox. Om du har applikationen installerad på flera datorer så synkas alla uppladdade filer även till Dropbox-mappen på de datorerna.\r\n\r\n\r\n## iPhone-delen\r\nDropbox har också en gratis iPhone-applikation. Med den så kan man enkelt komma åt alla filer som är synkade med Dropbox. Om man har filer i lämpliga format (t.ex. MP3) så kan man lyssna på dem direkt från applikationen. Man kan också ta bilder med mobilkameran och synka till Dropbox.\r\n\r\n\r\n\r\nTillsammans blir detta lösningen på en mängd problem som man stöter på i sin datorvardag: hur ska man lätt dela med sig av filer som är för stora för epost, hur kommer man lätt åt viktiga filer på någon annans dator och hur tar man lättast med sig dokument på telefonen.\r\n\r\nOm du vill testa kan du göra det här:https://www.getdropbox.com/referrals/NTI1MDgzNzQ5. Om du använder den länken så kommer jag att få lite extra utrymme i min Dropbox (och även du som registrerar dig tror jag).\r\n\r\n![Bild](http://tekniken.nu/uploads/Dropbox.png)", + "html": "

    Dropbox är en webbtjänst för att lagra filer. En webbdisk är ju inte direkt något revolutionerande, storheten med Dropbox är istället hur allt är implementerat och hur enkelt det är att använda. Såhär funkar det:

    Webbdelen

    Du har ett konto på Dropbox. 2 GB får du gratis, för $10 per månad får du 50GB och för $20 får du 100GB. Inte nog med att Dropbox lagrar dina filer, även gamla versioner sparas (så långt utrymmet räcker) vilket gör att du alltid kan få tillbaka raderade filer. Utöver säker lagring för dig själv så kan du dela ut valda foldrar så att folk i omvärlden kan hämta filer. Även inbyggd fotoalbumfunktion finns.

    Datordelen

    På datorn installerar du Dropbox applikation, som finns för Windows, MacOSX och Linux. Applikationen skapar en magisk folder – när man lägger filer i den mappen så laddas de automatiskt upp till Dropbox. Om du har applikationen installerad på flera datorer så synkas alla uppladdade filer även till Dropbox-mappen på de datorerna.

    iPhone-delen

    Dropbox har också en gratis iPhone-applikation. Med den så kan man enkelt komma åt alla filer som är synkade med Dropbox. Om man har filer i lämpliga format (t.ex. MP3) så kan man lyssna på dem direkt från applikationen. Man kan också ta bilder med mobilkameran och synka till Dropbox.

    Tillsammans blir detta lösningen på en mängd problem som man stöter på i sin datorvardag: hur ska man lätt dela med sig av filer som är för stora för epost, hur kommer man lätt åt viktiga filer på någon annans dator och hur tar man lättast med sig dokument på telefonen.

    Om du vill testa kan du göra det här:https://www.getdropbox.com/referrals/NTI1MDgzNzQ5. Om du använder den länken så kommer jag att få lite extra utrymme i min Dropbox (och även du som registrerar dig tror jag).

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Synkronisera filer mellan alla dina datorer och iPhone", + "meta_description": "", + "author_id": 6, + "created_at": 1255607821000, + "created_by": 6, + "updated_at": 1255607821000, + "updated_by": 6, + "published_at": 1255607821000, + "published_by": 6 + }, + { + "id": 357, + "title": "Android 2.0 får inbyggt stöd för Active Sync", + "slug": "android-20-far-inbyggt-stod-for-active-sync", + "markdown": "\r\n\r\nNär första versionen av Android släpptes var vår största kritik att inbyggt stöd för Exchange Active Sync saknades. Cyniska som vi är antar vi att detta var ett medvetet val från Google som hellre ville tvinga över användarna till Googles företagstjänster. Tredjepartsprodukter har visserligen fyllt tomrummet, och telefontillverkaren HTC insåg snabbt att deras kundsegment inte ens skulle överväga produkten om Active Sync inte fanns med och byggde därför in eget Exchangestöd i sina Androidlurar.\r\n\r\nDen senaste tiden har Active Sync gjort stora nya landvinningar, framförallt iom att IBM valt plattformen för mobilsynk mot kommande versionen av Domino / Lotus Notes. Apple byggde också in Exchangestöd i sitt senaste operativ Snow Leopard och iPhone har sedan länge stöd för Active Sync. \r\n\r\nGoogle verkar nu också ha insett att en Smartphone utan Active Sync inte är så \"smart\", och bekräftar nu enligt mobilbloggen Brighthand att kommande version 2.0, även kallad Eclair, kommer ha inbyggt stöd för Active Sync. Bättre sent än aldrig!\r\n\r\nAndroid 2.0 har ännu inget bekräftat releasedatum, version 1.6 (Donut) har precis släppts.\r\n\r\n![Bild](http://tekniken.nu/uploads/androidlogo.png)", + "html": "

    När första versionen av Android släpptes var vår största kritik att inbyggt stöd för Exchange Active Sync saknades. Cyniska som vi är antar vi att detta var ett medvetet val från Google som hellre ville tvinga över användarna till Googles företagstjänster. Tredjepartsprodukter har visserligen fyllt tomrummet, och telefontillverkaren HTC insåg snabbt att deras kundsegment inte ens skulle överväga produkten om Active Sync inte fanns med och byggde därför in eget Exchangestöd i sina Androidlurar.

    Den senaste tiden har Active Sync gjort stora nya landvinningar, framförallt iom att IBM valt plattformen för mobilsynk mot kommande versionen av Domino / Lotus Notes. Apple byggde också in Exchangestöd i sitt senaste operativ Snow Leopard och iPhone har sedan länge stöd för Active Sync.

    Google verkar nu också ha insett att en Smartphone utan Active Sync inte är så \"smart\", och bekräftar nu enligt mobilbloggen Brighthand att kommande version 2.0, även kallad Eclair, kommer ha inbyggt stöd för Active Sync. Bättre sent än aldrig!

    Android 2.0 har ännu inget bekräftat releasedatum, version 1.6 (Donut) har precis släppts.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Android 2.0 får inbyggt stöd för Active Sync?", + "meta_description": "", + "author_id": 1085, + "created_at": 1255950961000, + "created_by": 1085, + "updated_at": 1255950961000, + "updated_by": 1085, + "published_at": 1255950961000, + "published_by": 1085 + }, + { + "id": 361, + "title": "Äntligen ny modell för e-legitimationer", + "slug": "antligen-ny-modell-for-e-legitimationer", + "markdown": "\r\n\r\nDen statliga E-delegationen har nu kommit med sitt förslag till hur e-legitimationerna ska fungera i framtiden. De beskriver dagens system som framgångsrikt men samtidigt behäftat med en rad problem. Jag kan bara hålla med, på båda punkterna. Det är fantastiskt att man kan deklarera, ordna personbevis och logga in på t.ex. CSN med samma inloggning! Det är inte lika fullt fantastiskt att tekniken hela tiden springer ifrån BankID som utvecklar den tekniska lösningen, vilket gör att nya versioner av webbläsare och operativsystem plötsligt står helt utan möjlighet att använda e-legtimation. Ett annat problem i den gamla lösningen är att den som vill implementera inloggning med e-legitimation måste ha en fullständig lösning hos sig.\r\n\r\n\r\n\r\nDen nya lösningen kommer att bygga ut dagens lösning med s.k. federation av identiteter. Det betyder att man kan separera den som tillhandahåller en tjänst (t.ex. CSN) från den som tillhandahåller själva e-legitimationen och inloggningskontrollen (t.ex. banken). Det här är samma idé som när man kan använda sitt Facebook-konto för att skriva kommentarer på en blogg, utan att att bloggen själv behöver ha en hel Facebook-inloggning. Detta kommer göra det mycket billigare för fler aktörer att implementera inloggning med e-legitimation utan att de behöver lägga enorma pengar på att implementera och säkra upp inloggningen. I den nya modellen kommer det att både finnas statligaidentitetsintygsgivare som Skatteverket och privata, som bankerna. Man kommer också att kunna skaffa en e-tjänstelegitimation som man kan använda som representant för ett företag eller organisation. Alltihop kommer att byggas på den öppna standarden SAML. 2012 ska det nya systemet vara i drift.\r\n\r\nLäs mer om den nya lösningen på idg.se.\r\n\r\nJag är stolt över att bo i ett land som tar digitala identiteter och e-legitimationer på allvar, och detta känns som ett bra och naturligt nästa steg. Tänk om man hade bott i t.ex. USA där digitala deklarationer har stoppats (i Kalifornien) eftersom de ansågs förstöra marknaden för leverantörer av skatteprogram...\r\n\r\n![Bild](http://tekniken.nu/uploads/633915616288250630-leg.png)", + "html": "

    Den statliga E-delegationen har nu kommit med sitt förslag till hur e-legitimationerna ska fungera i framtiden. De beskriver dagens system som framgångsrikt men samtidigt behäftat med en rad problem. Jag kan bara hålla med, på båda punkterna. Det är fantastiskt att man kan deklarera, ordna personbevis och logga in på t.ex. CSN med samma inloggning! Det är inte lika fullt fantastiskt att tekniken hela tiden springer ifrån BankID som utvecklar den tekniska lösningen, vilket gör att nya versioner av webbläsare och operativsystem plötsligt står helt utan möjlighet att använda e-legtimation. Ett annat problem i den gamla lösningen är att den som vill implementera inloggning med e-legitimation måste ha en fullständig lösning hos sig.

    Den nya lösningen kommer att bygga ut dagens lösning med s.k. federation av identiteter. Det betyder att man kan separera den som tillhandahåller en tjänst (t.ex. CSN) från den som tillhandahåller själva e-legitimationen och inloggningskontrollen (t.ex. banken). Det här är samma idé som när man kan använda sitt Facebook-konto för att skriva kommentarer på en blogg, utan att att bloggen själv behöver ha en hel Facebook-inloggning. Detta kommer göra det mycket billigare för fler aktörer att implementera inloggning med e-legitimation utan att de behöver lägga enorma pengar på att implementera och säkra upp inloggningen. I den nya modellen kommer det att både finnas statligaidentitetsintygsgivare som Skatteverket och privata, som bankerna. Man kommer också att kunna skaffa en e-tjänstelegitimation som man kan använda som representant för ett företag eller organisation. Alltihop kommer att byggas på den öppna standarden SAML. 2012 ska det nya systemet vara i drift.

    Läs mer om den nya lösningen på idg.se.

    Jag är stolt över att bo i ett land som tar digitala identiteter och e-legitimationer på allvar, och detta känns som ett bra och naturligt nästa steg. Tänk om man hade bott i t.ex. USA där digitala deklarationer har stoppats (i Kalifornien) eftersom de ansågs förstöra marknaden för leverantörer av skatteprogram...

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Äntligen ny modell för e-legitimationer", + "meta_description": "att erbjuda inloggning med e-legitimation.", + "author_id": 6, + "created_at": 1255964828000, + "created_by": 6, + "updated_at": 1255964828000, + "updated_by": 6, + "published_at": 1255964828000, + "published_by": 6 + }, + { + "id": 362, + "title": "En bra PDF-lösning utan Adobe", + "slug": "en-bra-pdf-losning-utan-adobe", + "markdown": "\r\n\r\nPDF är på många sätt ett bra format – man kan göra dokument med typsnitt som inte finns på mottagarens dator, man kan göra formulära som läsaren kan fylla i etc. Det jag oftast vill göra med PDF-filer är:\r\n\r\nLäsa och skriva utFylla i formulär och sparaSkapa PDF:er genom att skriva ut, t.ex. från Word\r\n\r\nMed Adobes egen gratisläsare Adobe Reader så kan man göra en av punkterna ovan, hjälpligt. Att läsa PDF-filer och skriva ut dem fungerar bra. Däremot undrar man varför det krävs en enorm applikation som dessutom startar väldigt långsamt och har åtminstone en hjälpapplikation som ligger och tär på minnet hela tiden. Formulär kan man visserligen fylla i, men man kan inte spara de ifyllda värdena utan bara skriva ut det ifyllda formuläret och hoppas att man aldrig behöver gå tillbaka och göra ändringar.\r\n\r\nVill man kunna göra alla punkterna ovan behöver man köpversionen av Adobe Acrobat, det räcker med standardversionen som ”bara” kostar 4 625 SEK plus moms.\r\n\r\nAlternativa lösningar?\r\n\r\nFör att lösa punkt 1 och 2 rekommenderar jag Foxit Reader. Den är helt gratis, startar blixtsnabbt och klarar av att spara ifyllda formulär. Jag har hittills inte hittat någon PDF som den inte klarar, och den har precis som Adobe Reader plugins för de vanliga webbläsarna.\r\n\r\nFör att lösa punkt 3 rekommenderar jag Pdf995. Den installerar en skrivardrivrutin som gör att man kan skriva ut till en PDF-fil från alla program som kan skriva ut. Den är gratis i reklamversion, och vill man slippa de ganska irriterande reklamfönstren så köper man en licens för facila $10.\r\n\r\nBåda leverantörerna har också en massa andra PDF-produkter (som jag inte har testat):\r\n\r\nFoxit har förutom sin gratisläsare en massa olika paket för den som behöver skapa PDF:er, t.ex. PDF Creator för $30 som gör samma sak som PDF995, PDF Editor för $99 där man kan ändra i färdiga PDF-filer, PDF Form Designer för $79 för att skapa formulär och PDF Phantom för $129 som innehåller alltihop.\r\n\r\nPdf995 har PdfEdit995 för att skapa PDF:er (lite som Acrobat Distiller tror jag) och Signature995 för att signera dem – båda två samt Pdf995 ovan för totalt $20.\r\n\r\n![Bild](http://tekniken.nu/uploads/633916571915344785-Gnome-pdf.png)", + "html": "

    PDF är på många sätt ett bra format – man kan göra dokument med typsnitt som inte finns på mottagarens dator, man kan göra formulära som läsaren kan fylla i etc. Det jag oftast vill göra med PDF-filer är:

    1. Läsa och skriva ut
    2. Fylla i formulär och spara
    3. Skapa PDF:er genom att skriva ut, t.ex. från Word

    Med Adobes egen gratisläsare Adobe Reader så kan man göra en av punkterna ovan, hjälpligt. Att läsa PDF-filer och skriva ut dem fungerar bra. Däremot undrar man varför det krävs en enorm applikation som dessutom startar väldigt långsamt och har åtminstone en hjälpapplikation som ligger och tär på minnet hela tiden. Formulär kan man visserligen fylla i, men man kan inte spara de ifyllda värdena utan bara skriva ut det ifyllda formuläret och hoppas att man aldrig behöver gå tillbaka och göra ändringar.

    Vill man kunna göra alla punkterna ovan behöver man köpversionen av Adobe Acrobat, det räcker med standardversionen som ”bara” kostar 4 625 SEK plus moms.

    Alternativa lösningar?

    För att lösa punkt 1 och 2 rekommenderar jag Foxit Reader. Den är helt gratis, startar blixtsnabbt och klarar av att spara ifyllda formulär. Jag har hittills inte hittat någon PDF som den inte klarar, och den har precis som Adobe Reader plugins för de vanliga webbläsarna.

    För att lösa punkt 3 rekommenderar jag Pdf995. Den installerar en skrivardrivrutin som gör att man kan skriva ut till en PDF-fil från alla program som kan skriva ut. Den är gratis i reklamversion, och vill man slippa de ganska irriterande reklamfönstren så köper man en licens för facila $10.

    Båda leverantörerna har också en massa andra PDF-produkter (som jag inte har testat):

    Foxit har förutom sin gratisläsare en massa olika paket för den som behöver skapa PDF:er, t.ex. PDF Creator för $30 som gör samma sak som PDF995, PDF Editor för $99 där man kan ändra i färdiga PDF-filer, PDF Form Designer för $79 för att skapa formulär och PDF Phantom för $129 som innehåller alltihop.

    Pdf995 har PdfEdit995 för att skapa PDF:er (lite som Acrobat Distiller tror jag) och Signature995 för att signera dem – båda två samt Pdf995 ovan för totalt $20.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "En bra PDF-lösning utan Adobe", + "meta_description": " minne/hårddisk/CPU-tid!", + "author_id": 6, + "created_at": 1256060391000, + "created_by": 6, + "updated_at": 1256060391000, + "updated_by": 6, + "published_at": 1256060391000, + "published_by": 6 + }, + { + "id": 363, + "title": "Facebook Share får utökad funktionalitet", + "slug": "facebook-share-far-utokad-funktionalitet", + "markdown": "\r\n\r\nFacebook har länge givit webmasters (heter det fortfarande så?) och bloggare möjligheten att låta besökare enkelt lägga ut en länk till den aktuella sidan på Facebook via en liten FB-knapp. Enkel och självklar funktion som inte alls är unik för FB, faktum är att i stort sett alla sociala medier har något liknande. Nu har man dock gjort en vidareutveckling av funktionen så att ikonen dels kan visa hur många gånger sidan länkats på FB, och dessutom kan man få detaljerad info om hur många gånger länken kommenterats, gillats, klickats på etc. Ganska fiffigt!\r\n\r\nSå här ser nya Facebook Share ut:\r\n\r\n![Bild](http://tekniken.nu/uploads/facebook-logo.jpg)\r\n\r\n\r\n\r\n\r\nFör att få mer detaljerad statistik om länkens mottagande på FB integrerar \r\nman antingen mot Facebooks API och ropar på links.getStats eller så kör man \r\nen FQL fråga mot tabellen \r\nlink_stat. \r\nResultatet av API-anropet är XML-formaterat och gällande just denna sida ser det just nu ut så här:\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nDela gärna med dig av denna sida på FB och se hur informationen uppdateras i realtid ;)\r\n\r\n\r\nDen stora fördelen med detta är att man ganska enkelt kan koda en funktion som i realtid visar hur många som gillat en viss sida på FB.\r\n\r\n\r\nLäs mer om funktionen på FBs devblog:\r\n\r\n\r\nhttp://developers.facebook.com/news.php?blog=1&story=323\r\n", + "html": "

    Facebook har länge givit webmasters (heter det fortfarande så?) och bloggare möjligheten att låta besökare enkelt lägga ut en länk till den aktuella sidan på Facebook via en liten FB-knapp. Enkel och självklar funktion som inte alls är unik för FB, faktum är att i stort sett alla sociala medier har något liknande. Nu har man dock gjort en vidareutveckling av funktionen så att ikonen dels kan visa hur många gånger sidan länkats på FB, och dessutom kan man få detaljerad info om hur många gånger länken kommenterats, gillats, klickats på etc. Ganska fiffigt!

    Så här ser nya Facebook Share ut:





    För att få mer detaljerad statistik om länkens mottagande på FB integrerar
    man antingen mot Facebooks API och ropar på links.getStats eller så kör man
    en FQL fråga mot tabellen
    link_stat
    .
    Resultatet av API-anropet är XML-formaterat och gällande just denna sida ser det just nu ut så här:





    Dela gärna med dig av denna sida på FB och se hur informationen uppdateras i realtid ;)

    Den stora fördelen med detta är att man ganska enkelt kan koda en funktion som i realtid visar hur många som gillat en viss sida på FB.



    Läs mer om funktionen på FBs devblog:


    http://developers.facebook.com/news.php?blog=1&story=323

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Facebook Share får utökad funktionalitet", + "meta_description": "", + "author_id": 1085, + "created_at": 1256631600000, + "created_by": 1085, + "updated_at": 1256631600000, + "updated_by": 1085, + "published_at": 1256631600000, + "published_by": 1085 + }, + { + "id": 365, + "title": "Sanningen om Voddler", + "slug": "sanningen-om-voddler", + "markdown": "\r\n\r\nSom flera medier har rapporterat (bland annat Feber) om så ska videotjänsten Voddler släppas idag. Via bredbandsbolaget har jag fått ett konto och har nu kunnat testa det som kallas för film- och TV-världens Spotify. Vad är då intrycken?\r\n\r\n\r\n## Tekniken\r\nVoddler har en egen spelare som man installerar på sin dator. Som standard så startar den i fullskärm på den primära skärmen. Om man vill köra den på en sekundär skärm – som en ansluten TV – så får man ändra i genvägen som startar programmet (ta bort kommandoradsargumentet –fs så startar Voddler i fönsterläge). Om man drar fönstret till TV:n och trycker alt + enter så växlar applikationen till fullskärmsläge på rätt skärm, precis som XBMC. Bildytan blev alldeles för stor, men som tur var kan man ställa in hur stort overscan-området ska vara, precis som i XMBC. Hmm, en liten misstanke började gro i min hjärna. Sen hände det här:\r\n\r\n\r\n\r\nDagens scoop? Voddlers spelar ÄR XBMC. Jag tycker att det är ett oerhört smart val, att ta ett beprövat och omtyckt koncept och paketera istället för att bygga allt själv. T.o.m. min Media Center-fjärr fungerar hjälpligt i Voddler helt utan att jag behöver göra något.\r\n## Kvalitet och känsla\r\nKvaliteten på uppspelningen är riktigt bra, 720p streamat och ljud i AC3 5.1 som funkar fint att skicka direkt till hemmabioreceivern. Den känsla jag har haft med vanliga XBMC finns kvar, ibland är programmet lite oresponsivt och buggigt. Det kommer säkert bli bättre med tiden. Ett problem som är större och mer akut för Voddler tror jag är kapacitetsrelaterat på serversidan: ofta startar inte filmerna. Man får se några minuter reklam (som alltid funkar av någon anledning) och sen kommer man ofta bara tillbaka till filmmenyn. Om man trycker på att starta filmen igen får man vackert vänta sig igenom reklamen igen och hoppas att det går bättre. När filmen väl startar känns det ändå värt det, kvaliteten är som sagt riktigt grym och man kan pausa och spola etc som vanligt.\r\n## Utbudet\r\nUtbudet är ganska klent än så länge, men Voddler har enligt uppgift nyligen tecknat avtal med Paramount, Disney, Miramax, Touchstone och Dreamworks. Detta verkar lovande, men framgången kommer helt att hänga på utbudet och jag tror att det är extremt viktigt att få med stora TV-bolag så att TV-serier kommer med. Hur Voddler ska finansieras är lite oklart, men en gissning är att det blir samma modell som på Spotify; gratisvariant med reklam och en betalvariant utan. Med ett bra utbud har Voddler alla chanser att revolutionera den här branschen på samma sätt som Spotify har väckt skivindustrin ur sin bakåtsträvande dvala.\r\n\r\nFortsättningen blir spännande!\r\n\r\n![Bild](http://tekniken.nu/uploads/633923224003908505-voddler_1.jpg)", + "html": "

    Som flera medier har rapporterat (bland annat Feber) om så ska videotjänsten Voddler släppas idag. Via bredbandsbolaget har jag fått ett konto och har nu kunnat testa det som kallas för film- och TV-världens Spotify. Vad är då intrycken?

    Tekniken

    Voddler har en egen spelare som man installerar på sin dator. Som standard så startar den i fullskärm på den primära skärmen. Om man vill köra den på en sekundär skärm – som en ansluten TV – så får man ändra i genvägen som startar programmet (ta bort kommandoradsargumentet –fs så startar Voddler i fönsterläge). Om man drar fönstret till TV:n och trycker alt + enter så växlar applikationen till fullskärmsläge på rätt skärm, precis som XBMC. Bildytan blev alldeles för stor, men som tur var kan man ställa in hur stort overscan-området ska vara, precis som i XMBC. Hmm, en liten misstanke började gro i min hjärna. Sen hände det här:

    Dagens scoop? Voddlers spelar ÄR XBMC. Jag tycker att det är ett oerhört smart val, att ta ett beprövat och omtyckt koncept och paketera istället för att bygga allt själv. T.o.m. min Media Center-fjärr fungerar hjälpligt i Voddler helt utan att jag behöver göra något.

    Kvalitet och känsla

    Kvaliteten på uppspelningen är riktigt bra, 720p streamat och ljud i AC3 5.1 som funkar fint att skicka direkt till hemmabioreceivern. Den känsla jag har haft med vanliga XBMC finns kvar, ibland är programmet lite oresponsivt och buggigt. Det kommer säkert bli bättre med tiden. Ett problem som är större och mer akut för Voddler tror jag är kapacitetsrelaterat på serversidan: ofta startar inte filmerna. Man får se några minuter reklam (som alltid funkar av någon anledning) och sen kommer man ofta bara tillbaka till filmmenyn. Om man trycker på att starta filmen igen får man vackert vänta sig igenom reklamen igen och hoppas att det går bättre. När filmen väl startar känns det ändå värt det, kvaliteten är som sagt riktigt grym och man kan pausa och spola etc som vanligt.

    Utbudet

    Utbudet är ganska klent än så länge, men Voddler har enligt uppgift nyligen tecknat avtal med Paramount, Disney, Miramax, Touchstone och Dreamworks. Detta verkar lovande, men framgången kommer helt att hänga på utbudet och jag tror att det är extremt viktigt att få med stora TV-bolag så att TV-serier kommer med. Hur Voddler ska finansieras är lite oklart, men en gissning är att det blir samma modell som på Spotify; gratisvariant med reklam och en betalvariant utan. Med ett bra utbud har Voddler alla chanser att revolutionera den här branschen på samma sätt som Spotify har väckt skivindustrin ur sin bakåtsträvande dvala.

    Fortsättningen blir spännande!

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Sanningen om Voddler", + "meta_description": "", + "author_id": 6, + "created_at": 1256725599000, + "created_by": 6, + "updated_at": 1256725599000, + "updated_by": 6, + "published_at": 1256725599000, + "published_by": 6 + }, + { + "id": 366, + "title": "Google Maps Navigation", + "slug": "google-maps-navigation", + "markdown": "\r\n\r\nGoogle bekräftade igår att kommande Android 2.0 släpps med nya Google Maps Navigation, vilket i praktiken innebär att programmet byggs ut till en komplett GPS-mjukara. Google tar på så sätt på allvar upp kampen med giganter som bla TomTom, Garmin och Navigon.\r\n\r\nNytt är funktioner som sk \"turn-by-turn navigation\" dvs att programmet berättar när det är dags att svänga, röststyrning (endast på engelska inledningsvis), integration med Street View för att visa hur nästa sväng ser ut och ett antal andra fiffiga funktioner som demonstreras i videon nedan. Den stora konkurrensfördelen kommer nog dock bli de överlägsna sökfunktionerna som Google Maps har jämfört med konkurrenterna, att den kommer vara gratis skadar ju inte heller...\r\n\r\nGMN är än så länge bara bekräftat för Android 2.0, men förhoppningsvis lär inte iPhone-användarna bli lottlösa heller.\r\n\r\nLäs Googles pressrelease\r\n\r\nFotnot: TomToms aktie föll nästan 40% direkt efter Googles pressrelease.\r\n\r\n![Bild](http://tekniken.nu/uploads/633924107792447553-google-maps-navigation.png)\r\n\r\n\r\n", + "html": "

    Google bekräftade igår att kommande Android 2.0 släpps med nya Google Maps Navigation, vilket i praktiken innebär att programmet byggs ut till en komplett GPS-mjukara. Google tar på så sätt på allvar upp kampen med giganter som bla TomTom, Garmin och Navigon.

    Nytt är funktioner som sk \"turn-by-turn navigation\" dvs att programmet berättar när det är dags att svänga, röststyrning (endast på engelska inledningsvis), integration med Street View för att visa hur nästa sväng ser ut och ett antal andra fiffiga funktioner som demonstreras i videon nedan. Den stora konkurrensfördelen kommer nog dock bli de överlägsna sökfunktionerna som Google Maps har jämfört med konkurrenterna, att den kommer vara gratis skadar ju inte heller...

    GMN är än så länge bara bekräftat för Android 2.0, men förhoppningsvis lär inte iPhone-användarna bli lottlösa heller.

    Läs Googles pressrelease

    Fotnot: TomToms aktie föll nästan 40% direkt efter Googles pressrelease.



    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Google Maps Navigation", + "meta_description": "", + "author_id": 1085, + "created_at": 1256813978000, + "created_by": 1085, + "updated_at": 1256813978000, + "updated_by": 1085, + "published_at": 1256813978000, + "published_by": 1085 + }, + { + "id": 367, + "title": "Voddler ur användarperspektiv", + "slug": "voddler-ur-anvandarperspektiv", + "markdown": "\r\n\r\nHar tv- och filmindustrin äntligen vaknat?\r\n\r\nJag upplever att tv- film- och musikindustrin är hopplöst fast i det förgångna. De jagar folk som laddar ner deras material olagligt. Att de vill ha betalt för sina alster är förvisso inte konstigt, men det märkliga är att de har så svårt att se teknikens möjligheter. Det känns som att de fortfarande vill ha kvar vinylskivor, kassettband och VHS-band. Om de bara kunde lära sig att samarbeta med nya tekniska aktörer som exempelvis The Pirate Bay, som ju erbjuder en distributionsform som på många sätt är mycket smidigare och snabbare än de traditionella distributionskanalerna, skulle den nya tekniken kunna utnyttjas på ett bättre sätt. Det är som sagt var självklart att folk ska ha betalt för det arbete de utför, men det står inte i kontrast till smidigare, billigare och rent av gratis användarupplevelse för användarna. Spotify är en tjänst som tar steg i rätt riktning. För att undvika stämning och hotbrev från musikindustrin lät grundarna av tjänsten de stora jättarna inom musikindustrin köpa in sig i företaget till en löjligt låg summa. Det kanske är en framtida lösning på liknande problem. Man får tillgång till det material som användarna vill ha, utan att riskera dyra och tidskrävande rättegångar.\r\n\r\n\r\n\r\nVoddler är en filmtjänst som kallats filmens Spotify. Hur de har löst betalningsfrågan till upphovsrättshavarna, vet jag inte, men klart är att de verkar ha avtal med relativt många filmbolag. För deras uppsättning filmer är, om inte fantastisk, så ändå hyfsat fyllig. Framför allt med tanke på hur nystartad tjänsten är. Det märks att tjänsten fortfarande är i betastadiet, då det förekommer en del barnsjukdomar. Som exempel kan nämnas problem med att återställa lösenord. Samtidigt har de ännu inte fått ut några TV-serier, trots att det finns ett sådant menyval. På sajtens forum fick frågande användare i augusti svaret att tv-serierna ska läggas ut inom en snar framtid. Då det fortfarande inte skett, frågar sig en del lite ironiskt hur länge ”en snar framtid” är för Voddler. \r\n\r\nBildkvaliten är hög (har testat på en 22 tums lcd-monitor), och det går att välja placering av bilden, textningen, och uppskalningen av bilden. Filmerna finns uppdelade i vanligt förekommande genrer. Det som drar ner betyget på tjänsten är att man av någon anledning inte kan navigera med musen. Det är oerhört störande om man exempelvis vill pausa filmen. Det hade varit mycket skönare att kunna sköta det via en trådlös mus, istället för ett trådlöst tangentbord eller att behöva gå upp och sköta det från skrivbordet. Tangentvalen kändes inte helt logiska, och det tog en stund att komma in i de grundläggande funktionerna. Det här tycker jag att Voddler ska se till att ändra på, då det kraftigt försämrar användarupplevelsen. Det är dessutom ett problem för de användare som av någon anledning har svårt att hantera ett tangentbord.\r\n\r\n\r\n\r\nTrots att denna betaversion har sina brister, så är det helt klart ett steg i rätt riktning. I nuläget är det gratis att se filmerna, men det lär antagligen ändras när tjänsten kommer i skarpt läge. Det ska bli intressant att se hur det går för denna tjänst. I motsats till vad tv- och filmindustrin tycks tro, tror jag att tjänster som Voddler kommer att öka mångfalden i tv- och filmproduktionen. Som det är nu styrs marknaden av ett fåtal stora aktörer. Mindre spelare har svårt att få komma in på planen och göra sin röst hörd. De har svårt att få distribution på sina verk. Men med en tjänst som Voddler borde rimligtvis marknaden för smala independent film- och tvskapare öka. Det hoppas jag på i alla fall. För bra film och tv styrs inte av hur stor budget de har, utan hur starkt innehållet är. Det är något som de stora bjässarna verkar ha missat, när de skapar monstruöst dyra filmer, men som har ett innehåll som är lika tunt som The Pirate Bay-grundarnas argument.\r\n\r\n![Bild](http://tekniken.nu/uploads/633924107804791145-image002.jpg)", + "html": "

    Har tv- och filmindustrin äntligen vaknat?

    Jag upplever att tv- film- och musikindustrin är hopplöst fast i det förgångna. De jagar folk som laddar ner deras material olagligt. Att de vill ha betalt för sina alster är förvisso inte konstigt, men det märkliga är att de har så svårt att se teknikens möjligheter. Det känns som att de fortfarande vill ha kvar vinylskivor, kassettband och VHS-band. Om de bara kunde lära sig att samarbeta med nya tekniska aktörer som exempelvis The Pirate Bay, som ju erbjuder en distributionsform som på många sätt är mycket smidigare och snabbare än de traditionella distributionskanalerna, skulle den nya tekniken kunna utnyttjas på ett bättre sätt. Det är som sagt var självklart att folk ska ha betalt för det arbete de utför, men det står inte i kontrast till smidigare, billigare och rent av gratis användarupplevelse för användarna. Spotify är en tjänst som tar steg i rätt riktning. För att undvika stämning och hotbrev från musikindustrin lät grundarna av tjänsten de stora jättarna inom musikindustrin köpa in sig i företaget till en löjligt låg summa. Det kanske är en framtida lösning på liknande problem. Man får tillgång till det material som användarna vill ha, utan att riskera dyra och tidskrävande rättegångar.

    Voddler är en filmtjänst som kallats filmens Spotify. Hur de har löst betalningsfrågan till upphovsrättshavarna, vet jag inte, men klart är att de verkar ha avtal med relativt många filmbolag. För deras uppsättning filmer är, om inte fantastisk, så ändå hyfsat fyllig. Framför allt med tanke på hur nystartad tjänsten är. Det märks att tjänsten fortfarande är i betastadiet, då det förekommer en del barnsjukdomar. Som exempel kan nämnas problem med att återställa lösenord. Samtidigt har de ännu inte fått ut några TV-serier, trots att det finns ett sådant menyval. På sajtens forum fick frågande användare i augusti svaret att tv-serierna ska läggas ut inom en snar framtid. Då det fortfarande inte skett, frågar sig en del lite ironiskt hur länge ”en snar framtid” är för Voddler.

    Bildkvaliten är hög (har testat på en 22 tums lcd-monitor), och det går att välja placering av bilden, textningen, och uppskalningen av bilden. Filmerna finns uppdelade i vanligt förekommande genrer. Det som drar ner betyget på tjänsten är att man av någon anledning inte kan navigera med musen. Det är oerhört störande om man exempelvis vill pausa filmen. Det hade varit mycket skönare att kunna sköta det via en trådlös mus, istället för ett trådlöst tangentbord eller att behöva gå upp och sköta det från skrivbordet. Tangentvalen kändes inte helt logiska, och det tog en stund att komma in i de grundläggande funktionerna. Det här tycker jag att Voddler ska se till att ändra på, då det kraftigt försämrar användarupplevelsen. Det är dessutom ett problem för de användare som av någon anledning har svårt att hantera ett tangentbord.

    Trots att denna betaversion har sina brister, så är det helt klart ett steg i rätt riktning. I nuläget är det gratis att se filmerna, men det lär antagligen ändras när tjänsten kommer i skarpt läge. Det ska bli intressant att se hur det går för denna tjänst. I motsats till vad tv- och filmindustrin tycks tro, tror jag att tjänster som Voddler kommer att öka mångfalden i tv- och filmproduktionen. Som det är nu styrs marknaden av ett fåtal stora aktörer. Mindre spelare har svårt att få komma in på planen och göra sin röst hörd. De har svårt att få distribution på sina verk. Men med en tjänst som Voddler borde rimligtvis marknaden för smala independent film- och tvskapare öka. Det hoppas jag på i alla fall. För bra film och tv styrs inte av hur stor budget de har, utan hur starkt innehållet är. Det är något som de stora bjässarna verkar ha missat, när de skapar monstruöst dyra filmer, men som har ett innehåll som är lika tunt som The Pirate Bay-grundarnas argument.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Voddler ur användarperspektiv", + "meta_description": "", + "author_id": 1092, + "created_at": 1256816520000, + "created_by": 1092, + "updated_at": 1256816520000, + "updated_by": 1092, + "published_at": 1256816520000, + "published_by": 1092 + }, + { + "id": 373, + "title": "ASRock släpper uppdaterad Nettop 330 med wlan och fjärrkontroll", + "slug": "asrock-slapper-uppdaterad-nettop-330-med-wlan-och-fjarrkontroll", + "markdown": "\r\n\r\nVi skrev för ett tag sedan om ASRock Nettop ION 330, en utmärkt HTPC för mediacentret XBMC. Två av de stora minustecknen med enheten var dock avsaknad av trådlöst nätverk och Fjärrkontroll (såväl som inbyggd IR-mottagare). Asrock visar att de tar till sig av kritiken och har snabbt fått ut en uppdaterad version, Nettop ION 330HT, med såväl wlan som IR-mottagare och medföljande fjärrkontroll. Några hundralappar till får man betala, men helt klart jämförbart med att köpa en MCE fjärrkontroll och IR-mottagare separat och så mycket snyggare med integrerad mottagare.\r\n\r\nEn grym produkt som nu blivit ännu bättre, grattis till alla er som väntat!\r\n\r\n \r\n\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/xbmcion.png)", + "html": "

    Vi skrev för ett tag sedan om ASRock Nettop ION 330, en utmärkt HTPC för mediacentret XBMC. Två av de stora minustecknen med enheten var dock avsaknad av trådlöst nätverk och Fjärrkontroll (såväl som inbyggd IR-mottagare). Asrock visar att de tar till sig av kritiken och har snabbt fått ut en uppdaterad version, Nettop ION 330HT, med såväl wlan som IR-mottagare och medföljande fjärrkontroll. Några hundralappar till får man betala, men helt klart jämförbart med att köpa en MCE fjärrkontroll och IR-mottagare separat och så mycket snyggare med integrerad mottagare.

    En grym produkt som nu blivit ännu bättre, grattis till alla er som väntat!

     


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "ASRock släpper uppdaterad Nettop 330 med wlan och fjärrkontroll", + "meta_description": "", + "author_id": 1085, + "created_at": 1258037111000, + "created_by": 1085, + "updated_at": 1258037111000, + "updated_by": 1085, + "published_at": 1258037111000, + "published_by": 1085 + }, + { + "id": 379, + "title": "Google lanserar officiell webbplats för Chrome extensions", + "slug": "google-lanserar-officiell-webbplats-for-chrome-extensions", + "markdown": "\r\n\r\nExtensions (insticksprogram) för Google Chrome har funnits ganska länge i developer-kanalen. De har inte varit så många och inte så användbara – en förklaring är förstås att inte så många kör utvecklarversionen, och man har också varit tvungen att själv aktivera funktionen med kommandoradsargument i genvägen som startar Chrome.\r\n\r\nNyligen släppte Google på stöd för extensions i beta-kanalen. Detta har gjort att mängden Chrome-extensions formligen har exploderat. Med betaversioner av Chrome för MacOS och Linux så har Google tagit nästa naturliga steg och öppnat en officiell webbplats för extensions, på samma sätt som FireFox har haft redan från starten.\r\n\r\nPå Chrome Extension Gallery hittar man ett stort antal extensions, sorterade efter kategori, popularitet eller betyg. Här är mina fem favoriter:\r\n\r\nGoogle Reader Checker – en liten ikon med antal olästa RSS-inlägg på Google ReaderChromed Bird – en Twitter-extension som visar nya tweets och som du kan twittra från direktgPDF – öppnar alla PDF-länkar i Google Viewer istället för i Adobe Reader eller någon annan extern applikation. Sjukt mycket enklare, och dessutom funkar det bättre än t.ex. Adobe Reader som hälften av gångerna vägrar öppna PDF-filer.FlashBlock – har aldrig kört det i någon webbläsare tidigare, men ett behagligt lugn sprider sig t.o.m. över Aftonbladet. Har funktioner för att vitlista siter etc.Speed Tracer – visar och loggar prestanda för webbsidor. Dels visas laddningstider, men även HTML-tolkning, utritning och layout är med.\r\n\r\n![Bild](http://tekniken.nu/uploads/633961287604855249-google-chrome-logo.png)", + "html": "

    Extensions (insticksprogram) för Google Chrome har funnits ganska länge i developer-kanalen. De har inte varit så många och inte så användbara – en förklaring är förstås att inte så många kör utvecklarversionen, och man har också varit tvungen att själv aktivera funktionen med kommandoradsargument i genvägen som startar Chrome.

    Nyligen släppte Google på stöd för extensions i beta-kanalen. Detta har gjort att mängden Chrome-extensions formligen har exploderat. Med betaversioner av Chrome för MacOS och Linux så har Google tagit nästa naturliga steg och öppnat en officiell webbplats för extensions, på samma sätt som FireFox har haft redan från starten.

    På Chrome Extension Gallery hittar man ett stort antal extensions, sorterade efter kategori, popularitet eller betyg. Här är mina fem favoriter:

    • Google Reader Checker – en liten ikon med antal olästa RSS-inlägg på Google Reader
    • Chromed Bird – en Twitter-extension som visar nya tweets och som du kan twittra från direkt
    • gPDF – öppnar alla PDF-länkar i Google Viewer istället för i Adobe Reader eller någon annan extern applikation. Sjukt mycket enklare, och dessutom funkar det bättre än t.ex. Adobe Reader som hälften av gångerna vägrar öppna PDF-filer.
    • FlashBlock – har aldrig kört det i någon webbläsare tidigare, men ett behagligt lugn sprider sig t.o.m. över Aftonbladet. Har funktioner för att vitlista siter etc.
    • Speed Tracer – visar och loggar prestanda för webbsidor. Dels visas laddningstider, men även HTML-tolkning, utritning och layout är med.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Google lanserar officiell webbplats för Chrome extensions", + "meta_description": "", + "author_id": 6, + "created_at": 1260531960000, + "created_by": 6, + "updated_at": 1260531960000, + "updated_by": 6, + "published_at": 1260531960000, + "published_by": 6 + }, + { + "id": 381, + "title": "MindMeister kan parsa email", + "slug": "mindmeister-kan-parsa-email", + "markdown": "\r\n\r\n\r\n\r\nOm du inte redan använder tjänsten MindMeister så finns det ingen ursäkt giltig annat än att du inte visste om att den finns (och i och med att läser Tekniken.nu så det är ju lite konstigt ;-) – men hur som helst ska du i så fall registrera ett konto och börja använda både MindMeister på webben och i din iPhone.\r\n\r\nVad jag inte tidigare visste tidigare är att du kan starta en mind map genom att maila direkt till MindMeister – detta är oerhört kraftfullt när du t ex får bugglistor från kunder eller synpunkter, anteckningar från möten osv. Skälet till att jag inte visste detta innan är antagligen att dom döpt funktionen till det väldigt obegripliga ”Geistesblitz Email”.\r\n\r\nDet finns två olika mailadresser – en för nya mindmaps och en för gamla, om du mailar till en gammal så skriver du bara namnet på den gamla mind mapen i ärenderaden i ditt mail – väldigt enkelt och sparar mycket tid.\r\n\r\nSkriv ner dina punkter i en någorlunda strukturerad form och skicka den till den emailadress som står under ”My Account >  Settings > Geistesblitz Email”, tex:\r\n\r\nBuggar hemsidan:Startsidan Loggan är för liten Scriptfel i navigeringen Typsnittet är för lite  Använd Arial 15px för rubriker  Använd Palatino Linotype 12px för brödtext\r\n\r\nProduktsidan Visa priserna både i EUR och SEK Större bilder Lightbox ska vara vit\r\n\r\nVilket resulterar i följande fina strukturerade mind map:\r\n\r\n\r\n\r\nOch använder man de inbyggda att-göra ikonerna kan man få ett enkelt men lättanvänt projektstyrningssystem där både projektmedlemmar och kund i realtid kan följa vad som händer i sitt projekt:\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/634000528988656213-image001.png@01CA9DE2.5A3D58A0__image001.png)", + "html": "

    Om du inte redan använder tjänsten MindMeister så finns det ingen ursäkt giltig annat än att du inte visste om att den finns (och i och med att läser Tekniken.nu så det är ju lite konstigt ;-) – men hur som helst ska du i så fall registrera ett konto och börja använda både MindMeister på webben och i din iPhone.

    Vad jag inte tidigare visste tidigare är att du kan starta en mind map genom att maila direkt till MindMeister – detta är oerhört kraftfullt när du t ex får bugglistor från kunder eller synpunkter, anteckningar från möten osv. Skälet till att jag inte visste detta innan är antagligen att dom döpt funktionen till det väldigt obegripliga ”Geistesblitz Email”.

    Det finns två olika mailadresser – en för nya mindmaps och en för gamla, om du mailar till en gammal så skriver du bara namnet på den gamla mind mapen i ärenderaden i ditt mail – väldigt enkelt och sparar mycket tid.

    Skriv ner dina punkter i en någorlunda strukturerad form och skicka den till den emailadress som står under ”My Account >  Settings > Geistesblitz Email”, tex:

    Buggar hemsidan:
    Startsidan
     Loggan är för liten
     Scriptfel i navigeringen
     Typsnittet är för lite
      Använd Arial 15px för rubriker
      Använd Palatino Linotype 12px för brödtext

    Produktsidan
     Visa priserna både i EUR och SEK
     Större bilder
     Lightbox ska vara vit

    Vilket resulterar i följande fina strukturerade mind map:

    Och använder man de inbyggda att-göra ikonerna kan man få ett enkelt men lättanvänt projektstyrningssystem där både projektmedlemmar och kund i realtid kan följa vad som händer i sitt projekt:

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "MindMeister kan parsa email", + "meta_description": "m", + "author_id": 1087, + "created_at": 1264456097000, + "created_by": 1087, + "updated_at": 1264456097000, + "updated_by": 1087, + "published_at": 1264456097000, + "published_by": 1087 + }, + { + "id": 382, + "title": "Internet 2009 i nummer", + "slug": "internet-2009-i-nummer", + "markdown": "\r\n\r\nHär kommer ett litet länktips: Pingdom har ställt samman massor av intressant Internet-statistik för 2009. Många saker är klart intressanta; tex att IIS (Microsofts webserver) backat hela 22% och att Apache således är ohotat i topp med 47% av marknaden.\r\n\r\nÄven skräpposten fortsätter att växa, +24% jämfört med 2008. 84% av alla mail som skickas klassas som skräppost.\r\n\r\nKolla in hela listan hos Pingdom.\r\n\r\n![Bild](http://tekniken.nu/uploads/634000528993656117-pie-chart-icon.png)", + "html": "

    Här kommer ett litet länktips: Pingdom har ställt samman massor av intressant Internet-statistik för 2009. Många saker är klart intressanta; tex att IIS (Microsofts webserver) backat hela 22% och att Apache således är ohotat i topp med 47% av marknaden.

    Även skräpposten fortsätter att växa, +24% jämfört med 2008. 84% av alla mail som skickas klassas som skräppost.

    Kolla in hela listan hos Pingdom.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Internet 2009 i nummer", + "meta_description": "", + "author_id": 1085, + "created_at": 1264421700000, + "created_by": 1085, + "updated_at": 1264421700000, + "updated_by": 1085, + "published_at": 1264421700000, + "published_by": 1085 + }, + { + "id": 383, + "title": "Typekit - ny molntjänst för typsnitt på webben", + "slug": "typekit---ny-molntjanst-for-typsnitt-pa-webben", + "markdown": "\r\n\r\nSom vi tidigare har skrivit om går det numera bra att använda vanliga typsnitt på webbplatser vilket är väldigt efterlängtat eftersom alternativet att skapa bildrubriker har varit så tidsödande och gjort webben svårare och otillgängligare. Eftersom typsnittsbranschen är väldigt gammal och konservativ har det dock varit svårt att få till licensavtal för de vanliga typsnitten så även om det tekniskt går att använda vanliga typsnitt på webben så är det inte möjligt på grund av licensbegränsningar.\r\n\r\n\r\n\r\nNu har det kommit en webbtjänst som har gjort det hela mycket enklare genom att de har samlat alla typsnitt som går att använda på webben och säljer dessa samt står för hela hanteringen av hosting och länkning så att varje webbläsare får rätt kommandon för att fungera korrekt – det enda du som utvecklare behöver göra är att klistra in en liten kodsnutt och sedan använder du typsnitten som vanligt!\r\n\r\nDessutom har tjänsten en gratisvariant som går att testa och har en lång rad typsnitt som faktiskt är riktigt fina – titta själv på typekit.com/\r\n", + "html": "

    Som vi tidigare har skrivit om går det numera bra att använda vanliga typsnitt på webbplatser vilket är väldigt efterlängtat eftersom alternativet att skapa bildrubriker har varit så tidsödande och gjort webben svårare och otillgängligare. Eftersom typsnittsbranschen är väldigt gammal och konservativ har det dock varit svårt att få till licensavtal för de vanliga typsnitten så även om det tekniskt går att använda vanliga typsnitt på webben så är det inte möjligt på grund av licensbegränsningar.


    Nu har det kommit en webbtjänst som har gjort det hela mycket enklare genom att de har samlat alla typsnitt som går att använda på webben och säljer dessa samt står för hela hanteringen av hosting och länkning så att varje webbläsare får rätt kommandon för att fungera korrekt – det enda du som utvecklare behöver göra är att klistra in en liten kodsnutt och sedan använder du typsnitten som vanligt!

    Dessutom har tjänsten en gratisvariant som går att testa och har en lång rad typsnitt som faktiskt är riktigt fina – titta själv på typekit.com/

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Typekit - ny molntjänst för typsnitt på webben", + "meta_description": "", + "author_id": 1087, + "created_at": 1264698954000, + "created_by": 1087, + "updated_at": 1264698954000, + "updated_by": 1087, + "published_at": 1264698954000, + "published_by": 1087 + }, + { + "id": 384, + "title": "Nu kommer HTML5 - döden för Flash?", + "slug": "nu-kommer-html5---doden-for-flash", + "markdown": "\r\n\r\nOm man bara utgår från namnet kan man tro att det bara är en ny version av HTML, men HTML5 innehåller mycket mer än man kan tro. De viktigaste nyheterna är (och de två första är de som är extremt viktiga och spännande):\r\n\r\n\r\n\r\nCanvas-objektet som möjliggör utritning av objekt i s.k. immediate mode (där programmeraren kan ha full kontroll på vad som ritas och när)Inbyggt stöd för video och ljud utan pluginsEn lokal databas (så att program kan lagra saker i webbläsaren)Redigering av sidorDrag and dropJavascript-anrop mellan olika sidorHantera/manipulera surfhistorik i webbläsarenHantera/manipulera inställningar för MIME-typer och protokoll\r\n\r\nDe två första är särskilt intressanta eftersom det i princip är de två funktionerna som utgör existensberättigandet för Adobe Flash – animeringar och videouppspelning. Flera proffstyckare har redan förutspått att detta innebär slutet för Flash. Om det är sant ska jag låta vara osagt, men visst känns det som att HTML5 löser väldigt många av de uppgifter man hittills har behövt plugins för. Än så länge är dock Flash ohotat i och med att HTML5 bara finns i Chrome, Opera och Safari. När standarden klubbas av W3C (snart) förväntar åtminstone jag mig att stöd kommer i fler webbläsare.\r\n\r\nFör den som kör Chrome eller Safari så finns redan en massa HTML5-demos som man kan testa:\r\n\r\nCanvas-experiment: http://9elements.com/io/projects/html5/canvas/En grym videospelare (testa zoomen): http://jilion.com/sublime/videoVimeo har en HTML5-variant på sin spelare: www.vimeo.com/\r\n\r\n![Bild](http://tekniken.nu/uploads/634013214770367624-html5.png)", + "html": "

    Om man bara utgår från namnet kan man tro att det bara är en ny version av HTML, men HTML5 innehåller mycket mer än man kan tro. De viktigaste nyheterna är (och de två första är de som är extremt viktiga och spännande):

    • Canvas-objektet som möjliggör utritning av objekt i s.k. immediate mode (där programmeraren kan ha full kontroll på vad som ritas och när)
    • Inbyggt stöd för video och ljud utan plugins
    • En lokal databas (så att program kan lagra saker i webbläsaren)
    • Redigering av sidor
    • Drag and drop
    • Javascript-anrop mellan olika sidor
    • Hantera/manipulera surfhistorik i webbläsaren
    • Hantera/manipulera inställningar för MIME-typer och protokoll

    De två första är särskilt intressanta eftersom det i princip är de två funktionerna som utgör existensberättigandet för Adobe Flash – animeringar och videouppspelning. Flera proffstyckare har redan förutspått att detta innebär slutet för Flash. Om det är sant ska jag låta vara osagt, men visst känns det som att HTML5 löser väldigt många av de uppgifter man hittills har behövt plugins för. Än så länge är dock Flash ohotat i och med att HTML5 bara finns i Chrome, Opera och Safari. När standarden klubbas av W3C (snart) förväntar åtminstone jag mig att stöd kommer i fler webbläsare.

    För den som kör Chrome eller Safari så finns redan en massa HTML5-demos som man kan testa:

    Canvas-experiment: http://9elements.com/io/projects/html5/canvas/
    En grym videospelare (testa zoomen): http://jilion.com/sublime/video
    Vimeo har en HTML5-variant på sin spelare: www.vimeo.com/

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Nu kommer HTML5 - döden för Flash?", + "meta_description": "", + "author_id": 6, + "created_at": 1265724676000, + "created_by": 6, + "updated_at": 1265724676000, + "updated_by": 6, + "published_at": 1265724676000, + "published_by": 6 + }, + { + "id": 385, + "title": "Windows Mobile 7 Series", + "slug": "windows-mobile-7-series", + "markdown": "\r\n\r\nWindows Mobile 7 Series presenterades igår och internet har svämmat över av kommentarer. Efter att ha väntat på det här i närmare 2 år nu är det skönt att se att dom faktiskt har nåt att presentera.\r\n\r\n\r\n\r\nÖverlag så verkar de flesta positiva och det finns en hel del bra och dåligt som vi redan kan dra slutsatser om men också en hel del som kommer att visas sig först när SDKn släpps.\r\n## Vad vi vet numera\r\nGränssnittet som kallas Metro ser ut ungefär som Zune fast med en ny typ av startsida som består av applets/widgets kallade tiles (tydligen så räckte inte dom vanliga orden till) och dom har helt skippat de klassiska ikonerna som alla andra mobiler har.\r\n\r\nTelefonerna kommer tillverkas av partners t.ex. HTC som med WM 6.5 men med större krav på telefonen när det gäller funktioner och prestanda (t.ex. kapacitiv skärm och GPS är nämnt), det krävs också 5 hårdvaruknappar (tillbaka, start, sök, kamera och ström) medan tangentbord är valfritt.\r\n\r\nFlashstöd kommer inte finnas med i lanseringen men p.g.a. tidsbrist och inte av något principsak. Det ska dyka upp så fort Adobe fått ihop en fungerade port.\r\n\r\nTelefonen skall komma \"holiday 2010\" vilket torde betyda nånstans kring oktober-november.\r\n\r\nDen bygger på helt ny kod (som väntat) och är därför inte kompatibel med WM 6.5-applikationerna. Dock kommer båda versionerna samexistera där WM 7 riktar sig till \"high-end\"-telefonerna vilket i praktiken torde betyda alla telefoner med en större skärm, där 6.5 är mer anpassad till mindre skärmar och inte heller kräver tryckkänslig skärm.\r\n\r\nTelefonen har allt man förväntar sig numera som Facebook-integration, sökmotor (Bing), kartor/gps funktioner (också Bing) samt musik/video med motsvarande datordel (zune-plattformen igen) och förstås hela officepaketet i en mobilanpassad version.\r\n\r\nDe visade inga spel i presentationen men den kommer att få spel liknande zune och nån typ av integration mot xbox-världen.\r\n\r\nOavsett vad man tycker om gränssnittet så är det numera en modern plattform som ser ut att kunna tävla på lika villkor med de andra OSen direkt från fabriken.\r\n## Vad som ännu bara är spekulativt\r\nDet enda som är sagt om SDKn ännu är att den kommer att släppas (i nån form) på Mix 2010 som börjar 15:e mars och först då kommer telefonens potential att visas. Detta kommer avgöra om telefonen stannar vid att vara en telefon med inbyggda funktioner eller om den kommer att bli en plattform liknande iPhone, vilket verkar vara deras Microsofts mål.\r\n\r\nHur telefonen ser ut som standard är ju i det närmaste ointressant numera så länge som den går att skräddarsy efter behov av tillverkare, utvecklare eller slutanvändaren själv. Vid ett tillfälle i presentationen sades något om att de ville ha ett tydligt och gemensamt gränssnitt och de satsade på utökningbarhet istället för att ersättningsbarhet och det kan betyda att det inte går att byta ut utseendet helt (det lär gå inofficiellt förstås men du kan nog inte köpa en telefon med ett gränssnitt som inte liknar standardvarianten).\r\n\r\nAtt utvecklingsmiljön / SDKn bygger på C# och .NET är så gott som 100% säkert men om gränssnittet bygger på Silverlight eller om det är en egen miljö kan ingen säga säkert ännu.\r\n\r\nDet har ännu inte nämts nåt specifikt om multitasking men det verkar finnas lite begränsningar.\r\n\r\nInget har heller nämnts om marketplace (dvs Microsofts version av AppStore) men detta lär också diskuteras på Mix 2010.\r\n\r\nhttp://www.windowsphone7series.com/\r\n\r\n![Bild](http://tekniken.nu/uploads/634019128633626297-wm7.jpg)", + "html": "

    Windows Mobile 7 Series presenterades igår och internet har svämmat över av kommentarer. Efter att ha väntat på det här i närmare 2 år nu är det skönt att se att dom faktiskt har nåt att presentera.

    Överlag så verkar de flesta positiva och det finns en hel del bra och dåligt som vi redan kan dra slutsatser om men också en hel del som kommer att visas sig först när SDKn släpps.

    Vad vi vet numera

    Gränssnittet som kallas Metro ser ut ungefär som Zune fast med en ny typ av startsida som består av applets/widgets kallade tiles (tydligen så räckte inte dom vanliga orden till) och dom har helt skippat de klassiska ikonerna som alla andra mobiler har.

    Telefonerna kommer tillverkas av partners t.ex. HTC som med WM 6.5 men med större krav på telefonen när det gäller funktioner och prestanda (t.ex. kapacitiv skärm och GPS är nämnt), det krävs också 5 hårdvaruknappar (tillbaka, start, sök, kamera och ström) medan tangentbord är valfritt.

    Flashstöd kommer inte finnas med i lanseringen men p.g.a. tidsbrist och inte av något principsak. Det ska dyka upp så fort Adobe fått ihop en fungerade port.

    Telefonen skall komma \"holiday 2010\" vilket torde betyda nånstans kring oktober-november.

    Den bygger på helt ny kod (som väntat) och är därför inte kompatibel med WM 6.5-applikationerna. Dock kommer båda versionerna samexistera där WM 7 riktar sig till \"high-end\"-telefonerna vilket i praktiken torde betyda alla telefoner med en större skärm, där 6.5 är mer anpassad till mindre skärmar och inte heller kräver tryckkänslig skärm.

    Telefonen har allt man förväntar sig numera som Facebook-integration, sökmotor (Bing), kartor/gps funktioner (också Bing) samt musik/video med motsvarande datordel (zune-plattformen igen) och förstås hela officepaketet i en mobilanpassad version.

    De visade inga spel i presentationen men den kommer att få spel liknande zune och nån typ av integration mot xbox-världen.

    Oavsett vad man tycker om gränssnittet så är det numera en modern plattform som ser ut att kunna tävla på lika villkor med de andra OSen direkt från fabriken.

    Vad som ännu bara är spekulativt

    Det enda som är sagt om SDKn ännu är att den kommer att släppas (i nån form) på Mix 2010 som börjar 15:e mars och först då kommer telefonens potential att visas. Detta kommer avgöra om telefonen stannar vid att vara en telefon med inbyggda funktioner eller om den kommer att bli en plattform liknande iPhone, vilket verkar vara deras Microsofts mål.

    Hur telefonen ser ut som standard är ju i det närmaste ointressant numera så länge som den går att skräddarsy efter behov av tillverkare, utvecklare eller slutanvändaren själv. Vid ett tillfälle i presentationen sades något om att de ville ha ett tydligt och gemensamt gränssnitt och de satsade på utökningbarhet istället för att ersättningsbarhet och det kan betyda att det inte går att byta ut utseendet helt (det lär gå inofficiellt förstås men du kan nog inte köpa en telefon med ett gränssnitt som inte liknar standardvarianten).

    Att utvecklingsmiljön / SDKn bygger på C# och .NET är så gott som 100% säkert men om gränssnittet bygger på Silverlight eller om det är en egen miljö kan ingen säga säkert ännu.

    Det har ännu inte nämts nåt specifikt om multitasking men det verkar finnas lite begränsningar.

    Inget har heller nämnts om marketplace (dvs Microsofts version av AppStore) men detta lär också diskuteras på Mix 2010.

    http://www.windowsphone7series.com/

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Windows Mobile 7 Series", + "meta_description": "", + "author_id": 1089, + "created_at": 1266316062000, + "created_by": 1089, + "updated_at": 1266316062000, + "updated_by": 1089, + "published_at": 1266316062000, + "published_by": 1089 + }, + { + "id": 390, + "title": "Mindjet Catalyst", + "slug": "mindjet-catalyst", + "markdown": "\r\n\r\nVi har tidigare skrivit ett par artiklar om verktyget Mindmeister som är ett otroligt bra verktyg för brainstorming och för att strukturera sitt arbete genom att skapa mindmaps. Det finns en hel del alternativ till Mindmeister men inget som riktigt tar upp kampen med dem på allvar förrän nu.\r\n\r\nMindjet har haft ett liknande verktyg ett bra tag men ganska nyligen lanserade de ett alternativ till Mindmeister, Catalyst!\r\n\r\nDeras föregångare var en nedladdningsbar applikation men Catalyst är en onlinetjänst och det är ett stort steg framåt.\r\n\r\nCatalyst kan man använda till t.ex:\r\n\r\n\r\nAtt planera projektMötesagendorTo-Do listorBrainstorming\r\nSå här ser deras mindmap vy ut:\r\n\r\n\r\n\r\n\r\n\r\nDet finns en hel del likheter mellan MindMeister och Mindjets Catalys. Det som är bra med Catalyst är att det har stöd för videokonferenser samt att de infört workspaces.\r\n\r\nEn workspace kan ha flera mindmaps och bifogade filer dvs. de har lagt till en nivå över mindmaps som fungerar som en samlingsplats för ett projekt.\r\n\r\nSå här ser deras workspace vy ut:\r\n\r\n\r\n\r\nSå tips, kolla upp Catalyst och avgör själv vilken av Mindmeister och Catalyst som är bäst!\r\n\r\nhttps://www.mindjet.com/products/mindjet-catalyst/overview\r\n\r\n![Bild](http://tekniken.nu/uploads/634032136771261935-image002.jpg)", + "html": "

    Vi har tidigare skrivit ett par artiklar om verktyget Mindmeister som är ett otroligt bra verktyg för brainstorming och för att strukturera sitt arbete genom att skapa mindmaps. Det finns en hel del alternativ till Mindmeister men inget som riktigt tar upp kampen med dem på allvar förrän nu.

    Mindjet har haft ett liknande verktyg ett bra tag men ganska nyligen lanserade de ett alternativ till Mindmeister, Catalyst!

    Deras föregångare var en nedladdningsbar applikation men Catalyst är en onlinetjänst och det är ett stort steg framåt.

    Catalyst kan man använda till t.ex:

    • Att planera projekt
    • Mötesagendor
    • To-Do listor
    • Brainstorming

    Så här ser deras mindmap vy ut:

    Det finns en hel del likheter mellan MindMeister och Mindjets Catalys. Det som är bra med Catalyst är att det har stöd för videokonferenser samt att de infört workspaces.

    En workspace kan ha flera mindmaps och bifogade filer dvs. de har lagt till en nivå över mindmaps som fungerar som en samlingsplats för ett projekt.

    Så här ser deras workspace vy ut:

    Så tips, kolla upp Catalyst och avgör själv vilken av Mindmeister och Catalyst som är bäst!

    https://www.mindjet.com/products/mindjet-catalyst/overview

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Mindjet Catalyst", + "meta_description": "", + "author_id": 1094, + "created_at": 1267618800000, + "created_by": 1094, + "updated_at": 1267618800000, + "updated_by": 1094, + "published_at": 1267618800000, + "published_by": 1094 + }, + { + "id": 396, + "title": "Multitasking kan komma i iPhone OS 4.0", + "slug": "multitasking-kan-komma-i-iphone-os-40", + "markdown": "\r\n\r\nMultitasking – att kunna köra flera program samtidigt – är något som iPhone-ägare har velat ha redan från starten. Det finns inga egentliga hinder för att göra det, Apples egna applikationer som mail och iPod gör det redan. Men det är i nuläget inte möjligt att köra flera program från tredjepartstillverkare, utan att man jailbreakar sin telefon. Apples skäl för hindret är att fler applikationer igång gör telefonen långsam och drar mer batterier, och ökar också möjligheterna för virusliknande applikationer att vara igång utan att användaren märker det.\r\n\r\n\r\n\r\nNu verkar det som om Apple kanske släpper på sin hårda policy, enligt Ars Technica som får ses som en trovärdig källa (även om de inte på något sätt har fått det officiellt bekräftat). I iPhone OS 4.0 ska det tydligen finnas en processhanterare, vilket skulle vara helt meningslöst om det inte gick att köra flera program samtidigt. Om ryktet är sant så misstänker jag att det är iPad som har drivit på beslutet. Det är ju bara larvigt att man inte kan sitta på ett café och skriva blogginlägg och samtidigt lyssna på Spotify eller hålla koll på Twitter.\r\n\r\nVia http://mac.collected.info/ via Ars Technica.\r\n\r\n                        \r\n\r\n![Bild](http://tekniken.nu/uploads/634039824228154559-steve-jobs-iphone.png)", + "html": "

    Multitasking – att kunna köra flera program samtidigt – är något som iPhone-ägare har velat ha redan från starten. Det finns inga egentliga hinder för att göra det, Apples egna applikationer som mail och iPod gör det redan. Men det är i nuläget inte möjligt att köra flera program från tredjepartstillverkare, utan att man jailbreakar sin telefon. Apples skäl för hindret är att fler applikationer igång gör telefonen långsam och drar mer batterier, och ökar också möjligheterna för virusliknande applikationer att vara igång utan att användaren märker det.

    Nu verkar det som om Apple kanske släpper på sin hårda policy, enligt Ars Technica som får ses som en trovärdig källa (även om de inte på något sätt har fått det officiellt bekräftat). I iPhone OS 4.0 ska det tydligen finnas en processhanterare, vilket skulle vara helt meningslöst om det inte gick att köra flera program samtidigt. Om ryktet är sant så misstänker jag att det är iPad som har drivit på beslutet. Det är ju bara larvigt att man inte kan sitta på ett café och skriva blogginlägg och samtidigt lyssna på Spotify eller hålla koll på Twitter.

    Via http://mac.collected.info/ via Ars Technica.

                            

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Multitasking kan komma i iPhone OS 4.0", + "meta_description": "", + "author_id": 6, + "created_at": 1268385622000, + "created_by": 6, + "updated_at": 1268385622000, + "updated_by": 6, + "published_at": 1268385622000, + "published_by": 6 + }, + { + "id": 399, + "title": "Filmavkodning på grafikkortet i nya XBMC för Windows", + "slug": "filmavkodning-pa-grafikkortet-i-nya-xbmc-for-windows", + "markdown": "\r\n\r\nASROCK ION och liknande små mediedatorer som är gjorda för att koppla till TV:n har oftast en CPU som är för klen för att spela upp filmer i 1080p. De klarar sig ändå genom att ta hjälp av grafikkortet. Med grafikkortsstödd uppspelning så går CPU:n sällan upp över 25 procents belastning, till och med på en Atom-processor med två kärnor i blygsamma 1,6 GHz. I Windows heter den funktionen DXVA – DirectX Video Acceleration. Den stöds av de flesta nya grafikkort från ATI och Nvidia (men kontrollera detta noga om du tänker göra ett inköp!). I Linux heter funktionen VDPAU – Video Decode and Presentation API for UNIX – och fungerar bara på Nvidia-kort.\r\n\r\nHittills har mjukvarustödet för GPU-avkodning av film varit lite knapphändigt, man har hittills kunnat välja på att köra XBMC med VDPAU under Linux eller Media Player Classic med DXVA i Windows. Utrustad med mycket tålamod har man också kunnat få XBMC att starta Media Player Classic automatiskt när man startar en film, men det har varken varit särskilt enkelt eller transparent (det förstör känslan lite när ens fina mediecenter minimeras och ett annat program startar istället).\r\n\r\nDärför är det mycket glädjande att nyaste versionen av XBMC har fått stöd för DXVA! Jag är lite osäker på vilken i version som detta stöd först dök upp, men jag laddade ner den senaste nightly build jag kunde hitta och den fungerar stabilt och bra.\r\n\r\nGör så här:\r\n\r\nLadda ner senaste versionen av XBMCGå in i Settings -> Video -> Render method och välj DXVA (kan ha lite fel på exakta namnen på menyvalen, har ingen XBMC framför mig)Njut av helt hackfri uppspelning av filmer i 1080p\r\n\r\n![Bild](http://tekniken.nu/uploads/634048630700213097-xbmc_main.jpg)", + "html": "

    ASROCK ION och liknande små mediedatorer som är gjorda för att koppla till TV:n har oftast en CPU som är för klen för att spela upp filmer i 1080p. De klarar sig ändå genom att ta hjälp av grafikkortet. Med grafikkortsstödd uppspelning så går CPU:n sällan upp över 25 procents belastning, till och med på en Atom-processor med två kärnor i blygsamma 1,6 GHz. I Windows heter den funktionen DXVA – DirectX Video Acceleration. Den stöds av de flesta nya grafikkort från ATI och Nvidia (men kontrollera detta noga om du tänker göra ett inköp!). I Linux heter funktionen VDPAU – Video Decode and Presentation API for UNIX – och fungerar bara på Nvidia-kort.

    Hittills har mjukvarustödet för GPU-avkodning av film varit lite knapphändigt, man har hittills kunnat välja på att köra XBMC med VDPAU under Linux eller Media Player Classic med DXVA i Windows. Utrustad med mycket tålamod har man också kunnat få XBMC att starta Media Player Classic automatiskt när man startar en film, men det har varken varit särskilt enkelt eller transparent (det förstör känslan lite när ens fina mediecenter minimeras och ett annat program startar istället).

    Därför är det mycket glädjande att nyaste versionen av XBMC har fått stöd för DXVA! Jag är lite osäker på vilken i version som detta stöd först dök upp, men jag laddade ner den senaste nightly build jag kunde hitta och den fungerar stabilt och bra.

    Gör så här:

    1. Ladda ner senaste versionen av XBMC
    2. Gå in i Settings -> Video -> Render method och välj DXVA (kan ha lite fel på exakta namnen på menyvalen, har ingen XBMC framför mig)
    3. Njut av helt hackfri uppspelning av filmer i 1080p

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Filmavkodning på grafikkortet i nya XBMC för Windows", + "meta_description": "", + "author_id": 6, + "created_at": 1269266269000, + "created_by": 6, + "updated_at": 1269266269000, + "updated_by": 6, + "published_at": 1269266269000, + "published_by": 6 + }, + { + "id": 402, + "title": "Uppdaterad Spotify-klient för iPhone", + "slug": "uppdaterad-spotify-klient-for-iphone", + "markdown": "\r\n\r\nIdag har Spotify släppt en uppdatering för sin iPhone-applikation. Nyheterna i den är inte revolutionerande, men några som jag verkligen har väntat på och några nice-to-haves (i urval):\r\n\r\n\r\nKoppling till Last.fm precis som i desktopapplikationen\r\nKan öppna länkar, t.ex. från Facebook-appen\r\nSkapa, redigera och dela playlists\r\nKommer alltid ihåg vad man spelade senast\r\nAlbuminfo med recensioner\r\nMarkera låtar och album som favoriter\r\n\r\n\r\nLast.fm-kopplingen är min favorit bland de nya funktionerna, jag har hittat massor med ny musik genom den. I och med att jag nästan bara använder Spotify på telefonen nuförtiden så har det blivit lite tunt med det tidigare.\r\n\r\n\r\n \r\n\r\n![Bild](http://tekniken.nu/uploads/634056331367673910-spotify-logo1.jpg)", + "html": "

    Idag har Spotify släppt en uppdatering för sin iPhone-applikation. Nyheterna i den är inte revolutionerande, men några som jag verkligen har väntat på och några nice-to-haves (i urval):



    • Koppling till Last.fm precis som i desktopapplikationen

    • Kan öppna länkar, t.ex. från Facebook-appen

    • Skapa, redigera och dela playlists

    • Kommer alltid ihåg vad man spelade senast

    • Albuminfo med recensioner

    • Markera låtar och album som favoriter


    Last.fm-kopplingen är min favorit bland de nya funktionerna, jag har hittat massor med ny musik genom den. I och med att jag nästan bara använder Spotify på telefonen nuförtiden så har det blivit lite tunt med det tidigare.


     

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Uppdaterad Spotify-klient för iPhone", + "meta_description": "", + "author_id": 6, + "created_at": 1270036336000, + "created_by": 6, + "updated_at": 1270036336000, + "updated_by": 6, + "published_at": 1270036336000, + "published_by": 6 + }, + { + "id": 403, + "title": "Gör om en gammal dator till en NAS", + "slug": "gor-om-en-gammal-dator-till-en-nas", + "markdown": "\r\n\r\nMarknaden för nätverkshårddiskar (NAS) för hemmamarknaden har formligen exploderat. De flesta har två till fyra diskplatser och kör någon form av Linux. Vissa erbjuder också möjlighet att installera nya applikationer för Itunes-kopplingar, BitTorrent och webbserver. När jag började leta efter en lämplig NAS dit hem så slogs jag dock av tre saker: det finns ingen standard för operativsystem vilket gör att man kan komma att känna sig låst vid en föråldrad lösning, de flesta låter ganska mycket trots att de är gjorda för hemmabruk och de är dyra i förhållande till den hårdvara man får.\r\n\r\n\r\nEn gammal standardlösning är att använda en dator som NAS istället. Att skicka filer över ett nätverkskort kräver inte så särskilt hög prestanda, särskilt om man kan klara sig med 100 Mbps (vilket räcker utmärkt för att t.ex. spela filmer i 1080p).\r\n\r\n\r\nSagt och gjort – i jobbets dataskrotshög fanns en fullt fungerande gammal Dell GX150. En liten, tyst låda för kontorsbruk med en hopplöst omodern Pentium III-processor på 800 MHz. Genom att plundra en likadan i samma hög lyckades jag få ihop 512 MB RAM. Att installera Windows på en sån dator känns både onödigt prestandakrävande och dyrt, så jag valde Ubuntu istället. Det var några år sen jag körde Linux på någon av mina datorer, så det var lite spännande att se vad som har hänt i den världen.\r\n\r\n\r\nUbuntu fungerar över förväntan på en så gammal dator! Med hela den grafiska miljön laddad så skulle den nästan kunna funka som surfdator, om man har lite tålamod. Framför allt så levererar den filer i 10MB/s, vilket i princip är den maximala gränsen för ett nätverkskort på 100MBps. Processorn är då belastad till c:a 40 procent.\r\n\r\n\r\nSåhär gjorde jag:\r\n\r\n\r\n1) Förstärka hårdvaran. Med en ensam IDE-disk på 40GB så var datorn inte riktigt utrustad för att vara filserver. Därför köpte jag en SATA-kontroller (med RAID) och en 1TB SATA-disk.\r\n\r\n\r\n2) Installera Ubuntu, jag rekommenderar den senaste versionen (i skrivande stund 9.10). Det finns en server-version av Ubuntu som kan verka lämplig för en NAS, men den innehåller inget grafiskt gränssnitt och i princip inga förinstallerade applikationer eller tjänster. Mitt tips är att välja desktop-versionen om du inte redan är en van Linux-administration (och i så fall har du säkert en filserver med Linux redan). Till min stora glädje så fungerade SATA-kortet direkt, inga problem med drivrutiner eller något sånt.\r\n\r\n\r\n3) Aktivera fjärrstyrning. Eftersom du troligen vill köra din NAS utan tangentbord, mus och skärm är en av de viktigaste funktionerna för att kunna administrera den att kunna ansluta till den från en annan dator. Fjärrstyrning aktiveras såhär:\r\n\r\n\r\n\r\n\r\n\r\nOtippat nog så är det VNC som är standard för fjärrstyrning och installeras automatiskt i Ubuntu. Jag har alltid sett VNC som ett hobbyprotokoll som är ganska osäkert, men jag kanske har gamla fördomar :-). Valfri VNC-klient i Windows, Linux eller MacOSX funkar alltså fint för fjärrstyrning.\r\n\r\n\r\n4) Installera SSH. Detta är inte ett krav, men det är skönt att ha en fallback om fjärrstyrningen skulle sluta fungera.\r\n\r\n\r\n5) Konfigurera Samba. Samba är Linux-implementationen för Windows-nätverk, det är via Samba som du kommer att ansluta dina övriga datorer. Detta visade sig vara otippat krångligt eftersom båda de Samba-konfigureringsapplikationer man kan installera via Ubuntu Software Center är trasiga och man till slut måste fixa det sista för hand i inställningsfilerna.\r\n\r\n\r\nMed allt på plats så har du en tyst dator som levererar filer över nätverket och som dessutom har uppgraderingsmöjligheter och ett bra stöd för nya applikationer och tjänster.\r\n\r\n\r\nFör- och nackdelar med att bygga en egen NAS istället för att köpa en färdig:\r\n\r\n\r\nFördelar\r\n\r\n\r\nBillig\r\nFlexibel\r\nTyst (om du utgår från en tyst dator)\r\n\r\n\r\nNackdelar\r\n\r\n\r\nIngen hot-swap av diskar (byta diskar under drift)\r\nKräver eget arbete, både i hårdvara och mjukvara\r\nTillgång till support\r\n\r\n\r\n \r\n\r\n![Bild](http://tekniken.nu/uploads/634064072575903976-image001.png)", + "html": "

    Marknaden för nätverkshårddiskar (NAS) för hemmamarknaden har formligen exploderat. De flesta har två till fyra diskplatser och kör någon form av Linux. Vissa erbjuder också möjlighet att installera nya applikationer för Itunes-kopplingar, BitTorrent och webbserver. När jag började leta efter en lämplig NAS dit hem så slogs jag dock av tre saker: det finns ingen standard för operativsystem vilket gör att man kan komma att känna sig låst vid en föråldrad lösning, de flesta låter ganska mycket trots att de är gjorda för hemmabruk och de är dyra i förhållande till den hårdvara man får.


    En gammal standardlösning är att använda en dator som NAS istället. Att skicka filer över ett nätverkskort kräver inte så särskilt hög prestanda, särskilt om man kan klara sig med 100 Mbps (vilket räcker utmärkt för att t.ex. spela filmer i 1080p).


    Sagt och gjort – i jobbets dataskrotshög fanns en fullt fungerande gammal Dell GX150. En liten, tyst låda för kontorsbruk med en hopplöst omodern Pentium III-processor på 800 MHz. Genom att plundra en likadan i samma hög lyckades jag få ihop 512 MB RAM. Att installera Windows på en sån dator känns både onödigt prestandakrävande och dyrt, så jag valde Ubuntu istället. Det var några år sen jag körde Linux på någon av mina datorer, så det var lite spännande att se vad som har hänt i den världen.


    Ubuntu fungerar över förväntan på en så gammal dator! Med hela den grafiska miljön laddad så skulle den nästan kunna funka som surfdator, om man har lite tålamod. Framför allt så levererar den filer i 10MB/s, vilket i princip är den maximala gränsen för ett nätverkskort på 100MBps. Processorn är då belastad till c:a 40 procent.


    Såhär gjorde jag:


    1) Förstärka hårdvaran. Med en ensam IDE-disk på 40GB så var datorn inte riktigt utrustad för att vara filserver. Därför köpte jag en SATA-kontroller (med RAID) och en 1TB SATA-disk.


    2) Installera Ubuntu, jag rekommenderar den senaste versionen (i skrivande stund 9.10). Det finns en server-version av Ubuntu som kan verka lämplig för en NAS, men den innehåller inget grafiskt gränssnitt och i princip inga förinstallerade applikationer eller tjänster. Mitt tips är att välja desktop-versionen om du inte redan är en van Linux-administration (och i så fall har du säkert en filserver med Linux redan). Till min stora glädje så fungerade SATA-kortet direkt, inga problem med drivrutiner eller något sånt.


    3) Aktivera fjärrstyrning. Eftersom du troligen vill köra din NAS utan tangentbord, mus och skärm är en av de viktigaste funktionerna för att kunna administrera den att kunna ansluta till den från en annan dator. Fjärrstyrning aktiveras såhär:



    Otippat nog så är det VNC som är standard för fjärrstyrning och installeras automatiskt i Ubuntu. Jag har alltid sett VNC som ett hobbyprotokoll som är ganska osäkert, men jag kanske har gamla fördomar :-). Valfri VNC-klient i Windows, Linux eller MacOSX funkar alltså fint för fjärrstyrning.


    4) Installera SSH. Detta är inte ett krav, men det är skönt att ha en fallback om fjärrstyrningen skulle sluta fungera.


    5) Konfigurera Samba. Samba är Linux-implementationen för Windows-nätverk, det är via Samba som du kommer att ansluta dina övriga datorer. Detta visade sig vara otippat krångligt eftersom båda de Samba-konfigureringsapplikationer man kan installera via Ubuntu Software Center är trasiga och man till slut måste fixa det sista för hand i inställningsfilerna.


    Med allt på plats så har du en tyst dator som levererar filer över nätverket och som dessutom har uppgraderingsmöjligheter och ett bra stöd för nya applikationer och tjänster.


    För- och nackdelar med att bygga en egen NAS istället för att köpa en färdig:


    Fördelar



    • Billig

    • Flexibel

    • Tyst (om du utgår från en tyst dator)


    Nackdelar



    • Ingen hot-swap av diskar (byta diskar under drift)

    • Kräver eget arbete, både i hårdvara och mjukvara

    • Tillgång till support


     

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Gör om en gammal dator till en NAS", + "meta_description": "", + "author_id": 6, + "created_at": 1270810456000, + "created_by": 6, + "updated_at": 1270810456000, + "updated_by": 6, + "published_at": 1270810456000, + "published_by": 6 + }, + { + "id": 404, + "title": "De gömda nyheterna i iPhone OS4", + "slug": "de-gomda-nyheterna-i-iphone-os4", + "markdown": "\r\n\r\nIngen har väl undgått att iPhone OS 4 innehåller stöd för bakgrundsprocesser och att man kan gruppera ihop applikationer i foldrar. Åtminstone det förstnämnda är ju extremt efterlängtat, men lite snopet är det ju att inga applikationer har uppdaterats med stöd för bakgrundskörning. Spotify väntar jag personligen allra mest på.\r\n\r\n\r\nMen det finns många andra små, små saker som också är nya. Gizmodo har gjort en ordentlig genomgång. Några av dem i urval:\r\n\r\n\r\nMöjlighet att stänga av datatrafik över mobilnätet\r\nValbar storlek på bilder som skickas i mail\r\nZoom i kameran\r\nRättstavning\r\nTrådning av konversationer i mail\r\nSpelning av video direkt på webbsidor (istället för att hoppa till Quicktime-applikationen)\r\n\r\n\r\nHär är hela Gizmodos lista.\r\n\r\n![Bild](http://tekniken.nu/uploads/634068483203384658-email_photos_resize.jpg)", + "html": "

    Ingen har väl undgått att iPhone OS 4 innehåller stöd för bakgrundsprocesser och att man kan gruppera ihop applikationer i foldrar. Åtminstone det förstnämnda är ju extremt efterlängtat, men lite snopet är det ju att inga applikationer har uppdaterats med stöd för bakgrundskörning. Spotify väntar jag personligen allra mest på.


    Men det finns många andra små, små saker som också är nya. Gizmodo har gjort en ordentlig genomgång. Några av dem i urval:



    • Möjlighet att stänga av datatrafik över mobilnätet

    • Valbar storlek på bilder som skickas i mail

    • Zoom i kameran

    • Rättstavning

    • Trådning av konversationer i mail

    • Spelning av video direkt på webbsidor (istället för att hoppa till Quicktime-applikationen)


    Här är hela Gizmodos lista.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "De gömda nyheterna i iPhone OS4", + "meta_description": "", + "author_id": 6, + "created_at": 1271251519000, + "created_by": 6, + "updated_at": 1271251519000, + "updated_by": 6, + "published_at": 1271251519000, + "published_by": 6 + }, + { + "id": 406, + "title": "Äntligen nya sätt att betala", + "slug": "antligen-nya-satt-att-betala", + "markdown": "\r\n\r\nDet finns många tillfällen då jag stör mig på att företag inte hängt med i utvecklingen och gör det krångligt för sina kunder.\r\n\r\n\r\nJag tänker t.ex. på parkeringsautomater, som fram tills för något år sedan, endast tillät betalning med mynt. Det är ju inte särskilt troligt att folk har 120 kronor i mynt för en hel dags parkering. Nu har ju som tur var de flesta parkeringsautomaterna uppgraderats till att acceptera betalkort och SMS som betalning.\r\n\r\n\r\nEtt område som fortfarande är ganska hopplöst efter är varuautomater. Det händer ibland att jag vill köpa något att dricka eller äta i varuautomaterna i tunnelbanan. Men eftersom att jag i princip gör alla mina inköp med Visa-kort så är det väldigt sällan som jag har kontanter i plånboken. Härom dagen var jag i ett sådant läge. Stod där framför en automat, men hade inte tillräckligt med pengar för att göra ett inköp. Att betala med kort var fortfarande inte möjligt.\r\n\r\n\r\nDäremot så hade de infört betalning via SMS. Jag skrev automatens kod samt beloppet för varan jag skulle köpa, och skickade till deras nummer.\r\n\r\n\r\nInom några sekunder uppdaterades automatens display till att visa min betalda kredit, och jag kunde köpa min vara. Det blev ett påslag på 3 kronor för denna form av betalning, vilket jag tycker är lite fånigt. Det är ju trots allt så att de ökar sin försäljning på att erbjuda denna form av betalning.\r\n\r\n\r\nUtan möjligheten att betala med SMS hade jag inte gjort mitt inköp. Därför borde det ju vara så att priset för att underhålla det systemet bakas in i den ökade försäljningen. Men denna invändning till trots, så tycker jag att det är väldigt positivt att se ett företag ta steget mot en mer användarvänlig värld.\r\n\r\n![Bild](http://tekniken.nu/uploads/634085782495208132-selecta.png)", + "html": "

    Det finns många tillfällen då jag stör mig på att företag inte hängt med i utvecklingen och gör det krångligt för sina kunder.


    Jag tänker t.ex. på parkeringsautomater, som fram tills för något år sedan, endast tillät betalning med mynt. Det är ju inte särskilt troligt att folk har 120 kronor i mynt för en hel dags parkering. Nu har ju som tur var de flesta parkeringsautomaterna uppgraderats till att acceptera betalkort och SMS som betalning.


    Ett område som fortfarande är ganska hopplöst efter är varuautomater. Det händer ibland att jag vill köpa något att dricka eller äta i varuautomaterna i tunnelbanan. Men eftersom att jag i princip gör alla mina inköp med Visa-kort så är det väldigt sällan som jag har kontanter i plånboken. Härom dagen var jag i ett sådant läge. Stod där framför en automat, men hade inte tillräckligt med pengar för att göra ett inköp. Att betala med kort var fortfarande inte möjligt.


    Däremot så hade de infört betalning via SMS. Jag skrev automatens kod samt beloppet för varan jag skulle köpa, och skickade till deras nummer.


    Inom några sekunder uppdaterades automatens display till att visa min betalda kredit, och jag kunde köpa min vara. Det blev ett påslag på 3 kronor för denna form av betalning, vilket jag tycker är lite fånigt. Det är ju trots allt så att de ökar sin försäljning på att erbjuda denna form av betalning.


    Utan möjligheten att betala med SMS hade jag inte gjort mitt inköp. Därför borde det ju vara så att priset för att underhålla det systemet bakas in i den ökade försäljningen. Men denna invändning till trots, så tycker jag att det är väldigt positivt att se ett företag ta steget mot en mer användarvänlig värld.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Äntligen nya sätt att betala", + "meta_description": "", + "author_id": 1092, + "created_at": 1272981448000, + "created_by": 1092, + "updated_at": 1272981448000, + "updated_by": 1092, + "published_at": 1272981448000, + "published_by": 1092 + }, + { + "id": 409, + "title": "Spelutveckling med XNA", + "slug": "spelutveckling-med-xna", + "markdown": "\r\n\r\nAtt skapa spel till Windows, Windows mobile och Xbox kan vara både enkelt och snabbt. Det går dessutom att göra gratis. Tekniken som används kallas XNA och är Microsofts plattform för spelutveckling. Om man redan har Visual Studio installerat räcker det med att installera ett add-on som heter XNA Game Studio. Man kan välja en version för Windows mobile 7 och en för övriga plattformar. Har man inte Visual Studio går det bra att installera Visual C# Express Edition. Ladda ner XNA här!\r\n\r\n\r\nI Visual Studio/Visual C# Express finns nu möjligheten att skapa ett nytt spelprojekt via File > New project > XNA Game studio 3.1. Då har man tillgång till ett flertal olika projekttyper: Windows Game, Xbox Game, Plattformer starter kit\r\n\r\n\r\nAtt skapa sitt första spel är ganska enkelt. I korthet är processen att du skapar grafikobjekt som du fyller med innehåll.\r\n\r\n\r\nGrafiken ska sedan skrivas ut på skärmen, vilket sker i Draw-metoden. Här kan du göra en kontroll så att det inte blir för många objekt som visas samtidigt. Du kan även välja att slumpa ut värden som hastighet, storlek och riktning. \r\n\r\n\r\n\r\nI Update-metoden sköter du logiken, som exempelvis vad som händer om två objekt kolliderar.I update metoden hanterar du även vad som ska ske vid knapptryckningar. Du anger om hastigheten ska ändras, hur många objekt (fiender, kanonkulor) som kan vara på skärmen samtidigt och i vilken riktning objekten kan röra sig. Här kan du även göra ändringar i en spelares fysiska förutsättningar. Om spelaren exempelvis nått en viss poängnivå, kan man tillåta spelaren att hoppa högre, springa fortare eller bli större. Om spelaren nått slutet av en bana, kan man ändra bilden i bakgrundsgrafikobjektet.\r\n\r\n\r\nOm du har erfarenhet av att jobba med Flash kommer du säkert att känna igen vissa koncept. Man arbetar mycket med X och Y koordinater och grafik som man förflyttar i olika riktningar. Det är enkelt att komma igång, och det finns mångra bra tutorials (exempelvishttp://creators.xna.com/en-US/education/gettingstarted/bg2d/chapter1 ochhttp://creators.xna.com/en-US/education/gettingstarted/bg3d/chapter1). Det finns även många bra starter kits , som gör att du får en bra grund att stå på i ditt spelbyggande.\r\n\r\n\r\nTrots att det är enkelt att komma igång, så tycker jag ändå att det saknas en del grundläggande hjälpfunktioner. En sak som mig veterligen inte finns, är en Collision-klass, som kan användas för att beräkna om objekt kolliderar med varandra. Som det är nu måste man skriva den logiken själv. Det känns som en av de viktigaste bultarna i de flesta spel. Denna Collision-klass skulle kunna ha ett antal metoder för olika typer av kollisionshantering (Exempelvis Alpha, Block och Border).\r\n", + "html": "

    Att skapa spel till Windows, Windows mobile och Xbox kan vara både enkelt och snabbt. Det går dessutom att göra gratis. Tekniken som används kallas XNA och är Microsofts plattform för spelutveckling. Om man redan har Visual Studio installerat räcker det med att installera ett add-on som heter XNA Game Studio. Man kan välja en version för Windows mobile 7 och en för övriga plattformar. Har man inte Visual Studio går det bra att installera Visual C# Express Edition. Ladda ner XNA här!


    I Visual Studio/Visual C# Express finns nu möjligheten att skapa ett nytt spelprojekt via File > New project > XNA Game studio 3.1. Då har man tillgång till ett flertal olika projekttyper: Windows Game, Xbox Game, Plattformer starter kit



    Att skapa sitt första spel är ganska enkelt. I korthet är processen att du skapar grafikobjekt som du fyller med innehåll.



    Grafiken ska sedan skrivas ut på skärmen, vilket sker i Draw-metoden. Här kan du göra en kontroll så att det inte blir för många objekt som visas samtidigt. Du kan även välja att slumpa ut värden som hastighet, storlek och riktning. 




    I Update-metoden sköter du logiken, som exempelvis vad som händer om två objekt kolliderar.

    I update metoden hanterar du även vad som ska ske vid knapptryckningar. Du anger om hastigheten ska ändras, hur många objekt (fiender, kanonkulor) som kan vara på skärmen samtidigt och i vilken riktning objekten kan röra sig. Här kan du även göra ändringar i en spelares fysiska förutsättningar. Om spelaren exempelvis nått en viss poängnivå, kan man tillåta spelaren att hoppa högre, springa fortare eller bli större. Om spelaren nått slutet av en bana, kan man ändra bilden i bakgrundsgrafikobjektet.


    Om du har erfarenhet av att jobba med Flash kommer du säkert att känna igen vissa koncept. Man arbetar mycket med X och Y koordinater och grafik som man förflyttar i olika riktningar. Det är enkelt att komma igång, och det finns mångra bra tutorials (exempelvishttp://creators.xna.com/en-US/education/gettingstarted/bg2d/chapter1 ochhttp://creators.xna.com/en-US/education/gettingstarted/bg3d/chapter1). Det finns även många bra starter kits , som gör att du får en bra grund att stå på i ditt spelbyggande.


    Trots att det är enkelt att komma igång, så tycker jag ändå att det saknas en del grundläggande hjälpfunktioner. En sak som mig veterligen inte finns, är en Collision-klass, som kan användas för att beräkna om objekt kolliderar med varandra. Som det är nu måste man skriva den logiken själv. Det känns som en av de viktigaste bultarna i de flesta spel. Denna Collision-klass skulle kunna ha ett antal metoder för olika typer av kollisionshantering (Exempelvis Alpha, Block och Border).

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Spelutveckling med XNA", + "meta_description": "", + "author_id": 1092, + "created_at": 1274809337000, + "created_by": 1092, + "updated_at": 1274809337000, + "updated_by": 1092, + "published_at": 1274809337000, + "published_by": 1092 + }, + { + "id": 415, + "title": "Rullbar mobilskärm!", + "slug": "rullbar-mobilskarm", + "markdown": "\r\n\r\nSony har utvecklat en mobilskärm som är ihoprullbar. Skärmen som är 4,1 tum har en upplösning på 420 * 240 pixlar. Den kan visa 16 miljoner färger och har en kontrastratio på 1000:1.\r\n\r\n\r\n\r\nDet här är en väldigt intressant utveckling. Min gissning och dröm är att det, inom en inte allt för avlägsen framtid, kommer att finnas skärmar som är utdragbara. Alltså skärmar som man kan öka och minska storleken på, ungefär som man kan göra med webbläsarfönster. Tänk vad smidigt det skulle vara att kunna dra ut sin mobilskärm till att bli en skärm stor nog att se på film tillsammans med sina vänner. Och tänk vad smidigt när man ska hålla föredrag eller presentationer.\r\n\r\nDen här skärmen, om än i en konceptfas, visar mot en framtid där mobiltelefonerna tar över allt fler funktioner som idag sköts med datorer, tv, radio och papper. Tänk vad skönt att ersätta tv, datorer, radio och papper mot en enda mobil!\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/634105757351380032-image001.png@01CAFD8F.6688EA40__image001.png)", + "html": "

    Sony har utvecklat en mobilskärm som är ihoprullbar. Skärmen som är 4,1 tum har en upplösning på 420 * 240 pixlar. Den kan visa 16 miljoner färger och har en kontrastratio på 1000:1.

    Det här är en väldigt intressant utveckling. Min gissning och dröm är att det, inom en inte allt för avlägsen framtid, kommer att finnas skärmar som är utdragbara. Alltså skärmar som man kan öka och minska storleken på, ungefär som man kan göra med webbläsarfönster. Tänk vad smidigt det skulle vara att kunna dra ut sin mobilskärm till att bli en skärm stor nog att se på film tillsammans med sina vänner. Och tänk vad smidigt när man ska hålla föredrag eller presentationer.

    Den här skärmen, om än i en konceptfas, visar mot en framtid där mobiltelefonerna tar över allt fler funktioner som idag sköts med datorer, tv, radio och papper. Tänk vad skönt att ersätta tv, datorer, radio och papper mot en enda mobil!

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Rullbar mobilskärm!", + "meta_description": "", + "author_id": 1092, + "created_at": 1274984280000, + "created_by": 1092, + "updated_at": 1274984280000, + "updated_by": 1092, + "published_at": 1274984280000, + "published_by": 1092 + }, + { + "id": 420, + "title": "Chrome och Opera växer snabbast", + "slug": "chrome-och-opera-vaxer-snabbast", + "markdown": "\r\n\r\nI den senaste rapporten från Net Applications som håller koll på det globala webbanvändandet så sjunker marknadsandelen för Internet Explorer och FireFox, medan Chrome och Opera växer mest. IE har hamnat under 60 procentsstrecket och FireFox är under 25, medan Chrome har kommit upp i 7,05 procent. Intressant är att IE8 är den enskilda webbläsarversion som växer snabbast, men det räcker inte för att kompensera för det enorma tappet i de andra IE-versionerna.\r\n\r\n\r\n\r\nMer detaljer finns hos Ars Technica.\r\n\r\n![Bild](http://tekniken.nu/uploads/634110692050480931-browser_share_0510-thumb-640xauto-14293.png)", + "html": "

    I den senaste rapporten från Net Applications som håller koll på det globala webbanvändandet så sjunker marknadsandelen för Internet Explorer och FireFox, medan Chrome och Opera växer mest. IE har hamnat under 60 procentsstrecket och FireFox är under 25, medan Chrome har kommit upp i 7,05 procent. Intressant är att IE8 är den enskilda webbläsarversion som växer snabbast, men det räcker inte för att kompensera för det enorma tappet i de andra IE-versionerna.

    Mer detaljer finns hos Ars Technica.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Chrome och Opera växer snabbast", + "meta_description": "", + "author_id": 6, + "created_at": 1275472404000, + "created_by": 6, + "updated_at": 1275472404000, + "updated_by": 6, + "published_at": 1275472404000, + "published_by": 6 + }, + { + "id": 428, + "title": "Två bra nyheter i Chrome", + "slug": "tva-bra-nyheter-i-chrome", + "markdown": "\r\n\r\nI utvecklarkanalen för Chrome har två riktigt bra funktioner dykt upp:\r\n\r\n\r\n## Synkronisering av extensions\r\nChrome har sedan tidigare synkronisering av bokmärken, lösenord och inställningar. Det är väldigt bekvämt att få samma miljö hemma som på jobbet, men en sak har saknats: synkroniseringa av extensions (tillägg som AdBlock, AddThis, utvecklarverktyg och mycket annat). I den nyaste versionen av Chrome finns det möjlighet att synka även dessa. Gör såhär:\r\n\r\nLadda ner senaste utvecklarversionen av Chrome (byt med Chrome Channel Changer om du kör stabila eller betakanalen)Lägg till följande i genvägen som startar Chrome: --enable-sync-extensionsI Options->Synced, kryssa i Extensions\r\n\r\nJag ska i ärlighetens namn säga att det inte funkar felfritt än, men det är bara en tidsfråga innan synkroniseringen funkar lika bra som den för bokmärken\r\n## Inbyggd PDF-visare\r\nJag vet inte varför, men att visa PDF-filer från webben verkar vara en riktigt knepig uppgift. Om man kör med Adobe Reader så körs ett enormt resurkrävande program igång som inte särskilt sällan får för sig att visa modala dialogrutor längst bak, så att man tror att webbläsaren har hängt sig. Med t.ex. Foxit Reader fungerar det lite bättre, men åtminstone i Chrome så visas PDF:erna högst varannan gång, de andra 50 procenten så hänger den fliken helt och hållet. \r\n\r\nFrån och med nu finns dock en lättviktsläsare för PDF inbyggd i Chrome! Efter att ha uppdaterat (se ovan) så går du in i Extensions och aktiverar PDF-läsaren. Läsaren har egentligen inga funktioner alls utöver att visa PDF:en, men hittills har den visat alla PDF:er korrekt och är extremt snabb och snäll mot datorns resurser.\r\n\r\n![Bild](http://tekniken.nu/uploads/634128091861335681-chrome-dev.png)", + "html": "

    I utvecklarkanalen för Chrome har två riktigt bra funktioner dykt upp:

    Synkronisering av extensions

    Chrome har sedan tidigare synkronisering av bokmärken, lösenord och inställningar. Det är väldigt bekvämt att få samma miljö hemma som på jobbet, men en sak har saknats: synkroniseringa av extensions (tillägg som AdBlock, AddThis, utvecklarverktyg och mycket annat). I den nyaste versionen av Chrome finns det möjlighet att synka även dessa. Gör såhär:

    1. Ladda ner senaste utvecklarversionen av Chrome (byt med Chrome Channel Changer om du kör stabila eller betakanalen)
    2. Lägg till följande i genvägen som startar Chrome: --enable-sync-extensions
    3. I Options->Synced, kryssa i Extensions

    Jag ska i ärlighetens namn säga att det inte funkar felfritt än, men det är bara en tidsfråga innan synkroniseringen funkar lika bra som den för bokmärken

    Inbyggd PDF-visare

    Jag vet inte varför, men att visa PDF-filer från webben verkar vara en riktigt knepig uppgift. Om man kör med Adobe Reader så körs ett enormt resurkrävande program igång som inte särskilt sällan får för sig att visa modala dialogrutor längst bak, så att man tror att webbläsaren har hängt sig. Med t.ex. Foxit Reader fungerar det lite bättre, men åtminstone i Chrome så visas PDF:erna högst varannan gång, de andra 50 procenten så hänger den fliken helt och hållet.

    Från och med nu finns dock en lättviktsläsare för PDF inbyggd i Chrome! Efter att ha uppdaterat (se ovan) så går du in i Extensions och aktiverar PDF-läsaren. Läsaren har egentligen inga funktioner alls utöver att visa PDF:en, men hittills har den visat alla PDF:er korrekt och är extremt snabb och snäll mot datorns resurser.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Två bra nyheter i Chrome", + "meta_description": "", + "author_id": 6, + "created_at": 1277212385000, + "created_by": 6, + "updated_at": 1277212385000, + "updated_by": 6, + "published_at": 1277212385000, + "published_by": 6 + }, + { + "id": 430, + "title": "Varför jag väntar på Windows Phone 7", + "slug": "varfor-jag-vantar-pa-windows-phone-7", + "markdown": "\r\n\r\nJag är den enda på jobbet som inte gått över till iphone utan jag håller kvar vid min i det här laget uråldriga HTC Touch Diamond. Här är anledningarna till varför jag väntar på Microsofts nästa mobil-OS.\r\n\r\nEftersom telefonerna inte finns ännu är det förstås lite av en chansning att redan nu bestämma sig för wp7 men här finns några anledningar varför jag tror att det kan vara rätt beslut.\r\n## Hårdvara\r\nDe största tillverkarna av smartphones som idag tillverkar wm6.x- och android-telefoner kommer också tillverka wp7-mobiler och det finns förstås ingen anledning varför dessa skulle bygga sämre telefoner rent hårdvarumässigt. Kort sagt redan idag finns telefoner vars hårdvara är riktigt bra och det kommer att bli bättre så väljer man mellan android och wp7 så är det inte hårdvaran man behöver välja mellan.\r\n## Silverlight\r\nTrots att silverlight i grunden är en otroligt smidig teknik för att bygga gränsnitt så finns få applikationer och sajter idag. Jag tror dock att den här telefonen är det som krävs för att väcka intresset och att kommer att få se en flora av riktigt snygga och väl fungerande applikationer. Tidigare windows mobile-applikationer har ju mest gått från riktigt tråkig windows 3.11 look till gräsligt fult när programmerarna gjort om gränsnitten så gått de kunnat. Nu finns verkyg i form av Microsoft Blend så att designers utan kostnad och utan teknisk kunskap kan hjälpa till att designa applikationerna.\r\n## Spel\r\nGivetvis är det lite tidigt säga att det kommer att bli en grym spelplattform men tekniken finns definitivt där. XNA med C# och directx 9 i botten kommer göra det enkelt att porta spel mellan windows, xbox 360 och wp7 och det lär tilltala både proffsutvecklarna och hobbyutvecklarna. Det som behövs för att garantera framgång är att några större speltillverkare fokuserar på telefonen och här har ju microsoft lyckats förr (dock inte angående telefonerna).\r\n## Saknade funktioner och killer funktioner\r\nAndroid är flexibelt när det gäller konfiguration men det var gamla wm6.x också. Skillnaden mellan slutkonfigurationerna är så stora att man knappt kan säga vad som är i botten längre och här kommer definitivt wp7 sticka ut på samma sätt som iphone. Om man gillar att sitta på kvällen och pixelputta telefonen så är det nog fel mobil. Kör man vaniljvarianten av windows och spenderar tiden med att jobba, spela eller se film istället för installera och bygga egna skins så är man nog mer rätt målgrupp.\r\n\r\nDet saknas vissa funktioner som andra telefoner har som t.ex multitasking och detta betyder att vissa typer av applikationer kommer tyvärr vara omöjliga att bygga som t.ex egen musikspelare som spelar i bakgrunden medan man jobbar, exempelvis spotify. I de flesta fall kommer telefonen att bete sig som om multitasking finns, du kan t.ex sätta igång en uppgift på telefonen och få en notifiering när det är klart så länge själva jobbet kan utföras på en server istället för på själva telefonen. De inbyggda programmen har stöd för multitasking så att spela musik medan man kollar mailen kommer vara möjligt ändå.\r\n\r\nNån typ av multitaskning kommer nästan garanterat komma vid en senare version och ärligt talat så verkar ju iphone ha klarat sig okey fram till 4an så förhoppningsvis så klarar sig wp7 ett tag iaf.\r\n\r\nDet kommer inte vara världens mest avancerade telefon om man kollar på rena funktioner. Den kommer att ha brister och den kommer att begränsningar men den kommer också ha en del unika saker och åtminstone en del av dom som t.ex c#, xna och silverlight kommer locka utvecklare och med bra stöd för utvecklare så kommer telefonen få mängder av applikationer och spel.\r\n\r\nTelefonen kommer ha stöd för uppdatering direkt från microsoft (tänk windows update) och windows phone 7 kommer snart bli windows phone 7.1 och 7.5 och 8.0 och det finns gott om tid att fylla ut luckorna.\r\n## Grisen i säcken\r\nJag har aldrig ens rört en betaversion annat än en titt på emulatorn och lite videos så det är svårt att veta om jag kommer uppskatta flödet och detaljerna på telefonen så det är förvisso en gris i en säck, men grisen kan c# och silverlight och den är snygg även utan läppstift och enligt tidiga recensioner snabb och väloljad så jag kommer nog bli ganska nöjd. Nu är det bara att vänta på en skarp telefon och välja tillverkare bland LG , Asus, HTC, Samsung,  Dell och kanske nån fler. Kanske nån typ av uppföljare till Samsung Galaxy S vore nice.\r\n", + "html": "

    Jag är den enda på jobbet som inte gått över till iphone utan jag håller kvar vid min i det här laget uråldriga HTC Touch Diamond. Här är anledningarna till varför jag väntar på Microsofts nästa mobil-OS.

    Eftersom telefonerna inte finns ännu är det förstås lite av en chansning att redan nu bestämma sig för wp7 men här finns några anledningar varför jag tror att det kan vara rätt beslut.

    Hårdvara

    De största tillverkarna av smartphones som idag tillverkar wm6.x- och android-telefoner kommer också tillverka wp7-mobiler och det finns förstås ingen anledning varför dessa skulle bygga sämre telefoner rent hårdvarumässigt. Kort sagt redan idag finns telefoner vars hårdvara är riktigt bra och det kommer att bli bättre så väljer man mellan android och wp7 så är det inte hårdvaran man behöver välja mellan.

    Silverlight

    Trots att silverlight i grunden är en otroligt smidig teknik för att bygga gränsnitt så finns få applikationer och sajter idag. Jag tror dock att den här telefonen är det som krävs för att väcka intresset och att kommer att få se en flora av riktigt snygga och väl fungerande applikationer. Tidigare windows mobile-applikationer har ju mest gått från riktigt tråkig windows 3.11 look till gräsligt fult när programmerarna gjort om gränsnitten så gått de kunnat. Nu finns verkyg i form av Microsoft Blend så att designers utan kostnad och utan teknisk kunskap kan hjälpa till att designa applikationerna.

    Spel

    Givetvis är det lite tidigt säga att det kommer att bli en grym spelplattform men tekniken finns definitivt där. XNA med C# och directx 9 i botten kommer göra det enkelt att porta spel mellan windows, xbox 360 och wp7 och det lär tilltala både proffsutvecklarna och hobbyutvecklarna. Det som behövs för att garantera framgång är att några större speltillverkare fokuserar på telefonen och här har ju microsoft lyckats förr (dock inte angående telefonerna).

    Saknade funktioner och killer funktioner

    Android är flexibelt när det gäller konfiguration men det var gamla wm6.x också. Skillnaden mellan slutkonfigurationerna är så stora att man knappt kan säga vad som är i botten längre och här kommer definitivt wp7 sticka ut på samma sätt som iphone. Om man gillar att sitta på kvällen och pixelputta telefonen så är det nog fel mobil. Kör man vaniljvarianten av windows och spenderar tiden med att jobba, spela eller se film istället för installera och bygga egna skins så är man nog mer rätt målgrupp.

    Det saknas vissa funktioner som andra telefoner har som t.ex multitasking och detta betyder att vissa typer av applikationer kommer tyvärr vara omöjliga att bygga som t.ex egen musikspelare som spelar i bakgrunden medan man jobbar, exempelvis spotify. I de flesta fall kommer telefonen att bete sig som om multitasking finns, du kan t.ex sätta igång en uppgift på telefonen och få en notifiering när det är klart så länge själva jobbet kan utföras på en server istället för på själva telefonen. De inbyggda programmen har stöd för multitasking så att spela musik medan man kollar mailen kommer vara möjligt ändå.

    Nån typ av multitaskning kommer nästan garanterat komma vid en senare version och ärligt talat så verkar ju iphone ha klarat sig okey fram till 4an så förhoppningsvis så klarar sig wp7 ett tag iaf.

    Det kommer inte vara världens mest avancerade telefon om man kollar på rena funktioner. Den kommer att ha brister och den kommer att begränsningar men den kommer också ha en del unika saker och åtminstone en del av dom som t.ex c#, xna och silverlight kommer locka utvecklare och med bra stöd för utvecklare så kommer telefonen få mängder av applikationer och spel.

    Telefonen kommer ha stöd för uppdatering direkt från microsoft (tänk windows update) och windows phone 7 kommer snart bli windows phone 7.1 och 7.5 och 8.0 och det finns gott om tid att fylla ut luckorna.

    Grisen i säcken

    Jag har aldrig ens rört en betaversion annat än en titt på emulatorn och lite videos så det är svårt att veta om jag kommer uppskatta flödet och detaljerna på telefonen så det är förvisso en gris i en säck, men grisen kan c# och silverlight och den är snygg även utan läppstift och enligt tidiga recensioner snabb och väloljad så jag kommer nog bli ganska nöjd. Nu är det bara att vänta på en skarp telefon och välja tillverkare bland LG , Asus, HTC, Samsung,  Dell och kanske nån fler. Kanske nån typ av uppföljare till Samsung Galaxy S vore nice.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Varför jag väntar på Windows Phone 7", + "meta_description": "", + "author_id": 1089, + "created_at": 1281351913000, + "created_by": 1089, + "updated_at": 1281351913000, + "updated_by": 1089, + "published_at": 1281351913000, + "published_by": 1089 + }, + { + "id": 432, + "title": "Framtidens mobiltelefon", + "slug": "framtidens-mobiltelefon", + "markdown": "\r\n\r\nMobiltelefonens betydelse och användningsområden har förändrats kraftigt senaste 5 åren. Här spekulerar jag fritt på vad jag tror kommer närmaste åren och små irritationsmoment som borde gå lösa redan nu med befintlig teknik.\r\n\r\n\r\n## Tillbehör som pluggas in i usb porten\r\nMidi-interface – plugga in synthar, trummaskiner och annat både för in- och uppspelning på proffsnivå.Spelkontroller – handkontroller, joysticks  och rattar men också mer skräddarsydda typ guitarrherogitarrenSkrivare och skanners – gör telefonen till en riktig kontorsmaskinTangentbord/möss – i kombination med extern skärm har man en liten dator i fickan.\r\n## Röststyrning/Artificiell intelligens\r\nNu pratar jag inte om den begränsade typ \"ring person\" eller \"starta program\" utan ett mer naturligt språk ungefär som om man pratar med nån i andra änden. Istället för att starta en applikation för att kolla avstånd mellan två orter eller hur långt du sprungit senaste rundan så kan du fråga. Det här lär bli bättre och bättre men än så länge är det lite sci-fi.\r\n## TV/Montitor-ut\r\nDetta finns redan men inte speciellt omfattande. Tanken skulle vara att telefonen skulle bli en komplett media och underhållningshub även till hemmabio/fester osv. Som sagt, finns redan men inte särskilt utbrett.\r\n## Sladdar ersätts helt av WIFI/bluetooth eller motsvarande\r\nAll kommunikation med extern hårdvara som tv, musikanläggningar, skrivare och dyl kommer förstås bli trådlöst men det krävs en global standard och det är några år bort.\r\n## Optisk zoom\r\nDet är helt klart dags för mobilkameran att få optisk zoom. Det måste gå bygga ett linssystem på bredden/höjden istället för djupet alternativt nån typ av holografiska linser (som man läste om i vetenskapens värld på i början av 90-talet..)\r\n## Puffskydd!\r\nDet är ju hel t bizzart att det måste vara absolut vindstilla för att det ska gå prata. Hur svårt ska det vara att bygga in en skumgummibit framför mikrofonen?\r\n## Matt glas\r\nDet är väldigt sällan man vill se sig själv när man styr telefonen.\r\n## Tunn i fickan men greppvänlig i handen\r\nDet borde inte vara omöjligt att bygga en tunn och platt telefon som går att göra större/ mer greppvänlig när man håller den i handen. Detta borde gå göra utan att böja/vika skärmen som förstås kräver lite mer tekniska framsteg.\r\n## Smartare notifieringar\r\nNär telefonen ligger på ett bord och det ringer så låter ju vibratorn mer än ringsignalen och det är ju inte direkt ett harmoniskt ljud. Slå helt enkelt av vibratorn om telefonen ligger stilla horisontellt.\r\n\r\nRingsignaler borde analysera bakgrundsljudet och förstärka de frekvenser som behövs för att ljudet ska höras tydligt. Vet inte hur många gånger man bara hört ett skumt pip och upptäkt att resten av melodin försvunnit bland bakgrundsljudet.\r\n\r\nVibrationer fungerar bara när telefonen ligger bra mot huden men när man har telefonen i lösare tyg så känns inte vibrationer, telefonen borde istället studsa med större rörelser så att man upplever att nån rycker i tyget istället.\r\n## Stänga av displayen vid rätt tillfällen\r\nNär man visar nåt ett kvitto t.ex från ett sms ska ju telefonen inte stänga av sig. Helst vill man då kanske låsa touchdelen och låta den stanna i enbart visningsläge.\r\n\r\nFatta när telefonen är i fickan och minska antalet fickringningar,  kanske genom nån typ av säkring som många pistoler har dvs det går inte skjuta om du inte håller handen runt kolven.\r\n## En elektriskt ledande penna och en skärm som fattar hur hårt man trycker\r\nVisst, det går att styra mobiler med fingar och korv (länk) men det vore praktiskt att kunna använda en penna till teckningar och underskrifter. Rent praktiskt borde man redan idag på befintliga telefoner kunna skapa en penna som över bluetooth skickar över hur hårt man trycker.\r\n## Uppgraderingsbara och standardiserade telefoner\r\nNu pratar jag inte om mjukvara (iaf inte enbart) utan hårdvara. Det borde gå bygga en komponentbaserad telefon där man kan uppgradera cpu, kamera, batteri, högtalare, tangentbord och skärm separat. På så sätt skulle det räcka med en modell med tillbehör för varje generation av telefoner istället för 5-10 modeller per tillverkar som bara har små förändringar. Guld vore förstås att kunna köpa t.ex kameran av canon, tangentbordet från razor eller logitech osv.\r\n## Headset med kamera\r\nSkulle göra det möjligt att filma hela sitt liv om man nu skulle vilja det. Mer praktiskt och användbart vore det dock för support dvs visa personen i andra änden vad du ser på, klart mer användbart än att visa sitt eget ansikte.\r\n## Betalningsmedel och nyckel\r\nDet finns lösningar idag för att betala med sms men det är rätt begränsat än så länge. Givetvis vill man kunna betala på krogen också och varför inte kunna ge pengar till en kompis med mobilen?\r\n\r\nSamma teknik för att hantera pengatransaktioner borde fungera även för låsa upp dörrar. Vad smidigt det vore att kunna skicka ett sms till kompisen som ger hans mobil rätt att låsa upp hemdörren. Genom att kombinera med t.ex tillåtna tider och datum samt möjlighet att välja hur många gånger nyckeln funkar har man dessutom nåt som är ofantligt mycket smidigare än vanliga nycklar eller nyckelkort.\r\n## 3D med kantutjämning (Anti-aliasing)\r\nNu börjar 3D grafiken se klart mycket bättre ut, men varför är kantutjämning så ovanligt, visst tar det mer prestanda men det ser ju otroligt mycket bättre ut och då offrar man ju hellre några polygoner.\r\n## Nostalgispel\r\nHela 80- och 90-talet skapades det grymma spel med begränsad hårdvara. Sett till prestanda och upplösning så borde det komma en enorm våg med gamla C64 och Amiga spel som anpassats till mobilen. Tror de flesta vana datorspelare skulle kunna räkna upp åtminstone 20 klassiska spel dom saknar på rak arm och rotar man lite i kassettlådan så skulle man nog komma upp i 100 lätt.\r\n", + "html": "

    Mobiltelefonens betydelse och användningsområden har förändrats kraftigt senaste 5 åren. Här spekulerar jag fritt på vad jag tror kommer närmaste åren och små irritationsmoment som borde gå lösa redan nu med befintlig teknik.

    Tillbehör som pluggas in i usb porten

    • Midi-interface – plugga in synthar, trummaskiner och annat både för in- och uppspelning på proffsnivå.
    • Spelkontroller – handkontroller, joysticks  och rattar men också mer skräddarsydda typ guitarrherogitarren
    • Skrivare och skanners – gör telefonen till en riktig kontorsmaskin
    • Tangentbord/möss – i kombination med extern skärm har man en liten dator i fickan.

    Röststyrning/Artificiell intelligens

    Nu pratar jag inte om den begränsade typ \"ring person\" eller \"starta program\" utan ett mer naturligt språk ungefär som om man pratar med nån i andra änden. Istället för att starta en applikation för att kolla avstånd mellan två orter eller hur långt du sprungit senaste rundan så kan du fråga. Det här lär bli bättre och bättre men än så länge är det lite sci-fi.

    TV/Montitor-ut

    Detta finns redan men inte speciellt omfattande. Tanken skulle vara att telefonen skulle bli en komplett media och underhållningshub även till hemmabio/fester osv. Som sagt, finns redan men inte särskilt utbrett.

    Sladdar ersätts helt av WIFI/bluetooth eller motsvarande

    All kommunikation med extern hårdvara som tv, musikanläggningar, skrivare och dyl kommer förstås bli trådlöst men det krävs en global standard och det är några år bort.

    Optisk zoom

    Det är helt klart dags för mobilkameran att få optisk zoom. Det måste gå bygga ett linssystem på bredden/höjden istället för djupet alternativt nån typ av holografiska linser (som man läste om i vetenskapens värld på i början av 90-talet..)

    Puffskydd!

    Det är ju hel t bizzart att det måste vara absolut vindstilla för att det ska gå prata. Hur svårt ska det vara att bygga in en skumgummibit framför mikrofonen?

    Matt glas

    Det är väldigt sällan man vill se sig själv när man styr telefonen.

    Tunn i fickan men greppvänlig i handen

    Det borde inte vara omöjligt att bygga en tunn och platt telefon som går att göra större/ mer greppvänlig när man håller den i handen. Detta borde gå göra utan att böja/vika skärmen som förstås kräver lite mer tekniska framsteg.

    Smartare notifieringar

    När telefonen ligger på ett bord och det ringer så låter ju vibratorn mer än ringsignalen och det är ju inte direkt ett harmoniskt ljud. Slå helt enkelt av vibratorn om telefonen ligger stilla horisontellt.

    Ringsignaler borde analysera bakgrundsljudet och förstärka de frekvenser som behövs för att ljudet ska höras tydligt. Vet inte hur många gånger man bara hört ett skumt pip och upptäkt att resten av melodin försvunnit bland bakgrundsljudet.

    Vibrationer fungerar bara när telefonen ligger bra mot huden men när man har telefonen i lösare tyg så känns inte vibrationer, telefonen borde istället studsa med större rörelser så att man upplever att nån rycker i tyget istället.

    Stänga av displayen vid rätt tillfällen

    När man visar nåt ett kvitto t.ex från ett sms ska ju telefonen inte stänga av sig. Helst vill man då kanske låsa touchdelen och låta den stanna i enbart visningsläge.

    Fatta när telefonen är i fickan och minska antalet fickringningar,  kanske genom nån typ av säkring som många pistoler har dvs det går inte skjuta om du inte håller handen runt kolven.

    En elektriskt ledande penna och en skärm som fattar hur hårt man trycker

    Visst, det går att styra mobiler med fingar och korv (länk) men det vore praktiskt att kunna använda en penna till teckningar och underskrifter. Rent praktiskt borde man redan idag på befintliga telefoner kunna skapa en penna som över bluetooth skickar över hur hårt man trycker.

    Uppgraderingsbara och standardiserade telefoner

    Nu pratar jag inte om mjukvara (iaf inte enbart) utan hårdvara. Det borde gå bygga en komponentbaserad telefon där man kan uppgradera cpu, kamera, batteri, högtalare, tangentbord och skärm separat. På så sätt skulle det räcka med en modell med tillbehör för varje generation av telefoner istället för 5-10 modeller per tillverkar som bara har små förändringar. Guld vore förstås att kunna köpa t.ex kameran av canon, tangentbordet från razor eller logitech osv.

    Headset med kamera

    Skulle göra det möjligt att filma hela sitt liv om man nu skulle vilja det. Mer praktiskt och användbart vore det dock för support dvs visa personen i andra änden vad du ser på, klart mer användbart än att visa sitt eget ansikte.

    Betalningsmedel och nyckel

    Det finns lösningar idag för att betala med sms men det är rätt begränsat än så länge. Givetvis vill man kunna betala på krogen också och varför inte kunna ge pengar till en kompis med mobilen?

    Samma teknik för att hantera pengatransaktioner borde fungera även för låsa upp dörrar. Vad smidigt det vore att kunna skicka ett sms till kompisen som ger hans mobil rätt att låsa upp hemdörren. Genom att kombinera med t.ex tillåtna tider och datum samt möjlighet att välja hur många gånger nyckeln funkar har man dessutom nåt som är ofantligt mycket smidigare än vanliga nycklar eller nyckelkort.

    3D med kantutjämning (Anti-aliasing)

    Nu börjar 3D grafiken se klart mycket bättre ut, men varför är kantutjämning så ovanligt, visst tar det mer prestanda men det ser ju otroligt mycket bättre ut och då offrar man ju hellre några polygoner.

    Nostalgispel

    Hela 80- och 90-talet skapades det grymma spel med begränsad hårdvara. Sett till prestanda och upplösning så borde det komma en enorm våg med gamla C64 och Amiga spel som anpassats till mobilen. Tror de flesta vana datorspelare skulle kunna räkna upp åtminstone 20 klassiska spel dom saknar på rak arm och rotar man lite i kassettlådan så skulle man nog komma upp i 100 lätt.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Framtidens mobiltelefon", + "meta_description": "", + "author_id": 1089, + "created_at": 1283169751000, + "created_by": 1089, + "updated_at": 1283169751000, + "updated_by": 1089, + "published_at": 1283169751000, + "published_by": 1089 + }, + { + "id": 438, + "title": "SoundCloud - bästa molntjänsten för egen musik", + "slug": "soundcloud---basta-molntjansten-for-egen-musik", + "markdown": "\r\n\r\nIbland hittar man en ny tjänst och inser att de har gjort allt rätt. SoundCloud är precis en sån tjänst. På SoundCloud kan man ladda upp ljud och egen musik för enkel distribution, istället för att ladda upp på Yousendit eller Sprend som många gör idag. Fördelen med SoundCloud är att istället för lösryckta filer så får du allt samlat på ett ställe, med en bra spelare o.s.v. De stora fördelarna med SoundCloud jämfört med andra liknande tjänster:\r\nBra gratisabonnemang med 120 minuters utrymme (nästa steg ger 240 minuter och kostar €29 per år)Byggt med modern webbteknik, allra mest imponerande är spelaren som ser ut som Flash men är gjord helt i HTML och JavaScript, och fungerar utmärkt t.ex. på iPhone!Bra embedfunktioner, inklusive stöd för Wordpressbloggar som ligger på Wordpress.comAPI baserat på REST med enkla HTTP-liknande kommandon för att hämta och ändra information, istället för krångliga web services eller (huga!) C-bibliotek.Officiell iPhone-app (kostar 7 kronor) och tredjeparts Android-app. Behövs egentligen inte eftersom webbspelaren funkar fint, men är förstås enklare och snyggare.Direkta kopplingar till andra webbtjänster och applikationer där man direkt kan ladda upp sina alster till SoundCloud. Ett sånt exempel är AmpKit för iPhone.Sociala funktioner med användare, följare och grupper för att hitta nya lyssnare och nya produktioner.\r\nSåhär ser den inbäddade spelaren ut:\r\n\r\n\r\n Anders Bornholm - To Tame a Land Cover by osiris8\r\n\r\n![Bild](http://tekniken.nu/uploads/634199711763660560-soundcloud.PNG)", + "html": "

    Ibland hittar man en ny tjänst och inser att de har gjort allt rätt. SoundCloud är precis en sån tjänst. På SoundCloud kan man ladda upp ljud och egen musik för enkel distribution, istället för att ladda upp på Yousendit eller Sprend som många gör idag. Fördelen med SoundCloud är att istället för lösryckta filer så får du allt samlat på ett ställe, med en bra spelare o.s.v. De stora fördelarna med SoundCloud jämfört med andra liknande tjänster:

    • Bra gratisabonnemang med 120 minuters utrymme (nästa steg ger 240 minuter och kostar €29 per år)
    • Byggt med modern webbteknik, allra mest imponerande är spelaren som ser ut som Flash men är gjord helt i HTML och JavaScript, och fungerar utmärkt t.ex. på iPhone!
    • Bra embedfunktioner, inklusive stöd för Wordpressbloggar som ligger på Wordpress.com
    • API baserat på REST med enkla HTTP-liknande kommandon för att hämta och ändra information, istället för krångliga web services eller (huga!) C-bibliotek.
    • Officiell iPhone-app (kostar 7 kronor) och tredjeparts Android-app. Behövs egentligen inte eftersom webbspelaren funkar fint, men är förstås enklare och snyggare.
    • Direkta kopplingar till andra webbtjänster och applikationer där man direkt kan ladda upp sina alster till SoundCloud. Ett sånt exempel är AmpKit för iPhone.
    • Sociala funktioner med användare, följare och grupper för att hitta nya lyssnare och nya produktioner.

    Såhär ser den inbäddade spelaren ut:


    Anders Bornholm - To Tame a Land Cover by osiris8

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "SoundCloud - bästa molntjänsten för egen musik", + "meta_description": "", + "author_id": 6, + "created_at": 1284374375000, + "created_by": 6, + "updated_at": 1284374375000, + "updated_by": 6, + "published_at": 1284374375000, + "published_by": 6 + }, + { + "id": 441, + "title": "Vad ska man ha en iPad till?", + "slug": "vad-ska-man-ha-en-ipad-till", + "markdown": "\r\n\r\nIgår släpptes så den första betaversionen av iOS 4.2 för iPad som möjliggör ett svenskt tangentbord och multitasking. Till slut är därmed iPad en helt mogen produkt även i Sverige. Att använda den utan svenskt tangentbord och multitasking har varit kanon men något knöligt.\r\n\r\nVad är då poängen med en iPad - vad ska man ha den till? Ja - Hm. Den löser inga gamla problem men den har skapat sitt eget självändamål. I mitt hem finns det redan en hel del datorer (alla macar visar det sig - jag var ju en PC förut men nu är jag tydligen en Mac). När man har behov av att surfa finns det oftast en dator att använda sig av men ändå kommer iPad fram hela tiden - nu har jag haft den i någon månad så nyhetens behag borde ha lagt sig vid det här laget.\r\n\r\nJag tänker lite på det som hände i köken i mitten på 90 talet - ni kommer ihåg - när morgon-tv-programmen kom - just det - köks-TVn. iPaden skulle jag säga är en hybrid av soff-surfare och köksbords-surfare. iPad har skapat ett nytt användningsområde eller nytt medium som är här för att stanna. I princip alla hårdvarutillverkare kämpar mot klockan för att hinna få ut sina alternativ lagom till julhandeln. Apple ryktas komma med en något mindre variant som troligtvis kommer vara billigare och vara som hybrid mellan iPod Touch och iPad. Det är välkommet men formatet 9,7 tum är helt lagom tycker jag.\r\n## Mina primära användningsområden\r\nFrukostdator. Surfa på nyheter vid frukostbordet. Perfekt användningsområde! Laptopen är för klumpig och känslig. Här önskar jag att Svd skulle släppa en App som tar deras tryckta version men i iPad format - precis som Wired har gjort med mycket gott resultat.Soffdator. Surfa i TV-soffan - här kan man tänka sig att laptopen skulle funka lika bra, men eftersom paddan startar så snabbt och inte har någon fläkt eller störande ljud för sig är den klockren som soff-dator.Arbetstillbehör. Mail- och kalendertillbehör. Perfekt när man jobbar vid den vanliga datorn är att ha mailen och kalendern lättillgängliga på iPad. Mailklienten är riktigt bra och har allt man behöver för det vardagliga.Pappaledighetsdator. Ha med till parken - detta kan ju upplevas som lite kontroversiellt men när man är pappaledig finns det faktiskt vissa tidpunkter då man faktiskt är ledig. Problemet är att tidpunkterna inte riktigt kommer i följd och man kan inte riktigt räkna med dem men dom finns där. Då är iPad perfekt sätt att snabbt utnyttja en kort paus.Barnprograms-TV. När barnen ska försöka sova eller man själv behöver en kort paus är iPad det perfekta barnprograms-TVn. Oavsett var du är - i bilen, på stranden, i sängen eller i soffan funkar det alltid att ta fram ett avsnitt av Fåret Shaun eller Pippi på Youtube. Iphone är helt ok för detta syftet om man bara har ett barn som ska titta men för två barn blir det för mycket bråk om den lilla telefonen - plus att man ofta behöver dom här pauserna när man behöver ta ett viktigt samtal.Mediacenter/multifjärrkontroll. Om man har nöjet att ha en Mac-mini kopplad till sin hemmabio har man nu i sin hand den perfekta multifjärrkontrollen. Installera Plex/nine på mac-mini och köp programmet PLEX på App store och du har hela ditt musik, film och tv bibliotek tillgängligt överallt där du har tillgång till WIFI. Även 3G men bildkvaliten är för dålig för att det ska vara njutbart. Med hjälp av denna ultimata kombination kan du nu antingen välja film/tv-avsnitt i soffan eller välja att titta på hela avsnittet i iPad från sängen. Du kanske börjar titta på en film i soffan på stora TVn men går sen till sängen och lägger barnen och kan sedan titta vidare precis där du slutade.Powerpoint-platta. På Apple-svenska heter Powerpoint Keynote men det funkar exakt likadant. Dock är den anpassade varianten av Keynote riktigt bra på iPad. Här kommer verkligen multi-touch till sin rätt. Att flytta på rubriker, bilder och grafer, att gemensamt bygga upp en presentation genom att skapa den tillsammans med en iPad är fantastiskt kul och enkelt. Idén med att skicka runt en platta ger glädje på ett annat sätt än att skjuta en laptop mellan två personer. Spelplatta. Självklart är det också en grym spel-dator om man har tid. Jag har endast spelat Real Racing, Solitaire och Risk så jag kan inte säga att det är mitt primära syfte men jag är säker på att jag hade resonerat annorlunda för tio år sen. \r\n## Några inte så lämpliga användningsområden\r\nPendlings-TV - Jag tog med mig \"paddan\" på tunnelbanan en morgon och började titta på ett avsnitt av (lagligt nedladdad) Entourage. Det visade sig vara en rätt pinsam historia då det är betydligt mycket fler sex-scener än man tror och folk runt omkring dig uppfattar bra vad som händer i ögonvrån. Nä - där är iPhone 4 ett bättre och behändigare val.Ordbehandlare - nu har jag precis installerat senaste uppdateringen så det här kanske ändrar sig - men att skriva långa texter på iPad är ingen höjdare. Man behöver då ha ett externt tangentbord och då faller lite poängen och man kan hellre skaffa sig en riktigt dator.e-Bokläsare - I den svenska bokaffären i iBook finns det inte mycket att hämta förutom några riktigt gamla gratis \"open-source\" böcker. Här är det som vanligt rättigheterna som är problemet och det kommer antagligen/förhoppningsvis lösa sig till lanseringen i Sverige. Om man har ett amerikanskt iTunes konto så går det däremot utmärkt att köpa böcker från tusentals internationella författare. Att läsa på en iPad är dock inte vad jag hade hoppats på - man blir ganska snabbt uttråkad och läshastigheten är inte den bästa på en skärm. Man vill hellre surfa. Böcker passar än så länge bättre på papper. ;)\r\n## Några önskemål på förbättringar\r\nFotoorganiserare - Det tidsödande jobbet att sortera, välja ut och ta bort bilder från sitt fotoalbum hade varit väldigt bra om det kunde göras direkt i foto-applikationen på iPad (och iPhone också) - här hoppas jag att Apple jobbar vidare. Kartfunktionen och att iPhoto ansikten i fotobiblioteket visas är kanonkul när man snabbt ska hitta bilder i sitt arkiv.Kalendern - ger en väldigt bra översikt och har till skillnad från sin iPhone motsvarighet även veckovy. Att Apple har struntat i multitouch funktioner för att bläddra mellan dagar och zooma mellan dag, vecka och månad förstår jag inte alls. Det går inte ens att klicka på en tidpunkt för att boka ny tid eller flytta på en befintlig bokning vilket hade varit helt fantastiskt. Jag hoppas att Apple har en kommande uppdatering på kalendern för i 4.2 finns det tyvärr ännu inget nytt på den fronten.\r\n## Vad är nytt i iOS 4.2?\r\nMultitasking (växla mellan program på samma sätt som i iOS 4 på iPhone). Nu kan man köra Spotify och spel samtidigt.Svenskt tangentbord - äntligen!AirPlay - skicka musik och film trådlöst till högtalare och tv. Detta går inte att testa än.Game Center - samla poäng när du spelar dataspel och dela med dina kompisar. Tyvärr är själva registreringsprocessen och bjuda in kompisar inte så smidig som den kunde varit (facebook-koppling hade varit att föredra).Justering av ljusstyrka i snabbmenyn - väldigt praktiskt vid godnattstunden!Ljud av-knappen är numera en ljud av-knapp. Att låsa riktningen på iPad gör man nu precis som på iPhone i snabbmenyn.Mappar på hemskärmen - äntligen får man lite struktur!Utskrift via trådlös uppkoppling - jag har inte riktigt saknat den här men kanske att man kan skriva ut bilder eller mail - tja.. Söka direkt på sidor i Safari - längst ner finns det numera en sökbar - väldigt bra för längre sidor.\r\n## Vilken version ska man välja?\r\nNär du står inför valet mellan WIFI eller 3G så säger jag helt klart 3G. Användningsområdet sträcker sig långt mycket längre än till soffan och sängen. Att ha med sig Internet på platta är en underbar känsla och slipper du krånglet med tekniken eller begräsningar till olika WIFI-nätverk så är det helt klart värt det. Om du tecknar ett tvillingabbonamang på Telia som i dagsläget kostar 40kr/mån så får du surfa på samma abonnemang som ditt vanliga abonnemang och har du obegränsad data på det är du home safe. Obs, för att använda 3G på iPad behöver du ställa in en s.k APN vilket tidigare gick att göra direkt i iPad inställningar men som nu behöver en s.k mobileprovision fil som installeras via iTunes. Mer om det inom kort.\r\n## Hur mycket minne behöver man?\r\nJag valde 64 GB men det behövs absolut inte mer än 32GB. Det mesta du behöver går att hämta trådlöst förutom bildbiblioteket som bör ha en hel del plats då bilderna skalas om till att passa iPads något större skärm.\r\n## När kommer iPad?\r\nIngen vet men numera är Apple i kapp i sin produktion med efterfrågan vilket tyder på att den är redo att lanseras på nya marknader.  Troligtvis kommer den släppas någon gång i oktober/november i samband med att den skarpa versionen av iOS 4.2 släpps. Tills dess går det bra att köpa paddan hos svenska importörer t ex www.ventor.se som jag köpte ifrån.\r\n\r\n![Bild](http://tekniken.nu/uploads/634202615935109366-3489DD30-E8A4-41F6-8F03-C4164CB63037@lan__hero_20100901.png)", + "html": "

    Igår släpptes så den första betaversionen av iOS 4.2 för iPad som möjliggör ett svenskt tangentbord och multitasking. Till slut är därmed iPad en helt mogen produkt även i Sverige. Att använda den utan svenskt tangentbord och multitasking har varit kanon men något knöligt.

    Vad är då poängen med en iPad - vad ska man ha den till? Ja - Hm. Den löser inga gamla problem men den har skapat sitt eget självändamål. I mitt hem finns det redan en hel del datorer (alla macar visar det sig - jag var ju en PC förut men nu är jag tydligen en Mac). När man har behov av att surfa finns det oftast en dator att använda sig av men ändå kommer iPad fram hela tiden - nu har jag haft den i någon månad så nyhetens behag borde ha lagt sig vid det här laget.

    Jag tänker lite på det som hände i köken i mitten på 90 talet - ni kommer ihåg - när morgon-tv-programmen kom - just det - köks-TVn. iPaden skulle jag säga är en hybrid av soff-surfare och köksbords-surfare. iPad har skapat ett nytt användningsområde eller nytt medium som är här för att stanna. I princip alla hårdvarutillverkare kämpar mot klockan för att hinna få ut sina alternativ lagom till julhandeln. Apple ryktas komma med en något mindre variant som troligtvis kommer vara billigare och vara som hybrid mellan iPod Touch och iPad. Det är välkommet men formatet 9,7 tum är helt lagom tycker jag.

    Mina primära användningsområden

    1. Frukostdator. Surfa på nyheter vid frukostbordet. Perfekt användningsområde! Laptopen är för klumpig och känslig. Här önskar jag att Svd skulle släppa en App som tar deras tryckta version men i iPad format - precis som Wired har gjort med mycket gott resultat.
    2. Soffdator. Surfa i TV-soffan - här kan man tänka sig att laptopen skulle funka lika bra, men eftersom paddan startar så snabbt och inte har någon fläkt eller störande ljud för sig är den klockren som soff-dator.
    3. Arbetstillbehör. Mail- och kalendertillbehör. Perfekt när man jobbar vid den vanliga datorn är att ha mailen och kalendern lättillgängliga på iPad. Mailklienten är riktigt bra och har allt man behöver för det vardagliga.
    4. Pappaledighetsdator. Ha med till parken - detta kan ju upplevas som lite kontroversiellt men när man är pappaledig finns det faktiskt vissa tidpunkter då man faktiskt är ledig. Problemet är att tidpunkterna inte riktigt kommer i följd och man kan inte riktigt räkna med dem men dom finns där. Då är iPad perfekt sätt att snabbt utnyttja en kort paus.
    5. Barnprograms-TV. När barnen ska försöka sova eller man själv behöver en kort paus är iPad det perfekta barnprograms-TVn. Oavsett var du är - i bilen, på stranden, i sängen eller i soffan funkar det alltid att ta fram ett avsnitt av Fåret Shaun eller Pippi på Youtube. Iphone är helt ok för detta syftet om man bara har ett barn som ska titta men för två barn blir det för mycket bråk om den lilla telefonen - plus att man ofta behöver dom här pauserna när man behöver ta ett viktigt samtal.
    6. Mediacenter/multifjärrkontroll. Om man har nöjet att ha en Mac-mini kopplad till sin hemmabio har man nu i sin hand den perfekta multifjärrkontrollen. Installera Plex/nine på mac-mini och köp programmet PLEX på App store och du har hela ditt musik, film och tv bibliotek tillgängligt överallt där du har tillgång till WIFI. Även 3G men bildkvaliten är för dålig för att det ska vara njutbart. Med hjälp av denna ultimata kombination kan du nu antingen välja film/tv-avsnitt i soffan eller välja att titta på hela avsnittet i iPad från sängen. Du kanske börjar titta på en film i soffan på stora TVn men går sen till sängen och lägger barnen och kan sedan titta vidare precis där du slutade.
    7. Powerpoint-platta. På Apple-svenska heter Powerpoint Keynote men det funkar exakt likadant. Dock är den anpassade varianten av Keynote riktigt bra på iPad. Här kommer verkligen multi-touch till sin rätt. Att flytta på rubriker, bilder och grafer, att gemensamt bygga upp en presentation genom att skapa den tillsammans med en iPad är fantastiskt kul och enkelt. Idén med att skicka runt en platta ger glädje på ett annat sätt än att skjuta en laptop mellan två personer. 
    8. Spelplatta. Självklart är det också en grym spel-dator om man har tid. Jag har endast spelat Real Racing, Solitaire och Risk så jag kan inte säga att det är mitt primära syfte men jag är säker på att jag hade resonerat annorlunda för tio år sen. 

    Några inte så lämpliga användningsområden

    1. Pendlings-TV - Jag tog med mig \"paddan\" på tunnelbanan en morgon och började titta på ett avsnitt av (lagligt nedladdad) Entourage. Det visade sig vara en rätt pinsam historia då det är betydligt mycket fler sex-scener än man tror och folk runt omkring dig uppfattar bra vad som händer i ögonvrån. Nä - där är iPhone 4 ett bättre och behändigare val.
    2. Ordbehandlare - nu har jag precis installerat senaste uppdateringen så det här kanske ändrar sig - men att skriva långa texter på iPad är ingen höjdare. Man behöver då ha ett externt tangentbord och då faller lite poängen och man kan hellre skaffa sig en riktigt dator.
    3. e-Bokläsare - I den svenska bokaffären i iBook finns det inte mycket att hämta förutom några riktigt gamla gratis \"open-source\" böcker. Här är det som vanligt rättigheterna som är problemet och det kommer antagligen/förhoppningsvis lösa sig till lanseringen i Sverige. Om man har ett amerikanskt iTunes konto så går det däremot utmärkt att köpa böcker från tusentals internationella författare. Att läsa på en iPad är dock inte vad jag hade hoppats på - man blir ganska snabbt uttråkad och läshastigheten är inte den bästa på en skärm. Man vill hellre surfa. Böcker passar än så länge bättre på papper. ;)

    Några önskemål på förbättringar

    1. Fotoorganiserare - Det tidsödande jobbet att sortera, välja ut och ta bort bilder från sitt fotoalbum hade varit väldigt bra om det kunde göras direkt i foto-applikationen på iPad (och iPhone också) - här hoppas jag att Apple jobbar vidare. Kartfunktionen och att iPhoto ansikten i fotobiblioteket visas är kanonkul när man snabbt ska hitta bilder i sitt arkiv.
    2. Kalendern - ger en väldigt bra översikt och har till skillnad från sin iPhone motsvarighet även veckovy. Att Apple har struntat i multitouch funktioner för att bläddra mellan dagar och zooma mellan dag, vecka och månad förstår jag inte alls. Det går inte ens att klicka på en tidpunkt för att boka ny tid eller flytta på en befintlig bokning vilket hade varit helt fantastiskt. Jag hoppas att Apple har en kommande uppdatering på kalendern för i 4.2 finns det tyvärr ännu inget nytt på den fronten.

    Vad är nytt i iOS 4.2?

    • Multitasking (växla mellan program på samma sätt som i iOS 4 på iPhone). Nu kan man köra Spotify och spel samtidigt.
    • Svenskt tangentbord - äntligen!
    • AirPlay - skicka musik och film trådlöst till högtalare och tv. Detta går inte att testa än.
    • Game Center - samla poäng när du spelar dataspel och dela med dina kompisar. Tyvärr är själva registreringsprocessen och bjuda in kompisar inte så smidig som den kunde varit (facebook-koppling hade varit att föredra).
    • Justering av ljusstyrka i snabbmenyn - väldigt praktiskt vid godnattstunden!
    • Ljud av-knappen är numera en ljud av-knapp. 
    • Att låsa riktningen på iPad gör man nu precis som på iPhone i snabbmenyn.
    • Mappar på hemskärmen - äntligen får man lite struktur!
    • Utskrift via trådlös uppkoppling - jag har inte riktigt saknat den här men kanske att man kan skriva ut bilder eller mail - tja.. 
    • Söka direkt på sidor i Safari - längst ner finns det numera en sökbar - väldigt bra för längre sidor.

    Vilken version ska man välja?

    När du står inför valet mellan WIFI eller 3G så säger jag helt klart 3G. Användningsområdet sträcker sig långt mycket längre än till soffan och sängen. Att ha med sig Internet på platta är en underbar känsla och slipper du krånglet med tekniken eller begräsningar till olika WIFI-nätverk så är det helt klart värt det. Om du tecknar ett tvillingabbonamang på Telia som i dagsläget kostar 40kr/mån så får du surfa på samma abonnemang som ditt vanliga abonnemang och har du obegränsad data på det är du home safe. Obs, för att använda 3G på iPad behöver du ställa in en s.k APN vilket tidigare gick att göra direkt i iPad inställningar men som nu behöver en s.k mobileprovision fil som installeras via iTunes. Mer om det inom kort.

    Hur mycket minne behöver man?

    Jag valde 64 GB men det behövs absolut inte mer än 32GB. Det mesta du behöver går att hämta trådlöst förutom bildbiblioteket som bör ha en hel del plats då bilderna skalas om till att passa iPads något större skärm.

    När kommer iPad?

    Ingen vet men numera är Apple i kapp i sin produktion med efterfrågan vilket tyder på att den är redo att lanseras på nya marknader.  Troligtvis kommer den släppas någon gång i oktober/november i samband med att den skarpa versionen av iOS 4.2 släpps. 
    Tills dess går det bra att köpa paddan hos svenska importörer t ex www.ventor.se som jag köpte ifrån.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Vad ska man ha en iPad till?", + "meta_description": "", + "author_id": 1087, + "created_at": 1284664791000, + "created_by": 1087, + "updated_at": 1284664791000, + "updated_by": 1087, + "published_at": 1284664791000, + "published_by": 1087 + }, + { + "id": 444, + "title": "Sverigepremiär för Windows Phone 7", + "slug": "sverigepremiar-for-windows-phone-7", + "markdown": "\r\n\r\nJag har tidigare bloggat en del om tekniken i Windows Phone 7, men eftersom nästan alla rykten och nyheter kommit från den amerikanska sidan så har det tunt om information om en svensk lansering.\r\n\r\nhttp://www.winmobile.se har intervjuat Peter Wissinger som är nordisk affärsområdeschef för windows phone. Läser man intervjun och skummar lite i Peters egen blogg http://wissinger.wordpress.com/ så verkar det definitivt som väntan snart är över.\r\n\r\nDet kommer säljas telefoner i Sverige i oktober (YES!) men exakt datum är lite mer flytande.\r\n\r\nOperativet kommer släppas på engelska här, men telefonen stöder svenska tecken. Tangenbordet kräver dock att man håller nere t.ex ”O” för att välja ”Ö” och ”A” för Å/Ä. Förhoppningsvis kommer nya tangentbordslayouter senare.\r\n\r\nTjänsterna som Xbox Live och Zune kommer förmodligen vara kraftigt begränsade vid lanseringen eftersom sverige inte är en av de officella lanseringsländerna. Marketplace lär sannolikt också ha sina begränsningar vid lanseringen.\r\n\r\nTelefonen kommer bara stöda GSM och motsvarande 3G-variant, och inte CDMA. För oss i Sverige är det inga problem eftersom vi inte har några CDMA-nät. Däremot är det en stor nyhet i USA eftersom vissa operatörer bara har stöd för CDMA.\r\n\r\nIntervjun innehåller också dessa spännande ord som kan betyda nästan vad som helst :\r\n\r\n”Ja, det är helt enkelt så att vi vill överraska både vad gäller mjukvara och hårdvara Jag kan väl säga så pass mycket att det vid lansering kommer mer nyheter om Windows Phone 7 som vi ännu inte pratat om” -- Peter Wissinger\r\n\r\nLäs hela intervjun här http://www.winmobile.se/index.php/?p=1480\r\n", + "html": "

    Jag har tidigare bloggat en del om tekniken i Windows Phone 7, men eftersom nästan alla rykten och nyheter kommit från den amerikanska sidan så har det tunt om information om en svensk lansering.

    http://www.winmobile.se har intervjuat Peter Wissinger som är nordisk affärsområdeschef för windows phone. Läser man intervjun och skummar lite i Peters egen blogg http://wissinger.wordpress.com/ så verkar det definitivt som väntan snart är över.

    Det kommer säljas telefoner i Sverige i oktober (YES!) men exakt datum är lite mer flytande.

    Operativet kommer släppas på engelska här, men telefonen stöder svenska tecken. Tangenbordet kräver dock att man håller nere t.ex ”O” för att välja ”Ö” och ”A” för Å/Ä. Förhoppningsvis kommer nya tangentbordslayouter senare.

    Tjänsterna som Xbox Live och Zune kommer förmodligen vara kraftigt begränsade vid lanseringen eftersom sverige inte är en av de officella lanseringsländerna. Marketplace lär sannolikt också ha sina begränsningar vid lanseringen.

    Telefonen kommer bara stöda GSM och motsvarande 3G-variant, och inte CDMA. För oss i Sverige är det inga problem eftersom vi inte har några CDMA-nät. Däremot är det en stor nyhet i USA eftersom vissa operatörer bara har stöd för CDMA.

    Intervjun innehåller också dessa spännande ord som kan betyda nästan vad som helst :

    ”Ja, det är helt enkelt så att vi vill överraska både vad gäller mjukvara och hårdvara Jag kan väl säga så pass mycket att det vid lansering kommer mer nyheter om Windows Phone 7 som vi ännu inte pratat om” -- Peter Wissinger

    Läs hela intervjun här http://www.winmobile.se/index.php/?p=1480

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Sverigepremiär för Windows Phone 7", + "meta_description": "", + "author_id": 1089, + "created_at": 1285154158000, + "created_by": 1089, + "updated_at": 1285154158000, + "updated_by": 1089, + "published_at": 1285154158000, + "published_by": 1089 + }, + { + "id": 446, + "title": "Hover Zoom - briljant lightbox-tillägg till Chrome", + "slug": "hover-zoom---briljant-lightbox-tillagg-till-chrome", + "markdown": "\r\n\r\nLightboxar och fiffiga mouse over-funktioner som automatiskt visar en större version av en bild kan spara många klick när man tittar på bilder i ett fotoalbum eller bara vill ha en förhandsvy. Hittills har man varit beroende av att den som har byggt en webbplats också har implementerat en sån funktion, men med det nya smart tillägget Hoover Zoom till Chrome så kan man få funktionen i princip var som helst. Jag installerade det lite som en kul grej men jag upptäcker att jag har nytta av det varje dag, framför allt på Flickr och Facebook. Funkar fint även här på Tekniken!\r\n\r\n\r\n\r\n\r\n\r\nInstallera Hoover Zoom här.\r\n\r\n![Bild](http://tekniken.nu/uploads/634217883957615986-hoverzoom2.png)", + "html": "

    Lightboxar och fiffiga mouse over-funktioner som automatiskt visar en större version av en bild kan spara många klick när man tittar på bilder i ett fotoalbum eller bara vill ha en förhandsvy. Hittills har man varit beroende av att den som har byggt en webbplats också har implementerat en sån funktion, men med det nya smart tillägget Hoover Zoom till Chrome så kan man få funktionen i princip var som helst. Jag installerade det lite som en kul grej men jag upptäcker att jag har nytta av det varje dag, framför allt på Flickr och Facebook. Funkar fint även här på Tekniken!

    Installera Hoover Zoom här.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Hover Zoom - briljant lightbox-tillägg till Chrome", + "meta_description": "", + "author_id": 6, + "created_at": 1286191594000, + "created_by": 6, + "updated_at": 1286191594000, + "updated_by": 6, + "published_at": 1286191594000, + "published_by": 6 + }, + { + "id": 447, + "title": "Batteriproblem i iPhone 4?", + "slug": "batteriproblem-i-iphone-4", + "markdown": "\r\n\r\nHar du också lagt telefonen på laddning till 100% för att efter några timmar, upptäcka att du endast har en fjärdedels batteritid kvar? Troligtvis är det någon av dina applikationer som orsakar detta. Nedan finner du ett par enkla åtgärder som hjälpte mig att lösa problemet:\r\nStarta multi-tasking – Dubbelklicka på Home-knappen. Här får du upp alla dina apps som körs i multi-taskingläge.Håll fingret intryck på en av dina appar tills ikonerna börjar vobbla. Nu finns det en röd liten symbol längst upp till vänster på alla applikationerna. För att stänga din trycker du på den röda symbolen (jag stängde samtliga):Alternativt: starta om telefonen. Vänta tills telefonen startats om. Ladda upp telefonen igen och du är nu klar! Hoppas detta hjälpte även dig!\r\nÖvriga tips för att maximera batteri-tiden:\r\nStäng av 3G och använd Edge (lägre bandbredd).Avaktivera Push-mail och sätt synkningen på manuell eller en vald tidsintervall.Stäng av Wifi och aktivera det endast när du behöver använda det.Stäng av Location Services och aktivera endast efter behov.Stäng av Bluetooth.Sänk din Brightness.Lås din iPhone när du inte använder den och sätt Auto-Lock på 1 minut (som är det minsta).\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/634220391107474738-image001.jpg@01CB65FE.6D1E9350__image001.jpg)", + "html": "

    Har du också lagt telefonen på laddning till 100% för att efter några timmar, upptäcka att du endast har en fjärdedels batteritid kvar? Troligtvis är det någon av dina applikationer som orsakar detta. Nedan finner du ett par enkla åtgärder som hjälpte mig att lösa problemet:

    • Starta multi-tasking – Dubbelklicka på Home-knappen. Här får du upp alla dina apps som körs i multi-taskingläge.
    • Håll fingret intryck på en av dina appar tills ikonerna börjar vobbla. Nu finns det en röd liten symbol längst upp till vänster på alla applikationerna. För att stänga din trycker du på den röda symbolen (jag stängde samtliga):
    • Alternativt: starta om telefonen. Vänta tills telefonen startats om. Ladda upp telefonen igen och du är nu klar! Hoppas detta hjälpte även dig!

    Övriga tips för att maximera batteri-tiden:

    • Stäng av 3G och använd Edge (lägre bandbredd).
    • Avaktivera Push-mail och sätt synkningen på manuell eller en vald tidsintervall.
    • Stäng av Wifi och aktivera det endast när du behöver använda det.
    • Stäng av Location Services och aktivera endast efter behov.
    • Stäng av Bluetooth.
    • Sänk din Brightness.
    • Lås din iPhone när du inte använder den och sätt Auto-Lock på 1 minut (som är det minsta).


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Batteriproblem i iPhone 4?", + "meta_description": "", + "author_id": 1095, + "created_at": 1286448720000, + "created_by": 1095, + "updated_at": 1286448720000, + "updated_by": 1095, + "published_at": 1286448720000, + "published_by": 1095 + }, + { + "id": 448, + "title": "ASP.NET MVC 3 nu i betaversion", + "slug": "aspnet-mvc-3-nu-i-betaversion", + "markdown": "\r\n\r\nNu har betaversionen av ASP.NET MVC 3-ramverket släpps. Tidigare fanns endast en preview men nu är det en äkta beta med go live-licens, vilket innebär att den räknas som tillräckligt stabil och tillförlitlig att faktiskt bygga produktionssajter med.\r\n\r\nEn av nyheterna i MVC 3 jämfört med MVC 2 är stödet för Razor motorn som gör vyerna enklare att koda för oss vana C#-programmerare som inte vill lära oss ytterligare ett nytt taggbaserat språk utan föredrar vanliga if-else och foreach.\r\n\r\nMVC har gått från att kännas relativt experimentellt i första versionen till genomtänkt och användbar på bara drygt ett år.\r\n\r\nInlärningströskeln för den som känner sig lagom avancerad med webforms var rätt hög med MVC 1.0 men tack vare en nu ganska mogen, logisk och genomtänkt struktur blir man snabbt produktiv.\r\n\r\nLäs mer om nyheterna i betaversionen:\r\n\r\nhttp://weblogs.asp.net/scottgu/archive/2010/10/06/announcing-nupack-asp-net-mvc-3-beta-and-webmatrix-beta-2.aspx\r\n\r\n![Bild](http://tekniken.nu/uploads/634220391113256062-mvc.png)", + "html": "

    Nu har betaversionen av ASP.NET MVC 3-ramverket släpps. Tidigare fanns endast en preview men nu är det en äkta beta med go live-licens, vilket innebär att den räknas som tillräckligt stabil och tillförlitlig att faktiskt bygga produktionssajter med.

    En av nyheterna i MVC 3 jämfört med MVC 2 är stödet för Razor motorn som gör vyerna enklare att koda för oss vana C#-programmerare som inte vill lära oss ytterligare ett nytt taggbaserat språk utan föredrar vanliga if-else och foreach.

    MVC har gått från att kännas relativt experimentellt i första versionen till genomtänkt och användbar på bara drygt ett år.

    Inlärningströskeln för den som känner sig lagom avancerad med webforms var rätt hög med MVC 1.0 men tack vare en nu ganska mogen, logisk och genomtänkt struktur blir man snabbt produktiv.

    Läs mer om nyheterna i betaversionen:

    http://weblogs.asp.net/scottgu/archive/2010/10/06/announcing-nupack-asp-net-mvc-3-beta-and-webmatrix-beta-2.aspx

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "ASP.NET MVC 3 nu i betaversion", + "meta_description": "", + "author_id": 1089, + "created_at": 1286442311000, + "created_by": 1089, + "updated_at": 1286442311000, + "updated_by": 1089, + "published_at": 1286442311000, + "published_by": 1089 + }, + { + "id": 450, + "title": "Tips för en fungerande community", + "slug": "tips-for-en-fungerande-community", + "markdown": "\r\n\r\nEn ganska vanlig idé när man skapar en ny community är att bara den kommer på plats så kommer den sakta att börja leva. Man bygger ofta rigorösa funktioner för att hantera sökning och filtrering i de enorma informationsmängder som ser framför sig, tillsammans med funktioner för att anmäla opassande innehåll, spåra IP-adresser och liknande. Man förväntar sig att ens fantastiska idé ska sprida sig som ringar på vattnet av sig själv.\r\n\r\nInget kunde vara mer fel. Oavsett om det gäller ett enkelt diskussionsforum eller nästa Facebook så är framgångsrika communities ett resultat av hårt arbete (och ibland en del tur). Här är några tips på hur man ska fokusera på rätt saker:\r\n\r\n1) Tänk på communityn som om den var en bondgård. Det spelar ingen roll om du har en perfekt plöjd åker, sår du ingenting och ingen rensar ogräs så kommer inget värt att skörda att växa där. I början kommer skörden vara mindre än det du sådde, det är helt normalt.\r\n\r\n2) Hitta eldsjälen. Du själv eller någon annan måste brinna för communityn och vara villig att lägga ner mycket tid. Det handlar om att starta diskussioner, svara på frågor, synas och ge communityn en personlig prägel, och även att marknadsföra externt (t.ex. genom att synas i andra communities). Det är särskilt viktigt i början, senare kan medlemmarna sköta mer av det jobbet.\r\n\r\n3) Lyft rätt medlemmar. Vissa medlemmar är viktigare än andra, och det är viktigt att de får erkännande, t.ex. som officiella ambassadörer eller experter. Glöm dock inte att alla har något att bidra med.\r\n\r\n4) Sätt medlemmarna i beslutsposition. Ett stort medbestämmande stimulerar till aktivitet. Dessutom avlastar det den som driver communityn, d.v.s. du.\r\n\r\n5) Stimulera relationerna mellan medlemmarna.Utan relationer blir en community i bästa fall bara en marknad där man byter kunskap och tjänster med varandra utan engagemang. Då blir det också lätt att medlemmarna bara byter marknad, inget håller dem kvar.\r\n\r\n6) Hitta det som motiverar aktivitet. Försök lyssna och analysera och hitta det som triggar medlemmarna att engagera sig mer. Blanda dock inte ihop aktivitet med ändlösa och meningslösa diskussioner.\r\n\r\n7) En bra community ger medlemmarna möjlighet att utvecklas som personer. Det kan vara genom ett större anseende, de känslomässiga band som knyts mellan medlemmarna – något som ger effekt i livet utanför communityn.\r\n\r\n8) Var tydlig. Ingenting säger att en community måste vara en demokrati där beslut fattas via konsensus, men det kommer att bli mycket problem om medlemmarna känner sig orättvist eller godtyckligt behandlade. Var tydlig och konsekvent, och ha en uppsättning regler som är lätt åtkomliga där det framgår vad som är tillåtet och inte i form av innehåll, uppförande gentemot andra medlemmar,  \r\n\r\nInspiration hämtad från bland annat 9 ways to build a Twitter community with substance och 10 key guiding principles for online community building and engagement via Jerry Silfwer (a.k.a Doktor Spinn).\r\n\r\n![Bild](http://tekniken.nu/uploads/634221275651700170-community-712702.jpg)", + "html": "

    En ganska vanlig idé när man skapar en ny community är att bara den kommer på plats så kommer den sakta att börja leva. Man bygger ofta rigorösa funktioner för att hantera sökning och filtrering i de enorma informationsmängder som ser framför sig, tillsammans med funktioner för att anmäla opassande innehåll, spåra IP-adresser och liknande. Man förväntar sig att ens fantastiska idé ska sprida sig som ringar på vattnet av sig själv.

    Inget kunde vara mer fel. Oavsett om det gäller ett enkelt diskussionsforum eller nästa Facebook så är framgångsrika communities ett resultat av hårt arbete (och ibland en del tur). Här är några tips på hur man ska fokusera på rätt saker:

    1) Tänk på communityn som om den var en bondgård. Det spelar ingen roll om du har en perfekt plöjd åker, sår du ingenting och ingen rensar ogräs så kommer inget värt att skörda att växa där. I början kommer skörden vara mindre än det du sådde, det är helt normalt.

    2) Hitta eldsjälen. Du själv eller någon annan måste brinna för communityn och vara villig att lägga ner mycket tid. Det handlar om att starta diskussioner, svara på frågor, synas och ge communityn en personlig prägel, och även att marknadsföra externt (t.ex. genom att synas i andra communities). Det är särskilt viktigt i början, senare kan medlemmarna sköta mer av det jobbet.

    3) Lyft rätt medlemmar. Vissa medlemmar är viktigare än andra, och det är viktigt att de får erkännande, t.ex. som officiella ambassadörer eller experter. Glöm dock inte att alla har något att bidra med.

    4) Sätt medlemmarna i beslutsposition. Ett stort medbestämmande stimulerar till aktivitet. Dessutom avlastar det den som driver communityn, d.v.s. du.

    5) Stimulera relationerna mellan medlemmarna.Utan relationer blir en community i bästa fall bara en marknad där man byter kunskap och tjänster med varandra utan engagemang. Då blir det också lätt att medlemmarna bara byter marknad, inget håller dem kvar.

    6) Hitta det som motiverar aktivitet. Försök lyssna och analysera och hitta det som triggar medlemmarna att engagera sig mer. Blanda dock inte ihop aktivitet med ändlösa och meningslösa diskussioner.

    7) En bra community ger medlemmarna möjlighet att utvecklas som personer. Det kan vara genom ett större anseende, de känslomässiga band som knyts mellan medlemmarna – något som ger effekt i livet utanför communityn.

    8) Var tydlig. Ingenting säger att en community måste vara en demokrati där beslut fattas via konsensus, men det kommer att bli mycket problem om medlemmarna känner sig orättvist eller godtyckligt behandlade. Var tydlig och konsekvent, och ha en uppsättning regler som är lätt åtkomliga där det framgår vad som är tillåtet och inte i form av innehåll, uppförande gentemot andra medlemmar, 

    Inspiration hämtad från bland annat 9 ways to build a Twitter community with substance och 10 key guiding principles for online community building and engagement via Jerry Silfwer (a.k.a Doktor Spinn).

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Tips för en fungerande community", + "meta_description": "", + "author_id": 6, + "created_at": 1286530764000, + "created_by": 6, + "updated_at": 1286530764000, + "updated_by": 6, + "published_at": 1286530764000, + "published_by": 6 + }, + { + "id": 451, + "title": "Förslag på ny standard: högerklicka på logga och få högupplöst fil", + "slug": "forslag-pa-ny-standard-hogerklicka-pa-logga-och-fa-hogupplost-fil", + "markdown": "\r\n\r\nOfta behöver man ett företags logotyp för att infoga i mallar, presentationer, mail o.s.v. Tyvärr är det ofta krångligt att hitta fram till högupplösta versioner, trots att vettiga marknadsavdelningar vill att man  hellre använder de högupplösta varianterna av logotypen än att ta en dålig jpg från hemsidan. Det är rätt vanligt att man helt enkelt går in på företagets officiella hemsida och sparar ner logotypen från ramverket för att det är enklast. Det blir inte speciellt bra resultat, särskilt inte på utskrifter.\r\n\r\nSedan länge finns det en de-facto standard som säger att man alltid ska kunna klicka på logotypen för att komma tillbaka till startsidan och numera är det så vedertaget att många därför tar bort Start från navigationer och menyer. Jag vill härmed föreslå ett tillägg till denna standard.\r\n\r\nMitt förslag till alla webbutvecklare där ute är att göra det möjligt för besökaren att högerklicka på logotypen och då få en fråga om användaren vill ladda ner en högupplöst variant av logotypen och då antingen leverera filen direkt eller länka till olika varianter av logotypen inklusive riktlinjer för användningen.\r\n\r\nEnklaste implementationen är att lägga in följande kod för att länka vidare till det rätta stället i strukturen, i vårt fall ligger logotypen under /press/logos_and_images.\r\n\r\noncontextmenu=\"if (confirm('Vill du ladda ner vår högupplösta logotyp?')) { document.location='/press/logos_and_images'; return false}\"\r\n\r\nalternativt att skicka EPS direkt:\r\n\r\noncontextmenu=\"if (confirm('Vill du ladda ner vår logotyp i EPS format?')){ document.location='/images/logo.eps'; return false}\"\r\n\r\nPusha om du håller med om att det ska bli en standard! Eller kommentera nedan för tillägg/justeringar.\r\n\r\n![Bild](http://tekniken.nu/uploads/634224974418618650-800px-Coca-Cola_logo.svg.png)", + "html": "

    Ofta behöver man ett företags logotyp för att infoga i mallar, presentationer, mail o.s.v. Tyvärr är det ofta krångligt att hitta fram till högupplösta versioner, trots att vettiga marknadsavdelningar vill att man  hellre använder de högupplösta varianterna av logotypen än att ta en dålig jpg från hemsidan. Det är rätt vanligt att man helt enkelt går in på företagets officiella hemsida och sparar ner logotypen från ramverket för att det är enklast. Det blir inte speciellt bra resultat, särskilt inte på utskrifter.

    Sedan länge finns det en de-facto standard som säger att man alltid ska kunna klicka på logotypen för att komma tillbaka till startsidan och numera är det så vedertaget att många därför tar bort Start från navigationer och menyer. Jag vill härmed föreslå ett tillägg till denna standard.

    Mitt förslag till alla webbutvecklare där ute är att göra det möjligt för besökaren att högerklicka på logotypen och då få en fråga om användaren vill ladda ner en högupplöst variant av logotypen och då antingen leverera filen direkt eller länka till olika varianter av logotypen inklusive riktlinjer för användningen.

    Enklaste implementationen är att lägga in följande kod för att länka vidare till det rätta stället i strukturen, i vårt fall ligger logotypen under /press/logos_and_images.

    oncontextmenu=\"if (confirm('Vill du ladda ner vår högupplösta logotyp?')) { document.location='/press/logos_and_images'; return false}\"

    alternativt att skicka EPS direkt:

    oncontextmenu=\"if (confirm('Vill du ladda ner vår logotyp i EPS format?')){ document.location='/images/logo.eps'; return false}\"

    Pusha om du håller med om att det ska bli en standard! Eller kommentera nedan för tillägg/justeringar.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Förslag på ny standard: högerklicka på logga och få högupplöst fil", + "meta_description": "", + "author_id": 1087, + "created_at": 1286900641000, + "created_by": 1087, + "updated_at": 1286900641000, + "updated_by": 1087, + "published_at": 1286900641000, + "published_by": 1087 + }, + { + "id": 452, + "title": "Att köpa en Windows Phone 7", + "slug": "att-kopa-en-windows-phone-7", + "markdown": "\r\n\r\nEftersom jag är på väg att köpa en Windows Phone 7 telefon så har jag förberett mig genom att titta på vilka telefoner som finns och vilka parametrar man bör ta hänsyn till.\r\n\r\n\r\n\r\nDen 21:a oktober går det att köpa telefoner i Sverige. Här är de parametrar man bör ta hänsyn till och lite grundinformation om de modeller som går att köpa.\r\n\r\nEn viktig punkt att ta hänsyn till är om man som tidig svensk kan leva med begränsningar som gäller de länder som inte är officiella lanseringsländer. Här sticker några grejer ut som t.ex inga svenska menyer, tangentbordet har ingen svensk rättstavning, onlinetjänsterna kan vara begränsade o.s.v. Dessa problem och begränsningar kommer mest sannolikt lösas inom ett halvår eller så men det kommer förstås vara jobbigare i början.\r\n## Version av operativ systemet\r\nDå alla telefoner kommer ha samma version av operativsystemet och det inte finns nån splittring som t.ex Android har så behöver man inte välja telefon baserat på vilken version den har eller hur bra företaget är på att uppdatera versioner på sina existerande telefoner. Operativsystemet är på engelska just nu.\r\n## Mjukvara som skiljer sig mellan tillverkarna\r\nTillverkarna har möjlighet att skicka med specifik mjukvara men har inte möjlighet att ändra själva grundfunktionerna i telefonen eller gräsnittet vilket gör att man inte behöver välja bort en telefon om man inte gillar hur dom anpassar sina gränsnitt. Vilka applikationer som följer med kan dock ge tillverkarna lite extra poäng om dom lyckas leverera nåt unikt som inte går att köpa löst.\r\n\r\nHTC har byggt en hub som liknar deras vanliga Sense-gränsnitt. Här har dom fläskat på med mängder av animeringar för den som vill flasha lite med sin telefon.\r\n\r\nLG har byggt in eget stöd för DLNA, dvs media delning samt en augmented reality applikation och röst-till-text för att kunna t.ex twittra genom att tala med telefonen.\r\n## Prestanda\r\nHär kan det skilja sig på ett par punkter och det kommer krävas en del benchmarks för att hitta en tydlig vinnare bland tillverkarna. Det som främst kan skilja sig är mängden ram, hastigheten på flashminnet och grafikchipset. Här får man vänta på benchmarks innan man hittar vinnaren. Av de tidiga recensioner jag läst och videos jag sett flyter dock allt bra på alla telefonerna.\r\n## Lagringsutrymme\r\nMininivån är satt lågt på 8 GB utrymme på telefonerna och tidiga rykten har visat att de flesta telefonerna kommer stanna på mininivån, en klar showstopper för de flesta. En del telefoner kommer gå att utöka med SD-kort. Av lanseringstelefonerna är det bara LG som verkar komma med 16 GB som standard. Då det finns 25 GB utrymme på skydrive att synka till gratis så kanske 8 GB kan räcka men det kommer kännas trångt.\r\n## Skärm\r\nUpplösningen kommer vara samma bland alla telefoner men kvaliten och storleken kommer variera. Kvalitetsmässigt verkar Samsung ta täten genom sin amoled på sin Omnia 7. Storleken på skärmen kommer ju avgöra storleken på telefonen så här får man hitta en bra balans och  det krävs nog att man håller telefonen i handen innan man bestämmer sig.\r\n## Byggkvalitet\r\nKänslan är ju viktig, det ska inte knaka i fogarna när man klämmer lite på telefonen och här får man antingen läsa recensioner eller testa klämma lite själv på telefonerna. Knapparnas kvalitet och känsla är ju också viktig eftersom en hel del av navigationen på WP7 går via de tre standardknapparna under skärmen.\r\n## Utseende\r\nGivetvis en smaksak, här så har alla tillverkarna möjlighet att göra nåt snyggt genom att skala ner allt till gärna ett minimum och låta kanterna vara kantiga. Här tycker jag Samsungs Omnia 7 är riktigt snygg.\r\n## Tangentbord eller inte\r\nJag värdesätter en tunnare mobil framför en med fysiskt tangentbord. Mjukvarutangentbordet kommer sannolikt också att gå uppgradera till åäö i framtiden så risken är stor att hårdvarutangentbordet kommer kännas osmidigt snart. Vid lanseringen kommer ingen telefon ha hårdvarutangentbord men fler telefoner lär dyka upp senare.\r\n## Kamera/video\r\nHär kan det skilja sig både upplösning, blixt och funktioner. 5 megapixel bilder är mininum och alla kan spela in 720p video. Här har jag sett tidiga tester som tyvärr visar att samsung komprimerar videon lite väl hårt samt tappar lite frames.\r\n## Pris\r\nDet lär inte vara speciellt billiga mobiler eftersom minsta specifikationen säger att alla kommer vara i övre prestandasegmentet.\r\n## 4 telefoner\r\nVid lanseringen i sverige kommer det att finnnas 4 olika telefoner att köpa från 3 olika tillverkare. Här är listan samt det som som sticker ut hos varje mobil:\r\n\r\nHTC 7 Trophy – sannolikt billigaste\r\n\r\nHTC 7 Mozart – 8 MP kamera, Xenon blixt\r\n\r\nLG Optimus 7 – 16GB lagringsutrymme som standard\r\n\r\nSamsung Omnia 7 – exklusiv för operatören 3. Har 4 tum super amoled skärm\r\n## Slutsats\r\nTelefonerna är väldigt lika varann både funktions- och utseendemässigt och det är i princip en smaksak vilken telefon man fastnar för. Jag har själv fastnat för Samsung Omnia 7 pga av dess fina skärm och kantiga utseende men får se om det går att köpa den olåst eller låsa upp den hos 3.\r\n\r\nOrkar man vänta så lär det dyka upp fler modeller närmaste månaderna.\r\n", + "html": "

    Eftersom jag är på väg att köpa en Windows Phone 7 telefon så har jag förberett mig genom att titta på vilka telefoner som finns och vilka parametrar man bör ta hänsyn till.

    Den 21:a oktober går det att köpa telefoner i Sverige. Här är de parametrar man bör ta hänsyn till och lite grundinformation om de modeller som går att köpa.

    En viktig punkt att ta hänsyn till är om man som tidig svensk kan leva med begränsningar som gäller de länder som inte är officiella lanseringsländer. Här sticker några grejer ut som t.ex inga svenska menyer, tangentbordet har ingen svensk rättstavning, onlinetjänsterna kan vara begränsade o.s.v. Dessa problem och begränsningar kommer mest sannolikt lösas inom ett halvår eller så men det kommer förstås vara jobbigare i början.

    Version av operativ systemet

    Då alla telefoner kommer ha samma version av operativsystemet och det inte finns nån splittring som t.ex Android har så behöver man inte välja telefon baserat på vilken version den har eller hur bra företaget är på att uppdatera versioner på sina existerande telefoner. Operativsystemet är på engelska just nu.

    Mjukvara som skiljer sig mellan tillverkarna

    Tillverkarna har möjlighet att skicka med specifik mjukvara men har inte möjlighet att ändra själva grundfunktionerna i telefonen eller gräsnittet vilket gör att man inte behöver välja bort en telefon om man inte gillar hur dom anpassar sina gränsnitt. Vilka applikationer som följer med kan dock ge tillverkarna lite extra poäng om dom lyckas leverera nåt unikt som inte går att köpa löst.

    HTC har byggt en hub som liknar deras vanliga Sense-gränsnitt. Här har dom fläskat på med mängder av animeringar för den som vill flasha lite med sin telefon.

    LG har byggt in eget stöd för DLNA, dvs media delning samt en augmented reality applikation och röst-till-text för att kunna t.ex twittra genom att tala med telefonen.

    Prestanda

    Här kan det skilja sig på ett par punkter och det kommer krävas en del benchmarks för att hitta en tydlig vinnare bland tillverkarna. Det som främst kan skilja sig är mängden ram, hastigheten på flashminnet och grafikchipset. Här får man vänta på benchmarks innan man hittar vinnaren. Av de tidiga recensioner jag läst och videos jag sett flyter dock allt bra på alla telefonerna.

    Lagringsutrymme

    Mininivån är satt lågt på 8 GB utrymme på telefonerna och tidiga rykten har visat att de flesta telefonerna kommer stanna på mininivån, en klar showstopper för de flesta. En del telefoner kommer gå att utöka med SD-kort. Av lanseringstelefonerna är det bara LG som verkar komma med 16 GB som standard. Då det finns 25 GB utrymme på skydrive att synka till gratis så kanske 8 GB kan räcka men det kommer kännas trångt.

    Skärm

    Upplösningen kommer vara samma bland alla telefoner men kvaliten och storleken kommer variera. Kvalitetsmässigt verkar Samsung ta täten genom sin amoled på sin Omnia 7. Storleken på skärmen kommer ju avgöra storleken på telefonen så här får man hitta en bra balans och  det krävs nog att man håller telefonen i handen innan man bestämmer sig.

    Byggkvalitet

    Känslan är ju viktig, det ska inte knaka i fogarna när man klämmer lite på telefonen och här får man antingen läsa recensioner eller testa klämma lite själv på telefonerna. Knapparnas kvalitet och känsla är ju också viktig eftersom en hel del av navigationen på WP7 går via de tre standardknapparna under skärmen.

    Utseende

    Givetvis en smaksak, här så har alla tillverkarna möjlighet att göra nåt snyggt genom att skala ner allt till gärna ett minimum och låta kanterna vara kantiga. Här tycker jag Samsungs Omnia 7 är riktigt snygg.

    Tangentbord eller inte

    Jag värdesätter en tunnare mobil framför en med fysiskt tangentbord. Mjukvarutangentbordet kommer sannolikt också att gå uppgradera till åäö i framtiden så risken är stor att hårdvarutangentbordet kommer kännas osmidigt snart. Vid lanseringen kommer ingen telefon ha hårdvarutangentbord men fler telefoner lär dyka upp senare.

    Kamera/video

    Här kan det skilja sig både upplösning, blixt och funktioner. 5 megapixel bilder är mininum och alla kan spela in 720p video. Här har jag sett tidiga tester som tyvärr visar att samsung komprimerar videon lite väl hårt samt tappar lite frames.

    Pris

    Det lär inte vara speciellt billiga mobiler eftersom minsta specifikationen säger att alla kommer vara i övre prestandasegmentet.

    4 telefoner

    Vid lanseringen i sverige kommer det att finnnas 4 olika telefoner att köpa från 3 olika tillverkare. Här är listan samt det som som sticker ut hos varje mobil:

    HTC 7 Trophy – sannolikt billigaste

    HTC 7 Mozart – 8 MP kamera, Xenon blixt

    LG Optimus 7 – 16GB lagringsutrymme som standard

    Samsung Omnia 7 – exklusiv för operatören 3. Har 4 tum super amoled skärm

    Slutsats

    Telefonerna är väldigt lika varann både funktions- och utseendemässigt och det är i princip en smaksak vilken telefon man fastnar för. Jag har själv fastnat för Samsung Omnia 7 pga av dess fina skärm och kantiga utseende men får se om det går att köpa den olåst eller låsa upp den hos 3.

    Orkar man vänta så lär det dyka upp fler modeller närmaste månaderna.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Att köpa en Windows Phone 7", + "meta_description": "", + "author_id": 1089, + "created_at": 1287056016000, + "created_by": 1089, + "updated_at": 1287056016000, + "updated_by": 1089, + "published_at": 1287056016000, + "published_by": 1089 + }, + { + "id": 454, + "title": "Samsung omnia 7 - Första intrycket", + "slug": "samsung-omnia-7---forsta-intrycket", + "markdown": "\r\n\r\nEn helt ny mobil som inte liknar nånting jag tidigare haft och här kommer intryck från första dagarna.\r\n\r\nEftersom jag följt nyheter och bloggar sen windows phone 7 presenterades så är det inte så mycket nyheter. Jag har dessutom lekt lite med emulatorn och har då fått en viss känsla hur telefonen är strukturerad. Att hålla telefonen i handen och dessutom nu med kompletta funktioner är dock en annan sak, här är mina första intryck.\r\n## Förpackning\r\nLådan var liten, snygg och väldigt optimalt packad, det följde med en usb sladd, en pytteliten laddare och ett headset som är av in-ear modell.\r\n## Känslan hårdvara\r\nDen är väldigt stor jämfört med min gamla HTC Diamond Touch, ungefär lika platt och väger ungefär lika mycket men den får min gamla telefon att se ut som en leksak.\r\n\r\nSkärmen har en extrem svärta och väldigt mättade färger. Av nån anledning så ser jpg bilder lite hårt komprimerade ut men vet inte om det beror på ursprungsbilderna, hårdvaran eller mjukvaran men det är nåt jag inte sett nån annan nämna så det kanske är mina bilder som det är fel på. Text kan p.ga super amoleds pixelstruktur få en lätt diffus kant, inget som stör om man inte tittar noga på små texter men är man känslig och läser mycket text kan amoled vara fel val.\r\n\r\nTouchkontrollerna för ”back” och ”sök” är känsliga och alldeles för lätta att komma åt av misstag och det är nog den största nackdelen jag hittat hittills med själva handhavandet av samsung telefonen.\r\n\r\nEn brist med den här telefonen jämfört med min gamla htc är att det inte finns nån indikators som visar att man har missade samtal eller ett oläst sms genom att snegla på mobilen utan man måste trycka på powerknappen för att tända skärmen. Det pajar lite av WP7s ”Glance and Go” koncept.\r\n## Manual\r\nJag fuskade lite och skummade bara igenom manualen väldigt snabbt eftersom jag kände att jag redan visste tillräckligt mycket om operativsystemet. Viktigt här är att den inte nämner hur man får igång marketplace i sverige, se nästa rubrik för att veta hur man ska göra.\r\n## Första uppstarten\r\nDet första man gör är lägga in ett Live konto och här är det viktigt att lägga in ett som är registrerat med ett land som telefonen officiellt är lanserad i och det innebär att man inte kan använda sitt svenska konto. Här är det enklast att följa den här guiden så kan man komma åt marketplace och allt annat viktigt http://www.winmobile.se/index.php/?p=1621.\r\n\r\nNär man väl lagt till det första kontot kan man lägga till sina vanliga hotmail/facebook konton för att få in alla kontakter.\r\n## SMS\r\nTangentbordet har inte svenska tecken på knapparna utan kräver att man håller in A och O för åäö och den saknar också möjlighet att rättstava och ge förslag på svenska så man måste ha den funktionen avstängd tills vidare. Det kommer att komma förmodligen i januari/februari så det är bara att vänta. Det går riktigt snabbt att skriva ändå så det är inget man stör sig på alltför mycket.\r\n## Surfa\r\nHar bara tagit några stickprov men browsern verkar fungera ungefär lika bra som ie7/ie8 på datorn, dvs den saknar ”wow” men den gör det den ska. Skroll och zoom går snabbt och mjukt så den upplevs inte särskilt långsam.\r\n## Marketplace\r\nDet märks att det fortfarande är en sprillans ny mobil, marketplace har nu ca 2000 apps/spel men eftersom för få personer varit in och röstat än så länge är det fortfarande svårt att veta vad som är bra och vad som är dåligt.\r\n\r\nRating funktionen är landsspecifik och eftersom jag valt USA som land och den precis lanserats där så kommer det snart bli lättare att hitta de bra sakerna och de dåliga kommer att snabbt sorteras bort.\r\n\r\nÄn så länge har jag inte testat köpa nåt men jag kommer nog satsa på ett Zune pass för musiken vid ett senare tillfälle.\r\n## Slutsats\r\nTelefonen är blixtrande snabb, allt går mjukt och fint, den är som många beskrivit en fröjd att använda. Den känns enkel att använda och aldrig komplicerad. Följ instruktionerna för att få igång marketplace, annars så förlorar man en stor del av vad telefonen är kapabel till.\r\n\r\nSkärmen har en otrolig svärta, det går verkligen inte se att den är igång ens när man sitter i ett kolsvart rum men har nackdelen att färgerna är nästan för mättade och att framförallt mindre text kan vara lite oskarpare än en vanlig LCD.\r\n\r\nOperativssystemet är snabbht och smidigt, man får verkligen känslan att man aldrig behöver vänta på att den ska reagera på nånting alls utom när den hämtar data över nätet förstås.\r\n\r\nTouchkontrollerna är för lätta att komma åt och den saknar nån typ av sms/missat samtal indikator men i övrigt känns hårdvaran riktigt trevlig.\r\n\r\nNu ska jag använda den lite mer utförligt och kommer med fler synpunkter och tips i ett framtida blogginlägg.\r\n\r\nHär är lite andra länkar som innehåller bra saker för den som vill lära sig lite mer om hur man kan använda telefonen på bästa sätt i sverige men också bra nyhetssidor för WP7.\r\n\r\nhttp://www.igandlive.com/2010/08/03/hr-r-microsofts-spotify-itunes-rdio-ddare-och-s-hr-gr-du-fr-att-f-den-i-sverige-nu/\r\n\r\nhttp://wissinger.wordpress.com/2010/10/24/windows-phone-7-tips-och-tricks/\r\n\r\nhttp://www.winmobile.se/\r\n\r\nhttp://wmpoweruser.com/\r\n\r\n![Bild](http://tekniken.nu/uploads/samsung-omnia-7.png)", + "html": "

    En helt ny mobil som inte liknar nånting jag tidigare haft och här kommer intryck från första dagarna.

    Eftersom jag följt nyheter och bloggar sen windows phone 7 presenterades så är det inte så mycket nyheter. Jag har dessutom lekt lite med emulatorn och har då fått en viss känsla hur telefonen är strukturerad. Att hålla telefonen i handen och dessutom nu med kompletta funktioner är dock en annan sak, här är mina första intryck.

    Förpackning

    Lådan var liten, snygg och väldigt optimalt packad, det följde med en usb sladd, en pytteliten laddare och ett headset som är av in-ear modell.

    Känslan hårdvara

    Den är väldigt stor jämfört med min gamla HTC Diamond Touch, ungefär lika platt och väger ungefär lika mycket men den får min gamla telefon att se ut som en leksak.

    Skärmen har en extrem svärta och väldigt mättade färger. Av nån anledning så ser jpg bilder lite hårt komprimerade ut men vet inte om det beror på ursprungsbilderna, hårdvaran eller mjukvaran men det är nåt jag inte sett nån annan nämna så det kanske är mina bilder som det är fel på. Text kan p.ga super amoleds pixelstruktur få en lätt diffus kant, inget som stör om man inte tittar noga på små texter men är man känslig och läser mycket text kan amoled vara fel val.

    Touchkontrollerna för ”back” och ”sök” är känsliga och alldeles för lätta att komma åt av misstag och det är nog den största nackdelen jag hittat hittills med själva handhavandet av samsung telefonen.

    En brist med den här telefonen jämfört med min gamla htc är att det inte finns nån indikators som visar att man har missade samtal eller ett oläst sms genom att snegla på mobilen utan man måste trycka på powerknappen för att tända skärmen. Det pajar lite av WP7s ”Glance and Go” koncept.

    Manual

    Jag fuskade lite och skummade bara igenom manualen väldigt snabbt eftersom jag kände att jag redan visste tillräckligt mycket om operativsystemet. Viktigt här är att den inte nämner hur man får igång marketplace i sverige, se nästa rubrik för att veta hur man ska göra.

    Första uppstarten

    Det första man gör är lägga in ett Live konto och här är det viktigt att lägga in ett som är registrerat med ett land som telefonen officiellt är lanserad i och det innebär att man inte kan använda sitt svenska konto. Här är det enklast att följa den här guiden så kan man komma åt marketplace och allt annat viktigt http://www.winmobile.se/index.php/?p=1621.

    När man väl lagt till det första kontot kan man lägga till sina vanliga hotmail/facebook konton för att få in alla kontakter.

    SMS

    Tangentbordet har inte svenska tecken på knapparna utan kräver att man håller in A och O för åäö och den saknar också möjlighet att rättstava och ge förslag på svenska så man måste ha den funktionen avstängd tills vidare. Det kommer att komma förmodligen i januari/februari så det är bara att vänta. Det går riktigt snabbt att skriva ändå så det är inget man stör sig på alltför mycket.

    Surfa

    Har bara tagit några stickprov men browsern verkar fungera ungefär lika bra som ie7/ie8 på datorn, dvs den saknar ”wow” men den gör det den ska. Skroll och zoom går snabbt och mjukt så den upplevs inte särskilt långsam.

    Marketplace

    Det märks att det fortfarande är en sprillans ny mobil, marketplace har nu ca 2000 apps/spel men eftersom för få personer varit in och röstat än så länge är det fortfarande svårt att veta vad som är bra och vad som är dåligt.

    Rating funktionen är landsspecifik och eftersom jag valt USA som land och den precis lanserats där så kommer det snart bli lättare att hitta de bra sakerna och de dåliga kommer att snabbt sorteras bort.

    Än så länge har jag inte testat köpa nåt men jag kommer nog satsa på ett Zune pass för musiken vid ett senare tillfälle.

    Slutsats

    Telefonen är blixtrande snabb, allt går mjukt och fint, den är som många beskrivit en fröjd att använda. Den känns enkel att använda och aldrig komplicerad. Följ instruktionerna för att få igång marketplace, annars så förlorar man en stor del av vad telefonen är kapabel till.

    Skärmen har en otrolig svärta, det går verkligen inte se att den är igång ens när man sitter i ett kolsvart rum men har nackdelen att färgerna är nästan för mättade och att framförallt mindre text kan vara lite oskarpare än en vanlig LCD.

    Operativssystemet är snabbht och smidigt, man får verkligen känslan att man aldrig behöver vänta på att den ska reagera på nånting alls utom när den hämtar data över nätet förstås.

    Touchkontrollerna är för lätta att komma åt och den saknar nån typ av sms/missat samtal indikator men i övrigt känns hårdvaran riktigt trevlig.

    Nu ska jag använda den lite mer utförligt och kommer med fler synpunkter och tips i ett framtida blogginlägg.

    Här är lite andra länkar som innehåller bra saker för den som vill lära sig lite mer om hur man kan använda telefonen på bästa sätt i sverige men också bra nyhetssidor för WP7.

    http://www.igandlive.com/2010/08/03/hr-r-microsofts-spotify-itunes-rdio-ddare-och-s-hr-gr-du-fr-att-f-den-i-sverige-nu/

    http://wissinger.wordpress.com/2010/10/24/windows-phone-7-tips-och-tricks/

    http://www.winmobile.se/

    http://wmpoweruser.com/

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Samsung Omnia 7 - Första intrycket", + "meta_description": "", + "author_id": 1089, + "created_at": 1290007857000, + "created_by": 1089, + "updated_at": 1290007857000, + "updated_by": 1089, + "published_at": 1290007857000, + "published_by": 1089 + }, + { + "id": 457, + "title": "En månad med Windows Phone 7", + "slug": "en-manad-med-windows-phone-7", + "markdown": "\r\n\r\nJag har inte använt telefonen som en recensent som testar varje funktion var för sig och koncentrerar sig på varje liten del utan jag har använt telefonen i dagligt bruk som en ”vanlig svensson”. Min recension kommer alltså inte peta på varje detalj utan bara på sådant jag faktiskt använt.\r\n## Halkig\r\nSom många recensenter skrivit så är baksidan ganska hal och känns nästan som teflon. Än har jag inte tappat telefonen men det känns inte alltid tryggt när man fiskar upp den ur fickan. Någon typ av gummering på baksidan skulle lösa problemet och här letar jag bara rätt material så när jag hittar det kommer jag klistra på det själv.\r\n## Kameran\r\nNu har jag inte använt kameran särskilt många gånger än men generellt så blir bilder på nära håll med blixt helt utfrätta. Att välja HDR hjälper lite vid knepig blixtbilder men störigt nog måste man välja om HDR varje gång man öppnar kameran igen. Detta känns klart som en bugg och fixas förhoppningsvis.\r\n## Strulet med upplåsningen från 3\r\nNär jag låste upp den från 3 så fungerade telefonen med Telia, dock med undantaget att 3G inte går igång så än så länge får jag leva med bara wifi. Så vitt jag förstått kommer sannolikt en hård reset lösa problemet men det betyder ju att konfigurerar om telefonen och synka över innehåll igen och det har jag inte haft tid med än. MMS fungerar inte heller och detta ska tydligen inte gå lösa alls ännu med samsungs telefoner. Här väntar jag på en lösning från Samsung eller Microsoft.\r\n\r\nAllt som 3 skräddarsytt utom splashskärmen som visas direkt när man startar telefonen går att ta bort. Splashskärmen är förstås störig men påverkar inte den dagliga användningen. Här väntar jag också på nån lösning även om det är mindre kritiskt förstås.\r\n## Osvenskt\r\nAtt telefonen i sig är på engelska är ju inget problem utan snarare något jag ser som positivt. Att ha autokorrigering på tangentbordet på svenska vore schysst men är inte heller direkt kritiskt.\r\n\r\nMarketplace går att komma åt om man följer rekommendationerna i min tidigare blogg http://tekniken.nu/nyheter-och-trender/samsung-omnia-7---forsta-intrycket. Dock fungerar inte kreditkortet om man inte har tur att ha ett postnummer vars siffror finns som startsiffror i nån ort i USA. Det verkar det som det är enklare att registrera kreditkort om man registrerar sitt live konto i England än i USA. Här har jag valt att just nu att inte köpa några applikationer utan vänta tills marketplace dyker upp i Sverige och att då resetta min telefon och sätta upp svenska kontot istället.\r\n## Skärmen\r\nFärgerna och svärtan är imponerande. Texten går bra att läsa även om den inte är lika skarp som en traditionell skärm p.g.a pixelplaceringarna på super amoled. Ett problem som däremot visar sig vid vissa tillfällen är att skärmen inte klarar toningar (gradients) särskilt bra. En mjuk övergång från en färg till en annan kan skapa band som liknar dom man får om man har för få färger att välja på. Vet inte hur detta kan uppstå då skärmen enligt spec ska klara 16.7 miljoner färger. Detta går förhoppningsvis lösas med en mjukvarufix.\r\n## Multitasking\r\nMusik kan spelas i bakgrunden och med hjälp av notifieringar klarar man de flesta behov av multitasking. Tyvärr så använder inte messengerklienten (ej skriven av microsoft) notifieringar utan kör helt enkelt bara när den är i förgrunden. Messenger skulle förstås kunna använda notifiering på samma sätt som när man får SMS man får bara hoppas att utvecklaren bygger in det själv.\r\n\r\nRykten säger att uppdateringen som kommer i början av 2011 kommer innehålla en utökad multitasking så här får man vänta och se.\r\n## Musik\r\nFör att kunna lyssna på musik på min korta promenad till och från jobbet så köpte jag ett par nya Sennheizer mx170 som är av gamsla stuket med en liten muff i örat för en dryg hundring för att ha vanliga lurar istället för såna som invaderar hela hörselgången. Med dessa hörlurar låter luren riktigt bra och den klarar driva ganska hög volym.\r\n\r\nAtt byta låt kräver att man klickar på skärmen, sedann volymkontrollen och sedan på framåt- eller bakåtikonerna som visas längst upp. Alla andra mobiler jag använt har kunnat byta låt med ett långt klick på volymkontrollen. Här hoppas jag på en mjukvarufix, man vill ju inte ta av sig handskarna i onödan på vintern.\r\n## Dålig kvalitet på 3:e parts appar/spel\r\nDet finns just nu ca 4000 appar/spel på marketplace. Av dessa så har jag ca 20 appar och ca 5 spel installerade på min telefon som ”är nåt att ha”. Om jag kunde registrera mitt kreditkort skulle jag ha lite bättre urval men det är ändå skrämmande dåligt. \r\n\r\nMan önskar att Microsoft hade en regel som säger att en applikation som släpps på marketplace måste:\r\n\r\nA)    Ha minst 100 rader kod (appar som har en knapp som spelar ett enda ljud eller som visar en enda bild borde förbjudas)\r\n\r\nB)     Tillföra mer än de exempelapplikationer Microsoft släppte första dagen. Det finns t.ex en utmärkt och gratis unitconverter från Microsoft som kan hantera alla tänkbara mått, ändå ser man utvecklare som släpper applikationer som bara översätter mellan t.ex celsius och kelvin.\r\n\r\nC)     Ha en potentiell målgrupp som är större än 1000 personer. Har sett appar som bara visar t.ex schemat för ett event i en specifik lokal i USA. En sådan app borde inte finnas på den publika marketplace alls.\r\n\r\nD)    Skilja sig från utvecklarens tidigare applikationer. Detta för att undvika dumheter som 20 olika appar från samma tillverkare som bara t.ex visar olika citat om olika områden där det enda som skiljer sig är ikonen och datakällan.\r\n\r\nDet här är förstås en tidsfråga, skräp kommer alltid finnas men mängden kvalitetsappar ökar varje vecka.\r\n## Stabilitet\r\nSjälva telefonen och de inbyggda applikationerna är väldigt stabila med ett enda undantag. Marketplaceapplikationen som båda hackar ibland och kan låsa sig så mycket att den inte går att starta igen (resten av telefonen fungerar dock fortfarande). Lösning på marketplacebuggen är en enkel 15 sekunders omstart av telefonen men det är förstås störigt att behöva starta om telefonen typ en gång i veckan bara för detta.\r\n## Väldigt nöjd\r\nDet är förstås enklast att skriva om de problem man har men även om det inte framgår så tydligt av texten så är jag väldigt nöjd med telefonen. Även om det förstås fattas vissa roliga och användbara funktioner så är telefonen skön att använda, den hindrar en inte från att utföra sina uppgifter utan ser till att hålla sig ur vägen.\r\n\r\nGivetvis så hoppas man på många förbättringar och nya funktioner i uppdateringen som ska komma snart, men precis som med Windows 7 så känner man att ett servicepack vore bra men jag måste inte absolut ha ett precis nu.\r\n\r\n![Bild](http://tekniken.nu/uploads/samsung-omnia-7.png)", + "html": "

    Jag har inte använt telefonen som en recensent som testar varje funktion var för sig och koncentrerar sig på varje liten del utan jag har använt telefonen i dagligt bruk som en ”vanlig svensson”. Min recension kommer alltså inte peta på varje detalj utan bara på sådant jag faktiskt använt.

    Halkig

    Som många recensenter skrivit så är baksidan ganska hal och känns nästan som teflon. Än har jag inte tappat telefonen men det känns inte alltid tryggt när man fiskar upp den ur fickan. Någon typ av gummering på baksidan skulle lösa problemet och här letar jag bara rätt material så när jag hittar det kommer jag klistra på det själv.

    Kameran

    Nu har jag inte använt kameran särskilt många gånger än men generellt så blir bilder på nära håll med blixt helt utfrätta. Att välja HDR hjälper lite vid knepig blixtbilder men störigt nog måste man välja om HDR varje gång man öppnar kameran igen. Detta känns klart som en bugg och fixas förhoppningsvis.

    Strulet med upplåsningen från 3

    När jag låste upp den från 3 så fungerade telefonen med Telia, dock med undantaget att 3G inte går igång så än så länge får jag leva med bara wifi. Så vitt jag förstått kommer sannolikt en hård reset lösa problemet men det betyder ju att konfigurerar om telefonen och synka över innehåll igen och det har jag inte haft tid med än. MMS fungerar inte heller och detta ska tydligen inte gå lösa alls ännu med samsungs telefoner. Här väntar jag på en lösning från Samsung eller Microsoft.

    Allt som 3 skräddarsytt utom splashskärmen som visas direkt när man startar telefonen går att ta bort. Splashskärmen är förstås störig men påverkar inte den dagliga användningen. Här väntar jag också på nån lösning även om det är mindre kritiskt förstås.

    Osvenskt

    Att telefonen i sig är på engelska är ju inget problem utan snarare något jag ser som positivt. Att ha autokorrigering på tangentbordet på svenska vore schysst men är inte heller direkt kritiskt.

    Marketplace går att komma åt om man följer rekommendationerna i min tidigare blogg http://tekniken.nu/nyheter-och-trender/samsung-omnia-7---forsta-intrycket. Dock fungerar inte kreditkortet om man inte har tur att ha ett postnummer vars siffror finns som startsiffror i nån ort i USA. Det verkar det som det är enklare att registrera kreditkort om man registrerar sitt live konto i England än i USA. Här har jag valt att just nu att inte köpa några applikationer utan vänta tills marketplace dyker upp i Sverige och att då resetta min telefon och sätta upp svenska kontot istället.

    Skärmen

    Färgerna och svärtan är imponerande. Texten går bra att läsa även om den inte är lika skarp som en traditionell skärm p.g.a pixelplaceringarna på super amoled. Ett problem som däremot visar sig vid vissa tillfällen är att skärmen inte klarar toningar (gradients) särskilt bra. En mjuk övergång från en färg till en annan kan skapa band som liknar dom man får om man har för få färger att välja på. Vet inte hur detta kan uppstå då skärmen enligt spec ska klara 16.7 miljoner färger. Detta går förhoppningsvis lösas med en mjukvarufix.

    Multitasking

    Musik kan spelas i bakgrunden och med hjälp av notifieringar klarar man de flesta behov av multitasking. Tyvärr så använder inte messengerklienten (ej skriven av microsoft) notifieringar utan kör helt enkelt bara när den är i förgrunden. Messenger skulle förstås kunna använda notifiering på samma sätt som när man får SMS man får bara hoppas att utvecklaren bygger in det själv.

    Rykten säger att uppdateringen som kommer i början av 2011 kommer innehålla en utökad multitasking så här får man vänta och se.

    Musik

    För att kunna lyssna på musik på min korta promenad till och från jobbet så köpte jag ett par nya Sennheizer mx170 som är av gamsla stuket med en liten muff i örat för en dryg hundring för att ha vanliga lurar istället för såna som invaderar hela hörselgången. Med dessa hörlurar låter luren riktigt bra och den klarar driva ganska hög volym.

    Att byta låt kräver att man klickar på skärmen, sedann volymkontrollen och sedan på framåt- eller bakåtikonerna som visas längst upp. Alla andra mobiler jag använt har kunnat byta låt med ett långt klick på volymkontrollen. Här hoppas jag på en mjukvarufix, man vill ju inte ta av sig handskarna i onödan på vintern.

    Dålig kvalitet på 3:e parts appar/spel

    Det finns just nu ca 4000 appar/spel på marketplace. Av dessa så har jag ca 20 appar och ca 5 spel installerade på min telefon som ”är nåt att ha”. Om jag kunde registrera mitt kreditkort skulle jag ha lite bättre urval men det är ändå skrämmande dåligt.

    Man önskar att Microsoft hade en regel som säger att en applikation som släpps på marketplace måste:

    A)    Ha minst 100 rader kod (appar som har en knapp som spelar ett enda ljud eller som visar en enda bild borde förbjudas)

    B)     Tillföra mer än de exempelapplikationer Microsoft släppte första dagen. Det finns t.ex en utmärkt och gratis unitconverter från Microsoft som kan hantera alla tänkbara mått, ändå ser man utvecklare som släpper applikationer som bara översätter mellan t.ex celsius och kelvin.

    C)     Ha en potentiell målgrupp som är större än 1000 personer. Har sett appar som bara visar t.ex schemat för ett event i en specifik lokal i USA. En sådan app borde inte finnas på den publika marketplace alls.

    D)    Skilja sig från utvecklarens tidigare applikationer. Detta för att undvika dumheter som 20 olika appar från samma tillverkare som bara t.ex visar olika citat om olika områden där det enda som skiljer sig är ikonen och datakällan.

    Det här är förstås en tidsfråga, skräp kommer alltid finnas men mängden kvalitetsappar ökar varje vecka.

    Stabilitet

    Själva telefonen och de inbyggda applikationerna är väldigt stabila med ett enda undantag. Marketplaceapplikationen som båda hackar ibland och kan låsa sig så mycket att den inte går att starta igen (resten av telefonen fungerar dock fortfarande). Lösning på marketplacebuggen är en enkel 15 sekunders omstart av telefonen men det är förstås störigt att behöva starta om telefonen typ en gång i veckan bara för detta.

    Väldigt nöjd

    Det är förstås enklast att skriva om de problem man har men även om det inte framgår så tydligt av texten så är jag väldigt nöjd med telefonen. Även om det förstås fattas vissa roliga och användbara funktioner så är telefonen skön att använda, den hindrar en inte från att utföra sina uppgifter utan ser till att hålla sig ur vägen.

    Givetvis så hoppas man på många förbättringar och nya funktioner i uppdateringen som ska komma snart, men precis som med Windows 7 så känner man att ett servicepack vore bra men jag måste inte absolut ha ett precis nu.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "En månad med Windows Phone 7", + "meta_description": "", + "author_id": 1089, + "created_at": 1291904464000, + "created_by": 1089, + "updated_at": 1291904464000, + "updated_by": 1089, + "published_at": 1291904464000, + "published_by": 1089 + }, + { + "id": 461, + "title": "Fix för MMS på upplåst Samsung Omnia 7 från Tre", + "slug": "fix-for-mms-pa-upplast-samsung-omnia-7-fran-tre", + "markdown": "\r\n\r\nDet här blir en kort men efterlängtad blogg om felaktiga MMS-inställningar i Windows Phone 7. Eftersom Tre hade ensamrätt på Samsung Omnia 7 köpte de flesta sin telefon från dem och låste sedan upp den för att återgå till sin vanliga operatör. Problemet som då uppstod var att MMS-inställningarna i telefonen var låsta till Tre och inte gick att ändra.\r\n\r\nNu har Samsung äntligen släppt en uppdaterad version av sin app Network Profile (du hittar den under Samsung Zone i marketplace) som gör det möjligt att låsa upp MMS-inställningarna.\r\n\r\nEfter installation behöver du bara starta appen och välja den operatör du bytt till i listan och sedan har du fungerande MMS igen!\r\n\r\n![Bild](http://tekniken.nu/uploads/634284344596892386-samsung-omnia-7.png)", + "html": "

    Det här blir en kort men efterlängtad blogg om felaktiga MMS-inställningar i Windows Phone 7. Eftersom Tre hade ensamrätt på Samsung Omnia 7 köpte de flesta sin telefon från dem och låste sedan upp den för att återgå till sin vanliga operatör. Problemet som då uppstod var att MMS-inställningarna i telefonen var låsta till Tre och inte gick att ändra.

    Nu har Samsung äntligen släppt en uppdaterad version av sin app Network Profile (du hittar den under Samsung Zone i marketplace) som gör det möjligt att låsa upp MMS-inställningarna.

    Efter installation behöver du bara starta appen och välja den operatör du bytt till i listan och sedan har du fungerande MMS igen!

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Fix för MMS på upplåst Samsung Omnia 7 från Tre", + "meta_description": "", + "author_id": 1089, + "created_at": 1292837658000, + "created_by": 1089, + "updated_at": 1292837658000, + "updated_by": 1089, + "published_at": 1292837658000, + "published_by": 1089 + }, + { + "id": 463, + "title": "Nu kan du handla mat med mobilen!", + "slug": "nu-kan-du-handla-mat-med-mobilen", + "markdown": "\r\n\r\nMatbutiken MatHem har blivit utsedd till bästa svenska matbutik på nätet av Internet World, i dagarna släpptes en app för iphone som gör att du enkelt kan beställa varor direkt från telefonen.\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/mathem.png)", + "html": "

    Matbutiken MatHem har blivit utsedd till bästa svenska matbutik på nätet av Internet World, i dagarna släpptes en app för iphone som gör att du enkelt kan beställa varor direkt från telefonen.







    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Nu kan du handla mat med mobilen", + "meta_description": "", + "author_id": 1087, + "created_at": 1294821355000, + "created_by": 1087, + "updated_at": 1294821355000, + "updated_by": 1087, + "published_at": 1294821355000, + "published_by": 1087 + }, + { + "id": 471, + "title": "Nu kan du handla mat med mobilen2", + "slug": "nu-kan-du-handla-mat-med-mobilen2", + "markdown": null, + "html": null, + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Nu kan du handla mat med mobilen", + "meta_description": null, + "author_id": 1087, + "created_at": 1294823383000, + "created_by": 1087, + "updated_at": 1294823383000, + "updated_by": 1087, + "published_at": 1294823383000, + "published_by": 1087 + }, + { + "id": 472, + "title": "Nu kan du handla mat med mobilen3", + "slug": "nu-kan-du-handla-mat-med-mobilen3", + "markdown": null, + "html": null, + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Nu kan du handla mat med mobilen", + "meta_description": null, + "author_id": 1087, + "created_at": 1294824126000, + "created_by": 1087, + "updated_at": 1294824126000, + "updated_by": 1087, + "published_at": 1294824126000, + "published_by": 1087 + }, + { + "id": 473, + "title": "Nu kan du handla mat med mobilen4", + "slug": "nu-kan-du-handla-mat-med-mobilen4", + "markdown": null, + "html": null, + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Nu kan du handla mat med mobilen", + "meta_description": null, + "author_id": 1087, + "created_at": 1294825157000, + "created_by": 1087, + "updated_at": 1294825157000, + "updated_by": 1087, + "published_at": 1294825157000, + "published_by": 1087 + }, + { + "id": 475, + "title": "Nu kan du handla mat med mobilen5", + "slug": "nu-kan-du-handla-mat-med-mobilen5", + "markdown": null, + "html": null, + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Nu kan du handla mat med mobilen", + "meta_description": null, + "author_id": 1087, + "created_at": 1294825561000, + "created_by": 1087, + "updated_at": 1294825561000, + "updated_by": 1087, + "published_at": 1294825561000, + "published_by": 1087 + }, + { + "id": 480, + "title": "Fria symboler - The Noun Project", + "slug": "fria-symboler---the-noun-project", + "markdown": "\r\n\r\nInternet är fullt av öppna programvaror som får distribueras fritt och modifieras av alla, däremot finns det inte mycket fri grafik vilket är synd. The Noun Project försöker ändra på det genom att producera enkla symboler som är gratis och öppna. Symbolerna ska vara kulturellt och språkligt obundna och försöker visualisera både traditionella objekt som båtar, bilar, snöflingor etc men också nya företeelser som trådlösa nätverk, lågenergilampor, dela eller varför inte en Segway?\r\n\r\nMin favorit är denna snygga lekplatsikon:\r\n\r\n och spöket:\r\n\r\nSymbolerna är väldigt snygga och känns klassiska och passar ihop – alla finns att ladda ner gratis i det vektorbaserade formatet (svg).\r\n\r\n\r\n\r\nKolla själva och ladda ner här:\r\n\r\nhttp://www.thenounproject.com/\r\n\r\n![Bild](http://tekniken.nu/uploads/634326661733132678-image001.png@01CBC174.28A0E030__image001.png)", + "html": "

    Internet är fullt av öppna programvaror som får distribueras fritt och modifieras av alla, däremot finns det inte mycket fri grafik vilket är synd. The Noun Project försöker ändra på det genom att producera enkla symboler som är gratis och öppna. Symbolerna ska vara kulturellt och språkligt obundna och försöker visualisera både traditionella objekt som båtar, bilar, snöflingor etc men också nya företeelser som trådlösa nätverk, lågenergilampor, dela eller varför inte en Segway?

    Min favorit är denna snygga lekplatsikon:

    och spöket:

    Symbolerna är väldigt snygga och känns klassiska och passar ihop – alla finns att ladda ner gratis i det vektorbaserade formatet (svg).


    Kolla själva och ladda ner här:

    http://www.thenounproject.com/

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Fria symboler - The Noun Project", + "meta_description": "", + "author_id": 1087, + "created_at": 1298282400000, + "created_by": 1087, + "updated_at": 1298282400000, + "updated_by": 1087, + "published_at": 1298282400000, + "published_by": 1087 + }, + { + "id": 481, + "title": "UQuery - AppStore sökmotor", + "slug": "uquery---appstore-sokmotor", + "markdown": "\r\nHitta iOS-apparna till din iPhone och iPad med en sökmotor online, som är mycket kraftfullare än iTunes inbyggda sök.\r\n\r\nUQuery har ett liknande användargränssnitt som Google, men låter dig även filtrera resultaten med olika villkor. Det finns många kraftfulla filter, t.ex. kan man söka mellan olika priser eller om man bara vill ha gratisappar.\r\n\r\nEn av de främsta funktionerna på sidan, som är tydligt uttalat av dem själva, är snabbhet i söket och resultaten.\r\n![Bild](http://tekniken.nu/uploads/634326661745789090-uquery.jpg)", + "html": "

    Hitta iOS-apparna till din iPhone och iPad med en sökmotor online, som är mycket kraftfullare än iTunes inbyggda sök.

    UQuery har ett liknande användargränssnitt som Google, men låter dig även filtrera resultaten med olika villkor. Det finns många kraftfulla filter, t.ex. kan man söka mellan olika priser eller om man bara vill ha gratisappar.

    En av de främsta funktionerna på sidan, som är tydligt uttalat av dem själva, är snabbhet i söket och resultaten.", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "UQuery - AppStore sökmotor", + "meta_description": "", + "author_id": 1096, + "created_at": 1297069373000, + "created_by": 1096, + "updated_at": 1297069373000, + "updated_by": 1096, + "published_at": 1297069373000, + "published_by": 1096 + }, + { + "id": 486, + "title": "Aktuellt om Windows Phone 7", + "slug": "aktuellt-om-windows-phone-7", + "markdown": "\r\n\r\nHär kommer en summering av de senaste tidernas nyheter om Windows Phone 7, både aktuellt och vad som väntas under året.\r\n## För utvecklarna\r\nSå har begränsningen med 5 gratis applikationer ändrats till 100 applikationer. Detta innebär i praktiken att vi kommer att få se fler gratis spel/appar men också tyvärr att det kommer bli fler massproducerade appar där endast ikoner och texter kommer ändras.\r\n## Mer än 9000 applikationer och spel\r\nDet finns förstås fortfarande luckor i utbudet men det är inte direkt nån brist på applikationer längre. Givetvis så är en hel drös spel bara skräp främst bland gratisvarianterna men är man villig och kan betala 99 cent dvs ca 6.40 kronor för sina spel så finns det många med hög kvalitet.\r\n## Uppdatering i mars\r\nEn uppdatering med klipp och klistra samt prestanda och buggfixar är på gång (kanske 8:e mars). Just nu så finns en föruppdatering som är till för att förbereda telefonen för den riktiga uppdateringen att ladda ner men om du som jag har en Samsung Omnia 7 är det rekommenderat att vänta på en nyare uppdatering då denna föruppdatering kan strula för just samsung mobilerna.\r\n## Andra halvåret kommer det en massiv uppdatering med bl.a:\r\nSvenskt stöd för telefonen är planerat till och här är bara spikat tangentbord och OS stöd men det finns anledning att tro att det i samband med detta kan komma stöd för marketplace och x-box live stöd också.\r\n\r\nMultitasking i telefonen. Implementationen verkar bli att håller man ner bakåtknappen i några  sekunder så dyker applikationerna man kör upp med stora skärmbilder som man kan scrolla sig igenom. Hur mycket applikationerna får göra i bakgrunden är dock inte helt klart men det verkar inte vara helt fri multitasking utan det blir sannolikt  ett antal API:er som öppnas upp så att applikationen kan spela musik och lyssna på GPSer och dylikt.\r\n\r\nTwitter i People Hubben och Officedokument kan synkas mot Skydrive vilket gör det enklare att dela dokument och ger 25 gb gratis utrymme.\r\n\r\nInternet Explorer 9 i telefonen. Här kommer mobilbrowsern att få en supermodern browser med HTML 5 stöd och GPU acceleration. Om inte de andra mobilerna gör nåt drastiskt närmaste halvåret så kommer Windows Phone 7 ha den snabbaste webbläsaren av alla. Inget nytt har sagts om Adobe Flash stöd men det verkar sannolikt att flashstöd kommer komma i samband med IE9.\r\n## Sajttips\r\nFör att hänga med vad som händer på svenska fronten så finns ingen bättre källa än Microsoft Phones nordiska affärsområdeschef Peter Wissingers blog http://wissinger.wordpress.com/.\r\n\r\nEn annan svensk nyhetsblog http://www.winmobile.se/.\r\n\r\nDe bästa engelska windowsphone bloggarna är http://wmpoweruser.com/ och http://wpcentral.com/\r\n\r\n![Bild](http://tekniken.nu/uploads/wp7.jpg)", + "html": "

    Här kommer en summering av de senaste tidernas nyheter om Windows Phone 7, både aktuellt och vad som väntas under året.

    För utvecklarna

    Så har begränsningen med 5 gratis applikationer ändrats till 100 applikationer. Detta innebär i praktiken att vi kommer att få se fler gratis spel/appar men också tyvärr att det kommer bli fler massproducerade appar där endast ikoner och texter kommer ändras.

    Mer än 9000 applikationer och spel

    Det finns förstås fortfarande luckor i utbudet men det är inte direkt nån brist på applikationer längre. Givetvis så är en hel drös spel bara skräp främst bland gratisvarianterna men är man villig och kan betala 99 cent dvs ca 6.40 kronor för sina spel så finns det många med hög kvalitet.

    Uppdatering i mars

    En uppdatering med klipp och klistra samt prestanda och buggfixar är på gång (kanske 8:e mars). Just nu så finns en föruppdatering som är till för att förbereda telefonen för den riktiga uppdateringen att ladda ner men om du som jag har en Samsung Omnia 7 är det rekommenderat att vänta på en nyare uppdatering då denna föruppdatering kan strula för just samsung mobilerna.

    Andra halvåret kommer det en massiv uppdatering med bl.a:

    Svenskt stöd för telefonen är planerat till och här är bara spikat tangentbord och OS stöd men det finns anledning att tro att det i samband med detta kan komma stöd för marketplace och x-box live stöd också.

    Multitasking i telefonen. Implementationen verkar bli att håller man ner bakåtknappen i några  sekunder så dyker applikationerna man kör upp med stora skärmbilder som man kan scrolla sig igenom. Hur mycket applikationerna får göra i bakgrunden är dock inte helt klart men det verkar inte vara helt fri multitasking utan det blir sannolikt  ett antal API:er som öppnas upp så att applikationen kan spela musik och lyssna på GPSer och dylikt.

    Twitter i People Hubben och Officedokument kan synkas mot Skydrive vilket gör det enklare att dela dokument och ger 25 gb gratis utrymme.

    Internet Explorer 9 i telefonen. Här kommer mobilbrowsern att få en supermodern browser med HTML 5 stöd och GPU acceleration. Om inte de andra mobilerna gör nåt drastiskt närmaste halvåret så kommer Windows Phone 7 ha den snabbaste webbläsaren av alla. Inget nytt har sagts om Adobe Flash stöd men det verkar sannolikt att flashstöd kommer komma i samband med IE9.

    Sajttips

    För att hänga med vad som händer på svenska fronten så finns ingen bättre källa än Microsoft Phones nordiska affärsområdeschef Peter Wissingers blog http://wissinger.wordpress.com/.

    En annan svensk nyhetsblog http://www.winmobile.se/.

    De bästa engelska windowsphone bloggarna är http://wmpoweruser.com/ och http://wpcentral.com/

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Aktuellt om Windows Phone 7", + "meta_description": "", + "author_id": 1089, + "created_at": 1298991666000, + "created_by": 1089, + "updated_at": 1298991666000, + "updated_by": 1089, + "published_at": 1298991666000, + "published_by": 1089 + }, + { + "id": 491, + "title": "Windows Phone 7 - de bästa gratisapparna och spelen idag", + "slug": "windows-phone-7---de-basta-gratisapparna-och-spelen-idag", + "markdown": "\r\n\r\nDet dyker upp många nya appar och spel varje dag och det finns alltid nåt nytt kul som är värt att testa så det finns ingen risk att man tröttnar på utbudet i första taget.\r\n\r\nBörja gärna med att tanka ner applikationen ”Marketplace Search” så är det enklare att hitta appar och spel då du slipper alla musikträffar när du söker.\r\n\r\nHar du någon favorit som inte finns med i listan? Tipsa mig och andra med hjälp av kommentarsfunktionen nedan!\r\n## Spel - 30 st\r\nFlowerz – enda gratis xbox live speletAlphaJax Free– Alfapet i telefonen, endast engelska ord men hur kul som helst.Babble Plus – Bygga ihop ord med bokstäver som faller, engelska ord men kul och svårt.Blackjack Metro – Blackjack på telefonenBlockBuster – Breakout spelByeByeBrain Lite – Döda zombies i ett riktigt snyggt ”tower defense” spel.Chickens Can Dream – Riktigt snyggt spel där man ska ta sig genom en bana snabbt och oskadd.Chicks’n Vixens  - Liknar Angry BirdsFinal Approach Free – Landa plan Flood Control Free – PuzzelspelHangman Free – Hänga gubbe på engelskaHooked on Darts – Dartspel, dvs kasta pilIce Ball – liknar laser bikes där man ska bygga igen en studsande bollImpossible Shoota – Shootem upKrashlander Free – Åk skidor och försök krasha på spektakulära sättMetro Blocks Free – En snygg tetrisklonNom Nom Worm – Masken fast styrd med accelerometerPandemic – Pusselspel med baktierierPirates Ahoy – Liknar fruit ninja fast med pirat temaSatalaunch – skicka satelliter mot ett mål fast ta hänsyn till gravitationSimple Couplers – PusselspelSkyDiver Classic – Precisionslanda i retro stilSolitaire – Klassiska kortspeletSteam Castle – Missile command i ny skrudSpin Crisis – Rulla runt en banaTable Tiles – Ordspel på engelskaTextTextRevolution – Skriv snabbtUltra Fill – lås in studsande bollar fast på nytt sättUnite – Rulla bollar runt en banaWord Tangle Free – Ordspel på engelska\r\n## Appar - 28 st\r\n3D Brain – lär dig mer om hjärnanAdobe Reader – Ett måste för att läsa PDFBeezz - TwitterklientBigoven - ReceptsamlingDailymotion – Stor samling online videos eBay – Auktionssajtens officiella appFacebook – Mer komplett än inbyggda stödetFlickr from Yahoo! – Håll koll på fotografier på nätetFlixter – Allt om ny filmIMDb – Mest kompletta film/skådis databasenLevel – Enkelt vattenpassLyrics – Hitta texten till låtarMarketplace Search  - Just nu den bästa appen för att söka i marketplace.Messenger by Miyowa – Live messenger på telefonenMSN Video – Videos liknande youtubeMusicShark – Ickeofficiell grooveshark klientNetwork Profile – Om du låst upp en tre telefon och vill ha tillbaka MMS stödPodcasts! – Ljud och video i mängder av kategorierProject Emporia – Smart nyhetsflödeShazam – Hitta låten som just nu spelasSTHLM commute – Håll koll på stockholms lokaltrafikStockholm Travel – Håll koll på stockholms lokaltrafikTwitter – Officiella twitterklientenThe weather Channel - VäderWikiPanda – Wikipedia appWordPress – Administrera din wordpressblogYouTube – Ett måste för att spela youtubefilmerYouTube Lazy worm – Bläddra smidigt bland youtubefilmerna\r\n\r\n![Bild](http://tekniken.nu/uploads/634350907078857830-wp7.jpg)", + "html": "

    Det dyker upp många nya appar och spel varje dag och det finns alltid nåt nytt kul som är värt att testa så det finns ingen risk att man tröttnar på utbudet i första taget.

    Börja gärna med att tanka ner applikationen ”Marketplace Search” så är det enklare att hitta appar och spel då du slipper alla musikträffar när du söker.

    Har du någon favorit som inte finns med i listan? Tipsa mig och andra med hjälp av kommentarsfunktionen nedan!

    Spel - 30 st

    Flowerz – enda gratis xbox live spelet
    AlphaJax Free– Alfapet i telefonen, endast engelska ord men hur kul som helst.
    Babble Plus – Bygga ihop ord med bokstäver som faller, engelska ord men kul och svårt.
    Blackjack Metro – Blackjack på telefonen
    BlockBuster – Breakout spel
    ByeByeBrain Lite – Döda zombies i ett riktigt snyggt ”tower defense” spel.
    Chickens Can Dream – Riktigt snyggt spel där man ska ta sig genom en bana snabbt och oskadd.
    Chicks’n Vixens  - Liknar Angry Birds
    Final Approach Free – Landa plan
    Flood Control Free – Puzzelspel
    Hangman Free – Hänga gubbe på engelska
    Hooked on Darts – Dartspel, dvs kasta pil
    Ice Ball – liknar laser bikes där man ska bygga igen en studsande boll
    Impossible Shoota – Shootem up
    Krashlander Free – Åk skidor och försök krasha på spektakulära sätt
    Metro Blocks Free – En snygg tetrisklon
    Nom Nom Worm – Masken fast styrd med accelerometer
    Pandemic – Pusselspel med baktierier
    Pirates Ahoy – Liknar fruit ninja fast med pirat tema
    Satalaunch – skicka satelliter mot ett mål fast ta hänsyn till gravitation
    Simple Couplers – Pusselspel
    SkyDiver Classic – Precisionslanda i retro stil
    Solitaire – Klassiska kortspelet
    Steam Castle – Missile command i ny skrud
    Spin Crisis – Rulla runt en bana
    Table Tiles – Ordspel på engelska
    TextTextRevolution – Skriv snabbt
    Ultra Fill – lås in studsande bollar fast på nytt sätt
    Unite – Rulla bollar runt en bana
    Word Tangle Free – Ordspel på engelska

    Appar - 28 st

    3D Brain – lär dig mer om hjärnan
    Adobe Reader – Ett måste för att läsa PDF
    Beezz - Twitterklient
    Bigoven - Receptsamling
    Dailymotion – Stor samling online videos
    eBay – Auktionssajtens officiella app
    Facebook – Mer komplett än inbyggda stödet
    Flickr from Yahoo! – Håll koll på fotografier på nätet
    Flixter – Allt om ny film
    IMDb – Mest kompletta film/skådis databasen
    Level – Enkelt vattenpass
    Lyrics – Hitta texten till låtar
    Marketplace Search  - Just nu den bästa appen för att söka i marketplace.
    Messenger by Miyowa – Live messenger på telefonen
    MSN Video – Videos liknande youtube
    MusicShark – Ickeofficiell grooveshark klient
    Network Profile – Om du låst upp en tre telefon och vill ha tillbaka MMS stöd
    Podcasts! – Ljud och video i mängder av kategorier
    Project Emporia – Smart nyhetsflöde
    Shazam – Hitta låten som just nu spelas
    STHLM commute – Håll koll på stockholms lokaltrafik
    Stockholm Travel – Håll koll på stockholms lokaltrafik
    Twitter – Officiella twitterklienten
    The weather Channel - Väder
    WikiPanda – Wikipedia app
    WordPress – Administrera din wordpressblog
    YouTube – Ett måste för att spela youtubefilmer
    YouTube Lazy worm – Bläddra smidigt bland youtubefilmerna

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Windows Phone 7 - de bästa gratisapparna och spelen idag", + "meta_description": "", + "author_id": 1089, + "created_at": 1299494220000, + "created_by": 1089, + "updated_at": 1299494220000, + "updated_by": 1089, + "published_at": 1299494220000, + "published_by": 1089 + }, + { + "id": 493, + "title": "Ring billigt på resan", + "slug": "ring-billigt-pa-resan", + "markdown": "\r\n\r\nPå resa i utlandet kan man snabbt ruinera sig genom att använda sin mobil för att ringa hem. Det finns dock flera sätt att komma undan riktigt billigt, så länge man har tillgång till trådlöst internet.\r\n\r\n1) Snygga sättet\r\n\r\nDet riktigt snygga sättet är att ringa med VOIP med din mobil, det kan du använda om du har ett telefonnummer anslutet till en SIP-växel. Så fungerar våra telefonnummer på Iteam, och jag har samma lösning hemma via Alltele. Med en SIP-applikation på telefonen (t.ex. Fring) så loggar jag in som vanligt på mitt nummer över internet och kan sen ringa samtal i Sverige till samma taxa som om jag satt på kontoret eller hemma. Det är en ganska skön känsla att sitta på hotellrummet i Tokyo och prata med Sverige i 40 minuter utan att bry sig om kostnaden. Första gången jag testade detta var jag lite paranoid och startade om telefonen utan att mata in pinkoden, bara för att vara säker på att ingenting gick via telefonnätet.\r\n\r\n2) Lätta sättet\r\n\r\nSkaffa en VOIP-applikation till din mobil, t.ex. Skype eller Fring, och teckna deras abonnemang för att kunna ringa till vanliga abonnemang.\r\n\r\nI båda varianterna kommer du att betala 15-20 öre per minut för samtal till fast telefon och 1-2 kronor per minut för mobilsamtal till Sverige. Som jämförelse kan nämnas att t.ex. Telia tar 22 kronor per minut för att ringa hem från USA och Japan och 28 kronor per minut om du ringer en kollega eller familjemedlem som befinner sig i något av de länderna samtidigt som du ...\r\n\r\n3) Gratissättet\r\n\r\nMed Skype på telefonen kan du ringa helt gratis till andra med Skype. Detta är det smartaste sättet på pappret, men jag känner inte en enda människa som jag vet alltid har Skype igång, headset tillgängligt etc.\r\n\r\nNackdelar då? Utan trådlöst internet funkar det förstås inte. Var extremt noga med att du inte råkar ringa VOIP-samtal över roamad 3G, det kan bli väldigt dyrt. I Tokyo fanns t.ex. förbluffande många öppna nät överallt (i synnerhet i närheten av bostäder), medan det är ganska tunnsått här i Stockholm. En annan nackdel jag har stött på är att ljudet kan lagga lite.\r\n\r\nFrågan är vad telebolagen håller på med. Det kan omöjligen vara 100 gånger så dyrt för dem att vidarebefordra ett samtal via (troligtvis) samma nät som man själv kan använda i princip gratis...\r\n\r\n![Bild](http://tekniken.nu/uploads/634369037281516010-9-fring.png)", + "html": "

    På resa i utlandet kan man snabbt ruinera sig genom att använda sin mobil för att ringa hem. Det finns dock flera sätt att komma undan riktigt billigt, så länge man har tillgång till trådlöst internet.

    1) Snygga sättet

    Det riktigt snygga sättet är att ringa med VOIP med din mobil, det kan du använda om du har ett telefonnummer anslutet till en SIP-växel. Så fungerar våra telefonnummer på Iteam, och jag har samma lösning hemma via Alltele. Med en SIP-applikation på telefonen (t.ex. Fring) så loggar jag in som vanligt på mitt nummer över internet och kan sen ringa samtal i Sverige till samma taxa som om jag satt på kontoret eller hemma. Det är en ganska skön känsla att sitta på hotellrummet i Tokyo och prata med Sverige i 40 minuter utan att bry sig om kostnaden. Första gången jag testade detta var jag lite paranoid och startade om telefonen utan att mata in pinkoden, bara för att vara säker på att ingenting gick via telefonnätet.

    2) Lätta sättet

    Skaffa en VOIP-applikation till din mobil, t.ex. Skype eller Fring, och teckna deras abonnemang för att kunna ringa till vanliga abonnemang.

    I båda varianterna kommer du att betala 15-20 öre per minut för samtal till fast telefon och 1-2 kronor per minut för mobilsamtal till Sverige. Som jämförelse kan nämnas att t.ex. Telia tar 22 kronor per minut för att ringa hem från USA och Japan och 28 kronor per minut om du ringer en kollega eller familjemedlem som befinner sig i något av de länderna samtidigt som du ...

    3) Gratissättet

    Med Skype på telefonen kan du ringa helt gratis till andra med Skype. Detta är det smartaste sättet på pappret, men jag känner inte en enda människa som jag vet alltid har Skype igång, headset tillgängligt etc.

    Nackdelar då? Utan trådlöst internet funkar det förstås inte. Var extremt noga med att du inte råkar ringa VOIP-samtal över roamad 3G, det kan bli väldigt dyrt. I Tokyo fanns t.ex. förbluffande många öppna nät överallt (i synnerhet i närheten av bostäder), medan det är ganska tunnsått här i Stockholm. En annan nackdel jag har stött på är att ljudet kan lagga lite.

    Frågan är vad telebolagen håller på med. Det kan omöjligen vara 100 gånger så dyrt för dem att vidarebefordra ett samtal via (troligtvis) samma nät som man själv kan använda i princip gratis...

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Ring billigt på resan", + "meta_description": "", + "author_id": 6, + "created_at": 1301307300000, + "created_by": 6, + "updated_at": 1301307300000, + "updated_by": 6, + "published_at": 1301307300000, + "published_by": 6 + }, + { + "id": 505, + "title": "Glöm killer apps - du behöver en killer app store", + "slug": "glom-killer-apps---du-behover-en-killer-app-store", + "markdown": "\r\nEfter att ha tillbringat några kvällar med att sätta upp en WordPress-blogg har jag insett vad som kan avgöra skillnaden mellan en framgångsrik och en misslyckad plattform. Inbyggt i WordPress finns en plugin store med tiotusentals plugins som laddas ner och installeras automatiskt, precis lika lätt som i iPhones app store. Vips har man stöd för att visa Tweets baserat på användarnamn och hashtag, listor med relaterade postningar och automatisk taggning som slår upp förslag både ur den egna bloggen och från stora siter som Yahoo och visar dem i ett 3D-moln.\r\n\r\nMan har i åratal för både traditionella plattformar (operativsystem, publiceringsplattformar etc.) och för multifunktionella webbplatser (intranät, portaler etc) pratat om ”the killer app”, applikationen eller tillämpningen som gör att användarna både vill och bara måste komma tillbaka regelbundet. Det är förstås fortfarande relevant, men kanske är vägen dit inte att lägga pannan i djupa veck på sin egen kammare utan istället att se till att användarna kan skapa killer apps åt dig. \r\n\r\niPhones app store är det uppenbara exemplet, utan den är jag säker på att iPhone aldrig hade blivit den succé den är idag. Ett oanpassningsbart operativsystem som kräver att du kör crapware som Itunes på din dator, för några år sen hade jag bara skrattat åt idén. Men all flexibilitet och anpassning du behöver kommer direkt via appar som oftast är gratis eller i det närmaste gratis. Jag kan bara jämföra med tiden då jag hade en Windows CE-mobil. Man kunde jaga applikationer en hel dag och bara hitta några få, som i regel var väldigt dyra, saknade testversion och som man bara kunde hoppas var kompatibel med just ens egen variant på pekskärm/pekskärmslös, operativsystemsversion etc. Alla mobiltillverkar har följt efter, det går inte att konkurrera utan. Samsungs nya TV har en app store.\r\n\r\nEn ofärdig tanke har dykt upp i mitt huvud – kanske kan man tillämpa detta även på andra typer av plattformar? Tänk ett stort företags intranät där man låter användarna knåpa ihop egna tillämpningar och göra dem lätta att dra och släppa in på startsidan. Kanske blir Växjö-kontorets tidrapporteringsdiagram det alla vill se, eller Karlstads automatiska formulär för semesteransökningar? Majoriteten av användarna i normala företags intranät är ju inte utvecklare, men kanske räcker de som finns och kanske kan man hitta på ett smart sätt där intresserade icke-utvecklare kan sätta ihop egna tillämpningar med enkla verktyg?\r\n![Bild](http://tekniken.nu/uploads/634408008292197781-picture-24.png)", + "html": "

    Efter att ha tillbringat några kvällar med att sätta upp en WordPress-blogg har jag insett vad som kan avgöra skillnaden mellan en framgångsrik och en misslyckad plattform. Inbyggt i WordPress finns en plugin store med tiotusentals plugins som laddas ner och installeras automatiskt, precis lika lätt som i iPhones app store. Vips har man stöd för att visa Tweets baserat på användarnamn och hashtag, listor med relaterade postningar och automatisk taggning som slår upp förslag både ur den egna bloggen och från stora siter som Yahoo och visar dem i ett 3D-moln.

    Man har i åratal för både traditionella plattformar (operativsystem, publiceringsplattformar etc.) och för multifunktionella webbplatser (intranät, portaler etc) pratat om ”the killer app”, applikationen eller tillämpningen som gör att användarna både vill och bara måste komma tillbaka regelbundet. Det är förstås fortfarande relevant, men kanske är vägen dit inte att lägga pannan i djupa veck på sin egen kammare utan istället att se till att användarna kan skapa killer apps åt dig.

    iPhones app store är det uppenbara exemplet, utan den är jag säker på att iPhone aldrig hade blivit den succé den är idag. Ett oanpassningsbart operativsystem som kräver att du kör crapware som Itunes på din dator, för några år sen hade jag bara skrattat åt idén. Men all flexibilitet och anpassning du behöver kommer direkt via appar som oftast är gratis eller i det närmaste gratis. Jag kan bara jämföra med tiden då jag hade en Windows CE-mobil. Man kunde jaga applikationer en hel dag och bara hitta några få, som i regel var väldigt dyra, saknade testversion och som man bara kunde hoppas var kompatibel med just ens egen variant på pekskärm/pekskärmslös, operativsystemsversion etc. Alla mobiltillverkar har följt efter, det går inte att konkurrera utan. Samsungs nya TV har en app store.

    En ofärdig tanke har dykt upp i mitt huvud – kanske kan man tillämpa detta även på andra typer av plattformar? Tänk ett stort företags intranät där man låter användarna knåpa ihop egna tillämpningar och göra dem lätta att dra och släppa in på startsidan. Kanske blir Växjö-kontorets tidrapporteringsdiagram det alla vill se, eller Karlstads automatiska formulär för semesteransökningar? Majoriteten av användarna i normala företags intranät är ju inte utvecklare, men kanske räcker de som finns och kanske kan man hitta på ett smart sätt där intresserade icke-utvecklare kan sätta ihop egna tillämpningar med enkla verktyg?", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Glöm killer apps - du behöver en killer app store", + "meta_description": " borde det gälla även funktionalitet och inte bara innehåll?", + "author_id": 6, + "created_at": 1305204300000, + "created_by": 6, + "updated_at": 1305204300000, + "updated_by": 6, + "published_at": 1305204300000, + "published_by": 6 + }, + { + "id": 506, + "title": "Chrome får inbyggd PDF-skrivare", + "slug": "chrome-far-inbyggd-pdf-skrivare", + "markdown": "\r\n\r\nGoogle Chrome upphör aldrig att förvåna, på ett postivt sätt!\r\n\r\nIdag när jag skulle skriva ut upptäckte jag en PDF-skrivare i listan jag aldrig sett förut. En snabb Googling senare visar det sig att utvecklarkanalen för Chrome har fått en PDF-skrivarfunktion inbyggd direkt i webbläsaren. Det är en funktion som jag använder väldigt ofta och det är extremt skönt att inte behöva installera den separat på varje dator (och betala för den).\r\n\r\n\r\n\r\n\r\n\r\nI ärlighetens namn så blev det en ganska stor PDF-fil och kvaliteten blev inte helt 100. Men jag är övertygad om att detta kommer att vara slipat på till dess att funktionen letar sig fram till beta- och stable-kanalerna.\r\n\r\n![Bild](http://tekniken.nu/uploads/chrome_print.jpg)", + "html": "

    Google Chrome upphör aldrig att förvåna, på ett postivt sätt!

    Idag när jag skulle skriva ut upptäckte jag en PDF-skrivare i listan jag aldrig sett förut. En snabb Googling senare visar det sig att utvecklarkanalen för Chrome har fått en PDF-skrivarfunktion inbyggd direkt i webbläsaren. Det är en funktion som jag använder väldigt ofta och det är extremt skönt att inte behöva installera den separat på varje dator (och betala för den).



    I ärlighetens namn så blev det en ganska stor PDF-fil och kvaliteten blev inte helt 100. Men jag är övertygad om att detta kommer att vara slipat på till dess att funktionen letar sig fram till beta- och stable-kanalerna.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Chrome får inbyggd PDF-skrivare", + "meta_description": "", + "author_id": 6, + "created_at": 1306144200000, + "created_by": 6, + "updated_at": 1306144200000, + "updated_by": 6, + "published_at": 1306144200000, + "published_by": 6 + }, + { + "id": 508, + "title": "Webbläsare genom tiderna", + "slug": "webblasare-genom-tiderna", + "markdown": "\r\n\r\nSchemat visar hur populära olika webbläsare har varit genom tiderna. Själv saknar jag Mosaic lite i toppen...\r\n\r\n\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/633707291283107022-IE_logo.png)", + "html": "

    Schemat visar hur populära olika webbläsare har varit genom tiderna. Själv saknar jag Mosaic lite i toppen...



    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Webbläsare genom tiderna", + "meta_description": "", + "author_id": 6, + "created_at": 1306859700000, + "created_by": 6, + "updated_at": 1306859700000, + "updated_by": 6, + "published_at": 1306859700000, + "published_by": 6 + }, + { + "id": 512, + "title": "Mangonyheter - 24:e maj", + "slug": "mangonyheter---24e-maj", + "markdown": "\r\n\r\nIgår presenterades Mango med så många nyheter att  det nästan är löjligt. Här är en lista över de viktigaste enligt mitt tycke.\r\n## Massor med ny funktionalitet\r\nMultitasking och Taskswitching– Att endast kunna backa i historiken utan att kunna gå framåt i historiken har känts osmidigt, nu kan man välja fritt och det ser ut att funka mycket bra och smidigt.\r\n\r\nFörbättringar i poeple hubben – Stöd för Twitter samt att det nu är möjligt att gruppera och samla olika kontakter.\r\n\r\nOffice 365 och Skydrive i office hubben - Enklare att jobba med mobil/dator på samma dokument utan att behöva en egen sharepoint server.\r\n\r\nInternet Explorer 9 mobile – Snabb och modern webbläsare med bra html 5 stöd och prestanda som  är bättre än motståndarna.\r\n\r\nFlera livetiles per applikation och djuplänkning –  Kommer öka värdet på livetiles för de flesta applikationer.\r\n\r\nFler språk (inklusive svenska) – Jag föredrar engelskt menysystem men svensk rättstavning och ett helsvenskt tangentbord är förstås efterlängtat.\r\n\r\nStöd för privata och beta marketplace  - Ett måste för att kunna slå igenom på företagsmarknaden.\r\n\r\nLänkade inboxar – Just nu ”slösar” jag bort två tiles på min telefon, hotmail och outlook och här skulle jag förstås vilja ha en gemensam siffra eftersom båda mailboxarna är lika viktiga.\r\n\r\n1500 nya API inklusive direkt åtkomst till kamera och gyro/kompass, socket etc – Möjliggör en stor mängd nya typer av applikationer.\r\n\r\nKameran kommer ihåg inställningarna – Nån har hittat denna doldis i emulatorn, äntligen säger alla.\r\n\r\nBing Vision – Det här är faktiskt hur coolt som helst. Sök med hjälp av kameran, stöder streckkoder böcker, dvds och mer. Översätt text från bilder.\r\n\r\nTasks från outlook – Det finns förstås alternativa todo listor men det är skönt att inte lägga till beroenden från ytterliga tjänster.\r\n\r\nLync stöd – Har inte använt lync än men detta verkar onekligen som en bra grej.\r\n\r\nInbyggt stöd för messenger och facebook chat – Har dessutom intelligent switchining så att telefonen kan välja hur kommunikationen ska gå.\r\n\r\nFacebook checkin – Nu har jag aldrig checkat in överhuvudtaget men det kan förstås bli mer intressant när mer och mer information aggregeras.\r\n\r\nEgna ringsignaler – Jag gillar iofs ringsignalerna som följer med men det vore förstås kul att få välja egna.\r\n\r\n+ etc m.m osv så mycket att det nästan känns övermäktigt att sätta sig in i alla delar!\r\n## Titta själv\r\nFör den som vill ha informationen lättsmält i videoform så kan man få en 10 minuteres executive summary av Joe Belfiore här.\r\n\r\n\r\n\r\nMed så här många nya funktioner kan man nästan tro att det inte finns nåt alls inbyggt i telefonen idag. Det är lätt att anse att nuvarande versionen igentligen släpptes för tidigt men samtidigt förstår man varför det var viktigt att släppa en tidig då det redan finns många utvecklare och där Microsoft haft en stabil grund att stå på vilket gjort att det gått så snabbt att bygga vidare.\r\n\r\nMango kommer göra att det känns som en helt ny mobil och den kommer definitvt ikapp både Android och iPhone när det gäller funktioner samt tillför unika aspekter som inte finns nån annanstans.\r\n## Ett utvecklarsläpp på g?\r\nRyktet säger att det kan dyka upp nåt sätt för utvecklare att installera mango redan innan den släpps för allmänheten, annars är det hösten som gäller.\r\n\r\nNärmaste dagarna/veckorna kommer det att dyka upp fler detaljer allteftersom emulatorn från SDK:n analyseras och låses upp. Det är onekligen en spännande höst som kommer.\r\n\r\n![Bild](http://tekniken.nu/uploads/mango.png)", + "html": "

    Igår presenterades Mango med så många nyheter att  det nästan är löjligt. Här är en lista över de viktigaste enligt mitt tycke.

    Massor med ny funktionalitet

    Multitasking och Taskswitching– Att endast kunna backa i historiken utan att kunna gå framåt i historiken har känts osmidigt, nu kan man välja fritt och det ser ut att funka mycket bra och smidigt.

    Förbättringar i poeple hubben – Stöd för Twitter samt att det nu är möjligt att gruppera och samla olika kontakter.

    Office 365 och Skydrive i office hubben - Enklare att jobba med mobil/dator på samma dokument utan att behöva en egen sharepoint server.

    Internet Explorer 9 mobile – Snabb och modern webbläsare med bra html 5 stöd och prestanda som  är bättre än motståndarna.

    Flera livetiles per applikation och djuplänkning –  Kommer öka värdet på livetiles för de flesta applikationer.

    Fler språk (inklusive svenska) – Jag föredrar engelskt menysystem men svensk rättstavning och ett helsvenskt tangentbord är förstås efterlängtat.

    Stöd för privata och beta marketplace  - Ett måste för att kunna slå igenom på företagsmarknaden.

    Länkade inboxar – Just nu ”slösar” jag bort två tiles på min telefon, hotmail och outlook och här skulle jag förstås vilja ha en gemensam siffra eftersom båda mailboxarna är lika viktiga.

    1500 nya API inklusive direkt åtkomst till kamera och gyro/kompass, socket etc – Möjliggör en stor mängd nya typer av applikationer.

    Kameran kommer ihåg inställningarna – Nån har hittat denna doldis i emulatorn, äntligen säger alla.

    Bing Vision – Det här är faktiskt hur coolt som helst. Sök med hjälp av kameran, stöder streckkoder böcker, dvds och mer. Översätt text från bilder.

    Tasks från outlook – Det finns förstås alternativa todo listor men det är skönt att inte lägga till beroenden från ytterliga tjänster.

    Lync stöd – Har inte använt lync än men detta verkar onekligen som en bra grej.

    Inbyggt stöd för messenger och facebook chat – Har dessutom intelligent switchining så att telefonen kan välja hur kommunikationen ska gå.

    Facebook checkin – Nu har jag aldrig checkat in överhuvudtaget men det kan förstås bli mer intressant när mer och mer information aggregeras.

    Egna ringsignaler – Jag gillar iofs ringsignalerna som följer med men det vore förstås kul att få välja egna.

    + etc m.m osv så mycket att det nästan känns övermäktigt att sätta sig in i alla delar!

    Titta själv

    För den som vill ha informationen lättsmält i videoform så kan man få en 10 minuteres executive summary av Joe Belfiore här.

    Med så här många nya funktioner kan man nästan tro att det inte finns nåt alls inbyggt i telefonen idag. Det är lätt att anse att nuvarande versionen igentligen släpptes för tidigt men samtidigt förstår man varför det var viktigt att släppa en tidig då det redan finns många utvecklare och där Microsoft haft en stabil grund att stå på vilket gjort att det gått så snabbt att bygga vidare.

    Mango kommer göra att det känns som en helt ny mobil och den kommer definitvt ikapp både Android och iPhone när det gäller funktioner samt tillför unika aspekter som inte finns nån annanstans.

    Ett utvecklarsläpp på g?

    Ryktet säger att det kan dyka upp nåt sätt för utvecklare att installera mango redan innan den släpps för allmänheten, annars är det hösten som gäller.

    Närmaste dagarna/veckorna kommer det att dyka upp fler detaljer allteftersom emulatorn från SDK:n analyseras och låses upp. Det är onekligen en spännande höst som kommer.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Mangonyheter - 24:e maj", + "meta_description": "", + "author_id": 1089, + "created_at": 1306318500000, + "created_by": 1089, + "updated_at": 1306318500000, + "updated_by": 1089, + "published_at": 1306318500000, + "published_by": 1089 + }, + { + "id": 514, + "title": "Översätt med Wikipedia", + "slug": "oversatt-med-wikipedia", + "markdown": "\r\n\r\nNär man översätter texter från svenska till engelska tycker jag ofta att vanliga meningar och grammatiska konstruktioner flyter på bra, men där man fastnar är på specifika ord och uttryck. Tyda.se tycker jag är det bästa svensk-engelska onlinelexikonet, med både möjlighet att föreslå nya ord och uttalshjälp. Men ibland är ett lexikon inte tillräckligt, särskilt när det gäller fackuttryck. Wikipedia har två funktioner som jag använder mycket när ett lexikon inte räcker till:\r\n1) Visa sidan på engelska:\r\nPå alla sidor på svenska Wikipedia som har en mostsvarande sida på engelska (eller andra språk) så finns direktlänkar till de andra språkversionerna längst ner till vänster:\r\n\r\n\r\n\r\nDenna funktion använder jag otroligt ofta, särskilt för affärstermer och musiktermer (tonart heter key på engelska för övrigt)\r\n2) Wikipedias systersite Wiktionary har en lista på svenska talesätt, med översättningar till engelska:\r\nhttp://en.wiktionary.org/wiki/Category:Swedish_idioms\r\n\r\n\r\n3) Wiktionarys motsvarande sida med engelska talesätt kan också vara en hjälp ifall man tror att man har rätt uttryck men vill dubbelkolla:\r\nhttp://en.wiktionary.org/wiki/Category:English_idioms\r\n\r\n![Bild](http://tekniken.nu/uploads/634423480488248461-image001.png@01CC1B83.8E302F50__image001.png)", + "html": "

    När man översätter texter från svenska till engelska tycker jag ofta att vanliga meningar och grammatiska konstruktioner flyter på bra, men där man fastnar är på specifika ord och uttryck. Tyda.se tycker jag är det bästa svensk-engelska onlinelexikonet, med både möjlighet att föreslå nya ord och uttalshjälp. Men ibland är ett lexikon inte tillräckligt, särskilt när det gäller fackuttryck. Wikipedia har två funktioner som jag använder mycket när ett lexikon inte räcker till:

    1) Visa sidan på engelska:

    På alla sidor på svenska Wikipedia som har en mostsvarande sida på engelska (eller andra språk) så finns direktlänkar till de andra språkversionerna längst ner till vänster:


    Denna funktion använder jag otroligt ofta, särskilt för affärstermer och musiktermer (tonart heter key på engelska för övrigt)

    2) Wikipedias systersite Wiktionary har en lista på svenska talesätt, med översättningar till engelska:

    http://en.wiktionary.org/wiki/Category:Swedish_idioms


    3) Wiktionarys motsvarande sida med engelska talesätt kan också vara en hjälp ifall man tror att man har rätt uttryck men vill dubbelkolla:

    http://en.wiktionary.org/wiki/Category:English_idioms

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Översätt med Wikipedia", + "meta_description": "", + "author_id": 6, + "created_at": 1307451900000, + "created_by": 6, + "updated_at": 1307451900000, + "updated_by": 6, + "published_at": 1307451900000, + "published_by": 6 + }, + { + "id": 515, + "title": "Kampen om din nya plånbok - mobilen!", + "slug": "kampen-om-din-nya-planbok---mobilen", + "markdown": "\r\n\r\nDet har gjorts många försök att ersätta kontanter men tyvärr med lagom gott resultat, gissningsvis på grund av att tekniken varit för krånglig och att konsumenterna inte varit redo. Nu verkar det dock som att framtiden börjar hinna ifatt oss och till slut börjar kanske konsumenterna inse att vi är redo att börja betala med mobilen och tekniken för att göra det enkelt finns nu på plats.\r\n## Near Field Communication\r\nTekniken som används kallas för NFC och står för Near Field Communication vilket är ett samlingsnamn på ett flertal tekniker som är designade för att bara ha en räckvidd på några centimeter. NFC väntas användas både för att betala i butiker men också för att kunna överföra pengar mellan varandra. Betalar gör man genom att vifta med telefonen i närheten av NFC läsaren och därefter får man godkänna beloppet på sin egen telefon.\r\n## Testas i New York\r\n\r\n\r\nGoogle har nyligen lanserat Google Wallet och kommer nu påbörja en testperiod i New York där NFC som finns inbyggd i deras Androidbaserade mobil Nexus S kommer att användas:\r\n\r\n\r\n\r\nhttp://www.bloomberg.com/news/2011-05-24/google-to-unveil-mobile-payment-service.html\r\n\r\n\r\n\r\nInför detta har alla kortterminaler i New York bytts ut till en med en NFC läsare högst upp. Tanken är att man betalar med mobilen genom att vifta med den ovanför NFC läsaren som på bild här från McDonalds, alla Starbucks och större kedjor. \r\n\r\n\r\n\r\n\r\n\r\n\r\n## Ett alternativ från Square\r\n\r\n\r\nIgår presenterade Square en tjänst för mobila betalningar kallat Square Register och Square Card Chase där man kan betala med hjälp av sin mobil, Square erbjuder sedan tidigare en liten fyrkantig kortläsare som man kopplar in i sin mobil och därefter kan vem som helst ta betalt med kreditkort, man kan även överföra pengar mellan varandra. Nu ger sig alltså även Square in i matchen om din plånbok. Square drivs av en av skaparna till Twitter Jack Dorsey.\r\n\r\n\r\n\r\nLäs mer om Square och Card Chase här:\r\n\r\n\r\nhttps://squareup.com/cardcase#new-york\r\n\r\n\r\n\r\n## Vad ska Apple göra?\r\nRyktet går att Apple inte kommer ha NFC inbyggt i nästa iPhone 5, vad det betyder vet man inte än – kanske har de en annan lösning på gång? Att Apple skulle stå utanför detta är svårt att tro och att de skulle ha råd att vänta till nästa år och låta konkurrenterna hinna före är inte heller troligt speciellt eftersom de redan har en betalningslösning inbyggd i telefonen med sin App Store och iTunes kopplat till användarnas kreditkort.\r\n\r\n\r\n\r\nSom vanligt dröjer det innan ny teknik som involverar antingen rättigheter eller pengar kommer till Sverige och vilka svenska banker som är redo för detta är svårt att se men förhoppningsvis  följer de denna utveckling och är beredda på att ge sig in i kampen om din nya plånbok?\r\n\r\n\r\n\r\nTills dess kommer denna svenska tjänst finnas tillgänglig, kortläsare för iPhone med stöd för smarta kort:\r\n\r\n\r\nhttp://izettle.com/\r\n\r\n\r\n\r\n\r\nChristian Landgren, New York ;)\r\n\r\n![Bild](http://tekniken.nu/uploads/nfc.png)", + "html": "

    Det har gjorts många försök att ersätta kontanter men tyvärr med lagom gott resultat, gissningsvis på grund av att tekniken varit för krånglig och att konsumenterna inte varit redo. Nu verkar det dock som att framtiden börjar hinna ifatt oss och till slut börjar kanske konsumenterna inse att vi är redo att börja betala med mobilen och tekniken för att göra det enkelt finns nu på plats.

    Near Field Communication

    Tekniken som används kallas för NFC och står för Near Field Communication vilket är ett samlingsnamn på ett flertal tekniker som är designade för att bara ha en räckvidd på några centimeter. NFC väntas användas både för att betala i butiker men också för att kunna överföra pengar mellan varandra. Betalar gör man genom att vifta med telefonen i närheten av NFC läsaren och därefter får man godkänna beloppet på sin egen telefon.

    Testas i New York



    Google har nyligen lanserat Google Wallet och kommer nu påbörja en testperiod i New York där NFC som finns inbyggd i deras Androidbaserade mobil Nexus S kommer att användas:



    http://www.bloomberg.com/news/2011-05-24/google-to-unveil-mobile-payment-service.html



    Inför detta har alla kortterminaler i New York bytts ut till en med en NFC läsare högst upp. Tanken är att man betalar med mobilen genom att vifta med den ovanför NFC läsaren som på bild här från McDonalds, alla Starbucks och större kedjor. 






    Ett alternativ från Square



    Igår presenterade Square en tjänst för mobila betalningar kallat Square Register och Square Card Chase där man kan betala med hjälp av sin mobil, Square erbjuder sedan tidigare en liten fyrkantig kortläsare som man kopplar in i sin mobil och därefter kan vem som helst ta betalt med kreditkort, man kan även överföra pengar mellan varandra. Nu ger sig alltså även Square in i matchen om din plånbok. Square drivs av en av skaparna till Twitter Jack Dorsey.



    Läs mer om Square och Card Chase här:


    https://squareup.com/cardcase#new-york




    Vad ska Apple göra?

    Ryktet går att Apple inte kommer ha NFC inbyggt i nästa iPhone 5, vad det betyder vet man inte än – kanske har de en annan lösning på gång? Att Apple skulle stå utanför detta är svårt att tro och att de skulle ha råd att vänta till nästa år och låta konkurrenterna hinna före är inte heller troligt speciellt eftersom de redan har en betalningslösning inbyggd i telefonen med sin App Store och iTunes kopplat till användarnas kreditkort.



    Som vanligt dröjer det innan ny teknik som involverar antingen rättigheter eller pengar kommer till Sverige och vilka svenska banker som är redo för detta är svårt att se men förhoppningsvis  följer de denna utveckling och är beredda på att ge sig in i kampen om din nya plånbok?



    Tills dess kommer denna svenska tjänst finnas tillgänglig, kortläsare för iPhone med stöd för smarta kort:


    http://izettle.com/




    Christian Landgren, New York ;)

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Kampen om din nya plånbok - mobilen!", + "meta_description": "", + "author_id": 1087, + "created_at": 1307442720000, + "created_by": 1087, + "updated_at": 1307442720000, + "updated_by": 1087, + "published_at": 1307442720000, + "published_by": 1087 + }, + { + "id": 516, + "title": "Kvalitet, kvantitet eller unikitet?", + "slug": "kvalitet-kvantitet-eller-unikitet", + "markdown": "\r\n\r\nNu är Mango (dvs Windows Phone 7.5), iPhone 5 och Android 3.1 snart på gång och alla OS börjar ha alla grundläggande funktioner så det är dags att börja skilja dem åt baserat på nånting annat än bara antal funktioner.\r\n\r\nKollar man på de tre stora OSen för mobiler och vad som skiljer dom åt och vad man ska titta på när man väljer telefon så kan man ganska tydligt se en uppdelning i tre delar.\r\n## Kvantitet – Android\r\nHär ser man att fokus är på tekniska möjligheter och många inbyggda funktioner. Det går att byta ut allt och alla utvecklare har tillgång till allt. Alla telefontillverkare har fri möjlighet att byta ut gränsnitt och välja vad som ska ingå men är också ansvarig för att släppa uppdateringar vilket gör att du kan fastna med en gammal version av OSet bara för att tillverkaren hellre släpper massa nya modeller än tar hand om dom gamla. Ett givet val för den som vill pilla med minsta detaljerna på sin telefon och som gärna spenderar tid med att konfigurera och personalisera sin telefon.\r\n## Kvalitet – iPhone\r\niPhone har under lång tid satsat på kvalitet både hård och mjukvarumässigt. Hellre låsa in och begränsa funktioner så länge de som finns inbyggda fungerar som de ska. Det märks dock att ju fler funktioner och fler varianter av hårdvaran tär på kvalitén. Kvalitet märks även på utbudet av applikationer/spel, här finns några riktiga kvalitetstitlar även om det förstås finns mycket skräp också. Vill man ha tillgång till ett massivt urval av snygga appar så är iPhone enda valet just nu.\r\n## Unikitet – Windows Phone 7\r\niPhone har sina ikoner och oftast realistist gränssnitt med rattar, glas, trä och papper. Android spretar lite beroende på tillverkare och applikationerna har sina egna stilar men här sticker WP7 ut genom att genomgående vara enkelt, stilrent, elegant och även de flesta apparna följer metro designen. Funktionsmässigt ligger den efter just nu men när Mango kommer i höst hinner den i fatt med råge. Största styrkan är att den är genomtänkt, designad utifrån användaren, extremt lätt att utveckla till och alla delar hänger ihop på ett snyggt sätt. Välj WP7 redan nu om du är utvecklare men vänta på Mango som kommer i höst om du och saknar nåt du absolut måste ha i nuvarande versionen, annars kan du köpa en idag nu och uppgradera gratis till Mango om några månader.\r\n## Finns det något OS som är bättre än alla andra?\r\nDet finns inget enkelt svar längre utan vi lever i en ganska lyxig tid där vi kan välja fritt mellan 3 olika system som alla passar olika personer och personlighetstyper. Redan innan Android kom så fanns en trogen skara användare, nästan alla som har en iPhone 4 kommer givetsvis köpa en iPhone 5 även om den skulle vara dubbelt så stor, hälften så snabb och dubbelt så dyr som alla andra märken, WP7 har inte hittat hela sin målgrupp ännu men det kommer ändras i samband med Mango speciellt eftersom den först då kommer får en riktig lansering i sverige.\r\n\r\nIntressant nog så känns det likadant med desktop OS och webbläsare. Linux, MacOS och Windows känns alla ”feature complete” och likadant med Firefox, Chrome och IE (9). Det handlar nu om smak och livsstil, ingen kan vara på bäst på allt och ingen är dålig på samma sätt som tidigare när chrome saknade massa finesser, ie var slö och svår att utveckla mot och linux var oanvändarvänlig.\r\n\r\nPersonligen så kommer jag sannolikt köra Windows 8 och Windows Phone 8 när dom kommer och jag har slutat tycka att det var bättre förr...\r\n\r\n![Bild](http://tekniken.nu/uploads/634425155318151790-mobileOS.png)", + "html": "

    Nu är Mango (dvs Windows Phone 7.5), iPhone 5 och Android 3.1 snart på gång och alla OS börjar ha alla grundläggande funktioner så det är dags att börja skilja dem åt baserat på nånting annat än bara antal funktioner.

    Kollar man på de tre stora OSen för mobiler och vad som skiljer dom åt och vad man ska titta på när man väljer telefon så kan man ganska tydligt se en uppdelning i tre delar.

    Kvantitet – Android

    Här ser man att fokus är på tekniska möjligheter och många inbyggda funktioner. Det går att byta ut allt och alla utvecklare har tillgång till allt. Alla telefontillverkare har fri möjlighet att byta ut gränsnitt och välja vad som ska ingå men är också ansvarig för att släppa uppdateringar vilket gör att du kan fastna med en gammal version av OSet bara för att tillverkaren hellre släpper massa nya modeller än tar hand om dom gamla. Ett givet val för den som vill pilla med minsta detaljerna på sin telefon och som gärna spenderar tid med att konfigurera och personalisera sin telefon.

    Kvalitet – iPhone

    iPhone har under lång tid satsat på kvalitet både hård och mjukvarumässigt. Hellre låsa in och begränsa funktioner så länge de som finns inbyggda fungerar som de ska. Det märks dock att ju fler funktioner och fler varianter av hårdvaran tär på kvalitén. Kvalitet märks även på utbudet av applikationer/spel, här finns några riktiga kvalitetstitlar även om det förstås finns mycket skräp också. Vill man ha tillgång till ett massivt urval av snygga appar så är iPhone enda valet just nu.

    Unikitet – Windows Phone 7

    iPhone har sina ikoner och oftast realistist gränssnitt med rattar, glas, trä och papper. Android spretar lite beroende på tillverkare och applikationerna har sina egna stilar men här sticker WP7 ut genom att genomgående vara enkelt, stilrent, elegant och även de flesta apparna följer metro designen. Funktionsmässigt ligger den efter just nu men när Mango kommer i höst hinner den i fatt med råge. Största styrkan är att den är genomtänkt, designad utifrån användaren, extremt lätt att utveckla till och alla delar hänger ihop på ett snyggt sätt. Välj WP7 redan nu om du är utvecklare men vänta på Mango som kommer i höst om du och saknar nåt du absolut måste ha i nuvarande versionen, annars kan du köpa en idag nu och uppgradera gratis till Mango om några månader.

    Finns det något OS som är bättre än alla andra?

    Det finns inget enkelt svar längre utan vi lever i en ganska lyxig tid där vi kan välja fritt mellan 3 olika system som alla passar olika personer och personlighetstyper. Redan innan Android kom så fanns en trogen skara användare, nästan alla som har en iPhone 4 kommer givetsvis köpa en iPhone 5 även om den skulle vara dubbelt så stor, hälften så snabb och dubbelt så dyr som alla andra märken, WP7 har inte hittat hela sin målgrupp ännu men det kommer ändras i samband med Mango speciellt eftersom den först då kommer får en riktig lansering i sverige.

    Intressant nog så känns det likadant med desktop OS och webbläsare. Linux, MacOS och Windows känns alla ”feature complete” och likadant med Firefox, Chrome och IE (9). Det handlar nu om smak och livsstil, ingen kan vara på bäst på allt och ingen är dålig på samma sätt som tidigare när chrome saknade massa finesser, ie var slö och svår att utveckla mot och linux var oanvändarvänlig.

    Personligen så kommer jag sannolikt köra Windows 8 och Windows Phone 8 när dom kommer och jag har slutat tycka att det var bättre förr...

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Kvalitet, kvantitet eller unikitet?", + "meta_description": "", + "author_id": 1089, + "created_at": 1307529120000, + "created_by": 1089, + "updated_at": 1307529120000, + "updated_by": 1089, + "published_at": 1307529120000, + "published_by": 1089 + }, + { + "id": 521, + "title": "iOS 5: Befintliga appar i fara", + "slug": "ios-5-befintliga-appar-i-fara", + "markdown": "\r\n\r\nI och med Apples uppdateringen till iOS 5 så släpps många nya funktioner som konkurrerar med, eller rent av direkt krockar med existerande appar på marknaden.\r\n\r\nDet är allmänt känt att det är en farlig affärsmodell för en tredjepartsutvecklare att utveckla mot andra applikationer eller plattformar där ens mjukvara ligger väldigt nära den inbyggda funktionaliteten. Vare sig det är atttäta hål i funktionaliteten eller lägga till funktionalitet som vore väldigt lätt för platformsleverantören själv att lägga till. Oftast ligger mycket av denna funktionalitet redan i leverantörens tidsplan för åtgärder.\r\n\r\nDet är helt enkelt en farlig kamp mot klockan där tredjepartsutvecklaren hela tiden har den överhängande risken av att platformsutvecklaren kommer ikapp dem med funktionalitet som hotar deras egen mjukvara.\r\n\r\nMed Apples lansering av iOS 5 är detta mer uppenbart än någonsin.\r\n\r\nHär är en genomgång av nya funktioner i iOS 5 som potentiellt krockar med specifika appar eller typer av appar.\r\n## Notification Center\r\n\r\n\r\nAlla alerts på en plats.\r\n\r\n\r\n\r\nAppar i fara: Inga direkt, möjligen smått väder- och finans-appar, men de har oftast nischfunktioner som uppväger.\r\n## iMessage\r\n\r\n\r\nAlla meddelanden på en plats. iPad och iPod Touch får meddelandefunktionalitet. Vissa har kallat det FaceTime för meddelanden.\r\n\r\nAppar i fara: Alla appar som skickar gratismeddelanden över Wifi eller 3G. WhatApp Messenger, PingChat, eBuddy Messenger, IM+, m.m. Många kan uppväga med integration mot olika chat-nätverk, såsom Windows Live Messenger, Google Chat, Yahoo! Messenger, m.m.\r\n\r\nÖvrigt: Detta är även ett stort hot mot operatörerna, som kan komma att missa en extremt stor mängd SMS över mobilnätet, som nu kommer gå som data istället.\r\n## Reminders\r\n\r\n\r\nEn app för Att-Göra-listor, som kan synkroniseras mot iCal, Outlook och iCloud.\r\n\r\nAppar i fara: Det finns en uppsjö av appar för Att-Göra-listor, såsom Wunderlist, Awesome Note, Evernote och många, många fler. Många appar i denna kategori erbjuder många mervärden och speciella funktioner, men frågan är om det kommer vara värt för den vanliga användaren när Apple nu erbjuder en inbyggd app.\r\n## Twitter\r\n\r\n\r\nDjup integration mot Twitter direkt i iOS 5. Logga in på ett ställe i iOS och använd över hela plattformen.\r\n\r\nAppar i fara: Alla Twitter-klienter där ute, såsom TweetDeck, Twitterrific, TwitBird, Echofon och väldigt många fler. Vissa appar i kategorin har även integration mot andra plattformar, såsom Facebook, som kan uppväga detta. De olika Twitter-klienterna har oftast helt olika sätt att visa upp samma information mellan sig och det ökar chansen att folk hittar en egen favorit utöver standard-klienten. Men problemet med att en inbyggd klient oftast går först för vanliga användare gör att användandet av tredjeparts-klienter potentiellt kan minska drastiskt.\r\n## Camera\r\n\r\n\r\nDen inbyggda appen för kameran får ny funktionalitet. Man kommer kunna öppna Camera-appen via Låsskärmen, men dessutom ta bild genom att trycka på Volym Upp-knappen och slutligen synkronisera alla bilder via iCloud.\r\n\r\n                                                                                                                                                                                                                                                        \r\n\r\n\r\n\r\nAppar i fara: Framförallt kommer Camera+ vara ganska upprörda, då de stängdes av från AppStore under en längre tid för att de lagt till funktionaliteten att ta bild via Volym Upp-knappen. Annars är det väl olika fotodelnings-appar som hamnar i farozonen, men också appar som synkroniserar filer till molnet, t.ex. Dropbox.\r\n## Photos\r\n\r\n\r\nFörbättrad bildförbättring. Nu kan man i appen förbättra bilder genom beskärning, rotation, ta bort röda ögon och automatisk bildförbättring.\r\n\r\nAppar i fara: Det finns flera appar som i princip blir helt onödiga i och med denna funktionalitet. Detta gäller främst nisch-appar såsom diverse appar för beskärning, rotation och de som tar bort röda ögon. Väldigt många av dessa är en-funktions-appar.\r\n## Safari\r\n\r\n\r\nFörbättrad webläsare. Det är inte främst webbläsaren i sig som är den stora nyheten utan kringfunktionerna i den, såsom Safari Reader som visar webartiklar utan reklam och andra element omkring, för bättre läsning utan distraktioner. Reading List gör att man kan spara sidor för att läsa senare, som använder iCloud för att hålla detta synkroniserat. På iPad får man även flikar direkt i webbläsaren.\r\n\r\nAppar i fara: Detta är ett direkt hot mot Instapaper och Read It Later, som har ovan funktionalitet som kärnverksamhet, men också tekniker som Readability inbyggt, som gör innehåll mer läsbar utan massa distraktioner omkring sidan. Den enda punkt dessa produkter har som övertag är att de inte bara fungerar i en Apple-miljö, utan överallt.\r\n\r\nSkaparen av Instapaper har vinklat detta till något positivt, då han ser detta som en mainstreamprodukt som kan göra folk intresserade av funktionaliteten och när de vill ha en \"bättre\" premiumprodukt så kommer de vända sig till Instapaper.\r\n## Summering\r\n\r\n\r\nMånga skulle kanske påstå att Apple, i och med iOS 5, gör sig till konkurrent med många av sina egna tredjepartsutvecklare och kommer att orsaka dem stora förluster i intäkter.\r\n\r\nFörmodligen kan några appar som krockar med funktionalitet som kommer med iOS 5 att gå under och kanske sluta utvecklas eller helt dras tillbaka från AppStore. Men som sagt ovan så har dessa tredjepartsutvecklare hela tiden vetat vad de gett sig in på genom att nischa in sig på funktionalitet som de vetat att Apple närsomhelst kunnat lansera eller förbättra. De får se till att njuta av sina framgångar hela vägen fram till nu och antingen utveckla sina produkter eller lägga ner.\r\n\r\nDe tredjepartsutvecklare som bidrar med mervärde och speciell funktionalitet har inget att frukta här, utan kanske t.o.m. har en möjlighet i lanseringar som detta, genom att den stora allmänheten exponeras för en funktionalitet och blir intresserade, men vill ha något som Apple inte erbjuder och hittar då lätt till bättre premiumtjänster hos tredjeparter.\r\n\r\n![Bild](http://tekniken.nu/uploads/634430524403008708-iOS5.png)", + "html": "

    I och med Apples uppdateringen till iOS 5 så släpps många nya funktioner som konkurrerar med, eller rent av direkt krockar med existerande appar på marknaden.

    Det är allmänt känt att det är en farlig affärsmodell för en tredjepartsutvecklare att utveckla mot andra applikationer eller plattformar där ens mjukvara ligger väldigt nära den inbyggda funktionaliteten. Vare sig det är atttäta hål i funktionaliteten eller lägga till funktionalitet som vore väldigt lätt för platformsleverantören själv att lägga till. Oftast ligger mycket av denna funktionalitet redan i leverantörens tidsplan för åtgärder.

    Det är helt enkelt en farlig kamp mot klockan där tredjepartsutvecklaren hela tiden har den överhängande risken av att platformsutvecklaren kommer ikapp dem med funktionalitet som hotar deras egen mjukvara.

    Med Apples lansering av iOS 5 är detta mer uppenbart än någonsin.

    Här är en genomgång av nya funktioner i iOS 5 som potentiellt krockar med specifika appar eller typer av appar.

    Notification Center


    Alla alerts på en plats.


    Appar i fara: Inga direkt, möjligen smått väder- och finans-appar, men de har oftast nischfunktioner som uppväger.

    iMessage


    Alla meddelanden på en plats. iPad och iPod Touch får meddelandefunktionalitet. Vissa har kallat det FaceTime för meddelanden.

    Appar i fara: Alla appar som skickar gratismeddelanden över Wifi eller 3G. WhatApp Messenger, PingChat, eBuddy Messenger, IM+, m.m. Många kan uppväga med integration mot olika chat-nätverk, såsom Windows Live Messenger, Google Chat, Yahoo! Messenger, m.m.

    Övrigt: Detta är även ett stort hot mot operatörerna, som kan komma att missa en extremt stor mängd SMS över mobilnätet, som nu kommer gå som data istället.

    Reminders


    En app för Att-Göra-listor, som kan synkroniseras mot iCal, Outlook och iCloud.

    Appar i fara: Det finns en uppsjö av appar för Att-Göra-listor, såsom Wunderlist, Awesome Note, Evernote och många, många fler. Många appar i denna kategori erbjuder många mervärden och speciella funktioner, men frågan är om det kommer vara värt för den vanliga användaren när Apple nu erbjuder en inbyggd app.

    Twitter


    Djup integration mot Twitter direkt i iOS 5. Logga in på ett ställe i iOS och använd över hela plattformen.

    Appar i fara: Alla Twitter-klienter där ute, såsom TweetDeck, Twitterrific, TwitBird, Echofon och väldigt många fler. Vissa appar i kategorin har även integration mot andra plattformar, såsom Facebook, som kan uppväga detta. De olika Twitter-klienterna har oftast helt olika sätt att visa upp samma information mellan sig och det ökar chansen att folk hittar en egen favorit utöver standard-klienten. Men problemet med att en inbyggd klient oftast går först för vanliga användare gör att användandet av tredjeparts-klienter potentiellt kan minska drastiskt.

    Camera


    Den inbyggda appen för kameran får ny funktionalitet. Man kommer kunna öppna Camera-appen via Låsskärmen, men dessutom ta bild genom att trycka på Volym Upp-knappen och slutligen synkronisera alla bilder via iCloud.

                                                                                                                                                                                                                                                            


    Appar i fara: Framförallt kommer Camera+ vara ganska upprörda, då de stängdes av från AppStore under en längre tid för att de lagt till funktionaliteten att ta bild via Volym Upp-knappen. Annars är det väl olika fotodelnings-appar som hamnar i farozonen, men också appar som synkroniserar filer till molnet, t.ex. Dropbox.

    Photos


    Förbättrad bildförbättring. Nu kan man i appen förbättra bilder genom beskärning, rotation, ta bort röda ögon och automatisk bildförbättring.

    Appar i fara: Det finns flera appar som i princip blir helt onödiga i och med denna funktionalitet. Detta gäller främst nisch-appar såsom diverse appar för beskärning, rotation och de som tar bort röda ögon. Väldigt många av dessa är en-funktions-appar.

    Safari


    Förbättrad webläsare. Det är inte främst webbläsaren i sig som är den stora nyheten utan kringfunktionerna i den, såsom Safari Reader som visar webartiklar utan reklam och andra element omkring, för bättre läsning utan distraktioner. Reading List gör att man kan spara sidor för att läsa senare, som använder iCloud för att hålla detta synkroniserat. På iPad får man även flikar direkt i webbläsaren.

    Appar i fara: Detta är ett direkt hot mot Instapaper och Read It Later, som har ovan funktionalitet som kärnverksamhet, men också tekniker som Readability inbyggt, som gör innehåll mer läsbar utan massa distraktioner omkring sidan. Den enda punkt dessa produkter har som övertag är att de inte bara fungerar i en Apple-miljö, utan överallt.

    Skaparen av Instapaper har vinklat detta till något positivt, då han ser detta som en mainstreamprodukt som kan göra folk intresserade av funktionaliteten och när de vill ha en \"bättre\" premiumprodukt så kommer de vända sig till Instapaper.

    Summering


    Många skulle kanske påstå att Apple, i och med iOS 5, gör sig till konkurrent med många av sina egna tredjepartsutvecklare och kommer att orsaka dem stora förluster i intäkter.

    Förmodligen kan några appar som krockar med funktionalitet som kommer med iOS 5 att gå under och kanske sluta utvecklas eller helt dras tillbaka från AppStore. Men som sagt ovan så har dessa tredjepartsutvecklare hela tiden vetat vad de gett sig in på genom att nischa in sig på funktionalitet som de vetat att Apple närsomhelst kunnat lansera eller förbättra. De får se till att njuta av sina framgångar hela vägen fram till nu och antingen utveckla sina produkter eller lägga ner.

    De tredjepartsutvecklare som bidrar med mervärde och speciell funktionalitet har inget att frukta här, utan kanske t.o.m. har en möjlighet i lanseringar som detta, genom att den stora allmänheten exponeras för en funktionalitet och blir intresserade, men vill ha något som Apple inte erbjuder och hittar då lätt till bättre premiumtjänster hos tredjeparter.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "iOS 5: Befintliga appar i fara", + "meta_description": "", + "author_id": 1096, + "created_at": 1307456100000, + "created_by": 1096, + "updated_at": 1307456100000, + "updated_by": 1096, + "published_at": 1307456100000, + "published_by": 1096 + }, + { + "id": 522, + "title": "Mitt liv i molnet", + "slug": "mitt-liv-i-molnet", + "markdown": "\r\n\r\nAtt placera sina data i molnet, eller på internet som vi sa för några år sedan, har gått från abstrakt hype till ett ovärderligt sätt att kombinera säker lagring, åtkomst överallt och enkla funktioner för att ge andra tillgång till valda delar av ditt digitala liv. Här är mina favoritmolntjänster!\r\n## Dropbox\r\nDropbox är en generell molntjänst för filer. Man installerar en applikation på sin dator (Windows, Mac eller Linux) som skapar en synkroniserad mapp. Allt som läggs i den mappen synkroniseras automatiskt till Dropbox webbtjänst, och till alla andra datorer där du har Dropbox installerat. Genom ett enkelt högerklick skapar du en hemlig länk till en utvald fil som du kan skicka till någon. Det finns också inbyggda funktioner för att visa foton i album. Självklart finns en iPhone-app som gör att du alltid har tillgång till dina filer även mobilt och kan dela ut dem direkt därifrån (det mesta hämtas över nätet men du kan välja att spara vissa filer lokalt om du vill ha tillgång till dem när du saknar uppkoppling). 2 GB utrymme får man gratis. Jag använder Dropbox till att spara privata dokument (inskannade fakturor, personbevis etc.), lite bilder, hela mitt privata Subversion-repository, mina musikprojekt (Reaper-projektfiler och tillhörande ljudfiler) och en Liberkey-installation med applikationer som går att köra utan installation. Dropbox har vi bloggat om tidigare.\r\n\r\nNackdelar: 2G gratisutrymme räcker inte långt (man kan dock få mer gratis genom referrals), det har också varit lite hallå om att Dropbox har lämnat ut sparade filer till amerikanska myndigheter.\r\n\r\nAlternativ: iCloud, Sugar Sync\r\n## Evernote\r\nEvernote är en tjänst för att spara olika typer av anteckningar, vanlig text, inskannade dokument, foton etc. Allt synkas till webben, och det finns förstås en iPhone-app och en applikation till datorn. Till skillnad från Dropbox så är filerna alltid tillgängliga offline i Evernote utan att du behöver göra något extra. En av de coolaste funktionerna i Evernote är att det körs automatisk OCR på alla foton, vilket gör att text i skannade eller fotade dokument blir sökbar. Det finns också en extension till Chrome som presenterar sökresultat från Evernote varje gång du söker på Google.\r\n\r\nNackdelar: OCR görs bara för sökning (OCR:ad text går inte att komma åt).\r\n\r\nAlternativ: Springpad, Simplenote, PlainText, Google Notebook\r\n## Backblaze\r\nBackblaze är en backuptjänst som kopierar hela din dator till molnet. Man installerar en liten applikation som kontinuerligt synkar filerna till webbtjänsten. Man kan när som helst via webbgränssnittet hämta filerna till valfri dator, vilket gör det till en tjänst där du kan komma åt filer utöver själva backupen. Första backupen tar väldigt lång tid (kan ta upp till en månad), men sen funkar det väldigt smärtfritt. Backblaze har vi bloggat om tidigare.\r\n\r\nNackdelar: Kostar pengar (fast bara $4 per månad)\r\n\r\nAlternativ: Mozy, Carbonite\r\n## SoundCloud\r\nSoundCloud är en molntjänst för musik. Den är inte mest avsedd som backup, utan mer för att kunna exponera sina alster och dela dem med andra. Spelaren är gjord i HTML5 och funkar därmed på iPhone och iOS (det finns även en iPhone-app) och kvaliteten på filerna är riktigt bra (många andra tjänster komprimerar och förstör låtarna ganska mycket). 120 minuter musik får man lagra gratis, och det finns massor av sociala funktioner som grupper, vänner och meddelanden. Det finns också en riktigt bra spelare för FaceBook, och många röster tror att en bandpage på FaceBook med SoundCloud-spelare kommer att bli den givna ersättaren för Myspace. SoundCloud har vi bloggat om tidigare.\r\n\r\nNackdelar: Inte så många möjligheter att styla sin profil (snarare fördel?), inte så mycket utrymme gratis.\r\n\r\nAlternativ: SoundClick, Reverbnation\r\n## Flickr\r\nFlickr känner nog de flesta till, en av de mest etablerade tjänsterna för foton. Jag tycker att Flickr är bättre än konkurrenterna. Flickr har väldigt mycket användare och är därmed spritt och välkänt. Det finns ett bra API som har banat väg för mängder av tredjepartstillämpningar och integrationer av olika slag. Flickr har också bra stöd för hemliga länkar där man kan dela dolda album med utvalda och fullständig copyright-hantering där man kan erbjuda sina foton för köp. Med ett betalkonto får man oändligt med utrymme, så Flickr kan funka bra även som säkerhetsbackup för alla ens foton.\r\n\r\nNackdelar: Inte så bra iPhone-stöd, lite meckig sortering av foton.\r\n\r\nAlternativ: Picasa\r\n## Fler?\r\nVilka är dina favoritmolntjänster? Posta i kommentarerna!\r\n\r\n![Bild](http://tekniken.nu/uploads/634430524446602179-cloud-6.jpg)", + "html": "

    Att placera sina data i molnet, eller på internet som vi sa för några år sedan, har gått från abstrakt hype till ett ovärderligt sätt att kombinera säker lagring, åtkomst överallt och enkla funktioner för att ge andra tillgång till valda delar av ditt digitala liv. Här är mina favoritmolntjänster!

    Dropbox

    Dropbox är en generell molntjänst för filer. Man installerar en applikation på sin dator (Windows, Mac eller Linux) som skapar en synkroniserad mapp. Allt som läggs i den mappen synkroniseras automatiskt till Dropbox webbtjänst, och till alla andra datorer där du har Dropbox installerat. Genom ett enkelt högerklick skapar du en hemlig länk till en utvald fil som du kan skicka till någon. Det finns också inbyggda funktioner för att visa foton i album. Självklart finns en iPhone-app som gör att du alltid har tillgång till dina filer även mobilt och kan dela ut dem direkt därifrån (det mesta hämtas över nätet men du kan välja att spara vissa filer lokalt om du vill ha tillgång till dem när du saknar uppkoppling). 2 GB utrymme får man gratis. Jag använder Dropbox till att spara privata dokument (inskannade fakturor, personbevis etc.), lite bilder, hela mitt privata Subversion-repository, mina musikprojekt (Reaper-projektfiler och tillhörande ljudfiler) och en Liberkey-installation med applikationer som går att köra utan installation. Dropbox har vi bloggat om tidigare.

    Nackdelar: 2G gratisutrymme räcker inte långt (man kan dock få mer gratis genom referrals), det har också varit lite hallå om att Dropbox har lämnat ut sparade filer till amerikanska myndigheter.

    Alternativ: iCloud, Sugar Sync

    Evernote

    Evernote är en tjänst för att spara olika typer av anteckningar, vanlig text, inskannade dokument, foton etc. Allt synkas till webben, och det finns förstås en iPhone-app och en applikation till datorn. Till skillnad från Dropbox så är filerna alltid tillgängliga offline i Evernote utan att du behöver göra något extra. En av de coolaste funktionerna i Evernote är att det körs automatisk OCR på alla foton, vilket gör att text i skannade eller fotade dokument blir sökbar. Det finns också en extension till Chrome som presenterar sökresultat från Evernote varje gång du söker på Google.

    Nackdelar: OCR görs bara för sökning (OCR:ad text går inte att komma åt).

    Alternativ: Springpad, Simplenote, PlainText, Google Notebook

    Backblaze

    Backblaze är en backuptjänst som kopierar hela din dator till molnet. Man installerar en liten applikation som kontinuerligt synkar filerna till webbtjänsten. Man kan när som helst via webbgränssnittet hämta filerna till valfri dator, vilket gör det till en tjänst där du kan komma åt filer utöver själva backupen. Första backupen tar väldigt lång tid (kan ta upp till en månad), men sen funkar det väldigt smärtfritt. Backblaze har vi bloggat om tidigare.

    Nackdelar: Kostar pengar (fast bara $4 per månad)

    Alternativ: Mozy, Carbonite

    SoundCloud

    SoundCloud är en molntjänst för musik. Den är inte mest avsedd som backup, utan mer för att kunna exponera sina alster och dela dem med andra. Spelaren är gjord i HTML5 och funkar därmed på iPhone och iOS (det finns även en iPhone-app) och kvaliteten på filerna är riktigt bra (många andra tjänster komprimerar och förstör låtarna ganska mycket). 120 minuter musik får man lagra gratis, och det finns massor av sociala funktioner som grupper, vänner och meddelanden. Det finns också en riktigt bra spelare för FaceBook, och många röster tror att en bandpage på FaceBook med SoundCloud-spelare kommer att bli den givna ersättaren för Myspace. SoundCloud har vi bloggat om tidigare.

    Nackdelar: Inte så många möjligheter att styla sin profil (snarare fördel?), inte så mycket utrymme gratis.

    Alternativ: SoundClick, Reverbnation

    Flickr

    Flickr känner nog de flesta till, en av de mest etablerade tjänsterna för foton. Jag tycker att Flickr är bättre än konkurrenterna. Flickr har väldigt mycket användare och är därmed spritt och välkänt. Det finns ett bra API som har banat väg för mängder av tredjepartstillämpningar och integrationer av olika slag. Flickr har också bra stöd för hemliga länkar där man kan dela dolda album med utvalda och fullständig copyright-hantering där man kan erbjuda sina foton för köp. Med ett betalkonto får man oändligt med utrymme, så Flickr kan funka bra även som säkerhetsbackup för alla ens foton.

    Nackdelar: Inte så bra iPhone-stöd, lite meckig sortering av foton.

    Alternativ: Picasa

    Fler?

    Vilka är dina favoritmolntjänster? Posta i kommentarerna!

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Mitt liv i molnet", + "meta_description": "", + "author_id": 6, + "created_at": 1307697600000, + "created_by": 6, + "updated_at": 1307697600000, + "updated_by": 6, + "published_at": 1307697600000, + "published_by": 6 + }, + { + "id": 524, + "title": "Smidigt meddela ankomsttid med Telia Navigator", + "slug": "smidigt-meddela-ankomsttid-med-telia-navigator", + "markdown": "\r\n\r\nOm du använder Telia Navigator när du kör bil (eller åker kollektivt) till nästa familjemiddag så kan du enkelt hålla dina nära och kära uppdaterade om när du anländer. Du kan dela med dig av din position och beräknade rutt genom SMS, Email, Twitter eller Facebook. Mottagaren kan då enkelt se var du är och när du kommer fram.\r\n\r\nI din telefon ser du den numera ”klassiska” navigatorn som guidar dig rätt\r\n\r\nOch dina nära och kära ser följande bild i sin telefon. Karta med din position, avstånd kvar samt beräknad ankomsttid uppdateras var 5e minut.\r\n\r\n\r\n\r\nEnkelt och praktiskt. Perfekt inför midsommar – så att nubben inte hinner bli varm – och potatisen inte bli kall.\r\n\r\n![Bild](http://tekniken.nu/uploads/634431349703829739-image002.png@01CC25C3.2C7ECE20__image002.png)", + "html": "

    Om du använder Telia Navigator när du kör bil (eller åker kollektivt) till nästa familjemiddag så kan du enkelt hålla dina nära och kära uppdaterade om när du anländer. Du kan dela med dig av din position och beräknade rutt genom SMS, Email, Twitter eller Facebook. Mottagaren kan då enkelt se var du är och när du kommer fram.

    I din telefon ser du den numera ”klassiska” navigatorn som guidar dig rätt

    Och dina nära och kära ser följande bild i sin telefon. Karta med din position, avstånd kvar samt beräknad ankomsttid uppdateras var 5e minut.


    Enkelt och praktiskt. Perfekt inför midsommar – så att nubben inte hinner bli varm – och potatisen inte bli kall.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Smidigt meddela ankomsttid med Telia Navigator till iPhone", + "meta_description": "", + "author_id": 1097, + "created_at": 1308318600000, + "created_by": 1097, + "updated_at": 1308318600000, + "updated_by": 1097, + "published_at": 1308318600000, + "published_by": 1097 + }, + { + "id": 535, + "title": "Semestersammanfattning av WP7", + "slug": "semestersammanfattning-av-wp7", + "markdown": "\r\n\r\nDet börjar vara svårt att hänga med i alla WP7 nyheterna nu och det lär bli ännu svårare när Mango släpps. Här har jag försökt sammanfatta de största nyheterna senaste månaderna.\r\n\r\n\r\n## Svårt att köpa en telefon\r\nÄven där WP7 är lanserad officellt är det nästan omöjligt att faktiskt köpa en telefon. Det är inte brist på hårdvaran utan kunskapen/fördomarna hos återförsäljarna. Många tolkar WP7 som Windows Mobile 6 med plattare ikoner och då är det inte konstigt att man avråder. Förhoppningsvis så kommer det ändras när fler och fler faktiskt upptäcker att det är en grym ny plattform. Av ren nyfiken gick jag fram till det jättestora bordet på El-Giganten på kungsgatan i stockholm och tittade igenom det stora utbudet och hittade en(1) WP7 mobil gömd i högen knappt märkt så att man ens såg att det var en Windows Phone 7 mobil. Det är förstås brist på roliga modeller och framförallt i sverige och även här så kommer hösten med nya modeller speciellt anpassade efter Mango.\r\n## Svensk mobil\r\nKöper man en WP7 idag så kommer den vara på engelska rakt igenom inklusive rättstavning och tangentbord (även om åäö går att få fram genom långa tryck på a och o). Med Mango så kommer man få tillgång till andra språk i rättstavning och tangentbord men själva Oset ska tydligen kräva en OEM flashning dvs nåt man inte kan göra själv. Vill du ha en 100%ig svensk mobil så bör du vänta. Kan du leva med engelska menyer, eller som jag väljer engelska med flit då jag förstår termerna bättre så kan du köpa en redan idag och veta att det går fullt utmärkt att använda den på svenska redan idag (vissa undantag finns gällande marketplace och sånt men det går ta sig runt det mesta).\r\n## 24000+ applikationer 7000+ utvecklare\r\nDet har tyvärr dykt upp en hel del \"spam\" appar i form av hundratals appar som i princip bara skiljer sig på ikonen och vilken url den hämtar rss data. Plockar man bort alla dessa så finns det dock mycket fler kvalitetsspel och appar än tidigare. Luckorna som finns kommer sannolikt tätas när Mango kommer senare i år då nya APIer kommer att möjliggöra mängder av nya typer av applikationer.\r\n## Hela 77 Xbox Live spel\r\nAtt ett spel har stöd för achivements kanske inte alla bryr sig om men det är generellt väldigt hög kvalitet på dessa titlar och 77 stycken att välja på gör att alla nog kan hitta sin favorit.\r\n\r\nNågra av de hetaste titlarna:\r\n\r\nAngry birdsPlants VS ZombiesPAC-MAN Championship Edition DXDoodle JumpSuper Monkey BallTiki Towers\r\n## När kommer Mango?\r\nDet finns inga säkra källor men det ryktas om september/oktober. Förhoppningsvis går utrullningen smidigare än NODO som tydligen fortfarande inte är ute till alla telefoner i alla länder ännu.\r\n\r\nKommer man få tillgång till Mango som utvecklare innan telefonerna släpps?\r\n\r\nJa, redan idag finns beta verktyg och registrerade användarehar nu fått  tillgång till Mango via Microsoft Connect.Det är inte helt utan risker då en uppdaterad telefon tappar sin vanliga support och den nya supporten för uppdaterade telefoner inte kommit igång ännu. Uppdaterade telefoner hamnar också utanför den vanliga uppdateringssnurran så innan mango kommer skarpt kommer man behöva återställa en backup till innan man uppdaterade.\r\n\r\nLäs mer på officiella bloggen\r\n\r\nEn uppdaterad lista över alla funktioner som är kända som kommer med Mango\r\n\r\nMobiletechworld har en bra sammanfattning över alla nya funktioner som kommer med Mango.\r\n\r\n![Bild](http://tekniken.nu/uploads/634450289895495892-mango-sommar.png)", + "html": "

    Det börjar vara svårt att hänga med i alla WP7 nyheterna nu och det lär bli ännu svårare när Mango släpps. Här har jag försökt sammanfatta de största nyheterna senaste månaderna.

    Svårt att köpa en telefon

    Även där WP7 är lanserad officellt är det nästan omöjligt att faktiskt köpa en telefon. Det är inte brist på hårdvaran utan kunskapen/fördomarna hos återförsäljarna. Många tolkar WP7 som Windows Mobile 6 med plattare ikoner och då är det inte konstigt att man avråder. Förhoppningsvis så kommer det ändras när fler och fler faktiskt upptäcker att det är en grym ny plattform. Av ren nyfiken gick jag fram till det jättestora bordet på El-Giganten på kungsgatan i stockholm och tittade igenom det stora utbudet och hittade en(1) WP7 mobil gömd i högen knappt märkt så att man ens såg att det var en Windows Phone 7 mobil. Det är förstås brist på roliga modeller och framförallt i sverige och även här så kommer hösten med nya modeller speciellt anpassade efter Mango.

    Svensk mobil

    Köper man en WP7 idag så kommer den vara på engelska rakt igenom inklusive rättstavning och tangentbord (även om åäö går att få fram genom långa tryck på a och o). Med Mango så kommer man få tillgång till andra språk i rättstavning och tangentbord men själva Oset ska tydligen kräva en OEM flashning dvs nåt man inte kan göra själv. Vill du ha en 100%ig svensk mobil så bör du vänta. Kan du leva med engelska menyer, eller som jag väljer engelska med flit då jag förstår termerna bättre så kan du köpa en redan idag och veta att det går fullt utmärkt att använda den på svenska redan idag (vissa undantag finns gällande marketplace och sånt men det går ta sig runt det mesta).

    24000+ applikationer 7000+ utvecklare

    Det har tyvärr dykt upp en hel del \"spam\" appar i form av hundratals appar som i princip bara skiljer sig på ikonen och vilken url den hämtar rss data. Plockar man bort alla dessa så finns det dock mycket fler kvalitetsspel och appar än tidigare. Luckorna som finns kommer sannolikt tätas när Mango kommer senare i år då nya APIer kommer att möjliggöra mängder av nya typer av applikationer.

    Hela 77 Xbox Live spel

    Att ett spel har stöd för achivements kanske inte alla bryr sig om men det är generellt väldigt hög kvalitet på dessa titlar och 77 stycken att välja på gör att alla nog kan hitta sin favorit.

    Några av de hetaste titlarna:

    • Angry birds
    • Plants VS Zombies
    • PAC-MAN Championship Edition DX
    • Doodle Jump
    • Super Monkey Ball
    • Tiki Towers

    När kommer Mango?

    Det finns inga säkra källor men det ryktas om september/oktober. Förhoppningsvis går utrullningen smidigare än NODO som tydligen fortfarande inte är ute till alla telefoner i alla länder ännu.

    Kommer man få tillgång till Mango som utvecklare innan telefonerna släpps?

    Ja, redan idag finns beta verktyg och registrerade användarehar nu fått  tillgång till Mango via Microsoft Connect.Det är inte helt utan risker då en uppdaterad telefon tappar sin vanliga support och den nya supporten för uppdaterade telefoner inte kommit igång ännu. Uppdaterade telefoner hamnar också utanför den vanliga uppdateringssnurran så innan mango kommer skarpt kommer man behöva återställa en backup till innan man uppdaterade.

    Läs mer på officiella bloggen

    En uppdaterad lista över alla funktioner som är kända som kommer med Mango

    Mobiletechworld har en bra sammanfattning över alla nya funktioner som kommer med Mango.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Semestersammanfattning av WP7", + "meta_description": "", + "author_id": 1089, + "created_at": 1309432188000, + "created_by": 1089, + "updated_at": 1309432188000, + "updated_by": 1089, + "published_at": 1309432188000, + "published_by": 1089 + }, + { + "id": 541, + "title": "På en global marknad är volym viktigare än pris", + "slug": "pa-en-global-marknad-ar-volym-viktigare-an-pris", + "markdown": "\r\nAllt mer pekar på att en vinnande strategi för att sälja produkter, framför allt digitala, är att sänka priset per enhet. Det första och största exemplet är iPhone App Store. Innan den lanserades hade jag bland annat en Windows-telefon, och där var det nästan omöjligt att skaffa appar (eller applikationer som det hette på den tiden :-) ). Att det var en spretig plattform där man på egen hand behövde hitta applikationer med stöd för just sin telefonvariant var förstås ett stort problem, men en ännu större tröskel var priset. Att betala 149:- för en applikation som hanterar att göra-listor, och som man dessutom inte kunde testa innan, kändes extremt motigt. När App Store kom fanns massor av gratisappar som stimulerade beteende att skaffa nya program till sin telefon. Det viktigaste var dock prissättningen, massor av riktigt bra appar kostade mellan 7 och 35 kronor. Det populäraste spelet till iPhone, Angry Birds, kostar bara 7:- men har genererat enorma intäkter till sin skapare.\r\n\r\nNästa marknad som verkar vara på tur är operativsystem. Vi har redan sett svag men tydlig trend där licenser för operativsystem har gått ner i pris. Att köpa en laglig licens för Windows har t.ex. blivit mycket billigare än det var för 10 år sedan. Den stora revolutionen verkar dock komma nu, och även här går Apple i bräschen. För 229:- får man en uppgradering av MacOSX som man dessutom får installera på alla sina registrerade Macar. Jag tror att Microsoft kommer att följa efter, och jag tror att de båda kommer tjäna mycket pengar på detta. Digitala produkter kan som bekant kopieras och det sätter delar av de normala marknadsmekanismerna ur funktion – potentiella konsumenter kan helt enkelt välja att inte köpa produkten utan att helt enkelt skaffa den gratis (olagligt och omoraliskt – men praktiskt väldigt lätt). Denna variant på the long tail är en enorm potentiell marknad som inte finns för andra produkter. Genom att sänka priset på sin produkt så kan man öppna den potentiella marknaden och skapa en totalt sett högre volym än man hade när produkten var dyrare. Och med digitala produkter är marginalkostnaden för att producera fler enheter i princip 0.\r\n\r\nNågra som inte har fattat det här är skivbolagen. De har krampaktigt hållit sig kvar vid gamla affärsmodeller och bara konstaterat att det är fel att det finns piratkopiering istället för att öppna den potentiella marknaden (illegala nedladdare) med nya erbjudanden. När skivbolagen först började testa att distribuera sin musik digitalt hade låtarna i princip exakt samma pris som om man köpt CD-skivan. Man kom också på att digitala filer kan kopieras, och lade ner enorma resurser på kopieringsskydd som bara ställde till problem för de betalande kunderna. Undrar någon varför det inte blev en succé? Nu när det sakta börjar komma alternativ som liknar App Store-tänket, t.ex. Spotify, sätter sig många skivbolag på bakhasorna. Senast i raden är Century Media Records som har dragit tillbaka all sin musik från Spotify, och dessutom skickatett snipigt svar om att de minsann också behöver pengar till mat och hyra till en bloggare som frågat. Det Century Media inte förstår är att Spotify framför allt kan hjälpa till att öppna den potentiella marknaden av illegala nedladdare, inte kannibalisera på de som köper skivor.\r\n\r\nMen, kan man invända, Apple och Microsoft tjänar ju pengar på andra saker. Kanske kan de välja att gå back på operativsystem för att istället tjäna på pengar på hårdvara eller andra mjukvaruprodukter? Visst är det så, fast jag tror att operativsystemen till lägre pris kommer att vara lönsamma i sig själva. Och även för skivbolagen finns det ju andra intänktskällor. Piratkopieringen har gjort att man redan nu tjänar mer på konserter och merchandise än på musiken. Spotify och andra nya erbjudanden kan öka lönsamheten på musiken, det är jag övertygad om, men då är det dags att ta av skygglapparna.\r\n![Bild](http://tekniken.nu/uploads/634486698006205087-stock-market-volume.jpg)", + "html": "

    Allt mer pekar på att en vinnande strategi för att sälja produkter, framför allt digitala, är att sänka priset per enhet. Det första och största exemplet är iPhone App Store. Innan den lanserades hade jag bland annat en Windows-telefon, och där var det nästan omöjligt att skaffa appar (eller applikationer som det hette på den tiden :-) ). Att det var en spretig plattform där man på egen hand behövde hitta applikationer med stöd för just sin telefonvariant var förstås ett stort problem, men en ännu större tröskel var priset. Att betala 149:- för en applikation som hanterar att göra-listor, och som man dessutom inte kunde testa innan, kändes extremt motigt. När App Store kom fanns massor av gratisappar som stimulerade beteende att skaffa nya program till sin telefon. Det viktigaste var dock prissättningen, massor av riktigt bra appar kostade mellan 7 och 35 kronor. Det populäraste spelet till iPhone, Angry Birds, kostar bara 7:- men har genererat enorma intäkter till sin skapare.

    Nästa marknad som verkar vara på tur är operativsystem. Vi har redan sett svag men tydlig trend där licenser för operativsystem har gått ner i pris. Att köpa en laglig licens för Windows har t.ex. blivit mycket billigare än det var för 10 år sedan. Den stora revolutionen verkar dock komma nu, och även här går Apple i bräschen. För 229:- får man en uppgradering av MacOSX som man dessutom får installera på alla sina registrerade Macar. Jag tror att Microsoft kommer att följa efter, och jag tror att de båda kommer tjäna mycket pengar på detta. Digitala produkter kan som bekant kopieras och det sätter delar av de normala marknadsmekanismerna ur funktion – potentiella konsumenter kan helt enkelt välja att inte köpa produkten utan att helt enkelt skaffa den gratis (olagligt och omoraliskt – men praktiskt väldigt lätt). Denna variant på the long tail är en enorm potentiell marknad som inte finns för andra produkter. Genom att sänka priset på sin produkt så kan man öppna den potentiella marknaden och skapa en totalt sett högre volym än man hade när produkten var dyrare. Och med digitala produkter är marginalkostnaden för att producera fler enheter i princip 0.

    Några som inte har fattat det här är skivbolagen. De har krampaktigt hållit sig kvar vid gamla affärsmodeller och bara konstaterat att det är fel att det finns piratkopiering istället för att öppna den potentiella marknaden (illegala nedladdare) med nya erbjudanden. När skivbolagen först började testa att distribuera sin musik digitalt hade låtarna i princip exakt samma pris som om man köpt CD-skivan. Man kom också på att digitala filer kan kopieras, och lade ner enorma resurser på kopieringsskydd som bara ställde till problem för de betalande kunderna. Undrar någon varför det inte blev en succé? Nu när det sakta börjar komma alternativ som liknar App Store-tänket, t.ex. Spotify, sätter sig många skivbolag på bakhasorna. Senast i raden är Century Media Records som har dragit tillbaka all sin musik från Spotify, och dessutom skickatett snipigt svar om att de minsann också behöver pengar till mat och hyra till en bloggare som frågat. Det Century Media inte förstår är att Spotify framför allt kan hjälpa till att öppna den potentiella marknaden av illegala nedladdare, inte kannibalisera på de som köper skivor.

    Men, kan man invända, Apple och Microsoft tjänar ju pengar på andra saker. Kanske kan de välja att gå back på operativsystem för att istället tjäna på pengar på hårdvara eller andra mjukvaruprodukter? Visst är det så, fast jag tror att operativsystemen till lägre pris kommer att vara lönsamma i sig själva. Och även för skivbolagen finns det ju andra intänktskällor. Piratkopieringen har gjort att man redan nu tjänar mer på konserter och merchandise än på musiken. Spotify och andra nya erbjudanden kan öka lönsamheten på musiken, det är jag övertygad om, men då är det dags att ta av skygglapparna.", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "På en global marknad är volym viktigare än pris", + "meta_description": "", + "author_id": 6, + "created_at": 1313401500000, + "created_by": 6, + "updated_at": 1313401500000, + "updated_by": 6, + "published_at": 1313401500000, + "published_by": 6 + }, + { + "id": 545, + "title": "Ett år med WP7, NODO och Mango", + "slug": "ett-ar-med-wp7-nodo-och-mango", + "markdown": "\r\n\r\nÄven om jag inte ägt en WP7 ett helt år ännu så har den definitivt haft en plats i mitt liv i minst ett år och här försöker jag sammanfatta det året.\r\n## Innan oktober när telefonen fanns på riktigt\r\nFörsta delen av året spenderades väntandes och längtandes. Jag hade förstås inte bestämt mig helt och hållet för vilken telefon jag ville ha men visste att WM6.5 var hopplöst ute, Iphone kändes inte rätt och alla andra telefontillverkare fortsatte på sin gamla taktik som var att släppa 6-7 modeller varje år och ignorera allt gammalt så fort dom kom ut i butik och att app-utbuden var rent ut sagt kassa.\r\n\r\nDen enskilt största anledningen till att jag väntade och hade hopp för WP7 var .NET och silverlight stödet eftersom jag i många år varit en .NET utvecklare och har förstås varit sugen på att utveckla för mobiler i många år men undvikit det då tidigare mobiler hade ganska dåliga verktyg och var väldigt begränsade.\r\n## När telefonen fanns att köpa\r\nNär telefonen släpptes i sverige så var det inofficiellt och med några få modeller och få återförsäljare. Enda sättet att köpa en Samsung Omnia 7 var att köpa den hos 3 och sedan låsa upp den. Under 2 veckor så hade jag den som en leksakstelefon innan jag kunde stoppa in mitt telia simkort och helt överge min gamla telefon.\r\n\r\nI början fanns knappt nåt alls i marketplace och de få spel och program som fanns var dåliga både rent kvalitetsmässigt men också innehållsmässigt vilket var naturligt eftersom det faktiskt tar tid att göra bra spel och appar.\r\n\r\nSamsung och Telia var tyvärr inte en bra kombination. När telefonen låstes upp så var det fortfarande dolda inställningar som gjorde att MMS inte gick att skicka och det tog månader innan Samsung släppte en fix. Mottagna samtal blev ibland robotsamtal och ibland helt tysta (detta är fortfarande inte löst för alla utan bara för vissa betatestare av en ny firmware som lär släppas på bredare front snart).\r\n\r\nKapacitiva knappar retade mig redan från första dagen och det har tyvärr inte blivit mycket bättre även om samsung numera slår av de kapacitiva knapparna när man nuddar resten av skärmen.\r\n## Tiden med Originalet/NODO\r\nDet börjar finnas gott om applikationer och spel nu och även en hel del topp spel som portats från iphone även om det fortfarande finns gott om spel på iphone som slår allt som finns till WP7. Inbyggda funktionerna som kalender, mail, sms, webbläsare, office osv har funkat ypperligt men förstås haft några begränsningar som man ibland märkt av, dock så har allt inbyggt fungerat till 100% utom marketplace, som innan NODO uppdateringen hade en förmåga att krasha.\r\n\r\nJag har varit väldigt nöjd med WP7 även om jag förstås längtat efter Mango för att få en ännu kraftfullare telefon och en som kändes komplett jämfört med konkurenterna.\r\n## Mango beta 2\r\nJust nu har jag precis tagit mig i kragen och registrerat mig som WP7 utvecklare både för att kunna uppdatera till Mango Beta 2 och givetvis för att kunna utveckla appar och spel på hemmafronten.\r\n\r\nKostnaden för att registrera sig är 650 kronor per år och då får man förstås möjligheten att tjäna in dom pengarna om man skulle ha lite tur och få ihop en applikation som säljer.\r\n\r\nTyvärr är Mango en ganska tråkig uppdatering eftersom allt bara ”är som det ska”, allt är bara bättre och allt flyter på som om det vore självklart. När man använder telefonen första tiden och letar nyheter så fastnar man i själva informationen istället för gränsnittet så på många sätt så är det som man bara upptäckt fler saker som alltid funnits där. Jag förstår varför iPhone- och Androidanvändare ser telefonen som tråkig, det finns inget onödigt, inga häftiga 3D effekter alls utan en knapp är gjord för att tryckas på, inte stirras på och text är gjord för att läsas. Det är skönt att MS fortsätter på sitt spår och inte smyger in onödiga effekter för att blidka dom som bara vill ha nåt nytt och glittrande hela tiden.\r\n\r\nMed Mango så har telefonen gått från att vara riktigt bra, men med vissa begränsningar och vissa störningsmoment, till att bli mycket grym och funktionsrik. Med den sömlösa integratonen mot Facebook, Twitter, Messenger och LinkedIn så har jag numera stenkoll på allt i en och samma vy utan att flippa mellan ett par olika appar. jag kan också lätt kolla på en specifik person för att se vad han/hon gjort senaste tiden och även se hur vi två kommunicerat oavsett om det varit telefonsamtal, facebookkommentarer, twitterinlägg eller sms.\r\n\r\nEftersom marketplace för Mangospecifika appar inte öppnat än så är det bara de inbyggda apparna som faktiskt utnyttjar Mango fullt ut så det finns förstås mycket nytt att upptäcka även i framtiden.\r\n## Mango i sverige\r\nDå jag köpte telefonen lade jag in ett amerikanskt Live-konto för att kunna komma åt marketplace då den styrs av första kontot man lägger in i telefonen och svenska marketplace ännu inte fanns. Nu när Mango kommer så har svenska marketplace öppnats men har bara ett litet urval jämfört med det amerikanska dock med fördelen att man kan registrera sitt kontokort och faktiskt komma åt köpesapparna vilket inte gått tidigare.\r\n\r\nJag har valt att vänta med att byta till mitt svenska livekonto ett tag till. Svenska marketplace kommer nog fyllas på ganska snabbt när väl Mango versionen av marketplace öppnar och det finns just idag få anledningar att köra ”svenskt” även om jag självklart kommer att byta när man faktiskt får nytta av att vara svensk på riktigt istället för som idag amerikan med lite drag av australienare(för att få metriska mått i t.ex kartor). Att byta livekonto kommer i princip att innbära att jag behöver resetta telefonen och då förlora sms historik som varken synkas till datorn eller molnet och appar/spel som jag installerat. Foton och filmer är redan synkade till datorn och kontakter, telefonnummer och mail är sparat i mitt vanliga livekonto så det kommer inte ta många minuter innan telefonen är som den ska igen.\r\n\r\nPå min andra blog http://blog.windowsphoneplace.com/ så har jag sammanställt en lista över alla appar och spel som jag har installerat på min telefon komplett med praktiska zune länkar så att min reset och ominstallation ska gå så smidigt som möjligt. När jag gjorde listan kollade jag också igenom vilka som fanns tillgängliga i svenska marketplace och det var ca hälften så än så länge håller jag kvar mitt amerikanska konto. Jag försöker uppdatera listan då och då för att hålla koll när det är dags att gå över men just nu är det alldeles för få tillgängliga appar, bara ca hälften i dagsläget.\r\n\r\nRedan idag med Mango betan så kan man äntligen välja svenskt tangentbord med svensk rättstavning så telefonen är numera riktigt skön att skriva med.\r\n\r\nFörhoppningsvis så får återförsäljarna lite bättre koll på Mango än dom haft tidigare, många har t.ex trott att det varit Windows Mobile 6.5 + med större knappar.  Dom borde skämmas faktiskt, ungefär som att rekommendera att folk inte köper iPhone för att Newton styrdes med penna och var lite småkass.\r\n## Närmaste tiden\r\nNu är det bara veckor(?) kvar tills det kommer telefoner med Mango förinstallerat och detta kommer vara Windows Phones stora genombrott. Förutom att hårdvaran kommer vara i klass med alla andra premium mobiler (telefonerna i nuvarande generation har rent specifikationsmässigt ganska tråkig hårdvara) så kommer både Microsoft och tillverkarna lansera plattformen på en större och bredare skala både internationellt och i Sverige där den ännu inte officiellt lanserats. Det blir också spännande att se vad Nokia kommer med och hur dom kommer att lyckas marknadsföra sig.\r\n\r\nNär marketplace för Mango öppnar officiellt (september?) så kommer den vanliga cykeln ske, dvs först kommer det dyka upp appar som använder de nya APIerna och möjligheterna men ganska yxigt från början. Redan vid årskiftet så torde det komma riktigt välskrivna appar som verkligen drar nytta av den nya plattformen och då kommer Mango till sin rätt.\r\n## Nästa år\r\nNästa år är definitvt Windows Phones år. Misstänker starkt att det kommer en explosion av användare närmaste månaderna och att det kommer leda till att fler mjukvarutillverkare kommer fokusera på plattformen. Idag kommer endast ett fåtal stora spel och appar till wp7 och i många fall så känns det halvhjärtat och det är förstås förståeligt då det ännu inte blivit direkt lönsamt att lägga ner alltför mycket tid då även en framgångsrik app inte drar in stora pengar.\r\n\r\nNästa år kommer man förstås börja längta efter Apollo som är arbetsnamnet på nästa stora uppdatering till telefonen. Jag gissar att Apollo kommer släppas september 2012, kom ihåg att du hörde det här först!\r\n\r\n![Bild](http://tekniken.nu/uploads/634496040328456063-wp7-year.png)", + "html": "

    Även om jag inte ägt en WP7 ett helt år ännu så har den definitivt haft en plats i mitt liv i minst ett år och här försöker jag sammanfatta det året.

    Innan oktober när telefonen fanns på riktigt

    Första delen av året spenderades väntandes och längtandes. Jag hade förstås inte bestämt mig helt och hållet för vilken telefon jag ville ha men visste att WM6.5 var hopplöst ute, Iphone kändes inte rätt och alla andra telefontillverkare fortsatte på sin gamla taktik som var att släppa 6-7 modeller varje år och ignorera allt gammalt så fort dom kom ut i butik och att app-utbuden var rent ut sagt kassa.

    Den enskilt största anledningen till att jag väntade och hade hopp för WP7 var .NET och silverlight stödet eftersom jag i många år varit en .NET utvecklare och har förstås varit sugen på att utveckla för mobiler i många år men undvikit det då tidigare mobiler hade ganska dåliga verktyg och var väldigt begränsade.

    När telefonen fanns att köpa

    När telefonen släpptes i sverige så var det inofficiellt och med några få modeller och få återförsäljare. Enda sättet att köpa en Samsung Omnia 7 var att köpa den hos 3 och sedan låsa upp den. Under 2 veckor så hade jag den som en leksakstelefon innan jag kunde stoppa in mitt telia simkort och helt överge min gamla telefon.

    I början fanns knappt nåt alls i marketplace och de få spel och program som fanns var dåliga både rent kvalitetsmässigt men också innehållsmässigt vilket var naturligt eftersom det faktiskt tar tid att göra bra spel och appar.

    Samsung och Telia var tyvärr inte en bra kombination. När telefonen låstes upp så var det fortfarande dolda inställningar som gjorde att MMS inte gick att skicka och det tog månader innan Samsung släppte en fix. Mottagna samtal blev ibland robotsamtal och ibland helt tysta (detta är fortfarande inte löst för alla utan bara för vissa betatestare av en ny firmware som lär släppas på bredare front snart).

    Kapacitiva knappar retade mig redan från första dagen och det har tyvärr inte blivit mycket bättre även om samsung numera slår av de kapacitiva knapparna när man nuddar resten av skärmen.

    Tiden med Originalet/NODO

    Det börjar finnas gott om applikationer och spel nu och även en hel del topp spel som portats från iphone även om det fortfarande finns gott om spel på iphone som slår allt som finns till WP7. Inbyggda funktionerna som kalender, mail, sms, webbläsare, office osv har funkat ypperligt men förstås haft några begränsningar som man ibland märkt av, dock så har allt inbyggt fungerat till 100% utom marketplace, som innan NODO uppdateringen hade en förmåga att krasha.

    Jag har varit väldigt nöjd med WP7 även om jag förstås längtat efter Mango för att få en ännu kraftfullare telefon och en som kändes komplett jämfört med konkurenterna.

    Mango beta 2

    Just nu har jag precis tagit mig i kragen och registrerat mig som WP7 utvecklare både för att kunna uppdatera till Mango Beta 2 och givetvis för att kunna utveckla appar och spel på hemmafronten.

    Kostnaden för att registrera sig är 650 kronor per år och då får man förstås möjligheten att tjäna in dom pengarna om man skulle ha lite tur och få ihop en applikation som säljer.

    Tyvärr är Mango en ganska tråkig uppdatering eftersom allt bara ”är som det ska”, allt är bara bättre och allt flyter på som om det vore självklart. När man använder telefonen första tiden och letar nyheter så fastnar man i själva informationen istället för gränsnittet så på många sätt så är det som man bara upptäckt fler saker som alltid funnits där. Jag förstår varför iPhone- och Androidanvändare ser telefonen som tråkig, det finns inget onödigt, inga häftiga 3D effekter alls utan en knapp är gjord för att tryckas på, inte stirras på och text är gjord för att läsas. Det är skönt att MS fortsätter på sitt spår och inte smyger in onödiga effekter för att blidka dom som bara vill ha nåt nytt och glittrande hela tiden.

    Med Mango så har telefonen gått från att vara riktigt bra, men med vissa begränsningar och vissa störningsmoment, till att bli mycket grym och funktionsrik. Med den sömlösa integratonen mot Facebook, Twitter, Messenger och LinkedIn så har jag numera stenkoll på allt i en och samma vy utan att flippa mellan ett par olika appar. jag kan också lätt kolla på en specifik person för att se vad han/hon gjort senaste tiden och även se hur vi två kommunicerat oavsett om det varit telefonsamtal, facebookkommentarer, twitterinlägg eller sms.

    Eftersom marketplace för Mangospecifika appar inte öppnat än så är det bara de inbyggda apparna som faktiskt utnyttjar Mango fullt ut så det finns förstås mycket nytt att upptäcka även i framtiden.

    Mango i sverige

    Då jag köpte telefonen lade jag in ett amerikanskt Live-konto för att kunna komma åt marketplace då den styrs av första kontot man lägger in i telefonen och svenska marketplace ännu inte fanns. Nu när Mango kommer så har svenska marketplace öppnats men har bara ett litet urval jämfört med det amerikanska dock med fördelen att man kan registrera sitt kontokort och faktiskt komma åt köpesapparna vilket inte gått tidigare.

    Jag har valt att vänta med att byta till mitt svenska livekonto ett tag till. Svenska marketplace kommer nog fyllas på ganska snabbt när väl Mango versionen av marketplace öppnar och det finns just idag få anledningar att köra ”svenskt” även om jag självklart kommer att byta när man faktiskt får nytta av att vara svensk på riktigt istället för som idag amerikan med lite drag av australienare(för att få metriska mått i t.ex kartor). Att byta livekonto kommer i princip att innbära att jag behöver resetta telefonen och då förlora sms historik som varken synkas till datorn eller molnet och appar/spel som jag installerat. Foton och filmer är redan synkade till datorn och kontakter, telefonnummer och mail är sparat i mitt vanliga livekonto så det kommer inte ta många minuter innan telefonen är som den ska igen.

    På min andra blog http://blog.windowsphoneplace.com/ så har jag sammanställt en lista över alla appar och spel som jag har installerat på min telefon komplett med praktiska zune länkar så att min reset och ominstallation ska gå så smidigt som möjligt. När jag gjorde listan kollade jag också igenom vilka som fanns tillgängliga i svenska marketplace och det var ca hälften så än så länge håller jag kvar mitt amerikanska konto. Jag försöker uppdatera listan då och då för att hålla koll när det är dags att gå över men just nu är det alldeles för få tillgängliga appar, bara ca hälften i dagsläget.

    Redan idag med Mango betan så kan man äntligen välja svenskt tangentbord med svensk rättstavning så telefonen är numera riktigt skön att skriva med.

    Förhoppningsvis så får återförsäljarna lite bättre koll på Mango än dom haft tidigare, många har t.ex trott att det varit Windows Mobile 6.5 + med större knappar.  Dom borde skämmas faktiskt, ungefär som att rekommendera att folk inte köper iPhone för att Newton styrdes med penna och var lite småkass.

    Närmaste tiden

    Nu är det bara veckor(?) kvar tills det kommer telefoner med Mango förinstallerat och detta kommer vara Windows Phones stora genombrott. Förutom att hårdvaran kommer vara i klass med alla andra premium mobiler (telefonerna i nuvarande generation har rent specifikationsmässigt ganska tråkig hårdvara) så kommer både Microsoft och tillverkarna lansera plattformen på en större och bredare skala både internationellt och i Sverige där den ännu inte officiellt lanserats. Det blir också spännande att se vad Nokia kommer med och hur dom kommer att lyckas marknadsföra sig.

    När marketplace för Mango öppnar officiellt (september?) så kommer den vanliga cykeln ske, dvs först kommer det dyka upp appar som använder de nya APIerna och möjligheterna men ganska yxigt från början. Redan vid årskiftet så torde det komma riktigt välskrivna appar som verkligen drar nytta av den nya plattformen och då kommer Mango till sin rätt.

    Nästa år

    Nästa år är definitvt Windows Phones år. Misstänker starkt att det kommer en explosion av användare närmaste månaderna och att det kommer leda till att fler mjukvarutillverkare kommer fokusera på plattformen. Idag kommer endast ett fåtal stora spel och appar till wp7 och i många fall så känns det halvhjärtat och det är förstås förståeligt då det ännu inte blivit direkt lönsamt att lägga ner alltför mycket tid då även en framgångsrik app inte drar in stora pengar.

    Nästa år kommer man förstås börja längta efter Apollo som är arbetsnamnet på nästa stora uppdatering till telefonen. Jag gissar att Apollo kommer släppas september 2012, kom ihåg att du hörde det här först!

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Ett år med WP7, NODO och Mango", + "meta_description": "", + "author_id": 1089, + "created_at": 1314008100000, + "created_by": 1089, + "updated_at": 1314008100000, + "updated_by": 1089, + "published_at": 1314008100000, + "published_by": 1089 + }, + { + "id": 554, + "title": "10 bra anledningar att ha en iPad på jobbet", + "slug": "10-bra-anledningar-att-ha-en-ipad-pa-jobbet", + "markdown": "\r\nAtt anteckna med på möten. Ipadens storlek och batteritid gör den optimal för anteckningar. Använd Evernote (app) och du kan även spara och söka i dina anteckningar senare och från datorn.Att använda för brainstorming och dokumentation av hierarkiska strukturer (App: Mindmeister)Använda för sitt intranät. Att ha intranätet alltid tillgängligt bredvid skrivbordet är enormt kraftfullt.Videokonferens. Skype på iPad fungerar ypperligt bra för videokonferenser (Facetime är ett bra alternativ). Jobbar du hemifrån kan du ändå vara med på möten via din ipad.Tidredovisning, gör en anpassad sida på ert intranät där du och dina kollegor kan redovisa er tid på ipaden. Då kan ni redovisa tiden på bussen hem eller i fikarummet. ( Eller gör som Iteam, tidredovisa genom kalendern.)Använd som Twitterläsare. Att företag behöver vara i framkant på sociala webben är inget nytt. Twitters iPad-app är fantastiskt bra och gör att du kan hålla koll på Twitter åt företaget och åt dig själv i samma app. Appen stöder flera inloggade konton.Visa rapporter. Ipadens skärm är väldigt bra på att bläddra genom rapporter. På detta sätt behöver du inte skriva ut alla ekonomiska rapporter eller whitepapers du läser. Maila till dig själv och ta upp dem på din iPad. Pdf, Word, excel, powerpoint. Alla format stöds.Keynote. Gör enkla presentationer eller visa powerpoints på iPad. Bra för säljare som har personliga möten med kunder men kan ändå visa powerpoint i ett personligare format.Säljverktyg. Om din organisation använder Salesforce eller SAP finns det färdiga appar för att hämta och bearbeta data på iPad. Fler leverantörer börjar leverera liknande lösningar till sina affärssystem och CRM system. Du kan även be Iteam bygga skräddarsydda appar till just din organisation.Bra för er image. Det upplevs som positivt av både personal och kunder att ha tillgång till senaste tekniken. Miljön sparas när färre papper behöver skrivas ut och ditt företag upplevs som en intressant arbetsgivare och leverantör.\r\nDet är mitt bidrag till din chef, lycka till!\r\nFölj mig på twitter för mer tips om iPad, nyheter i iOS och andra teknikspaningar: @urvader\r\n\r\n![Bild](http://tekniken.nu/uploads/iPad-business.jpg)", + "html": "

    1. Att anteckna med på möten. Ipadens storlek och batteritid gör den optimal för anteckningar. Använd Evernote (app) och du kan även spara och söka i dina anteckningar senare och från datorn.
    2. Att använda för brainstorming och dokumentation av hierarkiska strukturer (App: Mindmeister)
    3. Använda för sitt intranät. Att ha intranätet alltid tillgängligt bredvid skrivbordet är enormt kraftfullt.
    4. Videokonferens. Skype på iPad fungerar ypperligt bra för videokonferenser (Facetime är ett bra alternativ). Jobbar du hemifrån kan du ändå vara med på möten via din ipad.
    5. Tidredovisning, gör en anpassad sida på ert intranät där du och dina kollegor kan redovisa er tid på ipaden. Då kan ni redovisa tiden på bussen hem eller i fikarummet. ( Eller gör som Iteam, tidredovisa genom kalendern.)
    6. Använd som Twitterläsare. Att företag behöver vara i framkant på sociala webben är inget nytt. Twitters iPad-app är fantastiskt bra och gör att du kan hålla koll på Twitter åt företaget och åt dig själv i samma app. Appen stöder flera inloggade konton.
    7. Visa rapporter. Ipadens skärm är väldigt bra på att bläddra genom rapporter. På detta sätt behöver du inte skriva ut alla ekonomiska rapporter eller whitepapers du läser. Maila till dig själv och ta upp dem på din iPad. Pdf, Word, excel, powerpoint. Alla format stöds.
    8. Keynote. Gör enkla presentationer eller visa powerpoints på iPad. Bra för säljare som har personliga möten med kunder men kan ändå visa powerpoint i ett personligare format.
    9. Säljverktyg. Om din organisation använder Salesforce eller SAP finns det färdiga appar för att hämta och bearbeta data på iPad. Fler leverantörer börjar leverera liknande lösningar till sina affärssystem och CRM system. Du kan även be Iteam bygga skräddarsydda appar till just din organisation.
    10. Bra för er image. Det upplevs som positivt av både personal och kunder att ha tillgång till senaste tekniken. Miljön sparas när färre papper behöver skrivas ut och ditt företag upplevs som en intressant arbetsgivare och leverantör.


    Det är mitt bidrag till din chef, lycka till!

    Följ mig på twitter för mer tips om iPad, nyheter i iOS och andra teknikspaningar: @urvader

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "10 bra anledningar att ha en iPad på jobbet", + "meta_description": "", + "author_id": 1087, + "created_at": 1315218000000, + "created_by": 1087, + "updated_at": 1315218000000, + "updated_by": 1087, + "published_at": 1315218000000, + "published_by": 1087 + }, + { + "id": 556, + "title": "Du och din sambo kan ha synkroniserade inköpslistor", + "slug": "du-och-din-sambo-kan-ha-synkroniserade-inkopslistor", + "markdown": "\r\n\r\nHur svårt kan det vara att hitta en inköpsliste-app där du och din sambo kan dela inköpslista, och hålla dom synkroniserade med varandra? En App där du kan hantera flera listor – en för matinköp, en för kläder och kanske ytterligare en för möbler och prylar? En app där du kan ordna varorna i kategorier precis så som du själva vill? En app där du kan ladda upp egna ikoner för att snabbt se vilken shoppinglista som är vilken? En app där du kanske till och med kan lägga in priser på varorna och på så sätt veta vad inköpslistan kommer att kosta innan man kliver in i affären?\r\n\r\nEn app som uppfyller allt detta finns!\r\n\r\n\r\n\r\nEn sökning i App Store visar att intresset för att utveckla inköpsappar är stort. Listan löper sida ner och sida upp – men jag har alla fall bara funnit en app som håller måttet. ShoppingList av Werner Freytag.\r\n\r\nVinnaren so far: ShoppingList av Werner Freytag.\r\n\r\nDen är inte särskilt dyr, och med ett extra tillägg på 7kr så kan du synka listor med vänner och familj. Synken använder sig av Dropbox, vilket kräver att en utav er måste ha ett Dropboxkonto – men det är ju en app som du bör ha ändå – om inte så är det ett bra skäl till att skaffa den.\r\n\r\nTydliga och bra listor. Priser och kategorier lägger du förslagsvis upp allt eftersom du shoppar. En bonuseffekt av den här appen är att du lär dig mer om vad varor kostar – vad är dyrt, vad är billigt. Det är alla fall något som jag själv känner att jag fått mycket bättre pejl på med hjälp av den här inköpsappen.\r\n\r\nUnder inställningar så ställer du in det Dropbox-konto som skall användas för synkroniseringen av listorna mellan de iOS-enheter du vill koppla ihop.\r\n\r\nLycka till med shoppandet!\r\n\r\n![Bild](http://tekniken.nu/uploads/634509016853972014-image003.jpg@01CC6BC5.D22EE600__image003.jpg)", + "html": "

    Hur svårt kan det vara att hitta en inköpsliste-app där du och din sambo kan dela inköpslista, och hålla dom synkroniserade med varandra? En App där du kan hantera flera listor – en för matinköp, en för kläder och kanske ytterligare en för möbler och prylar? En app där du kan ordna varorna i kategorier precis så som du själva vill? En app där du kan ladda upp egna ikoner för att snabbt se vilken shoppinglista som är vilken? En app där du kanske till och med kan lägga in priser på varorna och på så sätt veta vad inköpslistan kommer att kosta innan man kliver in i affären?

    En app som uppfyller allt detta finns!


    En sökning i App Store visar att intresset för att utveckla inköpsappar är stort. Listan löper sida ner och sida upp – men jag har alla fall bara funnit en app som håller måttet. ShoppingList av Werner Freytag.


    Vinnaren so far: ShoppingList av Werner Freytag.

    Den är inte särskilt dyr, och med ett extra tillägg på 7kr så kan du synka listor med vänner och familj. Synken använder sig av Dropbox, vilket kräver att en utav er måste ha ett Dropboxkonto – men det är ju en app som du bör ha ändå – om inte så är det ett bra skäl till att skaffa den.


    Tydliga och bra listor. Priser och kategorier lägger du förslagsvis upp allt eftersom du shoppar. En bonuseffekt av den här appen är att du lär dig mer om vad varor kostar – vad är dyrt, vad är billigt. Det är alla fall något som jag själv känner att jag fått mycket bättre pejl på med hjälp av den här inköpsappen.


    Under inställningar så ställer du in det Dropbox-konto som skall användas för synkroniseringen av listorna mellan de iOS-enheter du vill koppla ihop.

    Lycka till med shoppandet!

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Du och din sambo kan ha synkroniserade inköpslistor", + "meta_description": "", + "author_id": 1097, + "created_at": 1315403100000, + "created_by": 1097, + "updated_at": 1315403100000, + "updated_by": 1097, + "published_at": 1315403100000, + "published_by": 1097 + }, + { + "id": 568, + "title": "Idag är Den stora iPhonedagen", + "slug": "idag-ar-den-stora-iphonedagen", + "markdown": "\r\n\r\nI dag presenterar Apple sina nyheter kring den nya iPhonen. Vanligtvis sker det i juni och telefonen börjar levereras i juli men detta året har datumen förskjutits och förväntningarna har då också ökats.\r\n\r\nDet finns många bra sajter som samlat alla rykten och trots att Apple brukar vara duktiga på att överraska och hålla sina  produkter hemliga brukar man få en rätt bra bild av vad som kommer presenteras av ryktena.\r\n\r\nTyvärr är det många rykten som förutsäger att Apple bara presenterar en uppgraderad iPhone 4S, dvs samma format som iPhone 4 men med snabbare processor och bättre kamera. En indikation på att det faktiskt inte blir en iPhone 5 är att det är den 4:e oktober och inte 5:e – Apple brukar använda sådana signaler för att sänka/höja förväntningarna. Jag gissar och hoppas dock att det kommer ske större förändringar än så. Applefans är bra på att släppa bilder i förväg på deras drömtelefoner och här är min favorit (tunnare och större skärm):\r\n\r\n\r\n\r\nDet vi med stor sannolikhet kan säga är:\r\n\r\n1. Bättre kamera (8 MP) \r\n\r\n2. Snabbare processor\r\n\r\n3. Mer minne (1 GB)\r\n\r\n4. Större utrymme (max 64/128 GB)\r\n\r\nFörhoppningsvis:\r\n\r\n5. Större skärm\r\n\r\n6. Tunnare\r\n\r\nSom vanligt finns det många rykten som säger att Apple planerar att släppa en billigare telefon för att slå sig in på fler marknadssegment men jag tror nog i så fall att de sänker priserna på de tidigare modellerna snarare än att gör en ny nischprodukt med sämre kvalitet (t ex plast istället för glas).\r\n## AI kommer skapa nya användningsmönster\r\nEtt intressant rykte är att Apple till slut kommer göra användning av sitt köp av bolaget bakom appen Siri och samarbetet med Dragon Software som gör röststyrning. Det finns bilder i tidiga betaversioner av iOS som pekar på att röststyrningen kommer ha en mer central roll, i kombination med mer avancerad artificiell intelligens ryktas det att man ska kunna beställa bord på restauranger, få tågtider eller hjälp att hitta till närmaste bankomat bara med hjälp av rösten. Dessutom ryktas det finnas möjlighet att komponera mail och sms med rösten.\r\n\r\nKlockan 7 ikväll kan du följa det live här:\r\n\r\nhttp://www.engadget.com/2011/10/04/apples-lets-talk-iphone-keynote-liveblog/\r\n\r\n![Bild](http://tekniken.nu/uploads/634533383001700834-image001.jpg@01CC8277.3BAB4160__image001.jpg)", + "html": "

    I dag presenterar Apple sina nyheter kring den nya iPhonen. Vanligtvis sker det i juni och telefonen börjar levereras i juli men detta året har datumen förskjutits och förväntningarna har då också ökats.

    Det finns många bra sajter som samlat alla rykten och trots att Apple brukar vara duktiga på att överraska och hålla sina  produkter hemliga brukar man få en rätt bra bild av vad som kommer presenteras av ryktena.

    Tyvärr är det många rykten som förutsäger att Apple bara presenterar en uppgraderad iPhone 4S, dvs samma format som iPhone 4 men med snabbare processor och bättre kamera. En indikation på att det faktiskt inte blir en iPhone 5 är att det är den 4:e oktober och inte 5:e – Apple brukar använda sådana signaler för att sänka/höja förväntningarna. Jag gissar och hoppas dock att det kommer ske större förändringar än så. Applefans är bra på att släppa bilder i förväg på deras drömtelefoner och här är min favorit (tunnare och större skärm):


    Det vi med stor sannolikhet kan säga är:

    1. Bättre kamera (8 MP)

    2. Snabbare processor

    3. Mer minne (1 GB)

    4. Större utrymme (max 64/128 GB)

    Förhoppningsvis:

    5. Större skärm

    6. Tunnare

    Som vanligt finns det många rykten som säger att Apple planerar att släppa en billigare telefon för att slå sig in på fler marknadssegment men jag tror nog i så fall att de sänker priserna på de tidigare modellerna snarare än att gör en ny nischprodukt med sämre kvalitet (t ex plast istället för glas).

    AI kommer skapa nya användningsmönster

    Ett intressant rykte är att Apple till slut kommer göra användning av sitt köp av bolaget bakom appen Siri och samarbetet med Dragon Software som gör röststyrning. Det finns bilder i tidiga betaversioner av iOS som pekar på att röststyrningen kommer ha en mer central roll, i kombination med mer avancerad artificiell intelligens ryktas det att man ska kunna beställa bord på restauranger, få tågtider eller hjälp att hitta till närmaste bankomat bara med hjälp av rösten. Dessutom ryktas det finnas möjlighet att komponera mail och sms med rösten.

    Klockan 7 ikväll kan du följa det live här:

    http://www.engadget.com/2011/10/04/apples-lets-talk-iphone-keynote-liveblog/

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Idag är Den stora iPhonedagen", + "meta_description": "", + "author_id": 1087, + "created_at": 1317741498000, + "created_by": 1087, + "updated_at": 1317741498000, + "updated_by": 1087, + "published_at": 1317741498000, + "published_by": 1087 + }, + { + "id": 569, + "title": "Varför ska du skaffa en Windows Phone 7.5 Mango", + "slug": "varfor-ska-du-skaffa-en-windows-phone-75-mango", + "markdown": "\r\n\r\nDet är enkelt att hitta anledningar till att köpa iPhone eller Android. Man kan lätt hänvisa till iPhones stora utbud av appar eller Androids öppna arkitektur som gör det möjligt att få den att göra nästan allt, inklusive se ut som WP7 om man skulle vilja det.\r\n\r\nDet som gör WP7 så unik i sammanhanget är att det inte är antalet features eller några enskilda saker som går att peka ut (android = valfrihet och öppenhet, iphone = många bra appar) utan att det är dom små sakerna som gör det. Summan av allt är så mycket större än alla delar. Här försöker jag gå igenom en del av funktionerna som gör WP7 unik även om det förstås finns appar till andra mobiler som gör delvis liknande saker och säkert har en och annan funktion som WP7 saknar.\r\n## Enhetlighet, enkelhet\r\nEn av plattformens styrka är hur enkelt och enhetligt allt ser ut och fungerar. Det kan förstås ses som tråkigt men gör att telefonen blir extremt lätt att hantera och gör att fokus hamnar på innehållet. Smaken är förstås olika och det kan förstås ta tid att vänja sig vid det avskalade men när man väl insett hur skönt det är att titta på platta ytor med ren och lättläst text istället för 3D-liknande saker med texturer och ikoner så vill man knappast ha nåt annat.\r\n## Unika funktioner\r\nNu när alla telefoner börjar ha samma grundläggande funktioner är det förstås svårare att peka ut vad som är unikt. Nåt som sticker ut är hur mycket som är integrerat i telefonen och hur lätt det är att komma igång. Lägg till konton från facebook, live, twitter och Exchange och länka ihop kontakterna så får du direkt upp bild när nån ringer och du kan snabbt se när din kollega twittrade senast. Snabbt och enkelt.\r\n## Framtiden är ljus\r\nJust nu är WP7 en parentes med bara nån procents andel men det kommer definivt ändras när Mango telefonerna släpps (vissa modeller om några veckor, andra kommer senare) och här kommer Nokia göra största skillnaden. Sannolikt så är det årets julklapp (efter bakmaskinen förstås J).\r\n## Prestanda\r\nKollar man på ren hårdvara är det en rätt svag plattform. Eftersom gränsnittet är hårdvaruaccelererat så är det dock en väldigt mjuk upplevelse. Nästan alla som testat telefonerna blir imponerad över hur mjukt allt rör sig.\r\n## Mail\r\nHar stöd för Exchange, Hotmail, Gmail , Yahoo! Mail och förstås POP/Imap. Kan visa trådade diskussioner och det går att länka ihop flera konton som då visas i en gemensam vy.\r\n## Office\r\nFrån smidiga anteckningar med Onenote till mer komplicerade powerpoints/excel/Word dokument som synkas med Skydrive, sharepoint eller Office 365 gör att telefonen kan bli en del av ditt naturliga jobbflöde.\r\n## People hubben\r\nIntegrerar  Twitter, Facebook, Live och Linkedin så att du får ett nyhetsflöde som visar alla källor oberoende av varifrån de kommer. När du postar en nyhet så kan du dessutom välja vilka tjänster du vill posta till.\r\n\r\nVälj ut en person och se alla facebookinlägg, tweets och all kommunikationshistorik med dig oavsett om det varit telefonsamtal, sms eller chatinlägg.\r\n\r\nSjälklart finns det dedikerade appar att ladda ner men telefonens styrka är integrationen.\r\n## Kalender\r\nKalendern har stöd för Exchange, Facebook, Google och Live. Summerar enkelt alla dina kalendrar och låter dig lägga bokningar på valfri. Har också stöd för TODOs i Exchange och Hotmail.\r\n## Chat\r\nDu kan växla mellan SMS/Live messenger och facebook chat inom samma konversation. Du kan helt enkelt alltid vara online (om du vill förstås)\r\n## Och några anledningar varför man inte ska skaffa en... ännu!\r\nDu kommer vara ganska ensam ett tag till. Om det är viktigt för dig att kunna spela samma spel som kollegorna/vännerna så kan det vara värt att vänta ett tag (tills dina kompisar inser hur bra WP7 är...)\r\n\r\nFlugor som t.ex WordFeud kommer du att missa eller åtminstone vara sen med i många fall. I samband med att plattformen blir mer populär kommer det förstås dyka upp flugor som bara finns på WP7 också så det kommer ändras.\r\n\r\nDet är ännu ett rätt begränsat antal modeller att välja bland. I första generationen fanns bara 4 olika modeller att köpa i sverige (2 olika HTC, en LG och en Samsung) och några få till som gick att direktimportera. Nu i första skedet verkar det komma några modeller till men i princip så rör det sig om en eller två per tillverkare och det är defintivt få high-end utan de flesta hamnar nånstans i mitten på pris segmentet. Om nån månad så ger sig Nokia in och då kommer det finnas fler modeller att välja på.  \r\n\r\nDet saknas fortfarande en del tjänster i sverige. Zune Pass som ger obegränsat med music för en smärre månadskostnad liknande itunes/spotify har inte kommit än och Bing som är sökmotorn har inte t.ex sin scout som gör att man kan hitta t.ex restauranger i närheten.\r\n## Så...köpa eller inte?\r\nDet dyker snart upp nya intressanta telefoner och det är ett givet köp om du är ute efter en bra mobil och smartphone som i princip bara saknar lite branchstöd just nu men räkna med att det kommer vända snart.\r\n\r\nEnda missnöjet jag haft med min mobil senaste året är att Samsung Omnia 7 och Telia har varit fullt av dålig mottagning och sporadisk datatrafik och det har förstås varit trist att inte kunna wordfeuda med kollegorna.\r\n\r\n![Bild](http://tekniken.nu/uploads/634533383009044537-samsungomniaw.png)", + "html": "

    Det är enkelt att hitta anledningar till att köpa iPhone eller Android. Man kan lätt hänvisa till iPhones stora utbud av appar eller Androids öppna arkitektur som gör det möjligt att få den att göra nästan allt, inklusive se ut som WP7 om man skulle vilja det.

    Det som gör WP7 så unik i sammanhanget är att det inte är antalet features eller några enskilda saker som går att peka ut (android = valfrihet och öppenhet, iphone = många bra appar) utan att det är dom små sakerna som gör det. Summan av allt är så mycket större än alla delar. Här försöker jag gå igenom en del av funktionerna som gör WP7 unik även om det förstås finns appar till andra mobiler som gör delvis liknande saker och säkert har en och annan funktion som WP7 saknar.

    Enhetlighet, enkelhet

    En av plattformens styrka är hur enkelt och enhetligt allt ser ut och fungerar. Det kan förstås ses som tråkigt men gör att telefonen blir extremt lätt att hantera och gör att fokus hamnar på innehållet. Smaken är förstås olika och det kan förstås ta tid att vänja sig vid det avskalade men när man väl insett hur skönt det är att titta på platta ytor med ren och lättläst text istället för 3D-liknande saker med texturer och ikoner så vill man knappast ha nåt annat.

    Unika funktioner

    Nu när alla telefoner börjar ha samma grundläggande funktioner är det förstås svårare att peka ut vad som är unikt. Nåt som sticker ut är hur mycket som är integrerat i telefonen och hur lätt det är att komma igång. Lägg till konton från facebook, live, twitter och Exchange och länka ihop kontakterna så får du direkt upp bild när nån ringer och du kan snabbt se när din kollega twittrade senast. Snabbt och enkelt.

    Framtiden är ljus

    Just nu är WP7 en parentes med bara nån procents andel men det kommer definivt ändras när Mango telefonerna släpps (vissa modeller om några veckor, andra kommer senare) och här kommer Nokia göra största skillnaden. Sannolikt så är det årets julklapp (efter bakmaskinen förstås J).

    Prestanda

    Kollar man på ren hårdvara är det en rätt svag plattform. Eftersom gränsnittet är hårdvaruaccelererat så är det dock en väldigt mjuk upplevelse. Nästan alla som testat telefonerna blir imponerad över hur mjukt allt rör sig.

    Mail

    Har stöd för Exchange, Hotmail, Gmail , Yahoo! Mail och förstås POP/Imap. Kan visa trådade diskussioner och det går att länka ihop flera konton som då visas i en gemensam vy.

    Office

    Från smidiga anteckningar med Onenote till mer komplicerade powerpoints/excel/Word dokument som synkas med Skydrive, sharepoint eller Office 365 gör att telefonen kan bli en del av ditt naturliga jobbflöde.

    People hubben

    Integrerar  Twitter, Facebook, Live och Linkedin så att du får ett nyhetsflöde som visar alla källor oberoende av varifrån de kommer. När du postar en nyhet så kan du dessutom välja vilka tjänster du vill posta till.

    Välj ut en person och se alla facebookinlägg, tweets och all kommunikationshistorik med dig oavsett om det varit telefonsamtal, sms eller chatinlägg.

    Själklart finns det dedikerade appar att ladda ner men telefonens styrka är integrationen.

    Kalender

    Kalendern har stöd för Exchange, Facebook, Google och Live. Summerar enkelt alla dina kalendrar och låter dig lägga bokningar på valfri. Har också stöd för TODOs i Exchange och Hotmail.

    Chat

    Du kan växla mellan SMS/Live messenger och facebook chat inom samma konversation. Du kan helt enkelt alltid vara online (om du vill förstås)

    Och några anledningar varför man inte ska skaffa en... ännu!

    Du kommer vara ganska ensam ett tag till. Om det är viktigt för dig att kunna spela samma spel som kollegorna/vännerna så kan det vara värt att vänta ett tag (tills dina kompisar inser hur bra WP7 är...)

    Flugor som t.ex WordFeud kommer du att missa eller åtminstone vara sen med i många fall. I samband med att plattformen blir mer populär kommer det förstås dyka upp flugor som bara finns på WP7 också så det kommer ändras.

    Det är ännu ett rätt begränsat antal modeller att välja bland. I första generationen fanns bara 4 olika modeller att köpa i sverige (2 olika HTC, en LG och en Samsung) och några få till som gick att direktimportera. Nu i första skedet verkar det komma några modeller till men i princip så rör det sig om en eller två per tillverkare och det är defintivt få high-end utan de flesta hamnar nånstans i mitten på pris segmentet. Om nån månad så ger sig Nokia in och då kommer det finnas fler modeller att välja på. 

    Det saknas fortfarande en del tjänster i sverige. Zune Pass som ger obegränsat med music för en smärre månadskostnad liknande itunes/spotify har inte kommit än och Bing som är sökmotorn har inte t.ex sin scout som gör att man kan hitta t.ex restauranger i närheten.

    Så...köpa eller inte?

    Det dyker snart upp nya intressanta telefoner och det är ett givet köp om du är ute efter en bra mobil och smartphone som i princip bara saknar lite branchstöd just nu men räkna med att det kommer vända snart.

    Enda missnöjet jag haft med min mobil senaste året är att Samsung Omnia 7 och Telia har varit fullt av dålig mottagning och sporadisk datatrafik och det har förstås varit trist att inte kunna wordfeuda med kollegorna.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Varför ska du skaffa en Windows Phone 7.5 Mango?", + "meta_description": "", + "author_id": 1089, + "created_at": 1317742200000, + "created_by": 1089, + "updated_at": 1317742200000, + "updated_by": 1089, + "published_at": 1317742200000, + "published_by": 1089 + }, + { + "id": 575, + "title": "Checklista för maximerad batteritid för iPhone", + "slug": "checklista-for-maximerad-batteritid-for-iphone", + "markdown": "\r\n\r\nFörmodligen kan du avvara åtminstonde någon av inställningarna nedan. Avaktivera dom för att spara batteri!\r\n## Inställningar\r\nUnder Inställningar finns det en hel del saker man kan göra för att förbättra batteritiden:\r\n\r\n1. Musik > EQ: Stäng av Equalizer\r\n\r\n2. Allmänt > Begränsningar: Aktivera begränsningar och Blockera Itunes Ping genom att kryssar ur alternativet för Ping\r\n\r\n3. E-post, kontakter, kalender > Hämta nya data: Stäng av Push Data för mail genom att välja \"Av\" för Push\r\n\r\n4. Platstjänster: Stäng av Platstjänster för applikationer där GPS-position inte är viktig\r\n\r\n5. Inställningar  > Wi-Fi: Stäng av Wi-Fi när du inte använder det\r\n\r\n6. Ljusstyrka: Sätt på Automatisk ljusstyrka\r\n\r\n7. Allmänt > Autolås: Sätt Autolås till 1 min\r\n\r\n8. Allmänt > Bluetooth: Se till att Bluetooth är avstängd\r\n\r\n9. Ljud: Stäng av Vibration\r\n## iOS 5: Påminnelser\r\n\r\n\r\nFör iOS 5 är en stor bov att ha Platsstjänst aktiverad för nya Påminnelser-appen. Den har mer eller mindre GPS:en konstant aktiv för att kunna ge påminnelser baserat på vilken plats du befinner dig.\r\n## Återställ via iTunes\r\nOm du fortfarande upplever att din iPhone har dåligt batteri så kan det vara ett hett tips att återställa den via iTunes. Se till att göra en synkning först, där du får en backup som iTunes då återställer ifrån, så att ingen information går förlorad.\r\n## Appar i bakgrunden\r\n\r\n \r\nEn annan viktig sak som kan förbättra batteritiden en del är att manuellt stänga ner de senaste apparna som körts, då de kan ha saker som körs i bakgrunden.\r\n\r\nGenom att dubbeltrycka på Hemknappen får du upp en lista på de senaste körda apparna, som du sedanhåller ner fingret på så att de börjar skaka. Då kan du stänga dem en och en. Du behöver inte stänga alla appar, då det är bara några av de senast körda som får plats i minnet.\r\n## XSysInfo: App för att rensa minnet\r\n\r\n \r\nOm du tycker det är krångligt och tråkigt att göra den manuella övningen ovan, med att manuellt stänga appar, så finns den en app för det. Den heter XSysInfo.\r\n\r\nDen har funnits ett tag på AppStore och länge ansetts som en av de bästa och mest effektiva appar i sitt slag. Precis innan övergången till iOS 5 så blev de tvungna att uppdatera sin app ochta bort den enda funktionen som verkligen gör den användbar. Apple drog undan mattan för företaget och mer eller mindre ströp deras inkomst.\r\n\r\nMen efter några veckors klagomål från olika håll så kom den tillbaka på AppStore med den oslagbara funktionaliteten igen. Denna gång lite mer gömd, då man måste dra ner förstasidans skärm för att få fram funktionaliteten att städa minnet.\r\n\r\n![Bild](http://tekniken.nu/uploads/iphone_battery_screen.png)", + "html": "

    Förmodligen kan du avvara åtminstonde någon av inställningarna nedan. Avaktivera dom för att spara batteri!

    Inställningar

    Under Inställningar finns det en hel del saker man kan göra för att förbättra batteritiden:

    1. Musik > EQ: Stäng av Equalizer

    2. Allmänt > Begränsningar: Aktivera begränsningar och Blockera Itunes Ping genom att kryssar ur alternativet för Ping

    3. E-post, kontakter, kalender > Hämta nya data: Stäng av Push Data för mail genom att välja \"Av\" för Push

    4. Platstjänster: Stäng av Platstjänster för applikationer där GPS-position inte är viktig

    5. Inställningar  > Wi-Fi: Stäng av Wi-Fi när du inte använder det

    6. Ljusstyrka: Sätt på Automatisk ljusstyrka

    7. Allmänt > Autolås: Sätt Autolås till 1 min

    8. Allmänt > Bluetooth: Se till att Bluetooth är avstängd

    9. Ljud: Stäng av Vibration

    iOS 5: Påminnelser

    För iOS 5 är en stor bov att ha Platsstjänst aktiverad för nya Påminnelser-appen. Den har mer eller mindre GPS:en konstant aktiv för att kunna ge påminnelser baserat på vilken plats du befinner dig.

    Återställ via iTunes

    Om du fortfarande upplever att din iPhone har dåligt batteri så kan det vara ett hett tips att återställa den via iTunes. Se till att göra en synkning först, där du får en backup som iTunes då återställer ifrån, så att ingen information går förlorad.

    Appar i bakgrunden

    En annan viktig sak som kan förbättra batteritiden en del är att manuellt stänga ner de senaste apparna som körts, då de kan ha saker som körs i bakgrunden.

    Genom att dubbeltrycka på Hemknappen får du upp en lista på de senaste körda apparna, som du sedanhåller ner fingret på så att de börjar skaka. Då kan du stänga dem en och en. Du behöver inte stänga alla appar, då det är bara några av de senast körda som får plats i minnet.

    XSysInfo: App för att rensa minnet

    Om du tycker det är krångligt och tråkigt att göra den manuella övningen ovan, med att manuellt stänga appar, så finns den en app för det. Den heter XSysInfo.

    Den har funnits ett tag på AppStore och länge ansetts som en av de bästa och mest effektiva appar i sitt slag. Precis innan övergången till iOS 5 så blev de tvungna att uppdatera sin app ochta bort den enda funktionen som verkligen gör den användbar. Apple drog undan mattan för företaget och mer eller mindre ströp deras inkomst.

    Men efter några veckors klagomål från olika håll så kom den tillbaka på AppStore med den oslagbara funktionaliteten igen. Denna gång lite mer gömd, då man måste dra ner förstasidans skärm för att få fram funktionaliteten att städa minnet.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Checklista för maximerad batteritid för iPhone", + "meta_description": "", + "author_id": 1096, + "created_at": 1320854400000, + "created_by": 1096, + "updated_at": 1320854400000, + "updated_by": 1096, + "published_at": 1320854400000, + "published_by": 1096 + }, + { + "id": 578, + "title": "Välj rätt resväg - svensk kollektivtrafik och trafikläget i ”kartor”-appen", + "slug": "valj-ratt-resvag---svensk-kollektivtrafik-och-trafiklaget-i-kartor-appen", + "markdown": "\r\n\r\nGod nyheter för dig som reser mycket i Sverige. Nu finns både kollektivtrafik och trafikläget i iOS ”Kartor”-app! På iPhone får du en resebeskrivning väl presenterat i kartan och klickbara ikoner för detaljuppgifter. Gångväg, tunnelbana, tåg och bussar presenteras prydligt och fint med avgångstid och exempelvis bussnummer.\r\n\r\nPå iPad kan du välja att visa hela färdbeskrivningen utfälld. Du aktiverar trafik genom att vika upp inställningsfliken nere till höger på kartan. Riktigt enkelt och bra.\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/634565154302659699-image005.png@01CC98A0.B96958A0__image005.png)", + "html": "

    God nyheter för dig som reser mycket i Sverige. Nu finns både kollektivtrafik och trafikläget i iOS ”Kartor”-app! På iPhone får du en resebeskrivning väl presenterat i kartan och klickbara ikoner för detaljuppgifter. Gångväg, tunnelbana, tåg och bussar presenteras prydligt och fint med avgångstid och exempelvis bussnummer.

    På iPad kan du välja att visa hela färdbeskrivningen utfälld. Du aktiverar trafik genom att vika upp inställningsfliken nere till höger på kartan. Riktigt enkelt och bra.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Välj rätt resväg - svensk kollektivtrafik och trafikläget i ”kartor”-appen", + "meta_description": "", + "author_id": 1097, + "created_at": 1321027800000, + "created_by": 1097, + "updated_at": 1321027800000, + "updated_by": 1097, + "published_at": 1321027800000, + "published_by": 1097 + }, + { + "id": 580, + "title": "Hypekurvan 2011", + "slug": "hypekurvan-2011", + "markdown": "\r\n\r\nAnalysföretaget Gartner har sedan 1995 identifierat att alla nya produkter passerar ett antal faser av publicitet olika fort men att alla följer samma initiella kurva. Kurvan kallas Hypekurvan och alla känner till några kända exempel, t ex WAP som 2002 hade en väldigt stor hype (höga förväntningar och stor publicitet) för att sedan falla platt ner men tänk på hur ofta du nu använder mobilen för att surfa. Poängen är att de flesta tekniska innovationerna behöver mogna för att bli verkligt användbara och att teknikpressen gärna lyfter fram nyheter som har stor potential för tidigt och innan produkterna kommer ut och blir användbara är det ”bara fantasin” som sätter begränsningar för vad man kan skriva om en produkt eller teknik.\r\n\r\nEtt bra exempel på överdriven publicitet är Second Life – kom ni ihåg att Sverige till och med hade en ambassad i den virtuella verklighet som hette (heter?) Second Life, numera är det nog ganska tomt i ambassadens dyrt utvecklade och fint designade lobby? Tittar man på kurvan ligger virtuella världar längst ner just nu men tänk på hur World of Warcraft och det svenskutvecklade byggspelet Minecraft har en helt annan mognad och potential än Second Life.\r\n\r\nSom investerare/beställare av  teknik gör man oftast bäst att vänta på att en teknik har passerat sin värsta hype och investera lagom till att tekniken är på väg upp i sin mogna fas. Här kommer några axplock från den senaste publicerade kurvan från augusti 2011 och vi börjar med några som har passerat igenom sitt värsta fall och nu är påväg att bli mogna;\r\nQR koder vilket vi på Iteam tror mycket på som ett sätt att skapa affärsmöjligheter via mobiler,Predictive Analytics – dvs att med hjälp av användares beteenden räkna ut hur andra kommer att agera,Platsbaserad information – att helt enkelt filtrera och sortera listor för att visa det som är relevant för användaren. T ex behöver du inte se alla biografer i Göteborg när du surfar till SF.se. Numera är detta inbyggt inte bara i mobilerna utan även i webbläsarna via HTML5.\r\n\r\n\r\nVarning finns för några av de tekniker och tjänster som har varit väldigt populära bland teknikjournalister och bloggar den senaste tiden och som snart (om man ska lita på Gartner) bör vara på väg ner längs rutschkanan - där finns:\r\n”Big Data”  - dvs använda ny teknik som Map/Reduce, Hadoop och NoSQL för att hantera extrema mängder information,Gamification som betyder att du låter dina användare och besökare leka att de spelar ett spel när de handlar eller interagerar med din webbplats genom att få poäng och klara av nivåer.Group Buying är tjänster som säljer presentkort till olika typer av evenemang, tjänster och upplevelser och genom att flera köper samma presentkort samtidigt kan affärerna ge bra rabatter, företaget Groupon är enligt Forbes Magazine det snabbast växande företaget i världen någonsin (!).\r\n\r\n\r\nNågra som enligt Gartner redan har påbörjat sin kälkfärd är t ex\r\nSurfplattor ochMolnlösningar. NFC som är det elektroniska betalningssättet som gör din mobil till en plånbok är högst upp just nu och kommer halka ner rejält innan tekniken blir mogen på riktigt och NFC finns inbyggt i alla mobiler.\r\n\r\n\r\nDe tekniker som vi på tekniken.nu helst skulle vilja snabbt tog sig till mognadsstadiet är:\r\nKvantdator – skulle det inte vara fint att få oändlig datorkraft i nästa version av BF3?Hjärninterface – koppla in din hjärna med usb porten och skriv med tankens hjälp – är inte tangentbordet lite väl långsamt sätt att mata in information på? Tangentbordet är ju medvetet designat för att armarna i en skrivmaskin inte skulle trassla in sig i varandra – här borde man kommit längre på 144 årSpeech-to-speech translation – ta med iPhone på semesterresan och prata japanska flytande.\r\n\r\n\r\nSen kan man ju avsluta med att inse att Apple självklart har koll på det här så att de satsar på Location (find my friends) och speech recognition (Siri) och Mobile Application Stores (AppStore) är ingen konstigt. I nästa iPhone 5 kommer då antagligen biometrisk inloggning och inbyggd QR läsare?\r\n\r\n\r\n\r\n![Bild](http://tekniken.nu/uploads/634577224137702457-image002.gif@01CCA940.CEA172B0__image002.gif)", + "html": "

    Analysföretaget Gartner har sedan 1995 identifierat att alla nya produkter passerar ett antal faser av publicitet olika fort men att alla följer samma initiella kurva. Kurvan kallas Hypekurvan och alla känner till några kända exempel, t ex WAP som 2002 hade en väldigt stor hype (höga förväntningar och stor publicitet) för att sedan falla platt ner men tänk på hur ofta du nu använder mobilen för att surfa. Poängen är att de flesta tekniska innovationerna behöver mogna för att bli verkligt användbara och att teknikpressen gärna lyfter fram nyheter som har stor potential för tidigt och innan produkterna kommer ut och blir användbara är det ”bara fantasin” som sätter begränsningar för vad man kan skriva om en produkt eller teknik.

    Ett bra exempel på överdriven publicitet är Second Life – kom ni ihåg att Sverige till och med hade en ambassad i den virtuella verklighet som hette (heter?) Second Life, numera är det nog ganska tomt i ambassadens dyrt utvecklade och fint designade lobby? Tittar man på kurvan ligger virtuella världar längst ner just nu men tänk på hur World of Warcraft och det svenskutvecklade byggspelet Minecraft har en helt annan mognad och potential än Second Life.

    Som investerare/beställare av  teknik gör man oftast bäst att vänta på att en teknik har passerat sin värsta hype och investera lagom till att tekniken är på väg upp i sin mogna fas. Här kommer några axplock från den senaste publicerade kurvan från augusti 2011 och vi börjar med några som har passerat igenom sitt värsta fall och nu är påväg att bli mogna;

    • QR koder vilket vi på Iteam tror mycket på som ett sätt att skapa affärsmöjligheter via mobiler,
    • Predictive Analytics – dvs att med hjälp av användares beteenden räkna ut hur andra kommer att agera,
    • Platsbaserad information – att helt enkelt filtrera och sortera listor för att visa det som är relevant för användaren. T ex behöver du inte se alla biografer i Göteborg när du surfar till SF.se. Numera är detta inbyggt inte bara i mobilerna utan även i webbläsarna via HTML5.


    Varning finns för några av de tekniker och tjänster som har varit väldigt populära bland teknikjournalister och bloggar den senaste tiden och som snart (om man ska lita på Gartner) bör vara på väg ner längs rutschkanan - där finns:

    • ”Big Data”  - dvs använda ny teknik som Map/Reduce, Hadoop och NoSQL för att hantera extrema mängder information,
    • Gamification som betyder att du låter dina användare och besökare leka att de spelar ett spel när de handlar eller interagerar med din webbplats genom att få poäng och klara av nivåer.
    • Group Buying är tjänster som säljer presentkort till olika typer av evenemang, tjänster och upplevelser och genom att flera köper samma presentkort samtidigt kan affärerna ge bra rabatter, företaget Groupon är enligt Forbes Magazine det snabbast växande företaget i världen någonsin (!).


    Några som enligt Gartner redan har påbörjat sin kälkfärd är t ex

    • Surfplattor och
    • Molnlösningar.
    • NFC som är det elektroniska betalningssättet som gör din mobil till en plånbok är högst upp just nu och kommer halka ner rejält innan tekniken blir mogen på riktigt och NFC finns inbyggt i alla mobiler.


    De tekniker som vi på tekniken.nu helst skulle vilja snabbt tog sig till mognadsstadiet är:

    1. Kvantdator – skulle det inte vara fint att få oändlig datorkraft i nästa version av BF3?
    2. Hjärninterface – koppla in din hjärna med usb porten och skriv med tankens hjälp – är inte tangentbordet lite väl långsamt sätt att mata in information på? Tangentbordet är ju medvetet designat för att armarna i en skrivmaskin inte skulle trassla in sig i varandra – här borde man kommit längre på 144 år
    3. Speech-to-speech translation – ta med iPhone på semesterresan och prata japanska flytande.


    Sen kan man ju avsluta med att inse att Apple självklart har koll på det här så att de satsar på Location (find my friends) och speech recognition (Siri) och Mobile Application Stores (AppStore) är ingen konstigt. I nästa iPhone 5 kommer då antagligen biometrisk inloggning och inbyggd QR läsare?


    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Hypekurvan 2011", + "meta_description": "", + "author_id": 1087, + "created_at": 1322127900000, + "created_by": 1087, + "updated_at": 1322127900000, + "updated_by": 1087, + "published_at": 1322127900000, + "published_by": 1087 + }, + { + "id": 582, + "title": "Boxee - Jag är såld!", + "slug": "boxee---jag-ar-sald", + "markdown": "\r\n\r\nJag har sedan länge varit en förespråkare av XBMC på Linuxburk som den ultimata mediemaskinen. Uppsättningen har dock varit allt annat än smidig.\r\n\r\nAtt få ut ljud genom HDMI har till exempel varit ganska påfrestande, i övrigt har den inte alltid varit så bra på att hålla sig up-to-date med vilka filmer som tagits bort eller flyttats från mitt bibliotek.\r\n\r\nNu finns dock ett alternativ, Boxee. Gratis och går att köra i Windows.\r\n\r\nJag kör fortfarande med min Asrock ION 330 låda som faktiskt fortfarande räcker till, även med Windows i bakgrunden. Vill man kan man även köpa Boxee boxen, som tillverkas av D-Link och är Linuxbaserad. Själv gillar jag att ha lite högre prestanda och kunna köra Windows 7 i bakgrunden.\r\n\r\nBoxee är fint nog baserat på XBMC vilket är ganska tydligt på vissa ställen. Hårdvaruacceleration fungerar bra vilket gör att 1080p fungerar även på lite svagare hårdvara – givet rätt grafikkort.\r\n\r\nMina favoriter är hittills;\r\n\r\n- Automatisk sortering av filmer och tv-serier samt nedladdning av information om varje avsnitt/film.\r\n\r\n- Automatisk hämtning av subtitles till både filmer och tv-serier.\r\n\r\n- Snyggare och lättare gränssnitt än XMBC standardskin.\r\n\r\n- Att lägga till källor är mycket enklare.\r\n\r\n- Gratis fjärrkontroll till iPhone.\r\n\r\n- Hyr film från exempelvis Headweb.\r\n\r\n- Inbyggd browser.\r\n\r\nGår dessutom att köra på iPad, utan att behöva synka mot iTunes vilket förstås är fantastiskt. Därmed behöver vi inte längre konvertera filmer innan de kan spelas upp!\r\n\r\nMer information finns på Boxee.tv.\r\n\r\n![Bild](http://tekniken.nu/uploads/634590166291664357-image003.png@01CCB40F.B3C67A60__image003.png)", + "html": "

    Jag har sedan länge varit en förespråkare av XBMC på Linuxburk som den ultimata mediemaskinen. Uppsättningen har dock varit allt annat än smidig.

    Att få ut ljud genom HDMI har till exempel varit ganska påfrestande, i övrigt har den inte alltid varit så bra på att hålla sig up-to-date med vilka filmer som tagits bort eller flyttats från mitt bibliotek.

    Nu finns dock ett alternativ, Boxee. Gratis och går att köra i Windows.

    Jag kör fortfarande med min Asrock ION 330 låda som faktiskt fortfarande räcker till, även med Windows i bakgrunden. Vill man kan man även köpa Boxee boxen, som tillverkas av D-Link och är Linuxbaserad. Själv gillar jag att ha lite högre prestanda och kunna köra Windows 7 i bakgrunden.

    Boxee är fint nog baserat på XBMC vilket är ganska tydligt på vissa ställen. Hårdvaruacceleration fungerar bra vilket gör att 1080p fungerar även på lite svagare hårdvara – givet rätt grafikkort.

    Mina favoriter är hittills;

    - Automatisk sortering av filmer och tv-serier samt nedladdning av information om varje avsnitt/film.

    - Automatisk hämtning av subtitles till både filmer och tv-serier.

    - Snyggare och lättare gränssnitt än XMBC standardskin.

    - Att lägga till källor är mycket enklare.

    - Gratis fjärrkontroll till iPhone.

    - Hyr film från exempelvis Headweb.

    - Inbyggd browser.

    Går dessutom att köra på iPad, utan att behöva synka mot iTunes vilket förstås är fantastiskt. Därmed behöver vi inte längre konvertera filmer innan de kan spelas upp!

    Mer information finns på Boxee.tv.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Boxee - Jag är såld!", + "meta_description": "", + "author_id": 1088, + "created_at": 1323419826000, + "created_by": 1088, + "updated_at": 1323419826000, + "updated_by": 1088, + "published_at": 1323419826000, + "published_by": 1088 + }, + { + "id": 585, + "title": "28 tips på hur du kan stödja fler steg av dina kunders köpprocess 2011", + "slug": "28-tips-pa-hur-du-kan-stodja-fler-steg-av-dina-kunders-kopprocess-2011", + "markdown": "\r\n\r\nÄnda sedan 1995 har företag insett potentialen i att synas och finnas på Internet. I början bara som ett visitkort eller broschyr och senare som sätt att kommunicera sitt varumärke, som komplement till övriga kommunkationskanaler. På senare år har många framgångsrika företag insett möjligheten att använda sin närvaro på Internet till att också göra affärer. De första och mest framgångsrika exemplen är inom områden med en ung och uppkopplad målgrupp med tydligt definierade produkter. T ex elektronik, vitvaror, böcker, cd-skivor, filmer, resor. Men nu är det dags att fler företag inser potentialen att använda teknikens möjligheter för både fler områden men också för fler delar av köpprocessen.\r\n## Sverige har varit moget länge\r\nNumera är nästan alla hushåll i Sveriges uppkopplade och har bra förutsättningar med bra bredband, läsplattor, mobiltelefoner. Det innebär att fler företag har prövat och lyckats flytta sin affär till Internet. Bra exempel på detta är kommuner och myndigheter som gjort fler av sina tjänster tillgängliga dygnet runt och ökar sin kundservice och effektiviserar sin verksamhet på samma gång. Eftersom tekniken blir mer och mer standardiserad och därmed billigare kan numera även mindre företag och organisationer göra sina affärer tillgängliga.\r\n\r\n\r\n## ## Förut var teknik helt frånvarande i köpprocessenVarumärkesbyggande – TV/Radioreklam, annonsering, direktutskick, billboards, rekommendationer och säljareBeslutsunderlag – Kundtjänst, broschyrer, rådgivning i butik och telefonförsäljningKonkurrentanalys – Fråga vänner och familj, tidningar, undersökningar och konsumenttesterBeslut – Postorder, köp i butik, telefonförsäljningRationalisera & bekräfta – Förklara sitt beslut för sin omgivning, visa fakta via broschyrerLeverans – Hämta i butik, frakt mot avgift, postUppföljning och merförsäljning – brev, telefonkontakt, reklamRelationsbyggande – Återkommande besök/möten med kunder## ## Idag är teknik ofta involverad i flera eller alla delar av en köpprocess:Varumärkesbyggande – sociala medier, banners, Adwords och nyhetsbrev, QR koder i offline annonserBeslutsunderlag – information på hemsida, wikipedia, nyhetsbrev, prissajter, mobilsajter.Konkurrentanalys – Googla sökord, prisjämförelser, testsajter, fråga på sociala nätverk, kommentarer på sajterBeslut – Ehandel, köp i butik, telefonförsäljningRationalisera & bekräfta – Förklara sitt beslut för sin omgivning. Skicka länk/fakta via mail, mobil eller sociala medierLeverans – Digital leveransplats, nedladdning av filer, tillgång till tjänster/upplevelser, tillgång till verktyg och självhjälpUppföljning och merförsäljning – epost, SMS,  sociala medier, Mina Sidor, FacebookRelationsbyggande – sociala medier, personifierade nyhetsbrev## ## Mobil explosion ökar behovet av mobil tillgång till produktinformation\r\n87% av alla svenskar 2011 anger att de använder Internet till att söka fakta och produktinformation.  72% använder internet för att göra prisjämförelser, 78% för att köpa och betala varor. Över hälften använder sociala nätverk. 42% av alla i åldern 16-35 surfar mobilt dagligen 2011 vilket kan jämföras med 7-3% året innan. Hur kommer 2012 se ut?\r\n\r\n\r\nKälla: IIS 2011\r\n## Kombinera traditionell och digital marknadsföring\r\nDe företag som lyckas bäst med att stödja köpprocessen kombinerar både på traditionell marknadsföring och kompletterar med tekniska stöd. När vissa steg av köprocessen automatiseras upplever kunder det som ökad kundservice. T ex i steg 6 – uppföljning och merförsäljning. Om kunderna kan följa upp ordrar, lägga tilläggsbeställningar på ett enkelt sätt dygnet runt blir man glad. Om man däremot tar bort manuella steg och hänvisar till webben som enda alternativ har man missat poängen. \r\n\r\nVarje steg i köpprocessen måste hanteras varsamt och när dina kunder börjar kommunicera med dig digitalt vill de självklart ha möjlighet att fortsätta sin köprocess digitalt men du får inte glömma bort att det är precis samma kund som du annars hade pratat med i telefon och du måste lyckas med konststycket att sälja till kunden med precis samma erfarenhet som du idag skickligt säljer offline men nu ska det ske digitalt. Det innebär en varsam omstöpning till att hela den försäljningstaktik och de lärdomar om dina kunder du har lyckats ta fram ska omvandlas till information och tekniska hjälpmedel på din webbplats.\r\n## Mycket kvar att göra\r\nVissa grupper av företag har fortfarande långt kvar i sin digitala användning i köpprocessen. De flesta mindre företagen har bara ett visitkort som hemsida (t ex advokater, konsulter, tillverkningsindustri, tidningar, hantverkare, restauranger, föreningar, butiker). Många större varumärken ser fortfarande bara webben som ett av många sätt att bygga sitt varumärke och missar möjligheterna att stödja fler av köpprocessens steg. \r\n## Tekniken viktigare och viktigare\r\nI takt med att fler och fler har tillgång till och faktiskt använder sig av teknik i kombination med att tekniken numera är en viktig del av flera av köpprocessens steg blir det viktigare och viktigare för företag att se till att de tekniska lösningarna faktiskt fungerar och levererar för att inte bara underlätta för sina kunder utan också för att inte riskera att tappa köp då kunder fastnar i krånglig teknik eller bristande information/kommunikation.\r\n\r\nHär är några konkreta tips för hur du kan använda teknik för att stödja dina kunders köpprocess:\r\nSe tekniken som en möjlighet att lägga mer tid åt att vårda dina kunder inte som ett alternativ till det.Använd en CMS produkt på din hemsida så att du enkelt kan uppdatera den när du ser att informationen är inkorrekt eller inaktuell.Gör en mobilanpassad webb, menDon’t overdo it. Testa din webbplats i en mobil och se till att inte Flash krävs på viktiga ställen och att navigationen går att använda. Att göra för stor förändring från din vanliga webbplats mot din mobila webbplats ska man vara försiktig med för ofta behöver dina kunder hitta tillbaka till samma ställe där de tidigare hittat en information som del av beslutsprocessen i steg 4-5. Dessutom läser många mailen i mobilen när man har fått tips från någon och då vill man se sidan som den såg ut när avsändaren tryckte på skicka.Integration. Se till att det inte krävs manuella handgrepp för att få din hemsida uppdaterad med sådant som användarna behöver i sin köpprocess. Dvs lagersaldo, prisinformation, marknadskampanjer och rabatter. Gör det möjligt att lägga ordrar eller följa upp ordrar direkt via webbplatsen. Integrera också med CRM / säljsystem så att du kan följa dina kunders besök på hemsidan och lära dig mer om deras behov innan de ringer och även för att kunna ringa upp dem om de inte ringer.Respektera dina kunders tid. Gör inte beställningsformulär där de behöver fylla i information som du redan känner till och kräv inte att dom ska komma ihåg speciella lösenord för just din sajt, de beställer så sällan att de kommer ha glömt deras lösenord nästa gång. Använd andra lösningar som t ex inloggning via Facebook konto eller LinkedIn. Tänk också på att göra din webbplats snabb att ladda! Det är en konst att skapa optimerade lösningar och det är många faktorer inblandade. Mät och optimera och lasttesta.  Mer än hälften avbryter ett köp om det tar för lång tid eller är för krångligt. Om en sida laddar under en halv sekund upplever man inte att det tar någon tid. Tar en sida mer än två sekunder upplevs den som långsam. Motsvarande värde år 2001 var åtta  sekunder så här kan vi förvänta oss att vi blir mer och mer otåliga.Lyssna på dina kunder, fråga dem vad som inte funkar och vad du kan förbättra för att dom lättare ska kunna göra affärer med dig. Använd verktyg för att fånga upp kunders feedback direkt på sajten. Använd t ex kundo.se som har ett bra kundservicetillägg där du enkelt kan besvara dina kunders frågor direkt på din sajt.Bli närvarande i din virtuella affär. Om du driver en fysisk butik kan du lätt ställa dig i bakgrunden och följa dina kunders beteende, du kan också gå fram till kunderna och fråga när du ser ut dom verkar att ha fastnat och behöver hjälp. I din virtuella butik är det inte lika enkelt men det går. Google Analytics har numera realtidsinformation vilket gör att du kan följa dina kunder genom din affär och se vart dom just nu befinner sig. Det ger en bra indikation. Det finns även andra bra verktyg som t ex WhosOn kan du förutom att följa dina besökare även kan börja chatta med dina besökare. Installera även tillägget Clicky och Clicky Notifier som gör att du får notifieringar när du får nya besökare. Allt för att du ska bli mer närvarande i din affär:Ha tålamod. Det tar tid att få ny teknik att fungera, att få dina kunder att förstå dina nya sätt att göra affärer och för kunderna att våga byta sitt mönster. Var heller inte rädd för att du kommer bli överöst av kommentarer, ordrar och klagande kunder. Det är oftast tyst i forum, orderböcker och kommentarer. Tänk att det är som ett dansgolv på mellanstadiet, kunderna vågar först dansa när nån annan har börjat så försök få dina trognaste kunder att börja och be dina medarbetare att skriva frågor dom får ofta.Våga fullfölja. Om du har börjat satsa på en egen facebooksida eller öppnat ett forum för dina produkter. Lägg inte ner för att det tar för mycket tid för dig att engagera eller svara på kommentarer. Satsa istället ännu mer och avvakta och se att din försäljning successivt kommer att öka. När du fått igång dina kunder kommer du dels få en ovärdelig källa till dubbelriktad kommunikation och dels få stor synlighet på Google eftersom dina kunders frågor är formulerade med samma sökord dina kunder söker på.Lämna aldrig kommentarer obesvarade, försök få till så att du blir notifierad när det kommer nya kommentarer så att du kan vara snabb med att svara. Använd gratisplugins som t ex Disqus som gör det enkelt att lägga in kommentarer och även för dig att ta bort olämpliga kommentarer och för andra att anmäla olämpliga kommentarer.Tänk mer än ehandel. Även om du inte aktivt säljer på nätet kan du fundera på hur tekniska hjälpmedel kan öka din försäljning. Om du till exempel driver en advokatfirma kan dina klienter få en egen filarea på din webbplats där de kan logga in och hitta sina leveranser, avtal, orderbekräftelser, tidredovisningsunderlag, tariffer för olika tjänster men också som verktyg för att samarbeta kring olika handlingar. Har du en serviceverkstad kan du låta dina kunder söka i din databas över tidigare kostnader för liknande skador eller beställa hämtning av serviceobjekt.Bygg på stabila plattformar. Teknikens utveckling går fort och det är svårt att välja rätt teknik men se till att välja en plattform och en leverantör som kan leverera kvalitet. Om du ska flytta ut din affär måste du göra det helhjärtat. Välj en teknisk lösning som många känner till och titta på vad konkurrenterna använder, det ökar möjligheterna att du kan leva vidare i plattformen i många år. Undvik för enkla standardlösningar, de är oftast bra för att testa och lära sig men är du seriös ska du ha tillräcklig kontroll för att kunna specialanpassa efter dina egna behov.Byt inte bara design. 70% av alla företag som bygger ny hemsida gör det för att de tröttnat på den gamla designen. Om du ransakar dig själv finns det säkerligen andra delar på din webbplats som ger ökad försäljning än att byta designen.Bygg APIer – många företag kan samarbeta väldigt integrerat med sina leverantörer och kunder om man gör det möjligt för dessa att använda dina tjänster via automatiska gränssnitt, dvs API. Ett API kan t ex göra det möjligt för dina kunder att hämta aktivt lagersaldo för en viss vara och därmed göra det möjligt att i sina egna beställningssystem bygga in ditt lagersaldo och därmed blir du premierad i valet av leverantörer. Tänk också på att exponera dina API:erGör det möjligt att skryta om dina produkter och tjänster. Detta används både när dina kunder vill veta mer om en produkt och frågar sina vänner eller kollegor om information (steg 2-3) och efter att ett köp är genomfört för att bekräfta och rationalisera sitt köp (steg 5).  Detta både produkter så som cyklar och tvättmaskiner men också för tjänster som t ex resor, hotell, konsulter.Tänk på i vilket steg av sin köpprocess som kunden ska använda tekniken och det blir mycket lättare att fokusera utformningen till ändamålet. Till exempel är det ointressant att visa kampanjer på beställningssidan. Då är det enda du vill att din kund ska trycka på beställ och gå vidare i köpprocessen, inte börja om från början med ett annat erbjudande.Glöm inte bort merförsäljningen. När du har inlett en relation med en kund på nätet ska du behandla den på samma sätt som om den precis hade varit i din butik och köpt en vara. Försök få kontakt med din kund och kolla att han eller hon är nöjd med sitt köp, det ger dig en möjlighet att fånga in värdefull information om hur din affär upplevs men är också en start på ett relationsbyggande som kan fortgå många år efter ett köp.Analysera dina kunders köpmönster. Din försäljningsdatabas sitter på mycket intressanta samband som du kan fiska fram med lite klurigt funderande. Om du letar lite kanske du kan mäta hur lång tid en genomsnittlig fullständig köpprocess tar. Oftast genomgår dina potentiella kunder alla steg enligt ovan och det kan ibland ta flera månader. Om du analyserar köpmönstret kan du hitta sätt att snabba upp processen, t ex skicka ett litet nyhetsbrev till de kunder som har varit inne på dina beslutsunderlagssidor men ännu inte kommit till ett beslut.Använd QR koder som brygga från offline-medier så som annonser, broschyrer, tv-reklam till din mobila webbplats. Tänk bara på att dina besökare kommer använda mobilen när de scannat din QR kod vilket gör att du bör anpassa sidan till att fungera på en mobil skärm. Tänk också på att besökaren redan läst din annons och har därmed passerat steg 1 och är köpsugen så ta honom/henne inte till en varumärkesbyggande sida utan presentera information och verktyg som hjälper kunden att bestämma sig och beställa.Använd QR koder på fler sätt än bara länka till information. Till exempel kan du använda QR koder som möjligt sätt att betala eller beställa tjänster. Om du driver en personalmatsal eller lunchrestauran kan du till exempel använda QR koder för att låta dina stamgäster betala eller till och med beställa. Om du driver en pizzeria kan du trycka QR koder på din hämtmatsedel och ta in dina beställningar elektroniskt via mobilen. Om du har en mobilapp kan du enkelt länka till mobilappen med en QR kod.Skicka nyhetsbrev. Samla upp frågor från dina forum, visa populära eller nya produkter/tjänster. Ta upp aktuella händelser och knyt an till dessa händelser. Våga vara personlig och inkludera erbjudande och uppmuntra till att skicka vidare nyhetsbrevet till kollegor och vänner. Skicka inte för ofta och gör det enkelt att avregistrera sig. Läs även vad vitidigare skrivit om nyhetsbrev.Mät effekten. Om du är seriös i din satsning på att öka din försäljning bör du även mäta hur stor effekt du får av dina satsningar. Det finns många sätt men enklast är att analysera dina användare via Google Analytics. Definiera olika mål och vägar genom din webbplats och fundera på hur du enklast kan se hur många som lyckas hitta till dina målsidor. Även om du inte säljer något på din sajt kan du ändå ha vissa sidor som är mer värda för dig att dina kunder besöker. Till exempel är din Kontakta Oss sida en bättre slutsida än att de slutar på ”våra konkurrenter”. (Det finns dock vissa som hävdar att försäljningen ökar när man vågar visa en lista på sina konkurrenter.) Mätvärdena gör du om till omvandlingsfrekvens (conversion rate) och mäter därefter effekten av olika förändringar med hjälp av detta.Använd principen att 50% av alla dina besökare försvinner för varje moment som de tvingas gå igenom från att de bestämt sig till att de genomfört sitt köp. Ta bort onödiga steg, kräv inte kunderna på uppgifter de inte har i huvudet. Erbjud olika betalningsalternativ varav ett är faktura eftersom de har alla uppgifter i huvudet.Avsluta inte med en besvikelse. Om kunden har tagit sig tid att genomgå alla steg i sin köpprocess och till slut ska trycka på den magiska beställknappen vill du inte avsluta med att berätta att frakt/service/fakturaavgiften tillkommer. Eller att momsen inte ingår. Eller att varan inte finns i lager. Eller att tjänsten inte finns tillgänglig i just det landet som kunden befinner sig. Om man presenterar dåliga nyheter tidigt i köpproccessen kan kunden välja att gå vidare men kommer nyheten när de redan har bestämt sig kommer många hoppa av och börja om köpproccessen hos någon av dina konkurrenter. Gratis frakt är ett väldigt bra försäljningsknep av den anledningen.Lär dig av dina konkurrenter. Du behöver inte alltid hitta på allt själv, dina konkurrenter har säkert en hel del tips på vilken teknik man kan använda och framför allt hur man inte bör göra.Sökmotoroptimera. Försök identifiera de nyckelord dina kunder använder. Tänk inte på vad dina produkter eller tjänster heter utan försök tänka mer generellt. Använd Google som inspiration. Börja skriva ett ord och se vad google föreslår. De förslag Google visar upp är sådant som många söker på, det betyder att du ska ha just dessa kombinationer av ord på din sajt. T ex kanske du säljer ballongresor. Uppenbarligen kommer du skriva ballongresor många gånger på din sajt så det behöver du inte oroa dig för men det kanske inte är vad dina kunder först söker på. Testa att skriva upplevelser i google så ser det ut som nedan. Om du nu har en sida på din sajt som heter Upplevelser för Två i Stockholm kommer din sida vara en av de få som får träff på både de mest populära sökningarna ”Upplevelser för två” och ”Upplevelser i Stockholm”. Går du sen vidare och skriver ”Upplevelser för två” kommer du se att de mest populära orterna är Malmö och Stockholm.Använd teknik men gör denDead simple att använda! Tänk på normalfördelningskurvan. Om du har många potentiella kunder kommer de fördela sig som normalfördelningskurvan vilket innebär att om du gör dina tekniska lösningar så krångliga att man måste vara en early adopter för att sig igenom din köpprocess kommer du aldrig få mer än 13,5% av marknaden. Läs mer om Early adopters på wikipedia## Och till sist...\r\n28.  Tänk som en gädda. Min pappa brukar använda detta dåliga tips när vi fiskar och jag kan inte säga att det hjälpt mig speciellt mycket i fisket men jag tror på principen. Principen är att sätta in sig i just en kunds tankar och locka med rätt typ av bete precis framför nosen som gör att han tar nästa steg/bett ;)\r\n\r\nSlutligen en excellent summering av Svenskarna och Internet framtagen förIIS av illustratören Martin Ander\r\n\r\n\r\n\r\nTänk att det finns fler datorer per hushåll än människor.\r\n\r\n![Bild](http://tekniken.nu/uploads/634625871786583057-image006.png@01CCD18F.E5D17620__image006.png)", + "html": "

    Ända sedan 1995 har företag insett potentialen i att synas och finnas på Internet. I början bara som ett visitkort eller broschyr och senare som sätt att kommunicera sitt varumärke, som komplement till övriga kommunkationskanaler. På senare år har många framgångsrika företag insett möjligheten att använda sin närvaro på Internet till att också göra affärer. De första och mest framgångsrika exemplen är inom områden med en ung och uppkopplad målgrupp med tydligt definierade produkter. T ex elektronik, vitvaror, böcker, cd-skivor, filmer, resor. Men nu är det dags att fler företag inser potentialen att använda teknikens möjligheter för både fler områden men också för fler delar av köpprocessen.

    Sverige har varit moget länge

    Numera är nästan alla hushåll i Sveriges uppkopplade och har bra förutsättningar med bra bredband, läsplattor, mobiltelefoner. Det innebär att fler företag har prövat och lyckats flytta sin affär till Internet. Bra exempel på detta är kommuner och myndigheter som gjort fler av sina tjänster tillgängliga dygnet runt och ökar sin kundservice och effektiviserar sin verksamhet på samma gång. Eftersom tekniken blir mer och mer standardiserad och därmed billigare kan numera även mindre företag och organisationer göra sina affärer tillgängliga.



    Förut var teknik helt frånvarande i köpprocessen

    1. Varumärkesbyggande – TV/Radioreklam, annonsering, direktutskick, billboards, rekommendationer och säljare
    2. Beslutsunderlag – Kundtjänst, broschyrer, rådgivning i butik och telefonförsäljning
    3. Konkurrentanalys – Fråga vänner och familj, tidningar, undersökningar och konsumenttester
    4. Beslut – Postorder, köp i butik, telefonförsäljning
    5. Rationalisera & bekräfta – Förklara sitt beslut för sin omgivning, visa fakta via broschyrer
    6. Leverans – Hämta i butik, frakt mot avgift, post
    7. Uppföljning och merförsäljning – brev, telefonkontakt, reklam
    8. Relationsbyggande – Återkommande besök/möten med kunder


    Idag är teknik ofta involverad i flera eller alla delar av en köpprocess:

    1. Varumärkesbyggande – sociala medier, banners, Adwords och nyhetsbrev, QR koder i offline annonser
    2. Beslutsunderlag – information på hemsida, wikipedia, nyhetsbrev, prissajter, mobilsajter.
    3. Konkurrentanalys – Googla sökord, prisjämförelser, testsajter, fråga på sociala nätverk, kommentarer på sajter
    4. Beslut – Ehandel, köp i butik, telefonförsäljning
    5. Rationalisera & bekräfta – Förklara sitt beslut för sin omgivning. Skicka länk/fakta via mail, mobil eller sociala medier
    6. Leverans – Digital leveransplats, nedladdning av filer, tillgång till tjänster/upplevelser, tillgång till verktyg och självhjälp
    7. Uppföljning och merförsäljning – epost, SMS,  sociala medier, Mina Sidor, Facebook
    8. Relationsbyggande – sociala medier, personifierade nyhetsbrev


    Mobil explosion ökar behovet av mobil tillgång till produktinformation

    87% av alla svenskar 2011 anger att de använder Internet till att söka fakta och produktinformation.  72% använder internet för att göra prisjämförelser, 78% för att köpa och betala varor. Över hälften använder sociala nätverk. 42% av alla i åldern 16-35 surfar mobilt dagligen 2011 vilket kan jämföras med 7-3% året innan. Hur kommer 2012 se ut?



    Källa: IIS 2011

    Kombinera traditionell och digital marknadsföring

    De företag som lyckas bäst med att stödja köpprocessen kombinerar både på traditionell marknadsföring och kompletterar med tekniska stöd. När vissa steg av köprocessen automatiseras upplever kunder det som ökad kundservice. T ex i steg 6 – uppföljning och merförsäljning. Om kunderna kan följa upp ordrar, lägga tilläggsbeställningar på ett enkelt sätt dygnet runt blir man glad. Om man däremot tar bort manuella steg och hänvisar till webben som enda alternativ har man missat poängen.

    Varje steg i köpprocessen måste hanteras varsamt och när dina kunder börjar kommunicera med dig digitalt vill de självklart ha möjlighet att fortsätta sin köprocess digitalt men du får inte glömma bort att det är precis samma kund som du annars hade pratat med i telefon och du måste lyckas med konststycket att sälja till kunden med precis samma erfarenhet som du idag skickligt säljer offline men nu ska det ske digitalt. Det innebär en varsam omstöpning till att hela den försäljningstaktik och de lärdomar om dina kunder du har lyckats ta fram ska omvandlas till information och tekniska hjälpmedel på din webbplats.

    Mycket kvar att göra

    Vissa grupper av företag har fortfarande långt kvar i sin digitala användning i köpprocessen. De flesta mindre företagen har bara ett visitkort som hemsida (t ex advokater, konsulter, tillverkningsindustri, tidningar, hantverkare, restauranger, föreningar, butiker). Många större varumärken ser fortfarande bara webben som ett av många sätt att bygga sitt varumärke och missar möjligheterna att stödja fler av köpprocessens steg.

    Tekniken viktigare och viktigare

    I takt med att fler och fler har tillgång till och faktiskt använder sig av teknik i kombination med att tekniken numera är en viktig del av flera av köpprocessens steg blir det viktigare och viktigare för företag att se till att de tekniska lösningarna faktiskt fungerar och levererar för att inte bara underlätta för sina kunder utan också för att inte riskera att tappa köp då kunder fastnar i krånglig teknik eller bristande information/kommunikation.

    Här är några konkreta tips för hur du kan använda teknik för att stödja dina kunders köpprocess:

    1. Se tekniken som en möjlighet att lägga mer tid åt att vårda dina kunder inte som ett alternativ till det.
    2. Använd en CMS produkt på din hemsida så att du enkelt kan uppdatera den när du ser att informationen är inkorrekt eller inaktuell.
    3. Gör en mobilanpassad webb, menDon’t overdo it. Testa din webbplats i en mobil och se till att inte Flash krävs på viktiga ställen och att navigationen går att använda. Att göra för stor förändring från din vanliga webbplats mot din mobila webbplats ska man vara försiktig med för ofta behöver dina kunder hitta tillbaka till samma ställe där de tidigare hittat en information som del av beslutsprocessen i steg 4-5. Dessutom läser många mailen i mobilen när man har fått tips från någon och då vill man se sidan som den såg ut när avsändaren tryckte på skicka.
    4. Integration. Se till att det inte krävs manuella handgrepp för att få din hemsida uppdaterad med sådant som användarna behöver i sin köpprocess. Dvs lagersaldo, prisinformation, marknadskampanjer och rabatter. Gör det möjligt att lägga ordrar eller följa upp ordrar direkt via webbplatsen. Integrera också med CRM / säljsystem så att du kan följa dina kunders besök på hemsidan och lära dig mer om deras behov innan de ringer och även för att kunna ringa upp dem om de inte ringer.
    5. Respektera dina kunders tid. Gör inte beställningsformulär där de behöver fylla i information som du redan känner till och kräv inte att dom ska komma ihåg speciella lösenord för just din sajt, de beställer så sällan att de kommer ha glömt deras lösenord nästa gång. Använd andra lösningar som t ex inloggning via Facebook konto eller LinkedIn. Tänk också på att göra din webbplats snabb att ladda! Det är en konst att skapa optimerade lösningar och det är många faktorer inblandade. Mät och optimera och lasttesta.  Mer än hälften avbryter ett köp om det tar för lång tid eller är för krångligt. Om en sida laddar under en halv sekund upplever man inte att det tar någon tid. Tar en sida mer än två sekunder upplevs den som långsam. Motsvarande värde år 2001 var åtta  sekunder så här kan vi förvänta oss att vi blir mer och mer otåliga.
    6. Lyssna på dina kunder, fråga dem vad som inte funkar och vad du kan förbättra för att dom lättare ska kunna göra affärer med dig. Använd verktyg för att fånga upp kunders feedback direkt på sajten. Använd t ex kundo.se som har ett bra kundservicetillägg där du enkelt kan besvara dina kunders frågor direkt på din sajt.
    7. Bli närvarande i din virtuella affär. Om du driver en fysisk butik kan du lätt ställa dig i bakgrunden och följa dina kunders beteende, du kan också gå fram till kunderna och fråga när du ser ut dom verkar att ha fastnat och behöver hjälp. I din virtuella butik är det inte lika enkelt men det går. Google Analytics har numera realtidsinformation vilket gör att du kan följa dina kunder genom din affär och se vart dom just nu befinner sig. Det ger en bra indikation. Det finns även andra bra verktyg som t ex WhosOn kan du förutom att följa dina besökare även kan börja chatta med dina besökare. Installera även tillägget Clicky och Clicky Notifier som gör att du får notifieringar när du får nya besökare. Allt för att du ska bli mer närvarande i din affär:
    8. Ha tålamod. Det tar tid att få ny teknik att fungera, att få dina kunder att förstå dina nya sätt att göra affärer och för kunderna att våga byta sitt mönster. Var heller inte rädd för att du kommer bli överöst av kommentarer, ordrar och klagande kunder. Det är oftast tyst i forum, orderböcker och kommentarer. Tänk att det är som ett dansgolv på mellanstadiet, kunderna vågar först dansa när nån annan har börjat så försök få dina trognaste kunder att börja och be dina medarbetare att skriva frågor dom får ofta.
    9. Våga fullfölja. Om du har börjat satsa på en egen facebooksida eller öppnat ett forum för dina produkter. Lägg inte ner för att det tar för mycket tid för dig att engagera eller svara på kommentarer. Satsa istället ännu mer och avvakta och se att din försäljning successivt kommer att öka. När du fått igång dina kunder kommer du dels få en ovärdelig källa till dubbelriktad kommunikation och dels få stor synlighet på Google eftersom dina kunders frågor är formulerade med samma sökord dina kunder söker på.
    10. Lämna aldrig kommentarer obesvarade, försök få till så att du blir notifierad när det kommer nya kommentarer så att du kan vara snabb med att svara. Använd gratisplugins som t ex Disqus som gör det enkelt att lägga in kommentarer och även för dig att ta bort olämpliga kommentarer och för andra att anmäla olämpliga kommentarer.
    11. Tänk mer än ehandel. Även om du inte aktivt säljer på nätet kan du fundera på hur tekniska hjälpmedel kan öka din försäljning. Om du till exempel driver en advokatfirma kan dina klienter få en egen filarea på din webbplats där de kan logga in och hitta sina leveranser, avtal, orderbekräftelser, tidredovisningsunderlag, tariffer för olika tjänster men också som verktyg för att samarbeta kring olika handlingar. Har du en serviceverkstad kan du låta dina kunder söka i din databas över tidigare kostnader för liknande skador eller beställa hämtning av serviceobjekt.
    12. Bygg på stabila plattformar. Teknikens utveckling går fort och det är svårt att välja rätt teknik men se till att välja en plattform och en leverantör som kan leverera kvalitet. Om du ska flytta ut din affär måste du göra det helhjärtat. Välj en teknisk lösning som många känner till och titta på vad konkurrenterna använder, det ökar möjligheterna att du kan leva vidare i plattformen i många år. Undvik för enkla standardlösningar, de är oftast bra för att testa och lära sig men är du seriös ska du ha tillräcklig kontroll för att kunna specialanpassa efter dina egna behov.
    13. Byt inte bara design. 70% av alla företag som bygger ny hemsida gör det för att de tröttnat på den gamla designen. Om du ransakar dig själv finns det säkerligen andra delar på din webbplats som ger ökad försäljning än att byta designen.
    14. Bygg APIer – många företag kan samarbeta väldigt integrerat med sina leverantörer och kunder om man gör det möjligt för dessa att använda dina tjänster via automatiska gränssnitt, dvs API. Ett API kan t ex göra det möjligt för dina kunder att hämta aktivt lagersaldo för en viss vara och därmed göra det möjligt att i sina egna beställningssystem bygga in ditt lagersaldo och därmed blir du premierad i valet av leverantörer. Tänk också på att exponera dina API:er
    15. Gör det möjligt att skryta om dina produkter och tjänster. Detta används både när dina kunder vill veta mer om en produkt och frågar sina vänner eller kollegor om information (steg 2-3) och efter att ett köp är genomfört för att bekräfta och rationalisera sitt köp (steg 5).  Detta både produkter så som cyklar och tvättmaskiner men också för tjänster som t ex resor, hotell, konsulter.
    16. Tänk på i vilket steg av sin köpprocess som kunden ska använda tekniken och det blir mycket lättare att fokusera utformningen till ändamålet. Till exempel är det ointressant att visa kampanjer på beställningssidan. Då är det enda du vill att din kund ska trycka på beställ och gå vidare i köpprocessen, inte börja om från början med ett annat erbjudande.
    17. Glöm inte bort merförsäljningen. När du har inlett en relation med en kund på nätet ska du behandla den på samma sätt som om den precis hade varit i din butik och köpt en vara. Försök få kontakt med din kund och kolla att han eller hon är nöjd med sitt köp, det ger dig en möjlighet att fånga in värdefull information om hur din affär upplevs men är också en start på ett relationsbyggande som kan fortgå många år efter ett köp.
    18. Analysera dina kunders köpmönster. Din försäljningsdatabas sitter på mycket intressanta samband som du kan fiska fram med lite klurigt funderande. Om du letar lite kanske du kan mäta hur lång tid en genomsnittlig fullständig köpprocess tar. Oftast genomgår dina potentiella kunder alla steg enligt ovan och det kan ibland ta flera månader. Om du analyserar köpmönstret kan du hitta sätt att snabba upp processen, t ex skicka ett litet nyhetsbrev till de kunder som har varit inne på dina beslutsunderlagssidor men ännu inte kommit till ett beslut.
    19. Använd QR koder som brygga från offline-medier så som annonser, broschyrer, tv-reklam till din mobila webbplats. Tänk bara på att dina besökare kommer använda mobilen när de scannat din QR kod vilket gör att du bör anpassa sidan till att fungera på en mobil skärm. Tänk också på att besökaren redan läst din annons och har därmed passerat steg 1 och är köpsugen så ta honom/henne inte till en varumärkesbyggande sida utan presentera information och verktyg som hjälper kunden att bestämma sig och beställa.
    20. Använd QR koder på fler sätt än bara länka till information. Till exempel kan du använda QR koder som möjligt sätt att betala eller beställa tjänster. Om du driver en personalmatsal eller lunchrestauran kan du till exempel använda QR koder för att låta dina stamgäster betala eller till och med beställa. Om du driver en pizzeria kan du trycka QR koder på din hämtmatsedel och ta in dina beställningar elektroniskt via mobilen. Om du har en mobilapp kan du enkelt länka till mobilappen med en QR kod.
    21. Skicka nyhetsbrev. Samla upp frågor från dina forum, visa populära eller nya produkter/tjänster. Ta upp aktuella händelser och knyt an till dessa händelser. Våga vara personlig och inkludera erbjudande och uppmuntra till att skicka vidare nyhetsbrevet till kollegor och vänner. Skicka inte för ofta och gör det enkelt att avregistrera sig. Läs även vad vitidigare skrivit om nyhetsbrev.
    22. Mät effekten. Om du är seriös i din satsning på att öka din försäljning bör du även mäta hur stor effekt du får av dina satsningar. Det finns många sätt men enklast är att analysera dina användare via Google Analytics. Definiera olika mål och vägar genom din webbplats och fundera på hur du enklast kan se hur många som lyckas hitta till dina målsidor. Även om du inte säljer något på din sajt kan du ändå ha vissa sidor som är mer värda för dig att dina kunder besöker. Till exempel är din Kontakta Oss sida en bättre slutsida än att de slutar på ”våra konkurrenter”. (Det finns dock vissa som hävdar att försäljningen ökar när man vågar visa en lista på sina konkurrenter.) Mätvärdena gör du om till omvandlingsfrekvens (conversion rate) och mäter därefter effekten av olika förändringar med hjälp av detta.
    23. Använd principen att 50% av alla dina besökare försvinner för varje moment som de tvingas gå igenom från att de bestämt sig till att de genomfört sitt köp. Ta bort onödiga steg, kräv inte kunderna på uppgifter de inte har i huvudet. Erbjud olika betalningsalternativ varav ett är faktura eftersom de har alla uppgifter i huvudet.
    24. Avsluta inte med en besvikelse. Om kunden har tagit sig tid att genomgå alla steg i sin köpprocess och till slut ska trycka på den magiska beställknappen vill du inte avsluta med att berätta att frakt/service/fakturaavgiften tillkommer. Eller att momsen inte ingår. Eller att varan inte finns i lager. Eller att tjänsten inte finns tillgänglig i just det landet som kunden befinner sig. Om man presenterar dåliga nyheter tidigt i köpproccessen kan kunden välja att gå vidare men kommer nyheten när de redan har bestämt sig kommer många hoppa av och börja om köpproccessen hos någon av dina konkurrenter. Gratis frakt är ett väldigt bra försäljningsknep av den anledningen.
    25. Lär dig av dina konkurrenter. Du behöver inte alltid hitta på allt själv, dina konkurrenter har säkert en hel del tips på vilken teknik man kan använda och framför allt hur man inte bör göra.
    26. Sökmotoroptimera. Försök identifiera de nyckelord dina kunder använder. Tänk inte på vad dina produkter eller tjänster heter utan försök tänka mer generellt. Använd Google som inspiration. Börja skriva ett ord och se vad google föreslår. De förslag Google visar upp är sådant som många söker på, det betyder att du ska ha just dessa kombinationer av ord på din sajt. T ex kanske du säljer ballongresor. Uppenbarligen kommer du skriva ballongresor många gånger på din sajt så det behöver du inte oroa dig för men det kanske inte är vad dina kunder först söker på. Testa att skriva upplevelser i google så ser det ut som nedan. Om du nu har en sida på din sajt som heter Upplevelser för Två i Stockholm kommer din sida vara en av de få som får träff på både de mest populära sökningarna ”Upplevelser för två” och ”Upplevelser i Stockholm”. Går du sen vidare och skriver ”Upplevelser för två” kommer du se att de mest populära orterna är Malmö och Stockholm.
    27. Använd teknik men gör denDead simple att använda! Tänk på normalfördelningskurvan. Om du har många potentiella kunder kommer de fördela sig som normalfördelningskurvan vilket innebär att om du gör dina tekniska lösningar så krångliga att man måste vara en early adopter för att sig igenom din köpprocess kommer du aldrig få mer än 13,5% av marknaden. Läs mer om Early adopters på wikipedia

    Och till sist...

    28.  Tänk som en gädda. Min pappa brukar använda detta dåliga tips när vi fiskar och jag kan inte säga att det hjälpt mig speciellt mycket i fisket men jag tror på principen. Principen är att sätta in sig i just en kunds tankar och locka med rätt typ av bete precis framför nosen som gör att han tar nästa steg/bett ;)

    Slutligen en excellent summering av Svenskarna och Internet framtagen förIIS av illustratören Martin Ander


    Tänk att det finns fler datorer per hushåll än människor.

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "28 tips på hur du kan stödja fler steg av dina kunders köpprocess 2011", + "meta_description": "", + "author_id": 1087, + "created_at": 1326990376000, + "created_by": 1087, + "updated_at": 1326990376000, + "updated_by": 1087, + "published_at": 1326990376000, + "published_by": 1087 + }, + { + "id": 601, + "title": "En grej till...", + "slug": "en-grej-till", + "markdown": "\r\nLägg till länk till denna sist också: https://twitter.com/#!/Iteam1337/iteam\r\n\r\n- A -\r\n\r\nTvå grymma utvecklare sökes - känner du någon som borde jobba på Sveriges bästa teknikbyrå? \r\n\r\n\r\n\r\nAnders Bornholm -anders.bornholm@iteam.seTegnérgatan 28 - SE-113 59 Stockholm\r\n\r\nOffice: +46 8 26 70 90Mobile: +46 708 62 41 90\r\n![Bild](http://tekniken.nu/uploads/634720665703190457-image001.png@01CD287F.7C229050__image001.png)", + "html": "

    Lägg till länk till denna sist också: https://twitter.com/#!/Iteam1337/iteam

    - A -

    Två grymma utvecklare sökes - känner du någon som borde jobba på Sveriges bästa teknikbyrå?

    Anders Bornholm -anders.bornholm@iteam.se
    Tegnérgatan 28 - SE-113 59 Stockholm

    Office: +46 8 26 70 90
    Mobile: +46 708 62 41 90", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "En grej till...", + "meta_description": null, + "author_id": 6, + "created_at": 1336469768000, + "created_by": 6, + "updated_at": 1336469768000, + "updated_by": 6, + "published_at": 1336469768000, + "published_by": 6 + }, + { + "id": 602, + "title": "5 grymma Twitter-verktyg", + "slug": "5-grymma-twitter-verktyg", + "markdown": "\r\n\r\nFör att göra livet på Twitter lite mer effektivt så finns det allsköns siter och verktyg för att twittra och hålla koll på följare. Här är en lista på de grejer som jag använder:\r\n## Twitterklient\r\nJag använder Tweetdeck för att den har (i mitt tycke) bästa hanteringen av flera Twitterkonton och olika listor i kolumner. Desktop-varianten av Tweetdeck är byggd med Adobe Air och är ganska jobbig, men iPhone-appen och Tweetdeck-extension till Chrome är riktigt bra.\r\n## Hantera följare\r\nEtt lätt sätt att snabbare få fler följare är att släppa filtret och följa ganska många som någorlunda stämmer med ens intresseprofil och hoppas att de följer en tillbaka. Problemet är att man ganska snabbt får ett ohanterligt flöde och att man slår i första följataket som ligger på 2000 konton. Med hjälp av bara twitter.com eller någon av twitter-klienterna är det nästan omöjligt att gå igenom de man följer för att se vilka som inte följer en tillbaka. Det finns flera verktyg för att hjälpa till med detta. Min absoluta favorit är ManageFlitter. Det är både gratis och har en riktigt bra filtrering av konton. Du kan plocka ut alla som inte följer dig tillbaka, men behålla konton som är populära eller aktiva.\r\n\r\nAtt hålla på att följa mängder med konton och sen avfölja får man använda med måtta dock, annars kan man bli blockerad av Twitter. Min egen tumregel är att aldrig följa konton bara för följandets skull, det måste alltid finnas potential för bra tweets och någon sorts utbyte.\r\n## Hålla koll\r\nStatistiksiter för Twitter finns det 12 på dussinet. Några av mina favoriter är:\r\n\r\nKlout – en sort scoreboard för alla ens sociala medier. Klout har fått ganska mycket skäll för att algoritmen som räknar ut poängen ändras ofta och att ens poängkurva kan bli ganska schizofren. Men på senare tid verkar den ha stabiliserats och nu kan man ändå få en uppfattning av hur man ligger till och vilken effekt det man skriver ger. Tjänsten visar också vilka du har mest kontakt med och som påverkar dig mest bland dina tweeps.\r\n\r\nPeerindex – en konkurrent till Klout som gör ungefär samma sak, men två vyer av samma data är aldrig fel.\r\n\r\nTwopcharts – en gräsligt ful site som kan ta fram alla möjliga spännande listor, bland annat över vilka konton du följde först, dina första tweets, förväntad tid till dess att du når X följare och lite innovativa varianter på ”who to follow”.\r\n\r\nLycka till med ditt Twittrande och glöm inte att följa@Iteam1337!\r\n\r\nMer från Iteam hittar du här: https://twitter.com/#!/Iteam1337/iteam\r\n\r\n![Bild](http://tekniken.nu/uploads/634720665710377957-twitter.png)", + "html": "

    För att göra livet på Twitter lite mer effektivt så finns det allsköns siter och verktyg för att twittra och hålla koll på följare. Här är en lista på de grejer som jag använder:

    Twitterklient

    Jag använder Tweetdeck för att den har (i mitt tycke) bästa hanteringen av flera Twitterkonton och olika listor i kolumner. Desktop-varianten av Tweetdeck är byggd med Adobe Air och är ganska jobbig, men iPhone-appen och Tweetdeck-extension till Chrome är riktigt bra.

    Hantera följare

    Ett lätt sätt att snabbare få fler följare är att släppa filtret och följa ganska många som någorlunda stämmer med ens intresseprofil och hoppas att de följer en tillbaka. Problemet är att man ganska snabbt får ett ohanterligt flöde och att man slår i första följataket som ligger på 2000 konton. Med hjälp av bara twitter.com eller någon av twitter-klienterna är det nästan omöjligt att gå igenom de man följer för att se vilka som inte följer en tillbaka. Det finns flera verktyg för att hjälpa till med detta. Min absoluta favorit är ManageFlitter. Det är både gratis och har en riktigt bra filtrering av konton. Du kan plocka ut alla som inte följer dig tillbaka, men behålla konton som är populära eller aktiva.

    Att hålla på att följa mängder med konton och sen avfölja får man använda med måtta dock, annars kan man bli blockerad av Twitter. Min egen tumregel är att aldrig följa konton bara för följandets skull, det måste alltid finnas potential för bra tweets och någon sorts utbyte.

    Hålla koll

    Statistiksiter för Twitter finns det 12 på dussinet. Några av mina favoriter är:

    Klout – en sort scoreboard för alla ens sociala medier. Klout har fått ganska mycket skäll för att algoritmen som räknar ut poängen ändras ofta och att ens poängkurva kan bli ganska schizofren. Men på senare tid verkar den ha stabiliserats och nu kan man ändå få en uppfattning av hur man ligger till och vilken effekt det man skriver ger. Tjänsten visar också vilka du har mest kontakt med och som påverkar dig mest bland dina tweeps.

    Peerindex – en konkurrent till Klout som gör ungefär samma sak, men två vyer av samma data är aldrig fel.

    Twopcharts – en gräsligt ful site som kan ta fram alla möjliga spännande listor, bland annat över vilka konton du följde först, dina första tweets, förväntad tid till dess att du når X följare och lite innovativa varianter på ”who to follow”.

    Lycka till med ditt Twittrande och glöm inte att följa@Iteam1337!

    Mer från Iteam hittar du här: https://twitter.com/#!/Iteam1337/iteam

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "5 grymma Twitter-verktyg", + "meta_description": "", + "author_id": 6, + "created_at": 1337594460000, + "created_by": 6, + "updated_at": 1337594460000, + "updated_by": 6, + "published_at": 1337594460000, + "published_by": 6 + }, + { + "id": 604, + "title": "Kan jag maila hit?", + "slug": "kan-jag-maila-hit", + "markdown": "\r\nDet vill jag veta.\r\n\r\nTvå grymma utvecklare sökes - känner du någon som borde jobba på Sveriges bästa teknikbyrå? \r\n\r\n\r\n\r\nAnders Bornholm -anders.bornholm@iteam.seTegnérgatan 28 - SE-113 59 Stockholm\r\n\r\nOffice: +46 8 26 70 90Mobile: +46 708 62 41 90\r\n![Bild](http://tekniken.nu/uploads/634720665724284207-image001.png@01CD2872.F1586FA0__image001.png)", + "html": "

    Det vill jag veta.

    Två grymma utvecklare sökes - känner du någon som borde jobba på Sveriges bästa teknikbyrå?

    Anders Bornholm -anders.bornholm@iteam.se
    Tegnérgatan 28 - SE-113 59 Stockholm

    Office: +46 8 26 70 90
    Mobile: +46 708 62 41 90", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Kan jag maila hit?", + "meta_description": null, + "author_id": 6, + "created_at": 1336469771000, + "created_by": 6, + "updated_at": 1336469771000, + "updated_by": 6, + "published_at": 1336469771000, + "published_by": 6 + }, + { + "id": 605, + "title": "RE: test", + "slug": "re-test", + "markdown": "\r\nVad vill du veta? J\r\n\r\nTvå grymma utvecklare sökes - känner du någon som borde jobba på Sveriges bästa teknikbyrå? \r\n\r\n\r\n\r\nJohanna Gustafsson - johanna.gustafsson@iteam.seTegnérgatan 28 - SE-113 59 Stockholm\r\n\r\nOffice: +46 8 26 70 90Mobile: +46 734 02 91 12\r\n\r\nFrom: Rasmus FredrikssonSent: den 2 maj 2012 14:36To: Blogg-NyheterSubject: test\r\n\r\ntest\r\n\r\nTvå grymma utvecklare sökes - känner du någon som borde jobba på Sveriges bästa teknikbyrå? \r\n\r\n\r\n\r\nRasmus Fredriksson - rasmus.fredriksson@iteam.seTegnérgatan 28 - SE-113 59 Stockholm\r\n\r\nOffice: +46 8 26 70 90Mobile: +46 70 37 666 40\r\n![Bild](http://tekniken.nu/uploads/634720665729440457-image001.png@01CD2872.1870C980__image001.png)", + "html": "

    Vad vill du veta? J

    Två grymma utvecklare sökes - känner du någon som borde jobba på Sveriges bästa teknikbyrå?

    Johanna Gustafsson - johanna.gustafsson@iteam.se
    Tegnérgatan 28 - SE-113 59 Stockholm

    Office: +46 8 26 70 90
    Mobile: +46 734 02 91 12

    From: Rasmus Fredriksson
    Sent: den 2 maj 2012 14:36
    To: Blogg-Nyheter
    Subject: test

    test

    Två grymma utvecklare sökes - känner du någon som borde jobba på Sveriges bästa teknikbyrå?

    Rasmus Fredriksson - rasmus.fredriksson@iteam.se
    Tegnérgatan 28 - SE-113 59 Stockholm

    Office: +46 8 26 70 90
    Mobile: +46 70 37 666 40", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "RE: test", + "meta_description": null, + "author_id": 1093, + "created_at": 1336469772000, + "created_by": 1093, + "updated_at": 1336469772000, + "updated_by": 1093, + "published_at": 1336469772000, + "published_by": 1093 + }, + { + "id": 606, + "title": "test", + "slug": "test", + "markdown": "\r\ntest\r\n\r\nTvå grymma utvecklare sökes - känner du någon som borde jobba på Sveriges bästa teknikbyrå? \r\n\r\n\r\n\r\nRasmus Fredriksson - rasmus.fredriksson@iteam.seTegnérgatan 28 - SE-113 59 Stockholm\r\n\r\nOffice: +46 8 26 70 90Mobile: +46 70 37 666 40\r\n![Bild](http://tekniken.nu/uploads/634720665735065457-image001.png@01CD2870.E9C459E0__image001.png)", + "html": "

    test

    Två grymma utvecklare sökes - känner du någon som borde jobba på Sveriges bästa teknikbyrå?

    Rasmus Fredriksson - rasmus.fredriksson@iteam.se
    Tegnérgatan 28 - SE-113 59 Stockholm

    Office: +46 8 26 70 90
    Mobile: +46 70 37 666 40", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "test", + "meta_description": null, + "author_id": 1095, + "created_at": 1336469773000, + "created_by": 1095, + "updated_at": 1336469773000, + "updated_by": 1095, + "published_at": 1336469773000, + "published_by": 1095 + }, + { + "id": 23, + "title": "Nyheter", + "slug": "nyheter", + "markdown": "\r\nSenaste nyheterna", + "html": "

    Senaste nyheterna

    ", + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Nyheter & Trender", + "meta_description": "", + "author_id": 4, + "created_at": 1181663998000, + "created_by": 4, + "updated_at": 1181663998000, + "updated_by": 4, + "published_at": 1181663998000, + "published_by": 4 + }, + { + "id": 25, + "title": "Start", + "slug": "start", + "markdown": null, + "html": null, + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Start", + "meta_description": "", + "author_id": 4, + "created_at": 1181606400000, + "created_by": 4, + "updated_at": 1181606400000, + "updated_by": 4, + "published_at": 1181606400000, + "published_by": 4 + }, + { + "id": 75, + "title": "Om tekniken.nu", + "slug": "om-teknikennu", + "markdown": null, + "html": null, + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": null, + "author_id": 4, + "created_at": 1188777600000, + "created_by": 4, + "updated_at": 1188777600000, + "updated_by": 4, + "published_at": 1188777600000, + "published_by": 4 + }, + { + "id": 152, + "title": "Sök", + "slug": "sok", + "markdown": null, + "html": null, + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": "Sök", + "meta_description": "", + "author_id": 4, + "created_at": 1196899200000, + "created_by": 4, + "updated_at": 1196899200000, + "updated_by": 4, + "published_at": 1196899200000, + "published_by": 4 + }, + { + "id": 237, + "title": "Tag Cloud", + "slug": "tag-cloud", + "markdown": null, + "html": null, + "image": null, + "featured": 0, + "page": 0, + "status": "published", + "language": "sv_SE", + "meta_title": null, + "meta_description": null, + "author_id": 4, + "created_at": 1222688988000, + "created_by": 4, + "updated_at": 1222688988000, + "updated_by": 4, + "published_at": 1222688988000, + "published_by": 4 + } + ], + "tags": [ + { + "id": 0, + "name": "Utveckling", + "slug": "utveckling", + "description": "Utveckling" + }, + { + "id": 1, + "name": "Telnet", + "slug": "telnet", + "description": "Telnet" + }, + { "id": 2, "name": "Vista", "slug": "vista", "description": "Vista" }, + { + "id": 3, + "name": "Tillägg", + "slug": "tillagg", + "description": "Tillägg" + }, + { "id": 4, "name": ".NET", "slug": "net", "description": ".NET" }, + { + "id": 5, + "name": "ASP.NET", + "slug": "aspnet", + "description": "ASP.NET" + }, + { + "id": 6, + "name": "Events", + "slug": "events", + "description": "Events" + }, + { + "id": 7, + "name": "Minneshantering", + "slug": "minneshantering", + "description": "Minneshantering" + }, + { + "id": 8, + "name": "Visual Studio 2008", + "slug": "visual-studio-2008", + "description": "Visual Studio 2008" + }, + { + "id": 9, + "name": ".NET Framework", + "slug": "net-framework", + "description": ".NET Framework" + }, + { "id": 10, "name": "WPF", "slug": "wpf", "description": "WPF" }, + { + "id": 11, + "name": "Filuppladdning", + "slug": "filuppladdning", + "description": "Filuppladdning" + }, + { "id": 12, "name": "MVC", "slug": "mvc", "description": "MVC" }, + { + "id": 13, + "name": "Model-View-Controller", + "slug": "model-view-controller", + "description": "Model-View-Controller" + }, + { + "id": 14, + "name": "Microsoft", + "slug": "microsoft", + "description": "Microsoft" + }, + { "id": 15, "name": "AJAX", "slug": "ajax", "description": "AJAX" }, + { + "id": 16, + "name": "AjaxPro", + "slug": "ajaxpro", + "description": "AjaxPro" + }, + { "id": 17, "name": "C#", "slug": "c", "description": "C#" }, + { + "id": 18, + "name": "Javascript", + "slug": "javascript", + "description": "Javascript" + }, + { + "id": 19, + "name": "Prestanda", + "slug": "prestanda", + "description": "Prestanda" + }, + { + "id": 20, + "name": "Webb 2.0", + "slug": "webb-20", + "description": "Webb 2.0" + }, + { + "id": 21, + "name": "RedDot", + "slug": "reddot", + "description": "RedDot" + }, + { + "id": 22, + "name": "EPiServer", + "slug": "episerver", + "description": "EPiServer" + }, + { "id": 23, "name": "CMS", "slug": "cms", "description": "CMS" }, + { + "id": 24, + "name": "Webbpublicering", + "slug": "webbpublicering", + "description": "Webbpublicering" + }, + { + "id": 25, + "name": "Databind", + "slug": "databind", + "description": "Databind" + }, + { "id": 26, "name": "IIS7", "slug": "iis7", "description": "IIS7" }, + { + "id": 27, + "name": "Debuggning", + "slug": "debuggning", + "description": "Debuggning" + }, + { + "id": 28, + "name": "Visual Studio", + "slug": "visual-studio", + "description": "Visual Studio" + }, + { "id": 29, "name": "SVN", "slug": "svn", "description": "SVN" }, + { + "id": 30, + "name": "AnkhSVN", + "slug": "ankhsvn", + "description": "AnkhSVN" + }, + { + "id": 31, + "name": "Utvecklingsverktyg", + "slug": "utvecklingsverktyg", + "description": "Utvecklingsverktyg" + }, + { + "id": 32, + "name": "Stränghantering", + "slug": "stranghantering", + "description": "Stränghantering" + }, + { + "id": 33, + "name": "Regular Expressions", + "slug": "regular-expressions", + "description": "Regular Expressions" + }, + { "id": 34, "name": "CSS", "slug": "css", "description": "CSS" }, + { + "id": 35, + "name": "Sprites", + "slug": "sprites", + "description": "Sprites" + }, + { + "id": 36, + "name": "Optimering", + "slug": "optimering", + "description": "Optimering" + }, + { + "id": 37, + "name": "Bilder", + "slug": "bilder", + "description": "Bilder" + }, + { + "id": 38, + "name": "Bildkartor", + "slug": "bildkartor", + "description": "Bildkartor" + }, + { + "id": 39, + "name": "Exchange", + "slug": "exchange", + "description": "Exchange" + }, + { + "id": 40, + "name": "Exchange 2007", + "slug": "exchange-2007", + "description": "Exchange 2007" + }, + { + "id": 41, + "name": "WebDav", + "slug": "webdav", + "description": "WebDav" + }, + { + "id": 42, + "name": "Web Services", + "slug": "web-services", + "description": "Web Services" + }, + { "id": 43, "name": "LINQ", "slug": "linq", "description": "LINQ" }, + { "id": 44, "name": "SQL", "slug": "sql", "description": "SQL" }, + { "id": 45, "name": "ORM", "slug": "orm", "description": "ORM" }, + { + "id": 46, + "name": "EPiServer CMS 5", + "slug": "episerver-cms-5", + "description": "EPiServer CMS 5" + }, + { + "id": 47, + "name": "Properties", + "slug": "properties", + "description": "Properties" + }, + { + "id": 48, + "name": "Användbarhet", + "slug": "anvandbarhet", + "description": "Användbarhet" + }, + { + "id": 49, + "name": "Gränssnitt", + "slug": "granssnitt", + "description": "Gränssnitt" + }, + { "id": 50, "name": "SOAP", "slug": "soap", "description": "SOAP" }, + { + "id": 51, + "name": "Service Pack", + "slug": "service-pack", + "description": "Service Pack" + }, + { + "id": 52, + "name": "Internet Explorer", + "slug": "internet-explorer", + "description": "Internet Explorer" + }, + { "id": 53, "name": "IE6", "slug": "ie6", "description": "IE6" }, + { + "id": 54, + "name": "Testning", + "slug": "testning", + "description": "Testning" + }, + { + "id": 55, + "name": "IETester", + "slug": "ietester", + "description": "IETester" + }, + { + "id": 56, + "name": "Webbläsare", + "slug": "webblasare", + "description": "Webbläsare" + }, + { + "id": 57, + "name": "Flash", + "slug": "flash", + "description": "Flash" + }, + { "id": 58, "name": "FLV", "slug": "flv", "description": "FLV" }, + { + "id": 59, + "name": "Flashvideo", + "slug": "flashvideo", + "description": "Flashvideo" + }, + { + "id": 60, + "name": "ffmpeg", + "slug": "ffmpeg", + "description": "ffmpeg" + }, + { "id": 61, "name": "HTC", "slug": "htc", "description": "HTC" }, + { "id": 62, "name": "XBL", "slug": "xbl", "description": "XBL" }, + { + "id": 63, + "name": "Google", + "slug": "google", + "description": "Google" + }, + { + "id": 64, + "name": "Google Code", + "slug": "google-code", + "description": "Google Code" + }, + { + "id": 65, + "name": "Nokia", + "slug": "nokia", + "description": "Nokia" + }, + { + "id": 66, + "name": "jQuery", + "slug": "jquery", + "description": "jQuery" + }, + { + "id": 67, + "name": "Källkodshantering", + "slug": "kallkodshantering", + "description": "Källkodshantering" + }, + { + "id": 68, + "name": "Subversion", + "slug": "subversion", + "description": "Subversion" + }, + { + "id": 69, + "name": "SQL Server", + "slug": "sql-server", + "description": "SQL Server" + }, + { + "id": 70, + "name": "Databaser", + "slug": "databaser", + "description": "Databaser" + }, + { + "id": 71, + "name": "Google Maps", + "slug": "google-maps", + "description": "Google Maps" + }, + { + "id": 72, + "name": "Mashups", + "slug": "mashups", + "description": "Mashups" + }, + { + "id": 73, + "name": "Integration", + "slug": "integration", + "description": "Integration" + }, + { + "id": 74, + "name": "VisualSVN", + "slug": "visualsvn", + "description": "VisualSVN" + }, + { + "id": 75, + "name": "Method Extensions", + "slug": "method-extensions", + "description": "Method Extensions" + }, + { + "id": 76, + "name": "Webbutveckling", + "slug": "webbutveckling", + "description": "Webbutveckling" + }, + { "id": 77, "name": "HTML", "slug": "html", "description": "HTML" }, + { + "id": 78, + "name": "Silverlight", + "slug": "silverlight", + "description": "Silverlight" + }, + { + "id": 79, + "name": "Mobiler", + "slug": "mobiler", + "description": "Mobiler" + }, + { + "id": 80, + "name": "Prestandatestning", + "slug": "prestandatestning", + "description": "Prestandatestning" + }, + { + "id": 81, + "name": "Svarstider", + "slug": "svarstider", + "description": "Svarstider" + }, + { + "id": 82, + "name": ".NET 3.5", + "slug": "net-35", + "description": ".NET 3.5" + }, + { "id": 83, "name": "XML", "slug": "xml", "description": "XML" }, + { "id": 84, "name": "API", "slug": "api", "description": "API" }, + { + "id": 85, + "name": "Google Analytics", + "slug": "google-analytics", + "description": "Google Analytics" + }, + { + "id": 86, + "name": "Photoshop", + "slug": "photoshop", + "description": "Photoshop" + }, + { + "id": 87, + "name": "Elements", + "slug": "elements", + "description": "Elements" + }, + { + "id": 88, + "name": "SQL Server 2008", + "slug": "sql-server-2008", + "description": "SQL Server 2008" + }, + { + "id": 89, + "name": "Apple", + "slug": "apple", + "description": "Apple" + }, + { + "id": 90, + "name": "iPhone", + "slug": "iphone", + "description": "iPhone" + }, + { + "id": 91, + "name": "Novell", + "slug": "novell", + "description": "Novell" + }, + { "id": 92, "name": "Mono", "slug": "mono", "description": "Mono" }, + { + "id": 93, + "name": "Intellisense", + "slug": "intellisense", + "description": "Intellisense" + }, + { "id": 94, "name": "WCF", "slug": "wcf", "description": "WCF" }, + { + "id": 95, + "name": "Messenger", + "slug": "messenger", + "description": "Messenger" + }, + { "id": 96, "name": "ICQ", "slug": "icq", "description": "ICQ" }, + { "id": 97, "name": "AIM", "slug": "aim", "description": "AIM" }, + { "id": 98, "name": "IRC", "slug": "irc", "description": "IRC" }, + { "id": 99, "name": "Bot", "slug": "bot", "description": "Bot" }, + { + "id": 100, + "name": "Instant messaging", + "slug": "instant-messaging", + "description": "Instant messaging" + }, + { + "id": 101, + "name": "Webbdesign", + "slug": "webbdesign", + "description": "Webbdesign" + }, + { + "id": 102, + "name": "Användarvänlighet", + "slug": "anvandarvanlighet", + "description": "Användarvänlighet" + }, + { + "id": 103, + "name": "Extension methods", + "slug": "extension-methods", + "description": "Extension methods" + }, + { "id": 104, "name": "IIS", "slug": "iis", "description": "IIS" }, + { + "id": 105, + "name": "web.config", + "slug": "webconfig", + "description": "web.config" + }, + { + "id": 106, + "name": "Team Foundation Server", + "slug": "team-foundation-server", + "description": "Team Foundation Server" + }, + { + "id": 107, + "name": "Säkerhet", + "slug": "sakerhet", + "description": "Säkerhet" + }, + { + "id": 108, + "name": "Virus", + "slug": "virus", + "description": "Virus" + }, + { + "id": 109, + "name": "Buggar", + "slug": "buggar", + "description": "Buggar" + }, + { + "id": 110, + "name": "Skärmdumpar", + "slug": "skarmdumpar", + "description": "Skärmdumpar" + }, + { + "id": 111, + "name": "NUnit", + "slug": "nunit", + "description": "NUnit" + }, + { + "id": 112, + "name": "Tester", + "slug": "tester", + "description": "Tester" + }, + { + "id": 113, + "name": "veckonummer", + "slug": "veckonummer", + "description": "veckonummer" + }, + { "id": 114, "name": "IPv6", "slug": "ipv6", "description": "IPv6" }, + { + "id": 115, + "name": "Routing", + "slug": "routing", + "description": "Routing" + }, + { "id": 116, "name": "REST", "slug": "rest", "description": "REST" }, + { + "id": 117, + "name": "Profile", + "slug": "profile", + "description": "Profile" + }, + { + "id": 118, + "name": "TFS 2010", + "slug": "tfs-2010", + "description": "TFS 2010" + }, + { + "id": 119, + "name": "RegEx", + "slug": "regex", + "description": "RegEx" + }, + { + "id": 120, + "name": "Lambda-uttryck", + "slug": "lambda-uttryck", + "description": "Lambda-uttryck" + }, + { + "id": 121, + "name": "Excel", + "slug": "excel", + "description": "Excel" + }, + { + "id": 122, + "name": "Scrum", + "slug": "scrum", + "description": "Scrum" + }, + { + "id": 123, + "name": "Inloggning", + "slug": "inloggning", + "description": "Inloggning" + }, + { + "id": 124, + "name": "Intranät", + "slug": "intranat", + "description": "Intranät" + }, + { + "id": 125, + "name": "Chrome", + "slug": "chrome", + "description": "Chrome" + }, + { + "id": 126, + "name": "FireFox", + "slug": "firefox", + "description": "FireFox" + }, + { + "id": 127, + "name": "Razor", + "slug": "razor", + "description": "Razor" + }, + { + "id": 128, + "name": "Betaversioner", + "slug": "betaversioner", + "description": "Betaversioner" + }, + { + "id": 129, + "name": "HTML 5", + "slug": "html-5", + "description": "HTML 5" + }, + { + "id": 130, + "name": "Webbprojekt", + "slug": "webbprojekt", + "description": "Webbprojekt" + }, + { "id": 131, "name": "TFS", "slug": "tfs", "description": "TFS" }, + { + "id": 132, + "name": "Placeholder", + "slug": "placeholder", + "description": "Placeholder" + }, + { + "id": 133, + "name": "Användargränssnitt", + "slug": "anvandargranssnitt", + "description": "Användargränssnitt" + }, + { + "id": 134, + "name": "OLEDB", + "slug": "oledb", + "description": "OLEDB" + }, + { + "id": 135, + "name": "Microsft", + "slug": "microsft", + "description": "Microsft" + }, + { + "id": 136, + "name": " EPiServer.Framework", + "slug": "-episerverframework", + "description": " EPiServer.Framework" + }, + { + "id": 137, + "name": " Relate+", + "slug": "-relate", + "description": " Relate+" + }, + { "id": 138, "name": " dll", "slug": "-dll", "description": " dll" }, + { + "id": 139, + "name": "kartor", + "slug": "kartor", + "description": "kartor" + }, + { + "id": 140, + "name": "Bing Maps", + "slug": "bing-maps", + "description": "Bing Maps" + }, + { + "id": 141, + "name": "EPiServer CMS 6", + "slug": "episerver-cms-6", + "description": "EPiServer CMS 6" + }, + { + "id": 142, + "name": "TinyMCE", + "slug": "tinymce", + "description": "TinyMCE" + }, + { + "id": 143, + "name": "språkhantering", + "slug": "sprakhantering", + "description": "språkhantering" + }, + { + "id": 144, + "name": "IIS 7", + "slug": "iis-7", + "description": "IIS 7" + }, + { + "id": 145, + "name": "regiis", + "slug": "regiis", + "description": "regiis" + }, + { + "id": 146, + "name": "ASP.NET 4", + "slug": "aspnet-4", + "description": "ASP.NET 4" + }, + { + "id": 147, + "name": "Classic Mode", + "slug": "classic-mode", + "description": "Classic Mode" + }, + { + "id": 148, + "name": "rollback", + "slug": "rollback", + "description": "rollback" + }, + { + "id": 149, + "name": "undelete", + "slug": "undelete", + "description": "undelete" + }, + { + "id": 150, + "name": "Page properties", + "slug": "page-properties", + "description": "Page properties" + }, + { + "id": 151, + "name": "PageAdapter", + "slug": "pageadapter", + "description": "PageAdapter" + }, + { + "id": 152, + "name": "Molntjänster", + "slug": "molntjanster", + "description": "Molntjänster" + }, + { + "id": 153, + "name": "SQL Azure", + "slug": "sql-azure", + "description": "SQL Azure" + }, + { + "id": 154, + "name": "drift", + "slug": "drift", + "description": "drift" + }, + { + "id": 155, + "name": " ASP.NET", + "slug": "-aspnet", + "description": " ASP.NET" + }, + { "id": 156, "name": "dll", "slug": "dll", "description": "dll" }, + { + "id": 157, + "name": "MSBuild", + "slug": "msbuild", + "description": "MSBuild" + }, + { + "id": 158, + "name": "webbläsartest", + "slug": "webblasartest", + "description": "webbläsartest" + }, + { + "id": 159, + "name": "audio-element", + "slug": "audio-element", + "description": "audio-element" + }, + { + "id": 160, + "name": "browser detection", + "slug": "browser-detection", + "description": "browser detection" + }, + { + "id": 161, + "name": "feature detection", + "slug": "feature-detection", + "description": "feature detection" + }, + { "id": 162, "name": "IE8", "slug": "ie8", "description": "IE8" }, + { "id": 163, "name": "IE7", "slug": "ie7", "description": "IE7" }, + { + "id": 164, + "name": "Forms Authentication", + "slug": "forms-authentication", + "description": "Forms Authentication" + }, + { + "id": 165, + "name": "Windows Server 2008", + "slug": "windows-server-2008", + "description": "Windows Server 2008" + }, + { + "id": 166, + "name": "Cookies", + "slug": "cookies", + "description": "Cookies" + }, + { + "id": 167, + "name": "NoSQL", + "slug": "nosql", + "description": "NoSQL" + }, + { + "id": 168, + "name": "Map/Reduce", + "slug": "mapreduce", + "description": "Map/Reduce" + }, + { + "id": 169, + "name": "relationsdatabas", + "slug": "relationsdatabas", + "description": "relationsdatabas" + }, + { + "id": 170, + "name": "RavenDB", + "slug": "ravendb", + "description": "RavenDB" + }, + { + "id": 171, + "name": "MongoDB", + "slug": "mongodb", + "description": "MongoDB" + }, + { + "id": 172, + "name": "Timer", + "slug": "timer", + "description": "Timer" + }, + { + "id": 173, + "name": "plugin", + "slug": "plugin", + "description": "plugin" + }, + { + "id": 174, + "name": "språk", + "slug": "sprak", + "description": "språk" + }, + { + "id": 175, + "name": "Page Files", + "slug": "page-files", + "description": "Page Files" + }, + { + "id": 176, + "name": "Global Files", + "slug": "global-files", + "description": "Global Files" + }, + { + "id": 177, + "name": "AddThis", + "slug": "addthis", + "description": "AddThis" + }, + { + "id": 178, + "name": "Sociala medier", + "slug": "sociala-medier", + "description": "Sociala medier" + }, + { + "id": 179, + "name": "Facebook", + "slug": "facebook", + "description": "Facebook" + }, + { + "id": 180, + "name": "Twitter", + "slug": "twitter", + "description": "Twitter" + }, + { + "id": 181, + "name": "Visual Studio Test Project", + "slug": "visual-studio-test-project", + "description": "Visual Studio Test Project" + }, + { + "id": 182, + "name": "Test Settings", + "slug": "test-settings", + "description": "Test Settings" + }, + { + "id": 183, + "name": "Output", + "slug": "output", + "description": "Output" + }, + { + "id": 184, + "name": "Deployment", + "slug": "deployment", + "description": "Deployment" + }, + { + "id": 185, + "name": "Synkronisering", + "slug": "synkronisering", + "description": "Synkronisering" + }, + { + "id": 186, + "name": "Bokmärken", + "slug": "bokmarken", + "description": "Bokmärken" + }, + { + "id": 187, + "name": "Extensions", + "slug": "extensions", + "description": "Extensions" + }, + { + "id": 188, + "name": "Inställningar", + "slug": "installningar", + "description": "Inställningar" + }, + { + "id": 189, + "name": "changeset", + "slug": "changeset", + "description": "changeset" + }, + { + "id": 190, + "name": "ASP.NET Routing", + "slug": "aspnet-routing", + "description": "ASP.NET Routing" + }, + { + "id": 191, + "name": "IIS 6", + "slug": "iis-6", + "description": "IIS 6" + }, + { + "id": 192, + "name": "Facebook Share", + "slug": "facebook-share", + "description": "Facebook Share" + }, + { + "id": 193, + "name": "Flickr", + "slug": "flickr", + "description": "Flickr" + }, + { + "id": 194, + "name": "Posten", + "slug": "posten", + "description": "Posten" + }, + { "id": 195, "name": "Json", "slug": "json", "description": "Json" }, + { + "id": 196, + "name": "Paypal", + "slug": "paypal", + "description": "Paypal" + }, + { + "id": 197, + "name": "Google Chrome App", + "slug": "google-chrome-app", + "description": "Google Chrome App" + }, + { + "id": 198, + "name": "Hosted App", + "slug": "hosted-app", + "description": "Hosted App" + }, + { + "id": 199, + "name": "AppStore", + "slug": "appstore", + "description": "AppStore" + }, + { + "id": 200, + "name": "RavenDB Music Store", + "slug": "ravendb-music-store", + "description": "RavenDB Music Store" + }, + { + "id": 201, + "name": "MVC Music Store", + "slug": "mvc-music-store", + "description": "MVC Music Store" + }, + { + "id": 202, + "name": "Ayende Rahien", + "slug": "ayende-rahien", + "description": "Ayende Rahien" + }, + { + "id": 203, + "name": "RemoteEvents", + "slug": "remoteevents", + "description": "RemoteEvents" + }, + { + "id": 204, + "name": "lastbalansering", + "slug": "lastbalansering", + "description": "lastbalansering" + }, + { + "id": 205, + "name": "registrera .net framework", + "slug": "registrera-net-framework", + "description": "registrera .net framework" + }, + { + "id": 206, + "name": " ASP.NET 4.0", + "slug": "-aspnet-40", + "description": " ASP.NET 4.0" + }, + { + "id": 207, + "name": "applikationspoolen", + "slug": "applikationspoolen", + "description": "applikationspoolen" + }, + { + "id": 208, + "name": "MVC 3", + "slug": "mvc-3", + "description": "MVC 3" + }, + { "id": 209, "name": "ASPX", "slug": "aspx", "description": "ASPX" }, + { + "id": 210, + "name": "GitHub", + "slug": "github", + "description": "GitHub" + }, + { + "id": 211, + "name": "RazorConverter", + "slug": "razorconverter", + "description": "RazorConverter" + }, + { + "id": 212, + "name": "MVC 2", + "slug": "mvc-2", + "description": "MVC 2" + }, + { + "id": 213, + "name": " MVC 3", + "slug": "-mvc-3", + "description": " MVC 3" + }, + { + "id": 214, + "name": "nodejs", + "slug": "nodejs", + "description": "nodejs" + }, + { + "id": 215, + "name": " socketio", + "slug": "-socketio", + "description": " socketio" + }, + { + "id": 216, + "name": " iisnode", + "slug": "-iisnode", + "description": " iisnode" + }, + { + "id": 217, + "name": " realtidswebben", + "slug": "-realtidswebben", + "description": " realtidswebben" + }, + { + "id": 218, + "name": "dokumentdatabas", + "slug": "dokumentdatabas", + "description": "dokumentdatabas" + }, + { + "id": 219, + "name": "hyphen", + "slug": "hyphen", + "description": "hyphen" + }, + { + "id": 220, + "name": "branch", + "slug": "branch", + "description": "branch" + }, + { + "id": 221, + "name": "destroy", + "slug": "destroy", + "description": "destroy" + }, + { + "id": 222, + "name": "Nyhetsbrev", + "slug": "nyhetsbrev", + "description": "Nyhetsbrev" + }, + { + "id": 223, + "name": "outlook", + "slug": "outlook", + "description": "outlook" + }, + { + "id": 224, + "name": "EmailOnAcid", + "slug": "emailonacid", + "description": "EmailOnAcid" + }, + { + "id": 225, + "name": "AuthSMTP", + "slug": "authsmtp", + "description": "AuthSMTP" + }, + { + "id": 226, + "name": "EpiServer CMS", + "slug": "episerver-cms", + "description": "EpiServer CMS" + }, + { + "id": 227, + "name": "log4net", + "slug": "log4net", + "description": "log4net" + }, + { + "id": 228, + "name": "NuGet", + "slug": "nuget", + "description": "NuGet" + }, + { + "id": 229, + "name": "AppHarbor", + "slug": "appharbor", + "description": "AppHarbor" + }, + { + "id": 230, + "name": "API Status", + "slug": "api-status", + "description": "API Status" + }, + { + "id": 231, + "name": " Internet Explorer", + "slug": "-internet-explorer", + "description": " Internet Explorer" + }, + { + "id": 232, + "name": "Unminify", + "slug": "unminify", + "description": "Unminify" + }, + { + "id": 233, + "name": "Microsoft TFS", + "slug": "microsoft-tfs", + "description": "Microsoft TFS" + }, + { + "id": 234, + "name": "vNext", + "slug": "vnext", + "description": "vNext" + }, + { + "id": 235, + "name": "Windows Communication Foundation", + "slug": "windows-communication-foundation", + "description": "Windows Communication Foundation" + }, + { + "id": 236, + "name": "felsökning", + "slug": "felsokning", + "description": "felsökning" + }, + { + "id": 237, + "name": "RootPage", + "slug": "rootpage", + "description": "RootPage" + }, + { + "id": 238, + "name": "WasteBasket", + "slug": "wastebasket", + "description": "WasteBasket" + }, + { + "id": 239, + "name": "jsFiddle", + "slug": "jsfiddle", + "description": "jsFiddle" + }, + { + "id": 240, + "name": "onlineeditor", + "slug": "onlineeditor", + "description": "onlineeditor" + }, + { + "id": 241, + "name": "debug", + "slug": "debug", + "description": "debug" + }, + { + "id": 242, + "name": "remote debug", + "slug": "remote-debug", + "description": "remote debug" + }, + { "id": 243, "name": "IE9", "slug": "ie9", "description": "IE9" }, + { + "id": 244, + "name": "IE9 Compatibility Mode", + "slug": "ie9-compatibility-mode", + "description": "IE9 Compatibility Mode" + }, + { + "id": 245, + "name": "IE 9 Quirks Mode", + "slug": "ie-9-quirks-mode", + "description": "IE 9 Quirks Mode" + }, + { + "id": 246, + "name": "Intranet Zone", + "slug": "intranet-zone", + "description": "Intranet Zone" + }, + { + "id": 247, + "name": "unicode", + "slug": "unicode", + "description": "unicode" + }, + { + "id": 248, + "name": "iso-8859-1", + "slug": "iso-8859-1", + "description": "iso-8859-1" + }, + { + "id": 249, + "name": "encoding", + "slug": "encoding", + "description": "encoding" + }, + { "id": 250, "name": "krav", "slug": "krav", "description": "krav" }, + { + "id": 251, + "name": "Devsum", + "slug": "devsum", + "description": "Devsum" + }, + { + "id": 252, + "name": "Responsive design", + "slug": "responsive-design", + "description": "Responsive design" + }, + { + "id": 253, + "name": "closure", + "slug": "closure", + "description": "closure" + }, + { + "id": 254, + "name": "ramverk", + "slug": "ramverk", + "description": "ramverk" + }, + { + "id": 255, + "name": "HTML5", + "slug": "html5", + "description": "HTML5" + }, + { "id": 256, "name": "seo", "slug": "seo", "description": "seo" }, + { + "id": 257, + "name": "verktyg", + "slug": "verktyg", + "description": "verktyg" + }, + { + "id": 258, + "name": "search engine optimization", + "slug": "search-engine-optimization", + "description": "search engine optimization" + }, + { + "id": 259, + "name": "Search Engine Optimization (SEO) Toolkit 1.0", + "slug": "search-engine-optimization-seo-toolkit-10", + "description": "Search Engine Optimization (SEO) Toolkit 1.0" + }, + { + "id": 260, + "name": "web platform", + "slug": "web-platform", + "description": "web platform" + }, + { + "id": 261, + "name": "asynkron programmering", + "slug": "asynkron-programmering", + "description": "asynkron programmering" + }, + { + "id": 262, + "name": "Microsof Async", + "slug": "microsof-async", + "description": "Microsof Async" + }, + { + "id": 263, + "name": "Visual Studio 2012", + "slug": "visual-studio-2012", + "description": "Visual Studio 2012" + }, + { + "id": 264, + "name": "TechNet", + "slug": "technet", + "description": "TechNet" + }, + { + "id": 265, + "name": "Adobe", + "slug": "adobe", + "description": "Adobe" + }, + { + "id": 266, + "name": "Acrobat", + "slug": "acrobat", + "description": "Acrobat" + }, + { "id": 267, "name": "TIFF", "slug": "tiff", "description": "TIFF" }, + { "id": 268, "name": "Fax", "slug": "fax", "description": "Fax" }, + { "id": 269, "name": "SMTP", "slug": "smtp", "description": "SMTP" }, + { + "id": 270, + "name": "Windows", + "slug": "windows", + "description": "Windows" + }, + { + "id": 271, + "name": "Canon", + "slug": "canon", + "description": "Canon" + }, + { + "id": 272, + "name": "Kameror", + "slug": "kameror", + "description": "Kameror" + }, + { "id": 273, "name": "USB", "slug": "usb", "description": "USB" }, + { + "id": 274, + "name": "EOS 300D", + "slug": "eos-300d", + "description": "EOS 300D" + }, + { + "id": 275, + "name": "Windows Server 2003", + "slug": "windows-server-2003", + "description": "Windows Server 2003" + }, + { + "id": 276, + "name": "Group Policies", + "slug": "group-policies", + "description": "Group Policies" + }, + { + "id": 277, + "name": "Ikoner", + "slug": "ikoner", + "description": "Ikoner" + }, + { + "id": 278, + "name": "Skrivbordet", + "slug": "skrivbordet", + "description": "Skrivbordet" + }, + { "id": 279, "name": "Dell", "slug": "dell", "description": "Dell" }, + { + "id": 280, + "name": "Optiplex 755", + "slug": "optiplex-755", + "description": "Optiplex 755" + }, + { + "id": 281, + "name": "Intel", + "slug": "intel", + "description": "Intel" + }, + { + "id": 282, + "name": "nätverkskort", + "slug": "natverkskort", + "description": "nätverkskort" + }, + { + "id": 283, + "name": "Sony Ericsson", + "slug": "sony-ericsson", + "description": "Sony Ericsson" + }, + { + "id": 284, + "name": "M600i", + "slug": "m600i", + "description": "M600i" + }, + { + "id": 285, + "name": "Exchange 2007 SP1", + "slug": "exchange-2007-sp1", + "description": "Exchange 2007 SP1" + }, + { + "id": 286, + "name": "ActiveSync", + "slug": "activesync", + "description": "ActiveSync" + }, + { + "id": 287, + "name": "Sharepoint", + "slug": "sharepoint", + "description": "Sharepoint" + }, + { + "id": 288, + "name": "Sökning", + "slug": "sokning", + "description": "Sökning" + }, + { "id": 289, "name": "Moss", "slug": "moss", "description": "Moss" }, + { + "id": 290, + "name": "Office", + "slug": "office", + "description": "Office" + }, + { "id": 291, "name": "PDF", "slug": "pdf", "description": "PDF" }, + { + "id": 292, + "name": "Vista SP1", + "slug": "vista-sp1", + "description": "Vista SP1" + }, + { + "id": 293, + "name": "Remote Desktop", + "slug": "remote-desktop", + "description": "Remote Desktop" + }, + { + "id": 294, + "name": "Outlook 2007", + "slug": "outlook-2007", + "description": "Outlook 2007" + }, + { "id": 295, "name": "SSL", "slug": "ssl", "description": "SSL" }, + { + "id": 296, + "name": "Epost", + "slug": "epost", + "description": "Epost" + }, + { + "id": 297, + "name": "Hyper-V", + "slug": "hyper-v", + "description": "Hyper-V" + }, + { + "id": 298, + "name": "Virtualisering", + "slug": "virtualisering", + "description": "Virtualisering" + }, + { + "id": 299, + "name": "FireShot", + "slug": "fireshot", + "description": "FireShot" + }, + { + "id": 300, + "name": "Skärmdump", + "slug": "skarmdump", + "description": "Skärmdump" + }, + { + "id": 301, + "name": "Programtillägg", + "slug": "programtillagg", + "description": "Programtillägg" + }, + { + "id": 302, + "name": "Huawei", + "slug": "huawei", + "description": "Huawei" + }, + { + "id": 303, + "name": "Mobilt bredband", + "slug": "mobilt-bredband", + "description": "Mobilt bredband" + }, + { "id": 304, "name": "E220", "slug": "e220", "description": "E220" }, + { + "id": 305, + "name": "Antivirus", + "slug": "antivirus", + "description": "Antivirus" + }, + { "id": 306, "name": "AVG", "slug": "avg", "description": "AVG" }, + { + "id": 307, + "name": "AVG Free", + "slug": "avg-free", + "description": "AVG Free" + }, + { + "id": 308, + "name": "Spyware", + "slug": "spyware", + "description": "Spyware" + }, + { + "id": 309, + "name": "Virtual Server", + "slug": "virtual-server", + "description": "Virtual Server" + }, + { + "id": 310, + "name": "Batteritid", + "slug": "batteritid", + "description": "Batteritid" + }, + { + "id": 311, + "name": "Firmware", + "slug": "firmware", + "description": "Firmware" + }, + { + "id": 312, + "name": "SQL Server 2005", + "slug": "sql-server-2005", + "description": "SQL Server 2005" + }, + { + "id": 313, + "name": "Public folders", + "slug": "public-folders", + "description": "Public folders" + }, + { "id": 314, "name": "WGA", "slug": "wga", "description": "WGA" }, + { "id": 315, "name": "SP3", "slug": "sp3", "description": "SP3" }, + { "id": 316, "name": "RSG", "slug": "rsg", "description": "RSG" }, + { + "id": 317, + "name": "Backup", + "slug": "backup", + "description": "Backup" + }, + { + "id": 318, + "name": "Bootcamp", + "slug": "bootcamp", + "description": "Bootcamp" + }, + { + "id": 319, + "name": "Windows XP", + "slug": "windows-xp", + "description": "Windows XP" + }, + { + "id": 320, + "name": "Intel Mac", + "slug": "intel-mac", + "description": "Intel Mac" + }, + { + "id": 321, + "name": "CD-bränning", + "slug": "cd-branning", + "description": "CD-bränning" + }, + { + "id": 322, + "name": "Gratisprogram", + "slug": "gratisprogram", + "description": "Gratisprogram" + }, + { + "id": 323, + "name": "Windows Server", + "slug": "windows-server", + "description": "Windows Server" + }, + { + "id": 324, + "name": "Exhange", + "slug": "exhange", + "description": "Exhange" + }, + { + "id": 325, + "name": "Small Business Server", + "slug": "small-business-server", + "description": "Small Business Server" + }, + { + "id": 326, + "name": "Outlook Web Access", + "slug": "outlook-web-access", + "description": "Outlook Web Access" + }, + { + "id": 327, + "name": "Active Directory", + "slug": "active-directory", + "description": "Active Directory" + }, + { + "id": 328, + "name": "Email", + "slug": "email", + "description": "Email" + }, + { "id": 329, "name": "LDAP", "slug": "ldap", "description": "LDAP" }, + { + "id": 330, + "name": "Laptop", + "slug": "laptop", + "description": "Laptop" + }, + { + "id": 331, + "name": "Ljudnivå", + "slug": "ljudniva", + "description": "Ljudnivå" + }, + { + "id": 332, + "name": "Fläktar", + "slug": "flaktar", + "description": "Fläktar" + }, + { + "id": 333, + "name": "Speedswitch", + "slug": "speedswitch", + "description": "Speedswitch" + }, + { + "id": 334, + "name": "Windows 7", + "slug": "windows-7", + "description": "Windows 7" + }, + { + "id": 335, + "name": "Release Candidate", + "slug": "release-candidate", + "description": "Release Candidate" + }, + { + "id": 336, + "name": "Itunes", + "slug": "itunes", + "description": "Itunes" + }, + { + "id": 337, + "name": "iPhone 3.0", + "slug": "iphone-30", + "description": "iPhone 3.0" + }, + { + "id": 338, + "name": "Headset", + "slug": "headset", + "description": "Headset" + }, + { + "id": 339, + "name": "Underhåll", + "slug": "underhall", + "description": "Underhåll" + }, + { + "id": 340, + "name": "Uppgraderingar", + "slug": "uppgraderingar", + "description": "Uppgraderingar" + }, + { "id": 341, "name": "vpn", "slug": "vpn", "description": "vpn" }, + { "id": 342, "name": "pptp", "slug": "pptp", "description": "pptp" }, + { + "id": 343, + "name": "domäninloggning", + "slug": "domaninloggning", + "description": "domäninloggning" + }, + { "id": 344, "name": "rras", "slug": "rras", "description": "rras" }, + { + "id": 345, + "name": "Windows Vista", + "slug": "windows-vista", + "description": "Windows Vista" + }, + { + "id": 346, + "name": "android", + "slug": "android", + "description": "android" + }, + { + "id": 347, + "name": "HTC Hero", + "slug": "htc-hero", + "description": "HTC Hero" + }, + { + "id": 348, + "name": "tethering", + "slug": "tethering", + "description": "tethering" + }, + { "id": 349, "name": "dhcp", "slug": "dhcp", "description": "dhcp" }, + { + "id": 350, + "name": "Applikationer", + "slug": "applikationer", + "description": "Applikationer" + }, + { + "id": 351, + "name": "Installation", + "slug": "installation", + "description": "Installation" + }, + { + "id": 352, + "name": "MacOSX", + "slug": "macosx", + "description": "MacOSX" + }, + { "id": 353, "name": "GPO", "slug": "gpo", "description": "GPO" }, + { + "id": 354, + "name": "Windows Update", + "slug": "windows-update", + "description": "Windows Update" + }, + { + "id": 355, + "name": "Papperskorgen", + "slug": "papperskorgen", + "description": "Papperskorgen" + }, + { + "id": 356, + "name": "Tips och tricks", + "slug": "tips-och-tricks", + "description": "Tips och tricks" + }, + { "id": 357, "name": "HP", "slug": "hp", "description": "HP" }, + { + "id": 358, + "name": "Skrivare", + "slug": "skrivare", + "description": "Skrivare" + }, + { + "id": 359, + "name": "Drivrutiner", + "slug": "drivrutiner", + "description": "Drivrutiner" + }, + { + "id": 360, + "name": "MD3000i", + "slug": "md3000i", + "description": "MD3000i" + }, + { "id": 361, "name": "SAN", "slug": "san", "description": "SAN" }, + { "id": 362, "name": "RDP", "slug": "rdp", "description": "RDP" }, + { "id": 363, "name": "dns", "slug": "dns", "description": "dns" }, + { + "id": 364, + "name": " windows 7", + "slug": "-windows-7", + "description": " windows 7" + }, + { + "id": 365, + "name": " telia", + "slug": "-telia", + "description": " telia" + }, + { + "id": 366, + "name": " google", + "slug": "-google", + "description": " google" + }, + { + "id": 367, + "name": " google dns", + "slug": "-google-dns", + "description": " google dns" + }, + { + "id": 368, + "name": "bredbandsleverantör", + "slug": "bredbandsleverantor", + "description": "bredbandsleverantör" + }, + { + "id": 369, + "name": "Telia", + "slug": "telia", + "description": "Telia" + }, + { + "id": 370, + "name": "Google DNS", + "slug": "google-dns", + "description": "Google DNS" + }, + { + "id": 371, + "name": "Windows SBS 2008 Console", + "slug": "windows-sbs-2008-console", + "description": "Windows SBS 2008 Console" + }, + { + "id": 372, + "name": "Small Business Server 2008", + "slug": "small-business-server-2008", + "description": "Small Business Server 2008" + }, + { + "id": 373, + "name": "MacBook Air", + "slug": "macbook-air", + "description": "MacBook Air" + }, + { + "id": 374, + "name": "bilduppladdning", + "slug": "bilduppladdning", + "description": "bilduppladdning" + }, + { + "id": 375, + "name": "OCZ SSD", + "slug": "ocz-ssd", + "description": "OCZ SSD" + }, + { "id": 376, "name": "SSD", "slug": "ssd", "description": "SSD" }, + { + "id": 377, + "name": "Backblaze", + "slug": "backblaze", + "description": "Backblaze" + }, + { + "id": 378, + "name": "Microsoft Forefront Threat Management Gateway", + "slug": "microsoft-forefront-threat-management-gateway", + "description": "Microsoft Forefront Threat Management Gateway" + }, + { + "id": 379, + "name": "kompression", + "slug": "kompression", + "description": "kompression" + }, + { + "id": 380, + "name": "Onlinebackup", + "slug": "onlinebackup", + "description": "Onlinebackup" + }, + { "id": 381, "name": "RSA", "slug": "rsa", "description": "RSA" }, + { + "id": 382, + "name": "SecurID", + "slug": "securid", + "description": "SecurID" + }, + { + "id": 383, + "name": "intrång", + "slug": "intrang", + "description": "intrång" + }, + { + "id": 384, + "name": "Anonymous Authentication", + "slug": "anonymous-authentication", + "description": "Anonymous Authentication" + }, + { + "id": 385, + "name": "Application Pool", + "slug": "application-pool", + "description": "Application Pool" + }, + { + "id": 386, + "name": "Identity", + "slug": "identity", + "description": "Identity" + }, + { "id": 387, "name": "RAW", "slug": "raw", "description": "RAW" }, + { + "id": 388, + "name": "Camera Codec Pack", + "slug": "camera-codec-pack", + "description": "Camera Codec Pack" + }, + { + "id": 389, + "name": "Adobe Photoshop Lightroom", + "slug": "adobe-photoshop-lightroom", + "description": "Adobe Photoshop Lightroom" + }, + { "id": 390, "name": "NK2", "slug": "nk2", "description": "NK2" }, + { + "id": 391, + "name": "snabbadresser", + "slug": "snabbadresser", + "description": "snabbadresser" + }, + { + "id": 392, + "name": "Applie Wireless Keyboard", + "slug": "applie-wireless-keyboard", + "description": "Applie Wireless Keyboard" + }, + { "id": 393, "name": " ", "slug": "-", "description": " " }, + { + "id": 394, + "name": "Teracopy", + "slug": "teracopy", + "description": "Teracopy" + }, + { + "id": 395, + "name": "DNS suffix", + "slug": "dns-suffix", + "description": "DNS suffix" + }, + { + "id": 396, + "name": "Visual Studio 2010", + "slug": "visual-studio-2010", + "description": "Visual Studio 2010" + }, + { + "id": 397, + "name": "Smiley", + "slug": "smiley", + "description": "Smiley" + }, + { "id": 398, "name": "J", "slug": "j", "description": "J" }, + { + "id": 399, + "name": "hemknapp", + "slug": "hemknapp", + "description": "hemknapp" + }, + { + "id": 400, + "name": "trasig", + "slug": "trasig", + "description": "trasig" + }, + { "id": 401, "name": "Larv", "slug": "larv", "description": "Larv" }, + { + "id": 402, + "name": "Rock Band", + "slug": "rock-band", + "description": "Rock Band" + }, + { + "id": 403, + "name": "Guitar Hero", + "slug": "guitar-hero", + "description": "Guitar Hero" + }, + { + "id": 404, + "name": "Partyspel", + "slug": "partyspel", + "description": "Partyspel" + }, + { + "id": 405, + "name": "Dataspel", + "slug": "dataspel", + "description": "Dataspel" + }, + { "id": 406, "name": "XNA", "slug": "xna", "description": "XNA" }, + { + "id": 407, + "name": "XNA GameStudio", + "slug": "xna-gamestudio", + "description": "XNA GameStudio" + }, + { + "id": 408, + "name": "Spelutveckling", + "slug": "spelutveckling", + "description": "Spelutveckling" + }, + { + "id": 409, + "name": "Visual Studio 2005", + "slug": "visual-studio-2005", + "description": "Visual Studio 2005" + }, + { + "id": 410, + "name": "Crysis", + "slug": "crysis", + "description": "Crysis" + }, + { + "id": 411, + "name": "CryENGINE2", + "slug": "cryengine2", + "description": "CryENGINE2" + }, + { "id": 412, "name": "Spel", "slug": "spel", "description": "Spel" }, + { + "id": 413, + "name": "Speltips", + "slug": "speltips", + "description": "Speltips" + }, + { + "id": 414, + "name": "Half-life", + "slug": "half-life", + "description": "Half-life" + }, + { + "id": 415, + "name": "Portal", + "slug": "portal", + "description": "Portal" + }, + { "id": 416, "name": "Cube", "slug": "cube", "description": "Cube" }, + { + "id": 417, + "name": "Datorer", + "slug": "datorer", + "description": "Datorer" + }, + { + "id": 418, + "name": "Prestandatest", + "slug": "prestandatest", + "description": "Prestandatest" + }, + { + "id": 419, + "name": "3DMark", + "slug": "3dmark", + "description": "3DMark" + }, + { + "id": 420, + "name": "Världskarta", + "slug": "varldskarta", + "description": "Världskarta" + }, + { + "id": 421, + "name": "DisplayFusion", + "slug": "displayfusion", + "description": "DisplayFusion" + }, + { + "id": 422, + "name": "Dual Screen", + "slug": "dual-screen", + "description": "Dual Screen" + }, + { + "id": 423, + "name": "Felmeddelande", + "slug": "felmeddelande", + "description": "Felmeddelande" + }, + { + "id": 424, + "name": "Guitar Rising", + "slug": "guitar-rising", + "description": "Guitar Rising" + }, + { + "id": 425, + "name": "Elgitarr", + "slug": "elgitarr", + "description": "Elgitarr" + }, + { "id": 426, "name": "Divx", "slug": "divx", "description": "Divx" }, + { + "id": 427, + "name": "Mobil", + "slug": "mobil", + "description": "Mobil" + }, + { "id": 428, "name": "Film", "slug": "film", "description": "Film" }, + { + "id": 429, + "name": "CorePlayer", + "slug": "coreplayer", + "description": "CorePlayer" + }, + { + "id": 430, + "name": "Streaming", + "slug": "streaming", + "description": "Streaming" + }, + { + "id": 431, + "name": "Battlefield Heroes", + "slug": "battlefield-heroes", + "description": "Battlefield Heroes" + }, + { "id": 432, "name": "DICE", "slug": "dice", "description": "DICE" }, + { + "id": 433, + "name": "Datortillbehör", + "slug": "datortillbehor", + "description": "Datortillbehör" + }, + { + "id": 434, + "name": "Motion Pro II", + "slug": "motion-pro-ii", + "description": "Motion Pro II" + }, + { + "id": 435, + "name": "CXC Simulations", + "slug": "cxc-simulations", + "description": "CXC Simulations" + }, + { + "id": 436, + "name": "Klyscherizer", + "slug": "klyscherizer", + "description": "Klyscherizer" + }, + { + "id": 437, + "name": "Webbtjänster", + "slug": "webbtjanster", + "description": "Webbtjänster" + }, + { + "id": 438, + "name": "PocketGuitar", + "slug": "pocketguitar", + "description": "PocketGuitar" + }, + { + "id": 439, + "name": "Musik", + "slug": "musik", + "description": "Musik" + }, + { + "id": 440, + "name": "Gmail", + "slug": "gmail", + "description": "Gmail" + }, + { + "id": 441, + "name": "Fotografering", + "slug": "fotografering", + "description": "Fotografering" + }, + { + "id": 442, + "name": "Tilt-shift", + "slug": "tilt-shift", + "description": "Tilt-shift" + }, + { + "id": 443, + "name": "Video", + "slug": "video", + "description": "Video" + }, + { + "id": 444, + "name": "YouTube", + "slug": "youtube", + "description": "YouTube" + }, + { + "id": 445, + "name": "Rick Astley", + "slug": "rick-astley", + "description": "Rick Astley" + }, + { "id": 446, "name": "RSS", "slug": "rss", "description": "RSS" }, + { + "id": 447, + "name": "Konst", + "slug": "konst", + "description": "Konst" + }, + { + "id": 448, + "name": "Tag cloud", + "slug": "tag-cloud", + "description": "Tag cloud" + }, + { + "id": 449, + "name": "Chronicles of Riddick", + "slug": "chronicles-of-riddick", + "description": "Chronicles of Riddick" + }, + { + "id": 450, + "name": "Starbreeze", + "slug": "starbreeze", + "description": "Starbreeze" + }, + { + "id": 451, + "name": "Mediecenter", + "slug": "mediecenter", + "description": "Mediecenter" + }, + { "id": 452, "name": "PLEX", "slug": "plex", "description": "PLEX" }, + { + "id": 453, + "name": "Hemmabio", + "slug": "hemmabio", + "description": "Hemmabio" + }, + { "id": 454, "name": "HD", "slug": "hd", "description": "HD" }, + { + "id": 455, + "name": "Spelrecensioner", + "slug": "spelrecensioner", + "description": "Spelrecensioner" + }, + { + "id": 456, + "name": "Gamepad", + "slug": "gamepad", + "description": "Gamepad" + }, + { + "id": 457, + "name": "Monkey Island", + "slug": "monkey-island", + "description": "Monkey Island" + }, + { + "id": 458, + "name": "äventyrsspel", + "slug": "aventyrsspel", + "description": "äventyrsspel" + }, + { "id": 459, "name": "HDMI", "slug": "hdmi", "description": "HDMI" }, + { + "id": 460, + "name": "Kablar", + "slug": "kablar", + "description": "Kablar" + }, + { "id": 461, "name": "XBMC", "slug": "xbmc", "description": "XBMC" }, + { "id": 462, "name": "TV", "slug": "tv", "description": "TV" }, + { + "id": 463, + "name": "Snow Leopard", + "slug": "snow-leopard", + "description": "Snow Leopard" + }, + { + "id": 464, + "name": "App Store", + "slug": "app-store", + "description": "App Store" + }, + { + "id": 465, + "name": "machinaruim", + "slug": "machinaruim", + "description": "machinaruim" + }, + { + "id": 466, + "name": "Racing", + "slug": "racing", + "description": "Racing" + }, + { "id": 467, "name": "PRS", "slug": "prs", "description": "PRS" }, + { + "id": 468, + "name": "Blogga", + "slug": "blogga", + "description": "Blogga" + }, + { + "id": 469, + "name": "skriva", + "slug": "skriva", + "description": "skriva" + }, + { + "id": 470, + "name": "formgivning", + "slug": "formgivning", + "description": "formgivning" + }, + { + "id": 471, + "name": "Fanboys", + "slug": "fanboys", + "description": "Fanboys" + }, + { + "id": 472, + "name": "Gitarr", + "slug": "gitarr", + "description": "Gitarr" + }, + { + "id": 473, + "name": "Dokumentation", + "slug": "dokumentation", + "description": "Dokumentation" + }, + { + "id": 474, + "name": "Extjs", + "slug": "extjs", + "description": "Extjs" + }, + { + "id": 475, + "name": " Humor", + "slug": "-humor", + "description": " Humor" + }, + { + "id": 476, + "name": " Fotboll", + "slug": "-fotboll", + "description": " Fotboll" + }, + { + "id": 477, + "name": "Real Racing", + "slug": "real-racing", + "description": "Real Racing" + }, + { "id": 478, "name": "iPad", "slug": "ipad", "description": "iPad" }, + { + "id": 479, + "name": "GameCenter", + "slug": "gamecenter", + "description": "GameCenter" + }, + { + "id": 480, + "name": "Spotify", + "slug": "spotify", + "description": "Spotify" + }, + { "id": 481, "name": "ljud", "slug": "ljud", "description": "ljud" }, + { + "id": 482, + "name": "equalify", + "slug": "equalify", + "description": "equalify" + }, + { + "id": 483, + "name": "Mac OS X Lion", + "slug": "mac-os-x-lion", + "description": "Mac OS X Lion" + }, + { + "id": 484, + "name": "Windows 8", + "slug": "windows-8", + "description": "Windows 8" + }, + { + "id": 485, + "name": "natural scroll", + "slug": "natural-scroll", + "description": "natural scroll" + }, + { + "id": 486, + "name": "AirPlay", + "slug": "airplay", + "description": "AirPlay" + }, + { "id": 487, "name": "Mac", "slug": "mac", "description": "Mac" }, + { + "id": 488, + "name": "Nyheter", + "slug": "nyheter", + "description": "Nyheter" + }, + { + "id": 489, + "name": "Communities", + "slug": "communities", + "description": "Communities" + }, + { + "id": 490, + "name": "OpenSocial", + "slug": "opensocial", + "description": "OpenSocial" + }, + { + "id": 491, + "name": "MySpace", + "slug": "myspace", + "description": "MySpace" + }, + { + "id": 492, + "name": "Omröstning", + "slug": "omrostning", + "description": "Omröstning" + }, + { + "id": 493, + "name": "Cobian", + "slug": "cobian", + "description": "Cobian" + }, + { + "id": 494, + "name": "Backup Exec", + "slug": "backup-exec", + "description": "Backup Exec" + }, + { + "id": 495, + "name": "Nedladdning", + "slug": "nedladdning", + "description": "Nedladdning" + }, + { "id": 496, "name": "DRM", "slug": "drm", "description": "DRM" }, + { + "id": 497, + "name": "Steam", + "slug": "steam", + "description": "Steam" + }, + { + "id": 498, + "name": "Laglig nedladdning", + "slug": "laglig-nedladdning", + "description": "Laglig nedladdning" + }, + { + "id": 499, + "name": "Snipping Tool", + "slug": "snipping-tool", + "description": "Snipping Tool" + }, + { + "id": 500, + "name": "Amazon", + "slug": "amazon", + "description": "Amazon" + }, + { + "id": 501, + "name": "E-böcker", + "slug": "e-bocker", + "description": "E-böcker" + }, + { + "id": 502, + "name": "Kindle", + "slug": "kindle", + "description": "Kindle" + }, + { + "id": 503, + "name": "E-papper", + "slug": "e-papper", + "description": "E-papper" + }, + { + "id": 504, + "name": "Mobiltelefoner", + "slug": "mobiltelefoner", + "description": "Mobiltelefoner" + }, + { + "id": 505, + "name": "Teknikfrågan", + "slug": "teknikfragan", + "description": "Teknikfrågan" + }, + { "id": 506, "name": "Spam", "slug": "spam", "description": "Spam" }, + { + "id": 507, + "name": "E-post", + "slug": "e-post", + "description": "E-post" + }, + { + "id": 508, + "name": "Spamfilter", + "slug": "spamfilter", + "description": "Spamfilter" + }, + { + "id": 509, + "name": "Operativsystem", + "slug": "operativsystem", + "description": "Operativsystem" + }, + { + "id": 510, + "name": "Linux", + "slug": "linux", + "description": "Linux" + }, + { + "id": 511, + "name": "Ubuntu", + "slug": "ubuntu", + "description": "Ubuntu" + }, + { + "id": 512, + "name": "Leopard", + "slug": "leopard", + "description": "Leopard" + }, + { + "id": 513, + "name": "Julklappar", + "slug": "julklappar", + "description": "Julklappar" + }, + { "id": 514, "name": "OLPC", "slug": "olpc", "description": "OLPC" }, + { + "id": 515, + "name": "AMPlug", + "slug": "amplug", + "description": "AMPlug" + }, + { "id": 516, "name": "iPod", "slug": "ipod", "description": "iPod" }, + { + "id": 517, + "name": "iPod Toch", + "slug": "ipod-toch", + "description": "iPod Toch" + }, + { + "id": 518, + "name": "Diino", + "slug": "diino", + "description": "Diino" + }, + { + "id": 519, + "name": "Archos", + "slug": "archos", + "description": "Archos" + }, + { + "id": 520, + "name": "Mx Air", + "slug": "mx-air", + "description": "Mx Air" + }, + { + "id": 521, + "name": "Webbstandarder", + "slug": "webbstandarder", + "description": "Webbstandarder" + }, + { + "id": 522, + "name": "Acid Test", + "slug": "acid-test", + "description": "Acid Test" + }, + { + "id": 523, + "name": "Solid State Disk", + "slug": "solid-state-disk", + "description": "Solid State Disk" + }, + { "id": 524, "name": "SLC", "slug": "slc", "description": "SLC" }, + { "id": 525, "name": "MLC", "slug": "mlc", "description": "MLC" }, + { + "id": 526, + "name": "Squeezebox", + "slug": "squeezebox", + "description": "Squeezebox" + }, + { + "id": 527, + "name": "Squeezebox Duet", + "slug": "squeezebox-duet", + "description": "Squeezebox Duet" + }, + { + "id": 528, + "name": "Logitech", + "slug": "logitech", + "description": "Logitech" + }, + { + "id": 529, + "name": "Slim Devices", + "slug": "slim-devices", + "description": "Slim Devices" + }, + { "id": 530, "name": "MP3", "slug": "mp3", "description": "MP3" }, + { + "id": 531, + "name": "MP3-spelare", + "slug": "mp3-spelare", + "description": "MP3-spelare" + }, + { + "id": 532, + "name": "HD DVD", + "slug": "hd-dvd", + "description": "HD DVD" + }, + { + "id": 533, + "name": "Blu-ray", + "slug": "blu-ray", + "description": "Blu-ray" + }, + { + "id": 534, + "name": "Format", + "slug": "format", + "description": "Format" + }, + { + "id": 535, + "name": "Formatkrig", + "slug": "formatkrig", + "description": "Formatkrig" + }, + { + "id": 536, + "name": "Toshiba", + "slug": "toshiba", + "description": "Toshiba" + }, + { "id": 537, "name": "SDK", "slug": "sdk", "description": "SDK" }, + { + "id": 538, + "name": "Mobile OSX", + "slug": "mobile-osx", + "description": "Mobile OSX" + }, + { + "id": 539, + "name": "tekniken.nu", + "slug": "teknikennu", + "description": "tekniken.nu" + }, + { + "id": 540, + "name": "Authentication Manager", + "slug": "authentication-manager", + "description": "Authentication Manager" + }, + { "id": 541, "name": "SMS", "slug": "sms", "description": "SMS" }, + { + "id": 542, + "name": "Mobilitet", + "slug": "mobilitet", + "description": "Mobilitet" + }, + { + "id": 543, + "name": "Symantec", + "slug": "symantec", + "description": "Symantec" + }, + { + "id": 544, + "name": "Linksys", + "slug": "linksys", + "description": "Linksys" + }, + { + "id": 545, + "name": "WRT54GL", + "slug": "wrt54gl", + "description": "WRT54GL" + }, + { + "id": 546, + "name": "Cisco", + "slug": "cisco", + "description": "Cisco" + }, + { + "id": 547, + "name": "Router", + "slug": "router", + "description": "Router" + }, + { + "id": 548, + "name": "Open Source", + "slug": "open-source", + "description": "Open Source" + }, + { + "id": 549, + "name": "DD-WRT", + "slug": "dd-wrt", + "description": "DD-WRT" + }, + { + "id": 550, + "name": "Nätverk", + "slug": "natverk", + "description": "Nätverk" + }, + { + "id": 551, + "name": "Översättning", + "slug": "oversattning", + "description": "Översättning" + }, + { + "id": 552, + "name": "Google Translate", + "slug": "google-translate", + "description": "Google Translate" + }, + { + "id": 553, + "name": "Maskinöversättning", + "slug": "maskinoversattning", + "description": "Maskinöversättning" + }, + { + "id": 554, + "name": "Svenska", + "slug": "svenska", + "description": "Svenska" + }, + { "id": 555, "name": "SP1", "slug": "sp1", "description": "SP1" }, + { + "id": 556, + "name": "Google Earth", + "slug": "google-earth", + "description": "Google Earth" + }, + { + "id": 557, + "name": "Wikipedia", + "slug": "wikipedia", + "description": "Wikipedia" + }, + { + "id": 558, + "name": "iPhone 3G", + "slug": "iphone-3g", + "description": "iPhone 3G" + }, + { "id": 559, "name": "3D", "slug": "3d", "description": "3D" }, + { + "id": 560, + "name": "Safari", + "slug": "safari", + "description": "Safari" + }, + { "id": 561, "name": "RTM", "slug": "rtm", "description": "RTM" }, + { + "id": 562, + "name": "HTC Touch Diamond", + "slug": "htc-touch-diamond", + "description": "HTC Touch Diamond" + }, + { + "id": 563, + "name": "Windows Mobile", + "slug": "windows-mobile", + "description": "Windows Mobile" + }, + { + "id": 564, + "name": "ringsignal", + "slug": "ringsignal", + "description": "ringsignal" + }, + { + "id": 565, + "name": "Upphovsrätt", + "slug": "upphovsratt", + "description": "Upphovsrätt" + }, + { "id": 566, "name": "EULA", "slug": "eula", "description": "EULA" }, + { + "id": 567, + "name": "Nikon", + "slug": "nikon", + "description": "Nikon" + }, + { + "id": 568, + "name": "HTC Dream", + "slug": "htc-dream", + "description": "HTC Dream" + }, + { + "id": 569, + "name": "Netbook", + "slug": "netbook", + "description": "Netbook" + }, + { "id": 570, "name": "UMPC", "slug": "umpc", "description": "UMPC" }, + { + "id": 571, + "name": "Ultraportabel", + "slug": "ultraportabel", + "description": "Ultraportabel" + }, + { + "id": 572, + "name": "Asus Eee PC", + "slug": "asus-eee-pc", + "description": "Asus Eee PC" + }, + { + "id": 573, + "name": "Premiere", + "slug": "premiere", + "description": "Premiere" + }, + { "id": 574, "name": "CS4", "slug": "cs4", "description": "CS4" }, + { + "id": 575, + "name": "Grafikkort", + "slug": "grafikkort", + "description": "Grafikkort" + }, + { "id": 576, "name": "GPU", "slug": "gpu", "description": "GPU" }, + { + "id": 577, + "name": "Wal-Mart", + "slug": "wal-mart", + "description": "Wal-Mart" + }, + { + "id": 578, + "name": "Yahoo", + "slug": "yahoo", + "description": "Yahoo" + }, + { "id": 579, "name": "Word", "slug": "word", "description": "Word" }, + { + "id": 580, + "name": "WriteRoom", + "slug": "writeroom", + "description": "WriteRoom" + }, + { + "id": 581, + "name": "VB.NET", + "slug": "vbnet", + "description": "VB.NET" + }, + { "id": 582, "name": "XMBC", "slug": "xmbc", "description": "XMBC" }, + { + "id": 583, + "name": "Underhållning", + "slug": "underhallning", + "description": "Underhållning" + }, + { "id": 584, "name": "XBox", "slug": "xbox", "description": "XBox" }, + { + "id": 585, + "name": "Mediacenter", + "slug": "mediacenter", + "description": "Mediacenter" + }, + { "id": 586, "name": "Java", "slug": "java", "description": "Java" }, + { "id": 587, "name": "Blog", "slug": "blog", "description": "Blog" }, + { + "id": 588, + "name": "Jobbannonser", + "slug": "jobbannonser", + "description": "Jobbannonser" + }, + { + "id": 589, + "name": "Julklappstips", + "slug": "julklappstips", + "description": "Julklappstips" + }, + { + "id": 590, + "name": "Airport Express", + "slug": "airport-express", + "description": "Airport Express" + }, + { + "id": 591, + "name": "iPod Touch", + "slug": "ipod-touch", + "description": "iPod Touch" + }, + { + "id": 592, + "name": "Window 7", + "slug": "window-7", + "description": "Window 7" + }, + { "id": 593, "name": "ATI", "slug": "ati", "description": "ATI" }, + { + "id": 594, + "name": "Aftonbladet", + "slug": "aftonbladet", + "description": "Aftonbladet" + }, + { + "id": 595, + "name": "ABSOLUT VODKA", + "slug": "absolut-vodka", + "description": "ABSOLUT VODKA" + }, + { + "id": 596, + "name": "EPiServer Awards", + "slug": "episerver-awards", + "description": "EPiServer Awards" + }, + { + "id": 597, + "name": "iPhone OS 3.0", + "slug": "iphone-os-30", + "description": "iPhone OS 3.0" + }, + { + "id": 598, + "name": "Google Reader", + "slug": "google-reader", + "description": "Google Reader" + }, + { + "id": 599, + "name": "Google Chrome", + "slug": "google-chrome", + "description": "Google Chrome" + }, + { + "id": 600, + "name": "Webbgränssnitt", + "slug": "webbgranssnitt", + "description": "Webbgränssnitt" + }, + { + "id": 601, + "name": "Slideshow", + "slug": "slideshow", + "description": "Slideshow" + }, + { "id": 602, "name": "WWDC", "slug": "wwdc", "description": "WWDC" }, + { + "id": 603, + "name": "Google Docs", + "slug": "google-docs", + "description": "Google Docs" + }, + { + "id": 604, + "name": "Webbenkäter", + "slug": "webbenkater", + "description": "Webbenkäter" + }, + { "id": 605, "name": "OSX", "slug": "osx", "description": "OSX" }, + { "id": 606, "name": "Mail", "slug": "mail", "description": "Mail" }, + { "id": 607, "name": "iCal", "slug": "ical", "description": "iCal" }, + { + "id": 608, + "name": "Social Media", + "slug": "social-media", + "description": "Social Media" + }, + { + "id": 609, + "name": "802.11n", + "slug": "80211n", + "description": "802.11n" + }, + { + "id": 610, + "name": "Datasäkerhet", + "slug": "datasakerhet", + "description": "Datasäkerhet" + }, + { + "id": 611, + "name": "Mind mapping", + "slug": "mind-mapping", + "description": "Mind mapping" + }, + { + "id": 612, + "name": "MindMeister", + "slug": "mindmeister", + "description": "MindMeister" + }, + { + "id": 613, + "name": "MindManager", + "slug": "mindmanager", + "description": "MindManager" + }, + { + "id": 614, + "name": "iPhone 3GS", + "slug": "iphone-3gs", + "description": "iPhone 3GS" + }, + { + "id": 615, + "name": "Smartphone", + "slug": "smartphone", + "description": "Smartphone" + }, + { + "id": 616, + "name": "Typsnitt", + "slug": "typsnitt", + "description": "Typsnitt" + }, + { "id": 617, "name": "webb", "slug": "webb", "description": "webb" }, + { + "id": 618, + "name": "handstil", + "slug": "handstil", + "description": "handstil" + }, + { + "id": 619, + "name": "fontcapture", + "slug": "fontcapture", + "description": "fontcapture" + }, + { + "id": 620, + "name": "Diagram", + "slug": "diagram", + "description": "Diagram" + }, + { + "id": 621, + "name": "nvidia", + "slug": "nvidia", + "description": "nvidia" + }, + { "id": 622, "name": "ion", "slug": "ion", "description": "ion" }, + { + "id": 623, + "name": "ion 330", + "slug": "ion-330", + "description": "ion 330" + }, + { + "id": 624, + "name": "asrock", + "slug": "asrock", + "description": "asrock" + }, + { + "id": 625, + "name": "Realtidswebben", + "slug": "realtidswebben", + "description": "Realtidswebben" + }, + { + "id": 626, + "name": "Realtime web", + "slug": "realtime-web", + "description": "Realtime web" + }, + { + "id": 627, + "name": "Web 3.0", + "slug": "web-30", + "description": "Web 3.0" + }, + { "id": 628, "name": "Digg", "slug": "digg", "description": "Digg" }, + { + "id": 629, + "name": "Google Wave", + "slug": "google-wave", + "description": "Google Wave" + }, + { "id": 630, "name": "X3", "slug": "x3", "description": "X3" }, + { + "id": 631, + "name": "Terratec", + "slug": "terratec", + "description": "Terratec" + }, + { + "id": 632, + "name": "Media Center", + "slug": "media-center", + "description": "Media Center" + }, + { + "id": 633, + "name": "Marketplace", + "slug": "marketplace", + "description": "Marketplace" + }, + { + "id": 634, + "name": "Fjärrstyrning", + "slug": "fjarrstyrning", + "description": "Fjärrstyrning" + }, + { + "id": 635, + "name": "Hårddiskar", + "slug": "harddiskar", + "description": "Hårddiskar" + }, + { + "id": 636, + "name": "Solid State", + "slug": "solid-state", + "description": "Solid State" + }, + { + "id": 637, + "name": "Multitouch", + "slug": "multitouch", + "description": "Multitouch" + }, + { + "id": 638, + "name": "Active Sync", + "slug": "active-sync", + "description": "Active Sync" + }, + { + "id": 639, + "name": "Eclair", + "slug": "eclair", + "description": "Eclair" + }, + { + "id": 640, + "name": "E-legitimation", + "slug": "e-legitimation", + "description": "E-legitimation" + }, + { + "id": 641, + "name": "Bankid", + "slug": "bankid", + "description": "Bankid" + }, + { + "id": 642, + "name": "Single Sign-on", + "slug": "single-sign-on", + "description": "Single Sign-on" + }, + { + "id": 643, + "name": "Skatteverket", + "slug": "skatteverket", + "description": "Skatteverket" + }, + { + "id": 644, + "name": "Foxit", + "slug": "foxit", + "description": "Foxit" + }, + { + "id": 645, + "name": "Pdf995", + "slug": "pdf995", + "description": "Pdf995" + }, + { + "id": 646, + "name": "Voddler", + "slug": "voddler", + "description": "Voddler" + }, + { + "id": 647, + "name": "Google Maps Navigation", + "slug": "google-maps-navigation", + "description": "Google Maps Navigation" + }, + { "id": 648, "name": "GPS", "slug": "gps", "description": "GPS" }, + { + "id": 649, + "name": "Navigation", + "slug": "navigation", + "description": "Navigation" + }, + { "id": 650, "name": "HTPC", "slug": "htpc", "description": "HTPC" }, + { + "id": 651, + "name": "mind maps", + "slug": "mind-maps", + "description": "mind maps" + }, + { + "id": 652, + "name": " mindmeister", + "slug": "-mindmeister", + "description": " mindmeister" + }, + { + "id": 653, + "name": " brainstorming", + "slug": "-brainstorming", + "description": " brainstorming" + }, + { + "id": 654, + "name": " email", + "slug": "-email", + "description": " email" + }, + { + "id": 655, + "name": "Internet", + "slug": "internet", + "description": "Internet" + }, + { + "id": 656, + "name": "Statistik", + "slug": "statistik", + "description": "Statistik" + }, + { + "id": 657, + "name": "font-face", + "slug": "font-face", + "description": "font-face" + }, + { + "id": 658, + "name": " fonts", + "slug": "-fonts", + "description": " fonts" + }, + { + "id": 659, + "name": " typsnitt", + "slug": "-typsnitt", + "description": " typsnitt" + }, + { + "id": 660, + "name": "Windows Mobil", + "slug": "windows-mobil", + "description": "Windows Mobil" + }, + { + "id": 661, + "name": " iPhone", + "slug": "-iphone", + "description": " iPhone" + }, + { + "id": 662, + "name": " Mobiltelefoner", + "slug": "-mobiltelefoner", + "description": " Mobiltelefoner" + }, + { + "id": 663, + "name": "Konceptarbete", + "slug": "konceptarbete", + "description": "Konceptarbete" + }, + { "id": 664, "name": "DXVA", "slug": "dxva", "description": "DXVA" }, + { "id": 665, "name": "NAS", "slug": "nas", "description": "NAS" }, + { + "id": 666, + "name": "Hårdvara", + "slug": "hardvara", + "description": "Hårdvara" + }, + { + "id": 667, + "name": "Betalning", + "slug": "betalning", + "description": "Betalning" + }, + { + "id": 668, + "name": "Skärmar", + "slug": "skarmar", + "description": "Skärmar" + }, + { "id": 669, "name": "IE", "slug": "ie", "description": "IE" }, + { + "id": 670, + "name": "Opera", + "slug": "opera", + "description": "Opera" + }, + { + "id": 671, + "name": "Windows Phone", + "slug": "windows-phone", + "description": "Windows Phone" + }, + { + "id": 672, + "name": " iOS4", + "slug": "-ios4", + "description": " iOS4" + }, + { + "id": 673, + "name": "Windows Phone 7", + "slug": "windows-phone-7", + "description": "Windows Phone 7" + }, + { + "id": 674, + "name": "Lightbox", + "slug": "lightbox", + "description": "Lightbox" + }, + { + "id": 675, + "name": "iPhone4", + "slug": "iphone4", + "description": "iPhone4" + }, + { + "id": 676, + "name": "Community", + "slug": "community", + "description": "Community" + }, + { + "id": 677, + "name": "Sociala Media", + "slug": "sociala-media", + "description": "Sociala Media" + }, + { + "id": 678, + "name": "Diskussionsforum", + "slug": "diskussionsforum", + "description": "Diskussionsforum" + }, + { + "id": 679, + "name": "Samsung Omnia 7", + "slug": "samsung-omnia-7", + "description": "Samsung Omnia 7" + }, + { + "id": 680, + "name": "recension", + "slug": "recension", + "description": "recension" + }, + { "id": 681, "name": "MMS", "slug": "mms", "description": "MMS" }, + { "id": 682, "name": "Tre", "slug": "tre", "description": "Tre" }, + { + "id": 683, + "name": "e-handel", + "slug": "e-handel", + "description": "e-handel" + }, + { + "id": 684, + "name": "matbutik", + "slug": "matbutik", + "description": "matbutik" + }, + { + "id": 685, + "name": "Internet World", + "slug": "internet-world", + "description": "Internet World" + }, + { + "id": 686, + "name": "Symboler", + "slug": "symboler", + "description": "Symboler" + }, + { + "id": 687, + "name": "The Noun Project", + "slug": "the-noun-project", + "description": "The Noun Project" + }, + { + "id": 688, + "name": "UQuery", + "slug": "uquery", + "description": "UQuery" + }, + { + "id": 689, + "name": "appar", + "slug": "appar", + "description": "appar" + }, + { + "id": 690, + "name": "Marketplace Search", + "slug": "marketplace-search", + "description": "Marketplace Search" + }, + { + "id": 691, + "name": "Ringa", + "slug": "ringa", + "description": "Ringa" + }, + { + "id": 692, + "name": "Fring", + "slug": "fring", + "description": "Fring" + }, + { + "id": 693, + "name": "Skype", + "slug": "skype", + "description": "Skype" + }, + { "id": 694, "name": "VOIP", "slug": "voip", "description": "VOIP" }, + { + "id": 695, + "name": "Resa utomlands", + "slug": "resa-utomlands", + "description": "Resa utomlands" + }, + { + "id": 696, + "name": "WordPress", + "slug": "wordpress", + "description": "WordPress" + }, + { + "id": 697, + "name": "killer apps", + "slug": "killer-apps", + "description": "killer apps" + }, + { + "id": 698, + "name": "PDF-skrivare", + "slug": "pdf-skrivare", + "description": "PDF-skrivare" + }, + { + "id": 699, + "name": "äldre webbläsare", + "slug": "aldre-webblasare", + "description": "äldre webbläsare" + }, + { + "id": 700, + "name": "Mango", + "slug": "mango", + "description": "Mango" + }, + { + "id": 701, + "name": "lexikon", + "slug": "lexikon", + "description": "lexikon" + }, + { + "id": 702, + "name": "plånbok", + "slug": "planbok", + "description": "plånbok" + }, + { + "id": 703, + "name": "Google Wallet", + "slug": "google-wallet", + "description": "Google Wallet" + }, + { + "id": 704, + "name": "Windows Phone 7.5", + "slug": "windows-phone-75", + "description": "Windows Phone 7.5" + }, + { + "id": 705, + "name": "iPhone 5", + "slug": "iphone-5", + "description": "iPhone 5" + }, + { + "id": 706, + "name": "Android 3.1", + "slug": "android-31", + "description": "Android 3.1" + }, + { + "id": 707, + "name": "iOS 5", + "slug": "ios-5", + "description": "iOS 5" + }, + { + "id": 708, + "name": "Dropbox", + "slug": "dropbox", + "description": "Dropbox" + }, + { + "id": 709, + "name": "Evernote", + "slug": "evernote", + "description": "Evernote" + }, + { + "id": 710, + "name": "SoundCloud", + "slug": "soundcloud", + "description": "SoundCloud" + }, + { + "id": 711, + "name": "Telia Navigator", + "slug": "telia-navigator", + "description": "Telia Navigator" + }, + { "id": 712, "name": "WP", "slug": "wp", "description": "WP" }, + { "id": 713, "name": "WP7", "slug": "wp7", "description": "WP7" }, + { "id": 714, "name": "NODO", "slug": "nodo", "description": "NODO" }, + { + "id": 715, + "name": "arbete", + "slug": "arbete", + "description": "arbete" + }, + { + "id": 716, + "name": "brainstorming", + "slug": "brainstorming", + "description": "brainstorming" + }, + { + "id": 717, + "name": "keynote", + "slug": "keynote", + "description": "keynote" + }, + { + "id": 718, + "name": "säljverktyg", + "slug": "saljverktyg", + "description": "säljverktyg" + }, + { + "id": 719, + "name": "inköpslista", + "slug": "inkopslista", + "description": "inköpslista" + }, + { + "id": 720, + "name": "ShoppingList", + "slug": "shoppinglist", + "description": "ShoppingList" + }, + { "id": 721, "name": "AI", "slug": "ai", "description": "AI" }, + { + "id": 722, + "name": "iPhone 4S", + "slug": "iphone-4s", + "description": "iPhone 4S" + }, + { + "id": 723, + "name": "QR-koder", + "slug": "qr-koder", + "description": "QR-koder" + }, + { + "id": 724, + "name": "Predictive Analytics", + "slug": "predictive-analytics", + "description": "Predictive Analytics" + }, + { + "id": 725, + "name": "Location", + "slug": "location", + "description": "Location" + }, + { + "id": 726, + "name": "Gamification", + "slug": "gamification", + "description": "Gamification" + }, + { + "id": 727, + "name": "Group Buying", + "slug": "group-buying", + "description": "Group Buying" + }, + { + "id": 728, + "name": "Speech-to-speech", + "slug": "speech-to-speech", + "description": "Speech-to-speech" + }, + { + "id": 729, + "name": "Boxee", + "slug": "boxee", + "description": "Boxee" + }, + { + "id": 730, + "name": "Tweetdeck", + "slug": "tweetdeck", + "description": "Tweetdeck" + }, + { + "id": 731, + "name": "ManageFilter", + "slug": "managefilter", + "description": "ManageFilter" + }, + { + "id": 732, + "name": "Klout", + "slug": "klout", + "description": "Klout" + }, + { + "id": 733, + "name": "Peerindex", + "slug": "peerindex", + "description": "Peerindex" + }, + { + "id": 734, + "name": "Twopcharts", + "slug": "twopcharts", + "description": "Twopcharts" + } + ], + "posts_tags": [ + { "tag_id": 0, "post_id": 8 }, + { "tag_id": 0, "post_id": 57 }, + { "tag_id": 0, "post_id": 58 }, + { "tag_id": 0, "post_id": 61 }, + { "tag_id": 0, "post_id": 65 }, + { "tag_id": 0, "post_id": 72 }, + { "tag_id": 0, "post_id": 76 }, + { "tag_id": 0, "post_id": 80 }, + { "tag_id": 0, "post_id": 85 }, + { "tag_id": 1, "post_id": 88 }, + { "tag_id": 2, "post_id": 88 }, + { "tag_id": 3, "post_id": 88 }, + { "tag_id": 0, "post_id": 88 }, + { "tag_id": 0, "post_id": 90 }, + { "tag_id": 0, "post_id": 103 }, + { "tag_id": 0, "post_id": 109 }, + { "tag_id": 0, "post_id": 111 }, + { "tag_id": 0, "post_id": 112 }, + { "tag_id": 0, "post_id": 114 }, + { "tag_id": 0, "post_id": 118 }, + { "tag_id": 0, "post_id": 120 }, + { "tag_id": 0, "post_id": 124 }, + { "tag_id": 0, "post_id": 131 }, + { "tag_id": 0, "post_id": 134 }, + { "tag_id": 4, "post_id": 139 }, + { "tag_id": 5, "post_id": 139 }, + { "tag_id": 6, "post_id": 139 }, + { "tag_id": 7, "post_id": 139 }, + { "tag_id": 0, "post_id": 139 }, + { "tag_id": 8, "post_id": 140 }, + { "tag_id": 9, "post_id": 140 }, + { "tag_id": 10, "post_id": 140 }, + { "tag_id": 0, "post_id": 140 }, + { "tag_id": 5, "post_id": 141 }, + { "tag_id": 11, "post_id": 141 }, + { "tag_id": 0, "post_id": 141 }, + { "tag_id": 12, "post_id": 149 }, + { "tag_id": 13, "post_id": 149 }, + { "tag_id": 5, "post_id": 149 }, + { "tag_id": 14, "post_id": 149 }, + { "tag_id": 9, "post_id": 149 }, + { "tag_id": 0, "post_id": 149 }, + { "tag_id": 15, "post_id": 150 }, + { "tag_id": 16, "post_id": 150 }, + { "tag_id": 17, "post_id": 150 }, + { "tag_id": 5, "post_id": 150 }, + { "tag_id": 18, "post_id": 150 }, + { "tag_id": 6, "post_id": 150 }, + { "tag_id": 19, "post_id": 150 }, + { "tag_id": 20, "post_id": 150 }, + { "tag_id": 0, "post_id": 150 }, + { "tag_id": 21, "post_id": 151 }, + { "tag_id": 22, "post_id": 151 }, + { "tag_id": 23, "post_id": 151 }, + { "tag_id": 24, "post_id": 151 }, + { "tag_id": 0, "post_id": 151 }, + { "tag_id": 17, "post_id": 159 }, + { "tag_id": 25, "post_id": 159 }, + { "tag_id": 5, "post_id": 159 }, + { "tag_id": 0, "post_id": 159 }, + { "tag_id": 26, "post_id": 164 }, + { "tag_id": 2, "post_id": 164 }, + { "tag_id": 27, "post_id": 164 }, + { "tag_id": 28, "post_id": 164 }, + { "tag_id": 5, "post_id": 164 }, + { "tag_id": 0, "post_id": 164 }, + { "tag_id": 28, "post_id": 168 }, + { "tag_id": 8, "post_id": 168 }, + { "tag_id": 29, "post_id": 168 }, + { "tag_id": 30, "post_id": 168 }, + { "tag_id": 31, "post_id": 168 }, + { "tag_id": 0, "post_id": 168 }, + { "tag_id": 17, "post_id": 174 }, + { "tag_id": 32, "post_id": 174 }, + { "tag_id": 33, "post_id": 174 }, + { "tag_id": 0, "post_id": 174 }, + { "tag_id": 34, "post_id": 184 }, + { "tag_id": 35, "post_id": 184 }, + { "tag_id": 36, "post_id": 184 }, + { "tag_id": 19, "post_id": 184 }, + { "tag_id": 37, "post_id": 184 }, + { "tag_id": 38, "post_id": 184 }, + { "tag_id": 0, "post_id": 184 }, + { "tag_id": 15, "post_id": 185 }, + { "tag_id": 5, "post_id": 185 }, + { "tag_id": 16, "post_id": 185 }, + { "tag_id": 4, "post_id": 185 }, + { "tag_id": 14, "post_id": 185 }, + { "tag_id": 0, "post_id": 185 }, + { "tag_id": 39, "post_id": 189 }, + { "tag_id": 40, "post_id": 189 }, + { "tag_id": 41, "post_id": 189 }, + { "tag_id": 42, "post_id": 189 }, + { "tag_id": 0, "post_id": 189 }, + { "tag_id": 43, "post_id": 192 }, + { "tag_id": 4, "post_id": 192 }, + { "tag_id": 44, "post_id": 192 }, + { "tag_id": 45, "post_id": 192 }, + { "tag_id": 0, "post_id": 192 }, + { "tag_id": 22, "post_id": 194 }, + { "tag_id": 46, "post_id": 194 }, + { "tag_id": 47, "post_id": 194 }, + { "tag_id": 23, "post_id": 194 }, + { "tag_id": 0, "post_id": 194 }, + { "tag_id": 48, "post_id": 208 }, + { "tag_id": 49, "post_id": 208 }, + { "tag_id": 0, "post_id": 208 }, + { "tag_id": 42, "post_id": 211 }, + { "tag_id": 50, "post_id": 211 }, + { "tag_id": 31, "post_id": 211 }, + { "tag_id": 0, "post_id": 211 }, + { "tag_id": 28, "post_id": 217 }, + { "tag_id": 4, "post_id": 217 }, + { "tag_id": 9, "post_id": 217 }, + { "tag_id": 51, "post_id": 217 }, + { "tag_id": 0, "post_id": 217 }, + { "tag_id": 52, "post_id": 218 }, + { "tag_id": 53, "post_id": 218 }, + { "tag_id": 54, "post_id": 218 }, + { "tag_id": 55, "post_id": 218 }, + { "tag_id": 31, "post_id": 218 }, + { "tag_id": 56, "post_id": 218 }, + { "tag_id": 0, "post_id": 218 }, + { "tag_id": 57, "post_id": 223 }, + { "tag_id": 58, "post_id": 223 }, + { "tag_id": 59, "post_id": 223 }, + { "tag_id": 60, "post_id": 223 }, + { "tag_id": 0, "post_id": 223 }, + { "tag_id": 61, "post_id": 228 }, + { "tag_id": 62, "post_id": 228 }, + { "tag_id": 63, "post_id": 228 }, + { "tag_id": 64, "post_id": 228 }, + { "tag_id": 0, "post_id": 228 }, + { "tag_id": 0, "post_id": 228 }, + { "tag_id": 14, "post_id": 239 }, + { "tag_id": 65, "post_id": 239 }, + { "tag_id": 31, "post_id": 239 }, + { "tag_id": 20, "post_id": 239 }, + { "tag_id": 28, "post_id": 239 }, + { "tag_id": 66, "post_id": 239 }, + { "tag_id": 0, "post_id": 239 }, + { "tag_id": 67, "post_id": 245 }, + { "tag_id": 31, "post_id": 245 }, + { "tag_id": 68, "post_id": 245 }, + { "tag_id": 0, "post_id": 245 }, + { "tag_id": 67, "post_id": 253 }, + { "tag_id": 31, "post_id": 253 }, + { "tag_id": 68, "post_id": 253 }, + { "tag_id": 0, "post_id": 253 }, + { "tag_id": 0, "post_id": 254 }, + { "tag_id": 69, "post_id": 260 }, + { "tag_id": 70, "post_id": 260 }, + { "tag_id": 0, "post_id": 260 }, + { "tag_id": 63, "post_id": 270 }, + { "tag_id": 71, "post_id": 270 }, + { "tag_id": 72, "post_id": 270 }, + { "tag_id": 73, "post_id": 270 }, + { "tag_id": 0, "post_id": 270 }, + { "tag_id": 31, "post_id": 272 }, + { "tag_id": 74, "post_id": 272 }, + { "tag_id": 68, "post_id": 272 }, + { "tag_id": 0, "post_id": 272 }, + { "tag_id": 31, "post_id": 274 }, + { "tag_id": 28, "post_id": 274 }, + { "tag_id": 5, "post_id": 274 }, + { "tag_id": 0, "post_id": 274 }, + { "tag_id": 17, "post_id": 275 }, + { "tag_id": 42, "post_id": 275 }, + { "tag_id": 0, "post_id": 275 }, + { "tag_id": 0, "post_id": 276 }, + { "tag_id": 22, "post_id": 279 }, + { "tag_id": 17, "post_id": 279 }, + { "tag_id": 75, "post_id": 279 }, + { "tag_id": 0, "post_id": 279 }, + { "tag_id": 76, "post_id": 280 }, + { "tag_id": 34, "post_id": 280 }, + { "tag_id": 77, "post_id": 280 }, + { "tag_id": 0, "post_id": 280 }, + { "tag_id": 78, "post_id": 283 }, + { "tag_id": 31, "post_id": 283 }, + { "tag_id": 15, "post_id": 283 }, + { "tag_id": 14, "post_id": 283 }, + { "tag_id": 79, "post_id": 283 }, + { "tag_id": 0, "post_id": 283 }, + { "tag_id": 76, "post_id": 287 }, + { "tag_id": 31, "post_id": 287 }, + { "tag_id": 80, "post_id": 287 }, + { "tag_id": 81, "post_id": 287 }, + { "tag_id": 0, "post_id": 287 }, + { "tag_id": 0, "post_id": 288 }, + { "tag_id": 43, "post_id": 288 }, + { "tag_id": 4, "post_id": 288 }, + { "tag_id": 82, "post_id": 288 }, + { "tag_id": 83, "post_id": 288 }, + { "tag_id": 0, "post_id": 288 }, + { "tag_id": 63, "post_id": 290 }, + { "tag_id": 84, "post_id": 290 }, + { "tag_id": 31, "post_id": 290 }, + { "tag_id": 85, "post_id": 290 }, + { "tag_id": 0, "post_id": 290 }, + { "tag_id": 31, "post_id": 291 }, + { "tag_id": 35, "post_id": 291 }, + { "tag_id": 37, "post_id": 291 }, + { "tag_id": 19, "post_id": 291 }, + { "tag_id": 0, "post_id": 291 }, + { "tag_id": 86, "post_id": 293 }, + { "tag_id": 87, "post_id": 293 }, + { "tag_id": 76, "post_id": 293 }, + { "tag_id": 0, "post_id": 293 }, + { "tag_id": 44, "post_id": 310 }, + { "tag_id": 88, "post_id": 310 }, + { "tag_id": 0, "post_id": 310 }, + { "tag_id": 0, "post_id": 330 }, + { "tag_id": 89, "post_id": 334 }, + { "tag_id": 90, "post_id": 334 }, + { "tag_id": 4, "post_id": 334 }, + { "tag_id": 91, "post_id": 334 }, + { "tag_id": 92, "post_id": 334 }, + { "tag_id": 17, "post_id": 334 }, + { "tag_id": 0, "post_id": 334 }, + { "tag_id": 0, "post_id": 336 }, + { "tag_id": 77, "post_id": 336 }, + { "tag_id": 0, "post_id": 336 }, + { "tag_id": 28, "post_id": 337 }, + { "tag_id": 31, "post_id": 337 }, + { "tag_id": 15, "post_id": 337 }, + { "tag_id": 66, "post_id": 337 }, + { "tag_id": 0, "post_id": 337 }, + { "tag_id": 93, "post_id": 337 }, + { "tag_id": 0, "post_id": 337 }, + { "tag_id": 0, "post_id": 339 }, + { "tag_id": 66, "post_id": 340 }, + { "tag_id": 0, "post_id": 340 }, + { "tag_id": 31, "post_id": 340 }, + { "tag_id": 34, "post_id": 340 }, + { "tag_id": 77, "post_id": 340 }, + { "tag_id": 0, "post_id": 340 }, + { "tag_id": 31, "post_id": 344 }, + { "tag_id": 66, "post_id": 344 }, + { "tag_id": 15, "post_id": 344 }, + { "tag_id": 94, "post_id": 344 }, + { "tag_id": 0, "post_id": 344 }, + { "tag_id": 0, "post_id": 346 }, + { "tag_id": 66, "post_id": 348 }, + { "tag_id": 0, "post_id": 348 }, + { "tag_id": 31, "post_id": 348 }, + { "tag_id": 34, "post_id": 348 }, + { "tag_id": 77, "post_id": 348 }, + { "tag_id": 0, "post_id": 348 }, + { "tag_id": 95, "post_id": 350 }, + { "tag_id": 96, "post_id": 350 }, + { "tag_id": 97, "post_id": 350 }, + { "tag_id": 98, "post_id": 350 }, + { "tag_id": 99, "post_id": 350 }, + { "tag_id": 100, "post_id": 350 }, + { "tag_id": 0, "post_id": 350 }, + { "tag_id": 0, "post_id": 353 }, + { "tag_id": 77, "post_id": 353 }, + { "tag_id": 56, "post_id": 353 }, + { "tag_id": 0, "post_id": 353 }, + { "tag_id": 0, "post_id": 360 }, + { "tag_id": 101, "post_id": 360 }, + { "tag_id": 102, "post_id": 360 }, + { "tag_id": 0, "post_id": 360 }, + { "tag_id": 17, "post_id": 368 }, + { "tag_id": 0, "post_id": 368 }, + { "tag_id": 103, "post_id": 368 }, + { "tag_id": 0, "post_id": 368 }, + { "tag_id": 0, "post_id": 370 }, + { "tag_id": 104, "post_id": 370 }, + { "tag_id": 105, "post_id": 370 }, + { "tag_id": 5, "post_id": 370 }, + { "tag_id": 0, "post_id": 370 }, + { "tag_id": 31, "post_id": 371 }, + { "tag_id": 68, "post_id": 371 }, + { "tag_id": 106, "post_id": 371 }, + { "tag_id": 0, "post_id": 371 }, + { "tag_id": 31, "post_id": 374 }, + { "tag_id": 33, "post_id": 374 }, + { "tag_id": 4, "post_id": 374 }, + { "tag_id": 0, "post_id": 374 }, + { "tag_id": 0, "post_id": 378 }, + { "tag_id": 101, "post_id": 378 }, + { "tag_id": 102, "post_id": 378 }, + { "tag_id": 0, "post_id": 378 }, + { "tag_id": 28, "post_id": 386 }, + { "tag_id": 31, "post_id": 386 }, + { "tag_id": 93, "post_id": 386 }, + { "tag_id": 0, "post_id": 386 }, + { "tag_id": 0, "post_id": 387 }, + { "tag_id": 107, "post_id": 387 }, + { "tag_id": 108, "post_id": 387 }, + { "tag_id": 0, "post_id": 387 }, + { "tag_id": 0, "post_id": 388 }, + { "tag_id": 77, "post_id": 388 }, + { "tag_id": 34, "post_id": 388 }, + { "tag_id": 0, "post_id": 388 }, + { "tag_id": 0, "post_id": 391 }, + { "tag_id": 107, "post_id": 391 }, + { "tag_id": 0, "post_id": 391 }, + { "tag_id": 31, "post_id": 392 }, + { "tag_id": 106, "post_id": 392 }, + { "tag_id": 109, "post_id": 392 }, + { "tag_id": 110, "post_id": 392 }, + { "tag_id": 0, "post_id": 392 }, + { "tag_id": 31, "post_id": 394 }, + { "tag_id": 106, "post_id": 394 }, + { "tag_id": 111, "post_id": 394 }, + { "tag_id": 112, "post_id": 394 }, + { "tag_id": 0, "post_id": 394 }, + { "tag_id": 0, "post_id": 400 }, + { "tag_id": 101, "post_id": 400 }, + { "tag_id": 102, "post_id": 400 }, + { "tag_id": 0, "post_id": 400 }, + { "tag_id": 0, "post_id": 405 }, + { "tag_id": 70, "post_id": 407 }, + { "tag_id": 36, "post_id": 407 }, + { "tag_id": 0, "post_id": 407 }, + { "tag_id": 0, "post_id": 408 }, + { "tag_id": 113, "post_id": 408 }, + { "tag_id": 69, "post_id": 408 }, + { "tag_id": 0, "post_id": 408 }, + { "tag_id": 114, "post_id": 410 }, + { "tag_id": 19, "post_id": 410 }, + { "tag_id": 0, "post_id": 410 }, + { "tag_id": 0, "post_id": 410 }, + { "tag_id": 5, "post_id": 411 }, + { "tag_id": 115, "post_id": 411 }, + { "tag_id": 116, "post_id": 411 }, + { "tag_id": 0, "post_id": 411 }, + { "tag_id": 0, "post_id": 414 }, + { "tag_id": 5, "post_id": 414 }, + { "tag_id": 117, "post_id": 414 }, + { "tag_id": 0, "post_id": 414 }, + { "tag_id": 31, "post_id": 416 }, + { "tag_id": 28, "post_id": 416 }, + { "tag_id": 0, "post_id": 416 }, + { "tag_id": 31, "post_id": 417 }, + { "tag_id": 76, "post_id": 417 }, + { "tag_id": 0, "post_id": 417 }, + { "tag_id": 106, "post_id": 418 }, + { "tag_id": 118, "post_id": 418 }, + { "tag_id": 31, "post_id": 418 }, + { "tag_id": 0, "post_id": 418 }, + { "tag_id": 106, "post_id": 419 }, + { "tag_id": 118, "post_id": 419 }, + { "tag_id": 31, "post_id": 419 }, + { "tag_id": 0, "post_id": 419 }, + { "tag_id": 17, "post_id": 421 }, + { "tag_id": 119, "post_id": 421 }, + { "tag_id": 120, "post_id": 421 }, + { "tag_id": 0, "post_id": 421 }, + { "tag_id": 106, "post_id": 422 }, + { "tag_id": 118, "post_id": 422 }, + { "tag_id": 31, "post_id": 422 }, + { "tag_id": 121, "post_id": 422 }, + { "tag_id": 0, "post_id": 422 }, + { "tag_id": 106, "post_id": 423 }, + { "tag_id": 118, "post_id": 423 }, + { "tag_id": 122, "post_id": 423 }, + { "tag_id": 0, "post_id": 423 }, + { "tag_id": 0, "post_id": 424 }, + { "tag_id": 4, "post_id": 424 }, + { "tag_id": 104, "post_id": 424 }, + { "tag_id": 0, "post_id": 424 }, + { "tag_id": 0, "post_id": 425 }, + { "tag_id": 22, "post_id": 425 }, + { "tag_id": 107, "post_id": 425 }, + { "tag_id": 0, "post_id": 425 }, + { "tag_id": 66, "post_id": 426 }, + { "tag_id": 5, "post_id": 426 }, + { "tag_id": 0, "post_id": 426 }, + { "tag_id": 107, "post_id": 429 }, + { "tag_id": 123, "post_id": 429 }, + { "tag_id": 124, "post_id": 429 }, + { "tag_id": 52, "post_id": 429 }, + { "tag_id": 125, "post_id": 429 }, + { "tag_id": 126, "post_id": 429 }, + { "tag_id": 0, "post_id": 429 }, + { "tag_id": 12, "post_id": 431 }, + { "tag_id": 127, "post_id": 431 }, + { "tag_id": 17, "post_id": 431 }, + { "tag_id": 0, "post_id": 431 }, + { "tag_id": 89, "post_id": 437 }, + { "tag_id": 90, "post_id": 437 }, + { "tag_id": 17, "post_id": 437 }, + { "tag_id": 0, "post_id": 437 }, + { "tag_id": 52, "post_id": 440 }, + { "tag_id": 128, "post_id": 440 }, + { "tag_id": 129, "post_id": 440 }, + { "tag_id": 14, "post_id": 440 }, + { "tag_id": 0, "post_id": 440 }, + { "tag_id": 5, "post_id": 442 }, + { "tag_id": 12, "post_id": 442 }, + { "tag_id": 130, "post_id": 442 }, + { "tag_id": 0, "post_id": 442 }, + { "tag_id": 67, "post_id": 443 }, + { "tag_id": 131, "post_id": 443 }, + { "tag_id": 68, "post_id": 443 }, + { "tag_id": 122, "post_id": 443 }, + { "tag_id": 0, "post_id": 443 }, + { "tag_id": 28, "post_id": 445 }, + { "tag_id": 131, "post_id": 445 }, + { "tag_id": 0, "post_id": 445 }, + { "tag_id": 129, "post_id": 449 }, + { "tag_id": 132, "post_id": 449 }, + { "tag_id": 133, "post_id": 449 }, + { "tag_id": 0, "post_id": 449 }, + { "tag_id": 121, "post_id": 453 }, + { "tag_id": 134, "post_id": 453 }, + { "tag_id": 135, "post_id": 453 }, + { "tag_id": 0, "post_id": 453 }, + { "tag_id": 22, "post_id": 455 }, + { "tag_id": 136, "post_id": 455 }, + { "tag_id": 137, "post_id": 455 }, + { "tag_id": 138, "post_id": 455 }, + { "tag_id": 0, "post_id": 455 }, + { "tag_id": 139, "post_id": 456 }, + { "tag_id": 140, "post_id": 456 }, + { "tag_id": 71, "post_id": 456 }, + { "tag_id": 14, "post_id": 456 }, + { "tag_id": 0, "post_id": 456 }, + { "tag_id": 141, "post_id": 458 }, + { "tag_id": 142, "post_id": 458 }, + { "tag_id": 0, "post_id": 458 }, + { "tag_id": 85, "post_id": 460 }, + { "tag_id": 143, "post_id": 460 }, + { "tag_id": 0, "post_id": 460 }, + { "tag_id": 0, "post_id": 476 }, + { "tag_id": 144, "post_id": 477 }, + { "tag_id": 145, "post_id": 477 }, + { "tag_id": 146, "post_id": 477 }, + { "tag_id": 147, "post_id": 477 }, + { "tag_id": 0, "post_id": 477 }, + { "tag_id": 106, "post_id": 478 }, + { "tag_id": 131, "post_id": 478 }, + { "tag_id": 148, "post_id": 478 }, + { "tag_id": 149, "post_id": 478 }, + { "tag_id": 0, "post_id": 478 }, + { "tag_id": 0, "post_id": 479 }, + { "tag_id": 22, "post_id": 479 }, + { "tag_id": 150, "post_id": 479 }, + { "tag_id": 151, "post_id": 479 }, + { "tag_id": 0, "post_id": 479 }, + { "tag_id": 14, "post_id": 482 }, + { "tag_id": 152, "post_id": 482 }, + { "tag_id": 153, "post_id": 482 }, + { "tag_id": 154, "post_id": 482 }, + { "tag_id": 0, "post_id": 482 }, + { "tag_id": 144, "post_id": 487 }, + { "tag_id": 155, "post_id": 487 }, + { "tag_id": 0, "post_id": 487 }, + { "tag_id": 106, "post_id": 488 }, + { "tag_id": 156, "post_id": 488 }, + { "tag_id": 157, "post_id": 488 }, + { "tag_id": 0, "post_id": 488 }, + { "tag_id": 0, "post_id": 492 }, + { "tag_id": 158, "post_id": 492 }, + { "tag_id": 0, "post_id": 492 }, + { "tag_id": 125, "post_id": 492 }, + { "tag_id": 52, "post_id": 492 }, + { "tag_id": 0, "post_id": 492 }, + { "tag_id": 34, "post_id": 494 }, + { "tag_id": 0, "post_id": 494 }, + { "tag_id": 0, "post_id": 494 }, + { "tag_id": 129, "post_id": 495 }, + { "tag_id": 159, "post_id": 495 }, + { "tag_id": 160, "post_id": 495 }, + { "tag_id": 161, "post_id": 495 }, + { "tag_id": 0, "post_id": 495 }, + { "tag_id": 162, "post_id": 496 }, + { "tag_id": 163, "post_id": 496 }, + { "tag_id": 164, "post_id": 496 }, + { "tag_id": 165, "post_id": 496 }, + { "tag_id": 166, "post_id": 496 }, + { "tag_id": 0, "post_id": 496 }, + { "tag_id": 167, "post_id": 497 }, + { "tag_id": 168, "post_id": 497 }, + { "tag_id": 169, "post_id": 497 }, + { "tag_id": 170, "post_id": 497 }, + { "tag_id": 171, "post_id": 497 }, + { "tag_id": 0, "post_id": 497 }, + { "tag_id": 66, "post_id": 498 }, + { "tag_id": 18, "post_id": 498 }, + { "tag_id": 172, "post_id": 498 }, + { "tag_id": 0, "post_id": 498 }, + { "tag_id": 125, "post_id": 500 }, + { "tag_id": 18, "post_id": 500 }, + { "tag_id": 173, "post_id": 500 }, + { "tag_id": 0, "post_id": 500 }, + { "tag_id": 71, "post_id": 501 }, + { "tag_id": 174, "post_id": 501 }, + { "tag_id": 0, "post_id": 501 }, + { "tag_id": 0, "post_id": 502 }, + { "tag_id": 0, "post_id": 502 }, + { "tag_id": 22, "post_id": 503 }, + { "tag_id": 175, "post_id": 503 }, + { "tag_id": 176, "post_id": 503 }, + { "tag_id": 0, "post_id": 503 }, + { "tag_id": 177, "post_id": 509 }, + { "tag_id": 178, "post_id": 509 }, + { "tag_id": 179, "post_id": 509 }, + { "tag_id": 180, "post_id": 509 }, + { "tag_id": 84, "post_id": 509 }, + { "tag_id": 0, "post_id": 509 }, + { "tag_id": 181, "post_id": 527 }, + { "tag_id": 182, "post_id": 527 }, + { "tag_id": 183, "post_id": 527 }, + { "tag_id": 184, "post_id": 527 }, + { "tag_id": 0, "post_id": 527 }, + { "tag_id": 125, "post_id": 528 }, + { "tag_id": 185, "post_id": 528 }, + { "tag_id": 186, "post_id": 528 }, + { "tag_id": 187, "post_id": 528 }, + { "tag_id": 188, "post_id": 528 }, + { "tag_id": 0, "post_id": 528 }, + { "tag_id": 106, "post_id": 529 }, + { "tag_id": 148, "post_id": 529 }, + { "tag_id": 189, "post_id": 529 }, + { "tag_id": 0, "post_id": 529 }, + { "tag_id": 144, "post_id": 530 }, + { "tag_id": 190, "post_id": 530 }, + { "tag_id": 12, "post_id": 530 }, + { "tag_id": 147, "post_id": 530 }, + { "tag_id": 191, "post_id": 530 }, + { "tag_id": 0, "post_id": 530 }, + { "tag_id": 192, "post_id": 532 }, + { "tag_id": 179, "post_id": 532 }, + { "tag_id": 0, "post_id": 532 }, + { "tag_id": 84, "post_id": 534 }, + { "tag_id": 193, "post_id": 534 }, + { "tag_id": 63, "post_id": 534 }, + { "tag_id": 194, "post_id": 534 }, + { "tag_id": 116, "post_id": 534 }, + { "tag_id": 195, "post_id": 534 }, + { "tag_id": 196, "post_id": 534 }, + { "tag_id": 0, "post_id": 534 }, + { "tag_id": 197, "post_id": 538 }, + { "tag_id": 198, "post_id": 538 }, + { "tag_id": 199, "post_id": 538 }, + { "tag_id": 0, "post_id": 538 }, + { "tag_id": 200, "post_id": 540 }, + { "tag_id": 201, "post_id": 540 }, + { "tag_id": 170, "post_id": 540 }, + { "tag_id": 202, "post_id": 540 }, + { "tag_id": 167, "post_id": 540 }, + { "tag_id": 0, "post_id": 540 }, + { "tag_id": 22, "post_id": 542 }, + { "tag_id": 141, "post_id": 542 }, + { "tag_id": 203, "post_id": 542 }, + { "tag_id": 204, "post_id": 542 }, + { "tag_id": 0, "post_id": 542 }, + { "tag_id": 0, "post_id": 543 }, + { "tag_id": 104, "post_id": 544 }, + { "tag_id": 205, "post_id": 544 }, + { "tag_id": 206, "post_id": 544 }, + { "tag_id": 207, "post_id": 544 }, + { "tag_id": 0, "post_id": 544 }, + { "tag_id": 208, "post_id": 546 }, + { "tag_id": 127, "post_id": 546 }, + { "tag_id": 5, "post_id": 546 }, + { "tag_id": 0, "post_id": 546 }, + { "tag_id": 208, "post_id": 547 }, + { "tag_id": 209, "post_id": 547 }, + { "tag_id": 127, "post_id": 547 }, + { "tag_id": 210, "post_id": 547 }, + { "tag_id": 211, "post_id": 547 }, + { "tag_id": 0, "post_id": 547 }, + { "tag_id": 212, "post_id": 549 }, + { "tag_id": 213, "post_id": 549 }, + { "tag_id": 5, "post_id": 549 }, + { "tag_id": 0, "post_id": 549 }, + { "tag_id": 214, "post_id": 550 }, + { "tag_id": 215, "post_id": 550 }, + { "tag_id": 216, "post_id": 550 }, + { "tag_id": 217, "post_id": 550 }, + { "tag_id": 0, "post_id": 550 }, + { "tag_id": 167, "post_id": 552 }, + { "tag_id": 170, "post_id": 552 }, + { "tag_id": 218, "post_id": 552 }, + { "tag_id": 4, "post_id": 552 }, + { "tag_id": 0, "post_id": 552 }, + { "tag_id": 0, "post_id": 557 }, + { "tag_id": 0, "post_id": 557 }, + { "tag_id": 0, "post_id": 557 }, + { "tag_id": 77, "post_id": 563 }, + { "tag_id": 34, "post_id": 563 }, + { "tag_id": 219, "post_id": 563 }, + { "tag_id": 0, "post_id": 563 }, + { "tag_id": 106, "post_id": 565 }, + { "tag_id": 131, "post_id": 565 }, + { "tag_id": 220, "post_id": 565 }, + { "tag_id": 221, "post_id": 565 }, + { "tag_id": 0, "post_id": 565 }, + { "tag_id": 0, "post_id": 570 }, + { "tag_id": 222, "post_id": 571 }, + { "tag_id": 223, "post_id": 571 }, + { "tag_id": 224, "post_id": 571 }, + { "tag_id": 225, "post_id": 571 }, + { "tag_id": 0, "post_id": 571 }, + { "tag_id": 226, "post_id": 572 }, + { "tag_id": 0, "post_id": 572 }, + { "tag_id": 0, "post_id": 572 }, + { "tag_id": 0, "post_id": 573 }, + { "tag_id": 227, "post_id": 573 }, + { "tag_id": 0, "post_id": 573 }, + { "tag_id": 228, "post_id": 576 }, + { "tag_id": 131, "post_id": 576 }, + { "tag_id": 229, "post_id": 576 }, + { "tag_id": 0, "post_id": 576 }, + { "tag_id": 230, "post_id": 577 }, + { "tag_id": 84, "post_id": 577 }, + { "tag_id": 0, "post_id": 577 }, + { "tag_id": 77, "post_id": 579 }, + { "tag_id": 231, "post_id": 579 }, + { "tag_id": 0, "post_id": 579 }, + { "tag_id": 18, "post_id": 581 }, + { "tag_id": 0, "post_id": 581 }, + { "tag_id": 18, "post_id": 583 }, + { "tag_id": 232, "post_id": 583 }, + { "tag_id": 0, "post_id": 583 }, + { "tag_id": 233, "post_id": 587 }, + { "tag_id": 106, "post_id": 587 }, + { "tag_id": 234, "post_id": 587 }, + { "tag_id": 28, "post_id": 587 }, + { "tag_id": 0, "post_id": 587 }, + { "tag_id": 94, "post_id": 588 }, + { "tag_id": 235, "post_id": 588 }, + { "tag_id": 66, "post_id": 588 }, + { "tag_id": 0, "post_id": 588 }, + { "tag_id": 0, "post_id": 588 }, + { "tag_id": 0, "post_id": 589 }, + { "tag_id": 28, "post_id": 590 }, + { "tag_id": 227, "post_id": 590 }, + { "tag_id": 236, "post_id": 590 }, + { "tag_id": 0, "post_id": 590 }, + { "tag_id": 22, "post_id": 592 }, + { "tag_id": 237, "post_id": 592 }, + { "tag_id": 238, "post_id": 592 }, + { "tag_id": 0, "post_id": 592 }, + { "tag_id": 239, "post_id": 593 }, + { "tag_id": 240, "post_id": 593 }, + { "tag_id": 77, "post_id": 593 }, + { "tag_id": 34, "post_id": 593 }, + { "tag_id": 18, "post_id": 593 }, + { "tag_id": 0, "post_id": 593 }, + { "tag_id": 0, "post_id": 594 }, + { "tag_id": 131, "post_id": 595 }, + { "tag_id": 241, "post_id": 595 }, + { "tag_id": 242, "post_id": 595 }, + { "tag_id": 0, "post_id": 595 }, + { "tag_id": 243, "post_id": 596 }, + { "tag_id": 244, "post_id": 596 }, + { "tag_id": 245, "post_id": 596 }, + { "tag_id": 246, "post_id": 596 }, + { "tag_id": 0, "post_id": 596 }, + { "tag_id": 17, "post_id": 597 }, + { "tag_id": 0, "post_id": 597 }, + { "tag_id": 247, "post_id": 597 }, + { "tag_id": 248, "post_id": 597 }, + { "tag_id": 249, "post_id": 597 }, + { "tag_id": 0, "post_id": 597 }, + { "tag_id": 122, "post_id": 599 }, + { "tag_id": 250, "post_id": 599 }, + { "tag_id": 0, "post_id": 599 }, + { "tag_id": 0, "post_id": 607 }, + { "tag_id": 0, "post_id": 607 }, + { "tag_id": 0, "post_id": 607 }, + { "tag_id": 251, "post_id": 608 }, + { "tag_id": 0, "post_id": 608 }, + { "tag_id": 0, "post_id": 608 }, + { "tag_id": 0, "post_id": 608 }, + { "tag_id": 167, "post_id": 608 }, + { "tag_id": 252, "post_id": 608 }, + { "tag_id": 0, "post_id": 608 }, + { "tag_id": 18, "post_id": 609 }, + { "tag_id": 253, "post_id": 609 }, + { "tag_id": 0, "post_id": 609 }, + { "tag_id": 18, "post_id": 610 }, + { "tag_id": 66, "post_id": 610 }, + { "tag_id": 0, "post_id": 610 }, + { "tag_id": 243, "post_id": 610 }, + { "tag_id": 254, "post_id": 610 }, + { "tag_id": 255, "post_id": 610 }, + { "tag_id": 0, "post_id": 610 }, + { "tag_id": 256, "post_id": 611 }, + { "tag_id": 257, "post_id": 611 }, + { "tag_id": 258, "post_id": 611 }, + { "tag_id": 259, "post_id": 611 }, + { "tag_id": 0, "post_id": 611 }, + { "tag_id": 260, "post_id": 611 }, + { "tag_id": 0, "post_id": 611 }, + { "tag_id": 18, "post_id": 612 }, + { "tag_id": 0, "post_id": 612 }, + { "tag_id": 261, "post_id": 612 }, + { "tag_id": 17, "post_id": 612 }, + { "tag_id": 0, "post_id": 612 }, + { "tag_id": 262, "post_id": 612 }, + { "tag_id": 263, "post_id": 612 }, + { "tag_id": 0, "post_id": 612 }, + { "tag_id": 0, "post_id": 613 }, + { "tag_id": 0, "post_id": 615 }, + { "tag_id": 0, "post_id": 616 }, + { "tag_id": 0, "post_id": 618 }, + { "tag_id": 0, "post_id": 619 }, + { "tag_id": 0, "post_id": 620 }, + { "tag_id": 0, "post_id": 621 }, + { "tag_id": 0, "post_id": 622 }, + { "tag_id": 0, "post_id": 623 }, + { "tag_id": 0, "post_id": 624 }, + { "tag_id": 0, "post_id": 626 }, + { "tag_id": 0, "post_id": 627 }, + { "tag_id": 0, "post_id": 18 }, + { "tag_id": 0, "post_id": 60 }, + { "tag_id": 0, "post_id": 62 }, + { "tag_id": 0, "post_id": 64 }, + { "tag_id": 0, "post_id": 67 }, + { "tag_id": 0, "post_id": 73 }, + { "tag_id": 40, "post_id": 77 }, + { "tag_id": 264, "post_id": 77 }, + { "tag_id": 0, "post_id": 77 }, + { "tag_id": 0, "post_id": 78 }, + { "tag_id": 0, "post_id": 81 }, + { "tag_id": 0, "post_id": 83 }, + { "tag_id": 0, "post_id": 84 }, + { "tag_id": 0, "post_id": 86 }, + { "tag_id": 0, "post_id": 87 }, + { "tag_id": 0, "post_id": 104 }, + { "tag_id": 0, "post_id": 106 }, + { "tag_id": 0, "post_id": 115 }, + { "tag_id": 0, "post_id": 116 }, + { "tag_id": 0, "post_id": 123 }, + { "tag_id": 0, "post_id": 128 }, + { "tag_id": 0, "post_id": 133 }, + { "tag_id": 265, "post_id": 156 }, + { "tag_id": 266, "post_id": 156 }, + { "tag_id": 267, "post_id": 156 }, + { "tag_id": 268, "post_id": 156 }, + { "tag_id": 0, "post_id": 156 }, + { "tag_id": 40, "post_id": 162 }, + { "tag_id": 269, "post_id": 162 }, + { "tag_id": 40, "post_id": 162 }, + { "tag_id": 0, "post_id": 162 }, + { "tag_id": 270, "post_id": 163 }, + { "tag_id": 2, "post_id": 163 }, + { "tag_id": 271, "post_id": 163 }, + { "tag_id": 272, "post_id": 163 }, + { "tag_id": 273, "post_id": 163 }, + { "tag_id": 274, "post_id": 163 }, + { "tag_id": 0, "post_id": 163 }, + { "tag_id": 275, "post_id": 166 }, + { "tag_id": 276, "post_id": 166 }, + { "tag_id": 0, "post_id": 166 }, + { "tag_id": 52, "post_id": 172 }, + { "tag_id": 163, "post_id": 172 }, + { "tag_id": 277, "post_id": 172 }, + { "tag_id": 56, "post_id": 172 }, + { "tag_id": 278, "post_id": 172 }, + { "tag_id": 0, "post_id": 172 }, + { "tag_id": 279, "post_id": 173 }, + { "tag_id": 280, "post_id": 173 }, + { "tag_id": 281, "post_id": 173 }, + { "tag_id": 282, "post_id": 173 }, + { "tag_id": 0, "post_id": 173 }, + { "tag_id": 283, "post_id": 175 }, + { "tag_id": 284, "post_id": 175 }, + { "tag_id": 39, "post_id": 175 }, + { "tag_id": 285, "post_id": 175 }, + { "tag_id": 286, "post_id": 175 }, + { "tag_id": 0, "post_id": 175 }, + { "tag_id": 287, "post_id": 181 }, + { "tag_id": 288, "post_id": 181 }, + { "tag_id": 289, "post_id": 181 }, + { "tag_id": 290, "post_id": 181 }, + { "tag_id": 14, "post_id": 181 }, + { "tag_id": 291, "post_id": 181 }, + { "tag_id": 0, "post_id": 181 }, + { "tag_id": 270, "post_id": 183 }, + { "tag_id": 2, "post_id": 183 }, + { "tag_id": 292, "post_id": 183 }, + { "tag_id": 293, "post_id": 183 }, + { "tag_id": 0, "post_id": 183 }, + { "tag_id": 0, "post_id": 186 }, + { "tag_id": 294, "post_id": 186 }, + { "tag_id": 39, "post_id": 186 }, + { "tag_id": 295, "post_id": 186 }, + { "tag_id": 107, "post_id": 186 }, + { "tag_id": 296, "post_id": 186 }, + { "tag_id": 0, "post_id": 186 }, + { "tag_id": 297, "post_id": 196 }, + { "tag_id": 165, "post_id": 196 }, + { "tag_id": 298, "post_id": 196 }, + { "tag_id": 0, "post_id": 196 }, + { "tag_id": 0, "post_id": 198 }, + { "tag_id": 299, "post_id": 198 }, + { "tag_id": 300, "post_id": 198 }, + { "tag_id": 301, "post_id": 198 }, + { "tag_id": 0, "post_id": 198 }, + { "tag_id": 302, "post_id": 200 }, + { "tag_id": 303, "post_id": 200 }, + { "tag_id": 286, "post_id": 200 }, + { "tag_id": 304, "post_id": 200 }, + { "tag_id": 0, "post_id": 200 }, + { "tag_id": 305, "post_id": 201 }, + { "tag_id": 306, "post_id": 201 }, + { "tag_id": 307, "post_id": 201 }, + { "tag_id": 308, "post_id": 201 }, + { "tag_id": 107, "post_id": 201 }, + { "tag_id": 0, "post_id": 201 }, + { "tag_id": 0, "post_id": 204 }, + { "tag_id": 297, "post_id": 213 }, + { "tag_id": 309, "post_id": 213 }, + { "tag_id": 298, "post_id": 213 }, + { "tag_id": 14, "post_id": 213 }, + { "tag_id": 0, "post_id": 213 }, + { "tag_id": 90, "post_id": 219 }, + { "tag_id": 310, "post_id": 219 }, + { "tag_id": 311, "post_id": 219 }, + { "tag_id": 39, "post_id": 219 }, + { "tag_id": 0, "post_id": 219 }, + { "tag_id": 165, "post_id": 222 }, + { "tag_id": 312, "post_id": 222 }, + { "tag_id": 104, "post_id": 222 }, + { "tag_id": 0, "post_id": 222 }, + { "tag_id": 40, "post_id": 231 }, + { "tag_id": 313, "post_id": 231 }, + { "tag_id": 296, "post_id": 231 }, + { "tag_id": 0, "post_id": 231 }, + { "tag_id": 14, "post_id": 249 }, + { "tag_id": 270, "post_id": 249 }, + { "tag_id": 314, "post_id": 249 }, + { "tag_id": 315, "post_id": 249 }, + { "tag_id": 0, "post_id": 249 }, + { "tag_id": 296, "post_id": 255 }, + { "tag_id": 39, "post_id": 255 }, + { "tag_id": 40, "post_id": 255 }, + { "tag_id": 316, "post_id": 255 }, + { "tag_id": 317, "post_id": 255 }, + { "tag_id": 0, "post_id": 255 }, + { "tag_id": 318, "post_id": 256 }, + { "tag_id": 315, "post_id": 256 }, + { "tag_id": 319, "post_id": 256 }, + { "tag_id": 320, "post_id": 256 }, + { "tag_id": 89, "post_id": 256 }, + { "tag_id": 0, "post_id": 256 }, + { "tag_id": 321, "post_id": 258 }, + { "tag_id": 322, "post_id": 258 }, + { "tag_id": 0, "post_id": 258 }, + { "tag_id": 323, "post_id": 262 }, + { "tag_id": 324, "post_id": 262 }, + { "tag_id": 295, "post_id": 262 }, + { "tag_id": 325, "post_id": 262 }, + { "tag_id": 326, "post_id": 262 }, + { "tag_id": 0, "post_id": 262 }, + { "tag_id": 69, "post_id": 278 }, + { "tag_id": 107, "post_id": 278 }, + { "tag_id": 0, "post_id": 278 }, + { "tag_id": 327, "post_id": 285 }, + { "tag_id": 328, "post_id": 285 }, + { "tag_id": 329, "post_id": 285 }, + { "tag_id": 0, "post_id": 285 }, + { "tag_id": 0, "post_id": 289 }, + { "tag_id": 330, "post_id": 289 }, + { "tag_id": 331, "post_id": 289 }, + { "tag_id": 332, "post_id": 289 }, + { "tag_id": 333, "post_id": 289 }, + { "tag_id": 0, "post_id": 289 }, + { "tag_id": 14, "post_id": 294 }, + { "tag_id": 334, "post_id": 294 }, + { "tag_id": 335, "post_id": 294 }, + { "tag_id": 0, "post_id": 294 }, + { "tag_id": 336, "post_id": 296 }, + { "tag_id": 337, "post_id": 296 }, + { "tag_id": 128, "post_id": 296 }, + { "tag_id": 0, "post_id": 296 }, + { "tag_id": 14, "post_id": 298 }, + { "tag_id": 334, "post_id": 298 }, + { "tag_id": 335, "post_id": 298 }, + { "tag_id": 0, "post_id": 298 }, + { "tag_id": 90, "post_id": 304 }, + { "tag_id": 338, "post_id": 304 }, + { "tag_id": 339, "post_id": 304 }, + { "tag_id": 0, "post_id": 304 }, + { "tag_id": 334, "post_id": 327 }, + { "tag_id": 14, "post_id": 327 }, + { "tag_id": 340, "post_id": 327 }, + { "tag_id": 2, "post_id": 327 }, + { "tag_id": 0, "post_id": 327 }, + { "tag_id": 341, "post_id": 335 }, + { "tag_id": 342, "post_id": 335 }, + { "tag_id": 343, "post_id": 335 }, + { "tag_id": 344, "post_id": 335 }, + { "tag_id": 345, "post_id": 335 }, + { "tag_id": 334, "post_id": 335 }, + { "tag_id": 0, "post_id": 335 }, + { "tag_id": 346, "post_id": 342 }, + { "tag_id": 347, "post_id": 342 }, + { "tag_id": 61, "post_id": 342 }, + { "tag_id": 348, "post_id": 342 }, + { "tag_id": 0, "post_id": 342 }, + { "tag_id": 349, "post_id": 343 }, + { "tag_id": 0, "post_id": 343 }, + { "tag_id": 0, "post_id": 343 }, + { "tag_id": 0, "post_id": 343 }, + { "tag_id": 270, "post_id": 364 }, + { "tag_id": 350, "post_id": 364 }, + { "tag_id": 351, "post_id": 364 }, + { "tag_id": 0, "post_id": 364 }, + { "tag_id": 89, "post_id": 369 }, + { "tag_id": 14, "post_id": 369 }, + { "tag_id": 352, "post_id": 369 }, + { "tag_id": 270, "post_id": 369 }, + { "tag_id": 278, "post_id": 369 }, + { "tag_id": 0, "post_id": 369 }, + { "tag_id": 334, "post_id": 372 }, + { "tag_id": 323, "post_id": 372 }, + { "tag_id": 353, "post_id": 372 }, + { "tag_id": 354, "post_id": 372 }, + { "tag_id": 0, "post_id": 372 }, + { "tag_id": 334, "post_id": 375 }, + { "tag_id": 355, "post_id": 375 }, + { "tag_id": 356, "post_id": 375 }, + { "tag_id": 0, "post_id": 375 }, + { "tag_id": 357, "post_id": 380 }, + { "tag_id": 358, "post_id": 380 }, + { "tag_id": 359, "post_id": 380 }, + { "tag_id": 325, "post_id": 380 }, + { "tag_id": 0, "post_id": 380 }, + { "tag_id": 279, "post_id": 389 }, + { "tag_id": 360, "post_id": 389 }, + { "tag_id": 361, "post_id": 389 }, + { "tag_id": 0, "post_id": 389 }, + { "tag_id": 0, "post_id": 393 }, + { "tag_id": 270, "post_id": 413 }, + { "tag_id": 362, "post_id": 413 }, + { "tag_id": 0, "post_id": 413 }, + { "tag_id": 0, "post_id": 427 }, + { "tag_id": 363, "post_id": 459 }, + { "tag_id": 364, "post_id": 459 }, + { "tag_id": 365, "post_id": 459 }, + { "tag_id": 366, "post_id": 459 }, + { "tag_id": 367, "post_id": 459 }, + { "tag_id": 363, "post_id": 459 }, + { "tag_id": 364, "post_id": 459 }, + { "tag_id": 365, "post_id": 459 }, + { "tag_id": 366, "post_id": 459 }, + { "tag_id": 367, "post_id": 459 }, + { "tag_id": 0, "post_id": 459 }, + { "tag_id": 368, "post_id": 459 }, + { "tag_id": 369, "post_id": 459 }, + { "tag_id": 370, "post_id": 459 }, + { "tag_id": 0, "post_id": 459 }, + { "tag_id": 371, "post_id": 462 }, + { "tag_id": 0, "post_id": 462 }, + { "tag_id": 275, "post_id": 462 }, + { "tag_id": 372, "post_id": 462 }, + { "tag_id": 0, "post_id": 462 }, + { "tag_id": 373, "post_id": 483 }, + { "tag_id": 334, "post_id": 483 }, + { "tag_id": 354, "post_id": 483 }, + { "tag_id": 0, "post_id": 483 }, + { "tag_id": 0, "post_id": 484 }, + { "tag_id": 179, "post_id": 484 }, + { "tag_id": 374, "post_id": 484 }, + { "tag_id": 0, "post_id": 484 }, + { "tag_id": 375, "post_id": 504 }, + { "tag_id": 376, "post_id": 504 }, + { "tag_id": 377, "post_id": 504 }, + { "tag_id": 279, "post_id": 504 }, + { "tag_id": 0, "post_id": 504 }, + { "tag_id": 378, "post_id": 507 }, + { "tag_id": 379, "post_id": 507 }, + { "tag_id": 104, "post_id": 507 }, + { "tag_id": 0, "post_id": 507 }, + { "tag_id": 317, "post_id": 510 }, + { "tag_id": 380, "post_id": 510 }, + { "tag_id": 377, "post_id": 510 }, + { "tag_id": 0, "post_id": 510 }, + { "tag_id": 381, "post_id": 531 }, + { "tag_id": 382, "post_id": 531 }, + { "tag_id": 383, "post_id": 531 }, + { "tag_id": 0, "post_id": 531 }, + { "tag_id": 0, "post_id": 533 }, + { "tag_id": 144, "post_id": 539 }, + { "tag_id": 384, "post_id": 539 }, + { "tag_id": 385, "post_id": 539 }, + { "tag_id": 386, "post_id": 539 }, + { "tag_id": 0, "post_id": 539 }, + { "tag_id": 14, "post_id": 548 }, + { "tag_id": 387, "post_id": 548 }, + { "tag_id": 388, "post_id": 548 }, + { "tag_id": 334, "post_id": 548 }, + { "tag_id": 389, "post_id": 548 }, + { "tag_id": 0, "post_id": 548 }, + { "tag_id": 0, "post_id": 560 }, + { "tag_id": 390, "post_id": 560 }, + { "tag_id": 391, "post_id": 560 }, + { "tag_id": 0, "post_id": 560 }, + { "tag_id": 392, "post_id": 561 }, + { "tag_id": 334, "post_id": 561 }, + { "tag_id": 393, "post_id": 561 }, + { "tag_id": 0, "post_id": 561 }, + { "tag_id": 394, "post_id": 566 }, + { "tag_id": 270, "post_id": 566 }, + { "tag_id": 0, "post_id": 566 }, + { "tag_id": 165, "post_id": 567 }, + { "tag_id": 395, "post_id": 567 }, + { "tag_id": 0, "post_id": 567 }, + { "tag_id": 0, "post_id": 567 }, + { "tag_id": 106, "post_id": 584 }, + { "tag_id": 396, "post_id": 584 }, + { "tag_id": 0, "post_id": 584 }, + { "tag_id": 0, "post_id": 591 }, + { "tag_id": 0, "post_id": 591 }, + { "tag_id": 0, "post_id": 591 }, + { "tag_id": 397, "post_id": 598 }, + { "tag_id": 223, "post_id": 598 }, + { "tag_id": 398, "post_id": 598 }, + { "tag_id": 0, "post_id": 598 }, + { "tag_id": 90, "post_id": 600 }, + { "tag_id": 399, "post_id": 600 }, + { "tag_id": 400, "post_id": 600 }, + { "tag_id": 0, "post_id": 600 }, + { "tag_id": 0, "post_id": 19 }, + { "tag_id": 401, "post_id": 29 }, + { "tag_id": 401, "post_id": 56 }, + { "tag_id": 401, "post_id": 70 }, + { "tag_id": 401, "post_id": 71 }, + { "tag_id": 401, "post_id": 79 }, + { "tag_id": 401, "post_id": 97 }, + { "tag_id": 401, "post_id": 101 }, + { "tag_id": 401, "post_id": 102 }, + { "tag_id": 401, "post_id": 105 }, + { "tag_id": 401, "post_id": 110 }, + { "tag_id": 401, "post_id": 117 }, + { "tag_id": 401, "post_id": 130 }, + { "tag_id": 402, "post_id": 135 }, + { "tag_id": 403, "post_id": 135 }, + { "tag_id": 404, "post_id": 135 }, + { "tag_id": 405, "post_id": 135 }, + { "tag_id": 401, "post_id": 135 }, + { "tag_id": 406, "post_id": 143 }, + { "tag_id": 407, "post_id": 143 }, + { "tag_id": 405, "post_id": 143 }, + { "tag_id": 408, "post_id": 143 }, + { "tag_id": 409, "post_id": 143 }, + { "tag_id": 401, "post_id": 143 }, + { "tag_id": 405, "post_id": 158 }, + { "tag_id": 410, "post_id": 158 }, + { "tag_id": 411, "post_id": 158 }, + { "tag_id": 401, "post_id": 158 }, + { "tag_id": 412, "post_id": 165 }, + { "tag_id": 405, "post_id": 165 }, + { "tag_id": 413, "post_id": 165 }, + { "tag_id": 414, "post_id": 165 }, + { "tag_id": 415, "post_id": 165 }, + { "tag_id": 416, "post_id": 165 }, + { "tag_id": 401, "post_id": 165 }, + { "tag_id": 417, "post_id": 176 }, + { "tag_id": 19, "post_id": 176 }, + { "tag_id": 418, "post_id": 176 }, + { "tag_id": 419, "post_id": 176 }, + { "tag_id": 420, "post_id": 176 }, + { "tag_id": 57, "post_id": 176 }, + { "tag_id": 401, "post_id": 176 }, + { "tag_id": 421, "post_id": 177 }, + { "tag_id": 422, "post_id": 177 }, + { "tag_id": 278, "post_id": 177 }, + { "tag_id": 401, "post_id": 177 }, + { "tag_id": 423, "post_id": 179 }, + { "tag_id": 283, "post_id": 179 }, + { "tag_id": 401, "post_id": 179 }, + { "tag_id": 403, "post_id": 180 }, + { "tag_id": 424, "post_id": 180 }, + { "tag_id": 425, "post_id": 180 }, + { "tag_id": 405, "post_id": 180 }, + { "tag_id": 412, "post_id": 180 }, + { "tag_id": 401, "post_id": 180 }, + { "tag_id": 426, "post_id": 190 }, + { "tag_id": 427, "post_id": 190 }, + { "tag_id": 428, "post_id": 190 }, + { "tag_id": 429, "post_id": 190 }, + { "tag_id": 430, "post_id": 190 }, + { "tag_id": 401, "post_id": 190 }, + { "tag_id": 412, "post_id": 191 }, + { "tag_id": 431, "post_id": 191 }, + { "tag_id": 432, "post_id": 191 }, + { "tag_id": 401, "post_id": 191 }, + { "tag_id": 405, "post_id": 205 }, + { "tag_id": 433, "post_id": 205 }, + { "tag_id": 434, "post_id": 205 }, + { "tag_id": 435, "post_id": 205 }, + { "tag_id": 401, "post_id": 205 }, + { "tag_id": 436, "post_id": 229 }, + { "tag_id": 437, "post_id": 229 }, + { "tag_id": 401, "post_id": 229 }, + { "tag_id": 90, "post_id": 232 }, + { "tag_id": 336, "post_id": 232 }, + { "tag_id": 438, "post_id": 232 }, + { "tag_id": 439, "post_id": 232 }, + { "tag_id": 401, "post_id": 232 }, + { "tag_id": 63, "post_id": 242 }, + { "tag_id": 440, "post_id": 242 }, + { "tag_id": 0, "post_id": 242 }, + { "tag_id": 296, "post_id": 242 }, + { "tag_id": 401, "post_id": 242 }, + { "tag_id": 272, "post_id": 243 }, + { "tag_id": 441, "post_id": 243 }, + { "tag_id": 442, "post_id": 243 }, + { "tag_id": 443, "post_id": 243 }, + { "tag_id": 401, "post_id": 243 }, + { "tag_id": 444, "post_id": 244 }, + { "tag_id": 443, "post_id": 244 }, + { "tag_id": 445, "post_id": 244 }, + { "tag_id": 401, "post_id": 244 }, + { "tag_id": 446, "post_id": 250 }, + { "tag_id": 447, "post_id": 250 }, + { "tag_id": 448, "post_id": 250 }, + { "tag_id": 401, "post_id": 250 }, + { "tag_id": 412, "post_id": 251 }, + { "tag_id": 405, "post_id": 251 }, + { "tag_id": 449, "post_id": 251 }, + { "tag_id": 450, "post_id": 251 }, + { "tag_id": 401, "post_id": 251 }, + { "tag_id": 451, "post_id": 252 }, + { "tag_id": 452, "post_id": 252 }, + { "tag_id": 453, "post_id": 252 }, + { "tag_id": 89, "post_id": 252 }, + { "tag_id": 401, "post_id": 252 }, + { "tag_id": 89, "post_id": 268 }, + { "tag_id": 336, "post_id": 268 }, + { "tag_id": 428, "post_id": 268 }, + { "tag_id": 454, "post_id": 268 }, + { "tag_id": 401, "post_id": 268 }, + { "tag_id": 441, "post_id": 286 }, + { "tag_id": 0, "post_id": 286 }, + { "tag_id": 437, "post_id": 286 }, + { "tag_id": 401, "post_id": 286 }, + { "tag_id": 90, "post_id": 308 }, + { "tag_id": 412, "post_id": 308 }, + { "tag_id": 455, "post_id": 308 }, + { "tag_id": 401, "post_id": 308 }, + { "tag_id": 405, "post_id": 312 }, + { "tag_id": 431, "post_id": 312 }, + { "tag_id": 401, "post_id": 312 }, + { "tag_id": 90, "post_id": 313 }, + { "tag_id": 405, "post_id": 313 }, + { "tag_id": 456, "post_id": 313 }, + { "tag_id": 401, "post_id": 313 }, + { "tag_id": 457, "post_id": 315 }, + { "tag_id": 458, "post_id": 315 }, + { "tag_id": 401, "post_id": 315 }, + { "tag_id": 459, "post_id": 328 }, + { "tag_id": 460, "post_id": 328 }, + { "tag_id": 401, "post_id": 328 }, + { "tag_id": 461, "post_id": 338 }, + { "tag_id": 451, "post_id": 338 }, + { "tag_id": 462, "post_id": 338 }, + { "tag_id": 401, "post_id": 338 }, + { "tag_id": 452, "post_id": 349 }, + { "tag_id": 451, "post_id": 349 }, + { "tag_id": 89, "post_id": 349 }, + { "tag_id": 463, "post_id": 349 }, + { "tag_id": 401, "post_id": 349 }, + { "tag_id": 412, "post_id": 351 }, + { "tag_id": 90, "post_id": 351 }, + { "tag_id": 464, "post_id": 351 }, + { "tag_id": 401, "post_id": 351 }, + { "tag_id": 465, "post_id": 376 }, + { "tag_id": 0, "post_id": 376 }, + { "tag_id": 401, "post_id": 376 }, + { "tag_id": 90, "post_id": 377 }, + { "tag_id": 412, "post_id": 377 }, + { "tag_id": 466, "post_id": 377 }, + { "tag_id": 89, "post_id": 377 }, + { "tag_id": 464, "post_id": 377 }, + { "tag_id": 401, "post_id": 377 }, + { "tag_id": 439, "post_id": 395 }, + { "tag_id": 90, "post_id": 395 }, + { "tag_id": 467, "post_id": 395 }, + { "tag_id": 401, "post_id": 395 }, + { "tag_id": 468, "post_id": 397 }, + { "tag_id": 469, "post_id": 397 }, + { "tag_id": 401, "post_id": 397 }, + { "tag_id": 437, "post_id": 398 }, + { "tag_id": 470, "post_id": 398 }, + { "tag_id": 401, "post_id": 398 }, + { "tag_id": 90, "post_id": 401 }, + { "tag_id": 0, "post_id": 401 }, + { "tag_id": 401, "post_id": 401 }, + { "tag_id": 89, "post_id": 412 }, + { "tag_id": 14, "post_id": 412 }, + { "tag_id": 471, "post_id": 412 }, + { "tag_id": 401, "post_id": 412 }, + { "tag_id": 90, "post_id": 439 }, + { "tag_id": 439, "post_id": 439 }, + { "tag_id": 472, "post_id": 439 }, + { "tag_id": 401, "post_id": 439 }, + { "tag_id": 473, "post_id": 499 }, + { "tag_id": 474, "post_id": 499 }, + { "tag_id": 401, "post_id": 499 }, + { "tag_id": 443, "post_id": 511 }, + { "tag_id": 475, "post_id": 511 }, + { "tag_id": 476, "post_id": 511 }, + { "tag_id": 401, "post_id": 511 }, + { "tag_id": 477, "post_id": 513 }, + { "tag_id": 90, "post_id": 513 }, + { "tag_id": 478, "post_id": 513 }, + { "tag_id": 0, "post_id": 513 }, + { "tag_id": 479, "post_id": 513 }, + { "tag_id": 401, "post_id": 513 }, + { "tag_id": 480, "post_id": 562 }, + { "tag_id": 481, "post_id": 562 }, + { "tag_id": 482, "post_id": 562 }, + { "tag_id": 401, "post_id": 562 }, + { "tag_id": 483, "post_id": 564 }, + { "tag_id": 484, "post_id": 564 }, + { "tag_id": 485, "post_id": 564 }, + { "tag_id": 401, "post_id": 564 }, + { "tag_id": 486, "post_id": 574 }, + { "tag_id": 487, "post_id": 574 }, + { "tag_id": 270, "post_id": 574 }, + { "tag_id": 401, "post_id": 574 }, + { "tag_id": 401, "post_id": 22 }, + { "tag_id": 488, "post_id": 63 }, + { "tag_id": 488, "post_id": 66 }, + { "tag_id": 488, "post_id": 68 }, + { "tag_id": 488, "post_id": 69 }, + { "tag_id": 488, "post_id": 82 }, + { "tag_id": 488, "post_id": 89 }, + { "tag_id": 488, "post_id": 91 }, + { "tag_id": 488, "post_id": 92 }, + { "tag_id": 488, "post_id": 93 }, + { "tag_id": 488, "post_id": 94 }, + { "tag_id": 488, "post_id": 95 }, + { "tag_id": 488, "post_id": 98 }, + { "tag_id": 488, "post_id": 99 }, + { "tag_id": 488, "post_id": 100 }, + { "tag_id": 488, "post_id": 107 }, + { "tag_id": 488, "post_id": 108 }, + { "tag_id": 488, "post_id": 113 }, + { "tag_id": 488, "post_id": 119 }, + { "tag_id": 488, "post_id": 121 }, + { "tag_id": 488, "post_id": 122 }, + { "tag_id": 488, "post_id": 125 }, + { "tag_id": 488, "post_id": 126 }, + { "tag_id": 488, "post_id": 127 }, + { "tag_id": 488, "post_id": 132 }, + { "tag_id": 489, "post_id": 136 }, + { "tag_id": 490, "post_id": 136 }, + { "tag_id": 84, "post_id": 136 }, + { "tag_id": 15, "post_id": 136 }, + { "tag_id": 63, "post_id": 136 }, + { "tag_id": 0, "post_id": 136 }, + { "tag_id": 491, "post_id": 136 }, + { "tag_id": 488, "post_id": 136 }, + { "tag_id": 317, "post_id": 137 }, + { "tag_id": 492, "post_id": 137 }, + { "tag_id": 493, "post_id": 137 }, + { "tag_id": 494, "post_id": 137 }, + { "tag_id": 488, "post_id": 137 }, + { "tag_id": 495, "post_id": 138 }, + { "tag_id": 496, "post_id": 138 }, + { "tag_id": 497, "post_id": 138 }, + { "tag_id": 405, "post_id": 138 }, + { "tag_id": 498, "post_id": 138 }, + { "tag_id": 488, "post_id": 138 }, + { "tag_id": 110, "post_id": 144 }, + { "tag_id": 499, "post_id": 144 }, + { "tag_id": 2, "post_id": 144 }, + { "tag_id": 488, "post_id": 144 }, + { "tag_id": 500, "post_id": 145 }, + { "tag_id": 501, "post_id": 145 }, + { "tag_id": 496, "post_id": 145 }, + { "tag_id": 502, "post_id": 145 }, + { "tag_id": 503, "post_id": 145 }, + { "tag_id": 488, "post_id": 145 }, + { "tag_id": 90, "post_id": 147 }, + { "tag_id": 504, "post_id": 147 }, + { "tag_id": 505, "post_id": 147 }, + { "tag_id": 488, "post_id": 147 }, + { "tag_id": 506, "post_id": 148 }, + { "tag_id": 507, "post_id": 148 }, + { "tag_id": 222, "post_id": 148 }, + { "tag_id": 508, "post_id": 148 }, + { "tag_id": 488, "post_id": 148 }, + { "tag_id": 509, "post_id": 157 }, + { "tag_id": 2, "post_id": 157 }, + { "tag_id": 510, "post_id": 157 }, + { "tag_id": 511, "post_id": 157 }, + { "tag_id": 352, "post_id": 157 }, + { "tag_id": 512, "post_id": 157 }, + { "tag_id": 505, "post_id": 157 }, + { "tag_id": 488, "post_id": 157 }, + { "tag_id": 513, "post_id": 160 }, + { "tag_id": 514, "post_id": 160 }, + { "tag_id": 515, "post_id": 160 }, + { "tag_id": 516, "post_id": 160 }, + { "tag_id": 517, "post_id": 160 }, + { "tag_id": 518, "post_id": 160 }, + { "tag_id": 519, "post_id": 160 }, + { "tag_id": 520, "post_id": 160 }, + { "tag_id": 488, "post_id": 160 }, + { "tag_id": 52, "post_id": 161 }, + { "tag_id": 162, "post_id": 161 }, + { "tag_id": 521, "post_id": 161 }, + { "tag_id": 522, "post_id": 161 }, + { "tag_id": 34, "post_id": 161 }, + { "tag_id": 56, "post_id": 161 }, + { "tag_id": 488, "post_id": 161 }, + { "tag_id": 513, "post_id": 167 }, + { "tag_id": 505, "post_id": 167 }, + { "tag_id": 488, "post_id": 167 }, + { "tag_id": 89, "post_id": 169 }, + { "tag_id": 487, "post_id": 169 }, + { "tag_id": 0, "post_id": 169 }, + { "tag_id": 417, "post_id": 169 }, + { "tag_id": 488, "post_id": 169 }, + { "tag_id": 376, "post_id": 171 }, + { "tag_id": 523, "post_id": 171 }, + { "tag_id": 524, "post_id": 171 }, + { "tag_id": 525, "post_id": 171 }, + { "tag_id": 488, "post_id": 171 }, + { "tag_id": 526, "post_id": 178 }, + { "tag_id": 527, "post_id": 178 }, + { "tag_id": 528, "post_id": 178 }, + { "tag_id": 529, "post_id": 178 }, + { "tag_id": 530, "post_id": 178 }, + { "tag_id": 531, "post_id": 178 }, + { "tag_id": 488, "post_id": 178 }, + { "tag_id": 532, "post_id": 182 }, + { "tag_id": 533, "post_id": 182 }, + { "tag_id": 534, "post_id": 182 }, + { "tag_id": 535, "post_id": 182 }, + { "tag_id": 536, "post_id": 182 }, + { "tag_id": 454, "post_id": 182 }, + { "tag_id": 428, "post_id": 182 }, + { "tag_id": 488, "post_id": 182 }, + { "tag_id": 162, "post_id": 187 }, + { "tag_id": 52, "post_id": 187 }, + { "tag_id": 128, "post_id": 187 }, + { "tag_id": 56, "post_id": 187 }, + { "tag_id": 488, "post_id": 187 }, + { "tag_id": 90, "post_id": 188 }, + { "tag_id": 537, "post_id": 188 }, + { "tag_id": 89, "post_id": 188 }, + { "tag_id": 538, "post_id": 188 }, + { "tag_id": 488, "post_id": 188 }, + { "tag_id": 539, "post_id": 193 }, + { "tag_id": 488, "post_id": 193 }, + { "tag_id": 381, "post_id": 195 }, + { "tag_id": 382, "post_id": 195 }, + { "tag_id": 540, "post_id": 195 }, + { "tag_id": 541, "post_id": 195 }, + { "tag_id": 542, "post_id": 195 }, + { "tag_id": 107, "post_id": 195 }, + { "tag_id": 488, "post_id": 195 }, + { "tag_id": 494, "post_id": 197 }, + { "tag_id": 543, "post_id": 197 }, + { "tag_id": 317, "post_id": 197 }, + { "tag_id": 488, "post_id": 197 }, + { "tag_id": 544, "post_id": 199 }, + { "tag_id": 545, "post_id": 199 }, + { "tag_id": 546, "post_id": 199 }, + { "tag_id": 547, "post_id": 199 }, + { "tag_id": 548, "post_id": 199 }, + { "tag_id": 549, "post_id": 199 }, + { "tag_id": 311, "post_id": 199 }, + { "tag_id": 550, "post_id": 199 }, + { "tag_id": 488, "post_id": 199 }, + { "tag_id": 14, "post_id": 202 }, + { "tag_id": 319, "post_id": 202 }, + { "tag_id": 270, "post_id": 202 }, + { "tag_id": 315, "post_id": 202 }, + { "tag_id": 51, "post_id": 202 }, + { "tag_id": 509, "post_id": 202 }, + { "tag_id": 488, "post_id": 202 }, + { "tag_id": 551, "post_id": 203 }, + { "tag_id": 63, "post_id": 203 }, + { "tag_id": 552, "post_id": 203 }, + { "tag_id": 553, "post_id": 203 }, + { "tag_id": 554, "post_id": 203 }, + { "tag_id": 488, "post_id": 203 }, + { "tag_id": 270, "post_id": 206 }, + { "tag_id": 2, "post_id": 206 }, + { "tag_id": 555, "post_id": 206 }, + { "tag_id": 51, "post_id": 206 }, + { "tag_id": 505, "post_id": 206 }, + { "tag_id": 488, "post_id": 206 }, + { "tag_id": 71, "post_id": 207 }, + { "tag_id": 556, "post_id": 207 }, + { "tag_id": 84, "post_id": 207 }, + { "tag_id": 0, "post_id": 207 }, + { "tag_id": 63, "post_id": 207 }, + { "tag_id": 0, "post_id": 207 }, + { "tag_id": 557, "post_id": 207 }, + { "tag_id": 437, "post_id": 207 }, + { "tag_id": 488, "post_id": 207 }, + { "tag_id": 504, "post_id": 209 }, + { "tag_id": 63, "post_id": 209 }, + { "tag_id": 0, "post_id": 209 }, + { "tag_id": 488, "post_id": 209 }, + { "tag_id": 90, "post_id": 210 }, + { "tag_id": 558, "post_id": 210 }, + { "tag_id": 89, "post_id": 210 }, + { "tag_id": 504, "post_id": 210 }, + { "tag_id": 369, "post_id": 210 }, + { "tag_id": 488, "post_id": 210 }, + { "tag_id": 14, "post_id": 212 }, + { "tag_id": 70, "post_id": 212 }, + { "tag_id": 69, "post_id": 212 }, + { "tag_id": 88, "post_id": 212 }, + { "tag_id": 488, "post_id": 212 }, + { "tag_id": 559, "post_id": 214 }, + { "tag_id": 504, "post_id": 214 }, + { "tag_id": 90, "post_id": 214 }, + { "tag_id": 558, "post_id": 214 }, + { "tag_id": 437, "post_id": 214 }, + { "tag_id": 488, "post_id": 214 }, + { "tag_id": 90, "post_id": 215 }, + { "tag_id": 89, "post_id": 215 }, + { "tag_id": 558, "post_id": 215 }, + { "tag_id": 286, "post_id": 215 }, + { "tag_id": 488, "post_id": 215 }, + { "tag_id": 90, "post_id": 216 }, + { "tag_id": 558, "post_id": 216 }, + { "tag_id": 89, "post_id": 216 }, + { "tag_id": 504, "post_id": 216 }, + { "tag_id": 560, "post_id": 216 }, + { "tag_id": 516, "post_id": 216 }, + { "tag_id": 488, "post_id": 216 }, + { "tag_id": 14, "post_id": 220 }, + { "tag_id": 70, "post_id": 220 }, + { "tag_id": 69, "post_id": 220 }, + { "tag_id": 88, "post_id": 220 }, + { "tag_id": 561, "post_id": 220 }, + { "tag_id": 488, "post_id": 220 }, + { "tag_id": 504, "post_id": 221 }, + { "tag_id": 61, "post_id": 221 }, + { "tag_id": 562, "post_id": 221 }, + { "tag_id": 563, "post_id": 221 }, + { "tag_id": 488, "post_id": 221 }, + { "tag_id": 63, "post_id": 224 }, + { "tag_id": 125, "post_id": 224 }, + { "tag_id": 56, "post_id": 224 }, + { "tag_id": 20, "post_id": 224 }, + { "tag_id": 488, "post_id": 224 }, + { "tag_id": 505, "post_id": 225 }, + { "tag_id": 504, "post_id": 225 }, + { "tag_id": 90, "post_id": 225 }, + { "tag_id": 563, "post_id": 225 }, + { "tag_id": 488, "post_id": 225 }, + { "tag_id": 90, "post_id": 226 }, + { "tag_id": 564, "post_id": 226 }, + { "tag_id": 0, "post_id": 226 }, + { "tag_id": 488, "post_id": 226 }, + { "tag_id": 125, "post_id": 227 }, + { "tag_id": 63, "post_id": 227 }, + { "tag_id": 52, "post_id": 227 }, + { "tag_id": 565, "post_id": 227 }, + { "tag_id": 566, "post_id": 227 }, + { "tag_id": 56, "post_id": 227 }, + { "tag_id": 488, "post_id": 227 }, + { "tag_id": 272, "post_id": 230 }, + { "tag_id": 271, "post_id": 230 }, + { "tag_id": 454, "post_id": 230 }, + { "tag_id": 567, "post_id": 230 }, + { "tag_id": 488, "post_id": 230 }, + { "tag_id": 0, "post_id": 233 }, + { "tag_id": 63, "post_id": 233 }, + { "tag_id": 61, "post_id": 233 }, + { "tag_id": 568, "post_id": 233 }, + { "tag_id": 504, "post_id": 233 }, + { "tag_id": 488, "post_id": 233 }, + { "tag_id": 569, "post_id": 234 }, + { "tag_id": 570, "post_id": 234 }, + { "tag_id": 571, "post_id": 234 }, + { "tag_id": 417, "post_id": 234 }, + { "tag_id": 572, "post_id": 234 }, + { "tag_id": 488, "post_id": 234 }, + { "tag_id": 63, "post_id": 235 }, + { "tag_id": 0, "post_id": 235 }, + { "tag_id": 39, "post_id": 235 }, + { "tag_id": 504, "post_id": 235 }, + { "tag_id": 286, "post_id": 235 }, + { "tag_id": 488, "post_id": 235 }, + { "tag_id": 265, "post_id": 236 }, + { "tag_id": 0, "post_id": 236 }, + { "tag_id": 573, "post_id": 236 }, + { "tag_id": 574, "post_id": 236 }, + { "tag_id": 575, "post_id": 236 }, + { "tag_id": 576, "post_id": 236 }, + { "tag_id": 488, "post_id": 236 }, + { "tag_id": 577, "post_id": 238 }, + { "tag_id": 496, "post_id": 238 }, + { "tag_id": 14, "post_id": 238 }, + { "tag_id": 578, "post_id": 238 }, + { "tag_id": 89, "post_id": 238 }, + { "tag_id": 439, "post_id": 238 }, + { "tag_id": 488, "post_id": 238 }, + { "tag_id": 504, "post_id": 240 }, + { "tag_id": 283, "post_id": 240 }, + { "tag_id": 563, "post_id": 240 }, + { "tag_id": 14, "post_id": 240 }, + { "tag_id": 61, "post_id": 240 }, + { "tag_id": 488, "post_id": 240 }, + { "tag_id": 488, "post_id": 241 }, + { "tag_id": 14, "post_id": 246 }, + { "tag_id": 290, "post_id": 246 }, + { "tag_id": 579, "post_id": 246 }, + { "tag_id": 580, "post_id": 246 }, + { "tag_id": 488, "post_id": 246 }, + { "tag_id": 78, "post_id": 247 }, + { "tag_id": 57, "post_id": 247 }, + { "tag_id": 31, "post_id": 247 }, + { "tag_id": 28, "post_id": 247 }, + { "tag_id": 14, "post_id": 247 }, + { "tag_id": 265, "post_id": 247 }, + { "tag_id": 17, "post_id": 247 }, + { "tag_id": 581, "post_id": 247 }, + { "tag_id": 4, "post_id": 247 }, + { "tag_id": 488, "post_id": 247 }, + { "tag_id": 582, "post_id": 248 }, + { "tag_id": 583, "post_id": 248 }, + { "tag_id": 428, "post_id": 248 }, + { "tag_id": 439, "post_id": 248 }, + { "tag_id": 584, "post_id": 248 }, + { "tag_id": 585, "post_id": 248 }, + { "tag_id": 488, "post_id": 248 }, + { "tag_id": 57, "post_id": 257 }, + { "tag_id": 586, "post_id": 257 }, + { "tag_id": 509, "post_id": 257 }, + { "tag_id": 52, "post_id": 257 }, + { "tag_id": 510, "post_id": 257 }, + { "tag_id": 270, "post_id": 257 }, + { "tag_id": 352, "post_id": 257 }, + { "tag_id": 488, "post_id": 257 }, + { "tag_id": 526, "post_id": 259 }, + { "tag_id": 90, "post_id": 259 }, + { "tag_id": 336, "post_id": 259 }, + { "tag_id": 439, "post_id": 259 }, + { "tag_id": 488, "post_id": 259 }, + { "tag_id": 587, "post_id": 261 }, + { "tag_id": 0, "post_id": 261 }, + { "tag_id": 588, "post_id": 261 }, + { "tag_id": 488, "post_id": 261 }, + { "tag_id": 495, "post_id": 263 }, + { "tag_id": 270, "post_id": 263 }, + { "tag_id": 89, "post_id": 263 }, + { "tag_id": 279, "post_id": 263 }, + { "tag_id": 14, "post_id": 263 }, + { "tag_id": 563, "post_id": 263 }, + { "tag_id": 90, "post_id": 263 }, + { "tag_id": 283, "post_id": 263 }, + { "tag_id": 63, "post_id": 263 }, + { "tag_id": 488, "post_id": 263 }, + { "tag_id": 589, "post_id": 264 }, + { "tag_id": 89, "post_id": 264 }, + { "tag_id": 590, "post_id": 264 }, + { "tag_id": 90, "post_id": 264 }, + { "tag_id": 591, "post_id": 264 }, + { "tag_id": 488, "post_id": 264 }, + { "tag_id": 589, "post_id": 265 }, + { "tag_id": 439, "post_id": 265 }, + { "tag_id": 480, "post_id": 265 }, + { "tag_id": 488, "post_id": 265 }, + { "tag_id": 589, "post_id": 266 }, + { "tag_id": 270, "post_id": 266 }, + { "tag_id": 510, "post_id": 266 }, + { "tag_id": 569, "post_id": 266 }, + { "tag_id": 570, "post_id": 266 }, + { "tag_id": 488, "post_id": 266 }, + { "tag_id": 89, "post_id": 267 }, + { "tag_id": 336, "post_id": 267 }, + { "tag_id": 439, "post_id": 267 }, + { "tag_id": 496, "post_id": 267 }, + { "tag_id": 488, "post_id": 267 }, + { "tag_id": 63, "post_id": 269 }, + { "tag_id": 125, "post_id": 269 }, + { "tag_id": 56, "post_id": 269 }, + { "tag_id": 128, "post_id": 269 }, + { "tag_id": 488, "post_id": 269 }, + { "tag_id": 14, "post_id": 271 }, + { "tag_id": 592, "post_id": 271 }, + { "tag_id": 128, "post_id": 271 }, + { "tag_id": 593, "post_id": 271 }, + { "tag_id": 488, "post_id": 271 }, + { "tag_id": 56, "post_id": 273 }, + { "tag_id": 437, "post_id": 273 }, + { "tag_id": 52, "post_id": 273 }, + { "tag_id": 560, "post_id": 273 }, + { "tag_id": 126, "post_id": 273 }, + { "tag_id": 125, "post_id": 273 }, + { "tag_id": 488, "post_id": 273 }, + { "tag_id": 594, "post_id": 277 }, + { "tag_id": 56, "post_id": 277 }, + { "tag_id": 53, "post_id": 277 }, + { "tag_id": 52, "post_id": 277 }, + { "tag_id": 488, "post_id": 277 }, + { "tag_id": 22, "post_id": 281 }, + { "tag_id": 595, "post_id": 281 }, + { "tag_id": 596, "post_id": 281 }, + { "tag_id": 488, "post_id": 281 }, + { "tag_id": 89, "post_id": 282 }, + { "tag_id": 90, "post_id": 282 }, + { "tag_id": 597, "post_id": 282 }, + { "tag_id": 488, "post_id": 282 }, + { "tag_id": 446, "post_id": 284 }, + { "tag_id": 63, "post_id": 284 }, + { "tag_id": 598, "post_id": 284 }, + { "tag_id": 90, "post_id": 284 }, + { "tag_id": 488, "post_id": 284 }, + { "tag_id": 90, "post_id": 292 }, + { "tag_id": 597, "post_id": 292 }, + { "tag_id": 89, "post_id": 292 }, + { "tag_id": 128, "post_id": 292 }, + { "tag_id": 488, "post_id": 292 }, + { "tag_id": 334, "post_id": 295 }, + { "tag_id": 14, "post_id": 295 }, + { "tag_id": 335, "post_id": 295 }, + { "tag_id": 488, "post_id": 295 }, + { "tag_id": 599, "post_id": 297 }, + { "tag_id": 187, "post_id": 297 }, + { "tag_id": 3, "post_id": 297 }, + { "tag_id": 56, "post_id": 297 }, + { "tag_id": 488, "post_id": 297 }, + { "tag_id": 0, "post_id": 300 }, + { "tag_id": 462, "post_id": 300 }, + { "tag_id": 600, "post_id": 300 }, + { "tag_id": 488, "post_id": 300 }, + { "tag_id": 441, "post_id": 301 }, + { "tag_id": 437, "post_id": 301 }, + { "tag_id": 193, "post_id": 301 }, + { "tag_id": 601, "post_id": 301 }, + { "tag_id": 57, "post_id": 301 }, + { "tag_id": 488, "post_id": 301 }, + { "tag_id": 334, "post_id": 302 }, + { "tag_id": 14, "post_id": 302 }, + { "tag_id": 2, "post_id": 302 }, + { "tag_id": 488, "post_id": 302 }, + { "tag_id": 89, "post_id": 303 }, + { "tag_id": 90, "post_id": 303 }, + { "tag_id": 602, "post_id": 303 }, + { "tag_id": 488, "post_id": 303 }, + { "tag_id": 63, "post_id": 305 }, + { "tag_id": 603, "post_id": 305 }, + { "tag_id": 604, "post_id": 305 }, + { "tag_id": 488, "post_id": 305 }, + { "tag_id": 89, "post_id": 306 }, + { "tag_id": 605, "post_id": 306 }, + { "tag_id": 463, "post_id": 306 }, + { "tag_id": 39, "post_id": 306 }, + { "tag_id": 606, "post_id": 306 }, + { "tag_id": 607, "post_id": 306 }, + { "tag_id": 488, "post_id": 306 }, + { "tag_id": 179, "post_id": 307 }, + { "tag_id": 608, "post_id": 307 }, + { "tag_id": 488, "post_id": 307 }, + { "tag_id": 544, "post_id": 309 }, + { "tag_id": 550, "post_id": 309 }, + { "tag_id": 609, "post_id": 309 }, + { "tag_id": 488, "post_id": 309 }, + { "tag_id": 504, "post_id": 311 }, + { "tag_id": 273, "post_id": 311 }, + { "tag_id": 488, "post_id": 311 }, + { "tag_id": 89, "post_id": 314 }, + { "tag_id": 90, "post_id": 314 }, + { "tag_id": 610, "post_id": 314 }, + { "tag_id": 488, "post_id": 314 }, + { "tag_id": 611, "post_id": 316 }, + { "tag_id": 612, "post_id": 316 }, + { "tag_id": 613, "post_id": 316 }, + { "tag_id": 488, "post_id": 316 }, + { "tag_id": 334, "post_id": 317 }, + { "tag_id": 270, "post_id": 317 }, + { "tag_id": 14, "post_id": 317 }, + { "tag_id": 561, "post_id": 317 }, + { "tag_id": 488, "post_id": 317 }, + { "tag_id": 90, "post_id": 318 }, + { "tag_id": 614, "post_id": 318 }, + { "tag_id": 89, "post_id": 318 }, + { "tag_id": 615, "post_id": 318 }, + { "tag_id": 488, "post_id": 318 }, + { "tag_id": 599, "post_id": 319 }, + { "tag_id": 187, "post_id": 319 }, + { "tag_id": 488, "post_id": 319 }, + { "tag_id": 89, "post_id": 320 }, + { "tag_id": 0, "post_id": 320 }, + { "tag_id": 90, "post_id": 320 }, + { "tag_id": 488, "post_id": 320 }, + { "tag_id": 611, "post_id": 321 }, + { "tag_id": 612, "post_id": 321 }, + { "tag_id": 90, "post_id": 321 }, + { "tag_id": 464, "post_id": 321 }, + { "tag_id": 488, "post_id": 321 }, + { "tag_id": 89, "post_id": 322 }, + { "tag_id": 352, "post_id": 322 }, + { "tag_id": 463, "post_id": 322 }, + { "tag_id": 488, "post_id": 322 }, + { "tag_id": 334, "post_id": 323 }, + { "tag_id": 2, "post_id": 323 }, + { "tag_id": 14, "post_id": 323 }, + { "tag_id": 488, "post_id": 323 }, + { "tag_id": 89, "post_id": 324 }, + { "tag_id": 480, "post_id": 324 }, + { "tag_id": 90, "post_id": 324 }, + { "tag_id": 488, "post_id": 324 }, + { "tag_id": 488, "post_id": 325 }, + { "tag_id": 616, "post_id": 326 }, + { "tag_id": 617, "post_id": 326 }, + { "tag_id": 618, "post_id": 326 }, + { "tag_id": 619, "post_id": 326 }, + { "tag_id": 488, "post_id": 326 }, + { "tag_id": 63, "post_id": 329 }, + { "tag_id": 85, "post_id": 329 }, + { "tag_id": 620, "post_id": 329 }, + { "tag_id": 488, "post_id": 329 }, + { "tag_id": 480, "post_id": 331 }, + { "tag_id": 90, "post_id": 331 }, + { "tag_id": 0, "post_id": 331 }, + { "tag_id": 488, "post_id": 331 }, + { "tag_id": 488, "post_id": 332 }, + { "tag_id": 0, "post_id": 333 }, + { "tag_id": 621, "post_id": 333 }, + { "tag_id": 622, "post_id": 333 }, + { "tag_id": 623, "post_id": 333 }, + { "tag_id": 624, "post_id": 333 }, + { "tag_id": 488, "post_id": 333 }, + { "tag_id": 625, "post_id": 341 }, + { "tag_id": 626, "post_id": 341 }, + { "tag_id": 627, "post_id": 341 }, + { "tag_id": 180, "post_id": 341 }, + { "tag_id": 628, "post_id": 341 }, + { "tag_id": 629, "post_id": 341 }, + { "tag_id": 488, "post_id": 341 }, + { "tag_id": 334, "post_id": 345 }, + { "tag_id": 630, "post_id": 345 }, + { "tag_id": 631, "post_id": 345 }, + { "tag_id": 359, "post_id": 345 }, + { "tag_id": 632, "post_id": 345 }, + { "tag_id": 488, "post_id": 345 }, + { "tag_id": 563, "post_id": 347 }, + { "tag_id": 633, "post_id": 347 }, + { "tag_id": 90, "post_id": 347 }, + { "tag_id": 0, "post_id": 347 }, + { "tag_id": 504, "post_id": 347 }, + { "tag_id": 488, "post_id": 347 }, + { "tag_id": 634, "post_id": 352 }, + { "tag_id": 90, "post_id": 352 }, + { "tag_id": 504, "post_id": 352 }, + { "tag_id": 345, "post_id": 352 }, + { "tag_id": 334, "post_id": 352 }, + { "tag_id": 165, "post_id": 352 }, + { "tag_id": 488, "post_id": 352 }, + { "tag_id": 635, "post_id": 354 }, + { "tag_id": 636, "post_id": 354 }, + { "tag_id": 334, "post_id": 354 }, + { "tag_id": 488, "post_id": 354 }, + { "tag_id": 49, "post_id": 355 }, + { "tag_id": 89, "post_id": 355 }, + { "tag_id": 637, "post_id": 355 }, + { "tag_id": 488, "post_id": 355 }, + { "tag_id": 317, "post_id": 356 }, + { "tag_id": 185, "post_id": 356 }, + { "tag_id": 89, "post_id": 356 }, + { "tag_id": 90, "post_id": 356 }, + { "tag_id": 488, "post_id": 356 }, + { "tag_id": 0, "post_id": 357 }, + { "tag_id": 638, "post_id": 357 }, + { "tag_id": 39, "post_id": 357 }, + { "tag_id": 639, "post_id": 357 }, + { "tag_id": 488, "post_id": 357 }, + { "tag_id": 640, "post_id": 361 }, + { "tag_id": 641, "post_id": 361 }, + { "tag_id": 642, "post_id": 361 }, + { "tag_id": 643, "post_id": 361 }, + { "tag_id": 107, "post_id": 361 }, + { "tag_id": 488, "post_id": 361 }, + { "tag_id": 291, "post_id": 362 }, + { "tag_id": 265, "post_id": 362 }, + { "tag_id": 644, "post_id": 362 }, + { "tag_id": 645, "post_id": 362 }, + { "tag_id": 322, "post_id": 362 }, + { "tag_id": 488, "post_id": 362 }, + { "tag_id": 179, "post_id": 363 }, + { "tag_id": 84, "post_id": 363 }, + { "tag_id": 625, "post_id": 363 }, + { "tag_id": 488, "post_id": 363 }, + { "tag_id": 646, "post_id": 365 }, + { "tag_id": 480, "post_id": 365 }, + { "tag_id": 461, "post_id": 365 }, + { "tag_id": 437, "post_id": 365 }, + { "tag_id": 488, "post_id": 365 }, + { "tag_id": 63, "post_id": 366 }, + { "tag_id": 71, "post_id": 366 }, + { "tag_id": 647, "post_id": 366 }, + { "tag_id": 648, "post_id": 366 }, + { "tag_id": 649, "post_id": 366 }, + { "tag_id": 488, "post_id": 366 }, + { "tag_id": 646, "post_id": 367 }, + { "tag_id": 480, "post_id": 367 }, + { "tag_id": 437, "post_id": 367 }, + { "tag_id": 428, "post_id": 367 }, + { "tag_id": 462, "post_id": 367 }, + { "tag_id": 488, "post_id": 367 }, + { "tag_id": 461, "post_id": 373 }, + { "tag_id": 650, "post_id": 373 }, + { "tag_id": 0, "post_id": 373 }, + { "tag_id": 0, "post_id": 373 }, + { "tag_id": 488, "post_id": 373 }, + { "tag_id": 125, "post_id": 379 }, + { "tag_id": 63, "post_id": 379 }, + { "tag_id": 187, "post_id": 379 }, + { "tag_id": 488, "post_id": 379 }, + { "tag_id": 651, "post_id": 381 }, + { "tag_id": 652, "post_id": 381 }, + { "tag_id": 653, "post_id": 381 }, + { "tag_id": 654, "post_id": 381 }, + { "tag_id": 488, "post_id": 381 }, + { "tag_id": 655, "post_id": 382 }, + { "tag_id": 656, "post_id": 382 }, + { "tag_id": 488, "post_id": 382 }, + { "tag_id": 657, "post_id": 383 }, + { "tag_id": 658, "post_id": 383 }, + { "tag_id": 659, "post_id": 383 }, + { "tag_id": 488, "post_id": 383 }, + { "tag_id": 255, "post_id": 384 }, + { "tag_id": 521, "post_id": 384 }, + { "tag_id": 57, "post_id": 384 }, + { "tag_id": 488, "post_id": 384 }, + { "tag_id": 660, "post_id": 385 }, + { "tag_id": 661, "post_id": 385 }, + { "tag_id": 662, "post_id": 385 }, + { "tag_id": 488, "post_id": 385 }, + { "tag_id": 0, "post_id": 390 }, + { "tag_id": 663, "post_id": 390 }, + { "tag_id": 437, "post_id": 390 }, + { "tag_id": 488, "post_id": 390 }, + { "tag_id": 89, "post_id": 396 }, + { "tag_id": 90, "post_id": 396 }, + { "tag_id": 488, "post_id": 396 }, + { "tag_id": 461, "post_id": 399 }, + { "tag_id": 451, "post_id": 399 }, + { "tag_id": 462, "post_id": 399 }, + { "tag_id": 664, "post_id": 399 }, + { "tag_id": 488, "post_id": 399 }, + { "tag_id": 90, "post_id": 402 }, + { "tag_id": 480, "post_id": 402 }, + { "tag_id": 488, "post_id": 402 }, + { "tag_id": 665, "post_id": 403 }, + { "tag_id": 511, "post_id": 403 }, + { "tag_id": 550, "post_id": 403 }, + { "tag_id": 666, "post_id": 403 }, + { "tag_id": 488, "post_id": 403 }, + { "tag_id": 90, "post_id": 404 }, + { "tag_id": 488, "post_id": 404 }, + { "tag_id": 667, "post_id": 406 }, + { "tag_id": 541, "post_id": 406 }, + { "tag_id": 488, "post_id": 406 }, + { "tag_id": 406, "post_id": 409 }, + { "tag_id": 412, "post_id": 409 }, + { "tag_id": 31, "post_id": 409 }, + { "tag_id": 488, "post_id": 409 }, + { "tag_id": 504, "post_id": 415 }, + { "tag_id": 668, "post_id": 415 }, + { "tag_id": 488, "post_id": 415 }, + { "tag_id": 0, "post_id": 420 }, + { "tag_id": 56, "post_id": 420 }, + { "tag_id": 669, "post_id": 420 }, + { "tag_id": 560, "post_id": 420 }, + { "tag_id": 670, "post_id": 420 }, + { "tag_id": 125, "post_id": 420 }, + { "tag_id": 488, "post_id": 420 }, + { "tag_id": 56, "post_id": 428 }, + { "tag_id": 125, "post_id": 428 }, + { "tag_id": 291, "post_id": 428 }, + { "tag_id": 488, "post_id": 428 }, + { "tag_id": 270, "post_id": 430 }, + { "tag_id": 504, "post_id": 430 }, + { "tag_id": 671, "post_id": 430 }, + { "tag_id": 488, "post_id": 430 }, + { "tag_id": 504, "post_id": 432 }, + { "tag_id": 272, "post_id": 432 }, + { "tag_id": 412, "post_id": 432 }, + { "tag_id": 488, "post_id": 432 }, + { "tag_id": 152, "post_id": 438 }, + { "tag_id": 439, "post_id": 438 }, + { "tag_id": 84, "post_id": 438 }, + { "tag_id": 116, "post_id": 438 }, + { "tag_id": 90, "post_id": 438 }, + { "tag_id": 488, "post_id": 438 }, + { "tag_id": 478, "post_id": 441 }, + { "tag_id": 672, "post_id": 441 }, + { "tag_id": 488, "post_id": 441 }, + { "tag_id": 504, "post_id": 444 }, + { "tag_id": 673, "post_id": 444 }, + { "tag_id": 14, "post_id": 444 }, + { "tag_id": 488, "post_id": 444 }, + { "tag_id": 125, "post_id": 446 }, + { "tag_id": 3, "post_id": 446 }, + { "tag_id": 674, "post_id": 446 }, + { "tag_id": 193, "post_id": 446 }, + { "tag_id": 179, "post_id": 446 }, + { "tag_id": 488, "post_id": 446 }, + { "tag_id": 89, "post_id": 447 }, + { "tag_id": 675, "post_id": 447 }, + { "tag_id": 504, "post_id": 447 }, + { "tag_id": 488, "post_id": 447 }, + { "tag_id": 5, "post_id": 448 }, + { "tag_id": 12, "post_id": 448 }, + { "tag_id": 208, "post_id": 448 }, + { "tag_id": 0, "post_id": 448 }, + { "tag_id": 17, "post_id": 448 }, + { "tag_id": 488, "post_id": 448 }, + { "tag_id": 676, "post_id": 450 }, + { "tag_id": 677, "post_id": 450 }, + { "tag_id": 678, "post_id": 450 }, + { "tag_id": 488, "post_id": 450 }, + { "tag_id": 76, "post_id": 451 }, + { "tag_id": 102, "post_id": 451 }, + { "tag_id": 488, "post_id": 451 }, + { "tag_id": 504, "post_id": 452 }, + { "tag_id": 673, "post_id": 452 }, + { "tag_id": 14, "post_id": 452 }, + { "tag_id": 488, "post_id": 452 }, + { "tag_id": 0, "post_id": 454 }, + { "tag_id": 0, "post_id": 454 }, + { "tag_id": 14, "post_id": 454 }, + { "tag_id": 679, "post_id": 454 }, + { "tag_id": 488, "post_id": 454 }, + { "tag_id": 0, "post_id": 457 }, + { "tag_id": 679, "post_id": 457 }, + { "tag_id": 680, "post_id": 457 }, + { "tag_id": 0, "post_id": 457 }, + { "tag_id": 14, "post_id": 457 }, + { "tag_id": 488, "post_id": 457 }, + { "tag_id": 681, "post_id": 461 }, + { "tag_id": 679, "post_id": 461 }, + { "tag_id": 673, "post_id": 461 }, + { "tag_id": 682, "post_id": 461 }, + { "tag_id": 14, "post_id": 461 }, + { "tag_id": 488, "post_id": 461 }, + { "tag_id": 683, "post_id": 463 }, + { "tag_id": 0, "post_id": 463 }, + { "tag_id": 684, "post_id": 463 }, + { "tag_id": 685, "post_id": 463 }, + { "tag_id": 488, "post_id": 463 }, + { "tag_id": 488, "post_id": 471 }, + { "tag_id": 488, "post_id": 472 }, + { "tag_id": 488, "post_id": 473 }, + { "tag_id": 488, "post_id": 475 }, + { "tag_id": 686, "post_id": 480 }, + { "tag_id": 277, "post_id": 480 }, + { "tag_id": 687, "post_id": 480 }, + { "tag_id": 488, "post_id": 480 }, + { "tag_id": 688, "post_id": 481 }, + { "tag_id": 199, "post_id": 481 }, + { "tag_id": 488, "post_id": 481 }, + { "tag_id": 673, "post_id": 486 }, + { "tag_id": 0, "post_id": 486 }, + { "tag_id": 679, "post_id": 486 }, + { "tag_id": 488, "post_id": 486 }, + { "tag_id": 673, "post_id": 491 }, + { "tag_id": 689, "post_id": 491 }, + { "tag_id": 0, "post_id": 491 }, + { "tag_id": 690, "post_id": 491 }, + { "tag_id": 488, "post_id": 491 }, + { "tag_id": 691, "post_id": 493 }, + { "tag_id": 692, "post_id": 493 }, + { "tag_id": 693, "post_id": 493 }, + { "tag_id": 694, "post_id": 493 }, + { "tag_id": 695, "post_id": 493 }, + { "tag_id": 488, "post_id": 493 }, + { "tag_id": 696, "post_id": 505 }, + { "tag_id": 697, "post_id": 505 }, + { "tag_id": 0, "post_id": 505 }, + { "tag_id": 488, "post_id": 505 }, + { "tag_id": 599, "post_id": 506 }, + { "tag_id": 125, "post_id": 506 }, + { "tag_id": 698, "post_id": 506 }, + { "tag_id": 488, "post_id": 506 }, + { "tag_id": 56, "post_id": 508 }, + { "tag_id": 699, "post_id": 508 }, + { "tag_id": 488, "post_id": 508 }, + { "tag_id": 700, "post_id": 512 }, + { "tag_id": 673, "post_id": 512 }, + { "tag_id": 488, "post_id": 512 }, + { "tag_id": 557, "post_id": 514 }, + { "tag_id": 0, "post_id": 514 }, + { "tag_id": 701, "post_id": 514 }, + { "tag_id": 488, "post_id": 514 }, + { "tag_id": 667, "post_id": 515 }, + { "tag_id": 702, "post_id": 515 }, + { "tag_id": 0, "post_id": 515 }, + { "tag_id": 703, "post_id": 515 }, + { "tag_id": 0, "post_id": 515 }, + { "tag_id": 488, "post_id": 515 }, + { "tag_id": 700, "post_id": 516 }, + { "tag_id": 704, "post_id": 516 }, + { "tag_id": 705, "post_id": 516 }, + { "tag_id": 706, "post_id": 516 }, + { "tag_id": 488, "post_id": 516 }, + { "tag_id": 707, "post_id": 521 }, + { "tag_id": 0, "post_id": 521 }, + { "tag_id": 90, "post_id": 521 }, + { "tag_id": 478, "post_id": 521 }, + { "tag_id": 488, "post_id": 521 }, + { "tag_id": 152, "post_id": 522 }, + { "tag_id": 708, "post_id": 522 }, + { "tag_id": 709, "post_id": 522 }, + { "tag_id": 377, "post_id": 522 }, + { "tag_id": 710, "post_id": 522 }, + { "tag_id": 193, "post_id": 522 }, + { "tag_id": 488, "post_id": 522 }, + { "tag_id": 90, "post_id": 524 }, + { "tag_id": 711, "post_id": 524 }, + { "tag_id": 139, "post_id": 524 }, + { "tag_id": 0, "post_id": 524 }, + { "tag_id": 488, "post_id": 524 }, + { "tag_id": 671, "post_id": 535 }, + { "tag_id": 712, "post_id": 535 }, + { "tag_id": 713, "post_id": 535 }, + { "tag_id": 700, "post_id": 535 }, + { "tag_id": 488, "post_id": 535 }, + { "tag_id": 199, "post_id": 541 }, + { "tag_id": 89, "post_id": 541 }, + { "tag_id": 14, "post_id": 541 }, + { "tag_id": 488, "post_id": 541 }, + { "tag_id": 673, "post_id": 545 }, + { "tag_id": 714, "post_id": 545 }, + { "tag_id": 700, "post_id": 545 }, + { "tag_id": 0, "post_id": 545 }, + { "tag_id": 488, "post_id": 545 }, + { "tag_id": 478, "post_id": 554 }, + { "tag_id": 715, "post_id": 554 }, + { "tag_id": 709, "post_id": 554 }, + { "tag_id": 716, "post_id": 554 }, + { "tag_id": 717, "post_id": 554 }, + { "tag_id": 718, "post_id": 554 }, + { "tag_id": 488, "post_id": 554 }, + { "tag_id": 199, "post_id": 556 }, + { "tag_id": 90, "post_id": 556 }, + { "tag_id": 719, "post_id": 556 }, + { "tag_id": 720, "post_id": 556 }, + { "tag_id": 488, "post_id": 556 }, + { "tag_id": 90, "post_id": 568 }, + { "tag_id": 89, "post_id": 568 }, + { "tag_id": 705, "post_id": 568 }, + { "tag_id": 721, "post_id": 568 }, + { "tag_id": 488, "post_id": 568 }, + { "tag_id": 704, "post_id": 569 }, + { "tag_id": 700, "post_id": 569 }, + { "tag_id": 488, "post_id": 569 }, + { "tag_id": 90, "post_id": 575 }, + { "tag_id": 722, "post_id": 575 }, + { "tag_id": 488, "post_id": 575 }, + { "tag_id": 0, "post_id": 578 }, + { "tag_id": 90, "post_id": 578 }, + { "tag_id": 478, "post_id": 578 }, + { "tag_id": 488, "post_id": 578 }, + { "tag_id": 723, "post_id": 580 }, + { "tag_id": 724, "post_id": 580 }, + { "tag_id": 167, "post_id": 580 }, + { "tag_id": 725, "post_id": 580 }, + { "tag_id": 726, "post_id": 580 }, + { "tag_id": 727, "post_id": 580 }, + { "tag_id": 728, "post_id": 580 }, + { "tag_id": 89, "post_id": 580 }, + { "tag_id": 488, "post_id": 580 }, + { "tag_id": 461, "post_id": 582 }, + { "tag_id": 729, "post_id": 582 }, + { "tag_id": 0, "post_id": 582 }, + { "tag_id": 334, "post_id": 582 }, + { "tag_id": 488, "post_id": 582 }, + { "tag_id": 488, "post_id": 585 }, + { "tag_id": 488, "post_id": 601 }, + { "tag_id": 180, "post_id": 602 }, + { "tag_id": 257, "post_id": 602 }, + { "tag_id": 730, "post_id": 602 }, + { "tag_id": 731, "post_id": 602 }, + { "tag_id": 732, "post_id": 602 }, + { "tag_id": 733, "post_id": 602 }, + { "tag_id": 734, "post_id": 602 }, + { "tag_id": 488, "post_id": 602 }, + { "tag_id": 488, "post_id": 603 }, + { "tag_id": 488, "post_id": 604 }, + { "tag_id": 488, "post_id": 605 }, + { "tag_id": 488, "post_id": 606 }, + { "tag_id": 488, "post_id": 23 }, + { "tag_id": 488, "post_id": 25 }, + { "tag_id": 488, "post_id": 75 }, + { "tag_id": 488, "post_id": 152 }, + { "tag_id": 488, "post_id": 237 } + ], + "users": [ + { + "id": 3, + "name": "Publisher Publisher", + "email": "publisher@iteam.se" + }, + { + "id": 1086, + "name": "Erik Hjortsberg", + "email": "erik.hjortsberg@iteam.se" + }, + { + "id": 1087, + "name": "Christian Landgren", + "email": "christian.landgren@iteam.se" + }, + { + "id": 6, + "name": "Anders Bornholm", + "email": "anders.bornholm@iteam.se" + }, + { + "id": 1089, + "name": "Tommy Söderström", + "email": "tommy.soderstrom@iteam.se" + }, + { + "id": 1085, + "name": "Magnus Tjerneld", + "email": "magnus.tjerneld@iteam.se" + }, + { + "id": 4, + "name": "Administrators Administrator", + "email": "admin@iteam.se" + }, + { + "id": 1091, + "name": "Christian Ridderstolpe", + "email": "christian.ridderstolpe@iteam.se" + }, + { + "id": 1093, + "name": "Johanna Gustafsson", + "email": "johanna.gustafsson@iteam.se" + }, + { "id": 1094, "name": "Ola Wallin", "email": "ola.wallin@iteam.se" }, + { + "id": 1096, + "name": "Sebastian Nilsson", + "email": "sebastian.nilsson@iteam.se" + }, + { + "id": 1098, + "name": "Martin Loman", + "email": "martin.loman@iteam.se" + }, + { + "id": 1088, + "name": "Mats Egardt", + "email": "mats.egardt@iteam.se" + }, + { + "id": 1090, + "name": "Magnus Rygart", + "email": "d66f4cf4-1836-4be8-b148-d2cd1cb2ee23@iteam.se" + }, + { + "id": 1095, + "name": "Rasmus Fredriksson", + "email": "rasmus.fredriksson@iteam.se" + }, + { + "id": 1097, + "name": "Hans Rollman", + "email": "hans.rollman@iteam.se" + }, + { + "id": 1092, + "name": "Mattias Jonsson", + "email": "mattias.jonsson@iteam.se" + } + ], + "roles_users": [ + { "user_id": 3, "role_id": 1 }, + { "user_id": 1086, "role_id": 1 }, + { "user_id": 1087, "role_id": 1 }, + { "user_id": 6, "role_id": 1 }, + { "user_id": 1089, "role_id": 1 }, + { "user_id": 1085, "role_id": 1 }, + { "user_id": 4, "role_id": 1 }, + { "user_id": 1091, "role_id": 1 }, + { "user_id": 1093, "role_id": 1 }, + { "user_id": 1094, "role_id": 1 }, + { "user_id": 1096, "role_id": 1 }, + { "user_id": 1098, "role_id": 1 }, + { "user_id": 1088, "role_id": 1 }, + { "user_id": 1090, "role_id": 1 }, + { "user_id": 1095, "role_id": 1 }, + { "user_id": 1097, "role_id": 1 }, + { "user_id": 1092, "role_id": 1 } + ] + } + } + ] +} diff --git a/client/src/lib/sanity.server.js b/client/src/lib/sanity.server.js index 2297e392..ef1cd2c4 100644 --- a/client/src/lib/sanity.server.js +++ b/client/src/lib/sanity.server.js @@ -6,10 +6,13 @@ export const sanityClient = createClient(config) // Set up a preview client with serverless authentication for drafts export const previewClient = createClient({ - ...config, - useCdn: false, - token: process.env.SANITY_API_TOKEN, + ...config, + useCdn: false, + token: process.env.SANITY_API_TOKEN, }) +console.log('Sanity client created', process.env.SANITY_API_TOKEN) + // Helper function for easily switching between normal client and preview client -export const getClient = (usePreview) => (usePreview ? previewClient : sanityClient) +export const getClient = (usePreview) => + usePreview ? previewClient : sanityClient diff --git a/client/src/pages/_document.js b/client/src/pages/_document.js index d3f47cfd..2a59afeb 100644 --- a/client/src/pages/_document.js +++ b/client/src/pages/_document.js @@ -1,5 +1,5 @@ -import Document from "next/document" -import { ServerStyleSheet } from "styled-components" +import Document from 'next/document' +import { ServerStyleSheet } from 'styled-components' export default class MyDocument extends Document { static async getInitialProps(ctx) { diff --git a/client/yarn.lock b/client/yarn.lock index 0515de13..93e8a3e9 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -2,155 +2,184 @@ # yarn lockfile v1 -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.3", "@babel/code-frame@7.12.11": - "integrity" "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==" - "resolved" "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz" - "version" "7.12.11" +"@babel/code-frame@7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== dependencies: "@babel/highlight" "^7.10.4" -"@babel/generator@^7.10.3": - "integrity" "sha512-drt8MUHbEqRzNR0xnF8nMehbY11b1SDkRw03PSNH/3Rb2Z35oxkddVSi3rcaak0YJQ86PCuE7Qx1jSFhbLNBMA==" - "resolved" "https://registry.npmjs.org/@babel/generator/-/generator-7.10.3.tgz" - "version" "7.10.3" +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" + integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== dependencies: - "@babel/types" "^7.10.3" - "jsesc" "^2.5.1" - "lodash" "^4.17.13" - "source-map" "^0.5.0" + "@babel/highlight" "^7.16.7" -"@babel/helper-annotate-as-pure@^7.0.0": - "integrity" "sha512-ewp3rvJEwLaHgyWGe4wQssC2vjks3E80WiUe2BpMb0KhreTjMROCbxXcEovTrbeGVdQct5VjQfrv9EgC+xMzCw==" - "resolved" "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.1.tgz" - "version" "7.10.1" +"@babel/generator@^7.17.0": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.0.tgz#7bd890ba706cd86d3e2f727322346ffdbf98f65e" + integrity sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw== dependencies: - "@babel/types" "^7.10.1" + "@babel/types" "^7.17.0" + jsesc "^2.5.1" + source-map "^0.5.0" -"@babel/helper-function-name@^7.10.3": - "integrity" "sha512-FvSj2aiOd8zbeqijjgqdMDSyxsGHaMt5Tr0XjQsGKHD3/1FP3wksjnLAWzxw7lvXiej8W1Jt47SKTZ6upQNiRw==" - "resolved" "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.3.tgz" - "version" "7.10.3" +"@babel/helper-annotate-as-pure@^7.0.0", "@babel/helper-annotate-as-pure@^7.16.0": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" + integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== dependencies: - "@babel/helper-get-function-arity" "^7.10.3" - "@babel/template" "^7.10.3" - "@babel/types" "^7.10.3" + "@babel/types" "^7.16.7" -"@babel/helper-get-function-arity@^7.10.3": - "integrity" "sha512-iUD/gFsR+M6uiy69JA6fzM5seno8oE85IYZdbVVEuQaZlEzMO2MXblh+KSPJgsZAUx0EEbWXU0yJaW7C9CdAVg==" - "resolved" "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.3.tgz" - "version" "7.10.3" +"@babel/helper-environment-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" + integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== dependencies: - "@babel/types" "^7.10.3" + "@babel/types" "^7.16.7" -"@babel/helper-module-imports@^7.0.0": - "integrity" "sha512-Jtqw5M9pahLSUWA+76nhK9OG8nwYXzhQzVIGFoNaHnXF/r4l7kz4Fl0UAW7B6mqC5myoJiBP5/YQlXQTMfHI9w==" - "resolved" "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.3.tgz" - "version" "7.10.3" +"@babel/helper-function-name@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" + integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== dependencies: - "@babel/types" "^7.10.3" + "@babel/helper-get-function-arity" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/types" "^7.16.7" -"@babel/helper-plugin-utils@^7.14.5": - "integrity" "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - "resolved" "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz" - "version" "7.14.5" +"@babel/helper-get-function-arity@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419" + integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-hoist-variables@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" + integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== + dependencies: + "@babel/types" "^7.16.7" -"@babel/helper-split-export-declaration@^7.10.1": - "integrity" "sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==" - "resolved" "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz" - "version" "7.10.1" +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.16.0": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" + integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== dependencies: - "@babel/types" "^7.10.1" + "@babel/types" "^7.16.7" -"@babel/helper-validator-identifier@^7.10.3", "@babel/helper-validator-identifier@^7.14.0": - "integrity" "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" - "resolved" "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz" - "version" "7.14.0" +"@babel/helper-plugin-utils@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz" + integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== + +"@babel/helper-split-export-declaration@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" + integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== + dependencies: + "@babel/types" "^7.16.7" "@babel/helper-validator-identifier@^7.14.9": - "integrity" "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==" - "resolved" "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz" - "version" "7.15.7" + version "7.15.7" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz" + integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== + +"@babel/helper-validator-identifier@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" + integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== "@babel/highlight@^7.10.4": - "integrity" "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==" - "resolved" "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz" - "version" "7.14.0" + version "7.14.0" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz" + integrity sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg== dependencies: "@babel/helper-validator-identifier" "^7.14.0" - "chalk" "^2.0.0" - "js-tokens" "^4.0.0" + chalk "^2.0.0" + js-tokens "^4.0.0" -"@babel/parser@^7.10.3": - "integrity" "sha512-oJtNJCMFdIMwXGmx+KxuaD7i3b8uS7TTFYW/FNG2BT8m+fmGHoiPYoH0Pe3gya07WuFmM5FCDIr1x0irkD/hyA==" - "resolved" "https://registry.npmjs.org/@babel/parser/-/parser-7.10.3.tgz" - "version" "7.10.3" +"@babel/highlight@^7.16.7": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" + integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.16.7", "@babel/parser@^7.17.0": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.0.tgz#f0ac33eddbe214e4105363bb17c3341c5ffcc43c" + integrity sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw== "@babel/plugin-syntax-jsx@7.14.5": - "integrity" "sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz" - "version" "7.14.5" + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz" + integrity sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/runtime@^7.12.5", "@babel/runtime@^7.4.2", "@babel/runtime@^7.4.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": - "integrity" "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==" - "resolved" "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz" - "version" "7.12.5" +"@babel/runtime@7.15.3": + version "7.15.3" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.3.tgz" + integrity sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA== dependencies: - "regenerator-runtime" "^0.13.4" + regenerator-runtime "^0.13.4" -"@babel/runtime@7.15.3": - "integrity" "sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA==" - "resolved" "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.3.tgz" - "version" "7.15.3" +"@babel/runtime@^7.12.5", "@babel/runtime@^7.4.2", "@babel/runtime@^7.4.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": + version "7.12.5" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz" + integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg== dependencies: - "regenerator-runtime" "^0.13.4" + regenerator-runtime "^0.13.4" -"@babel/template@^7.10.3": - "integrity" "sha512-5BjI4gdtD+9fHZUsaxPHPNpwa+xRkDO7c7JbhYn2afvrkDu5SfAAbi9AIMXw2xEhO/BR35TqiW97IqNvCo/GqA==" - "resolved" "https://registry.npmjs.org/@babel/template/-/template-7.10.3.tgz" - "version" "7.10.3" +"@babel/template@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" + integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== dependencies: - "@babel/code-frame" "^7.10.3" - "@babel/parser" "^7.10.3" - "@babel/types" "^7.10.3" + "@babel/code-frame" "^7.16.7" + "@babel/parser" "^7.16.7" + "@babel/types" "^7.16.7" "@babel/traverse@^7.4.5": - "integrity" "sha512-qO6623eBFhuPm0TmmrUFMT1FulCmsSeJuVGhiLodk2raUDFhhTECLd9E9jC4LBIWziqt4wgF6KuXE4d+Jz9yug==" - "resolved" "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.3.tgz" - "version" "7.10.3" - dependencies: - "@babel/code-frame" "^7.10.3" - "@babel/generator" "^7.10.3" - "@babel/helper-function-name" "^7.10.3" - "@babel/helper-split-export-declaration" "^7.10.1" - "@babel/parser" "^7.10.3" - "@babel/types" "^7.10.3" - "debug" "^4.1.0" - "globals" "^11.1.0" - "lodash" "^4.17.13" - -"@babel/types@^7.10.1", "@babel/types@^7.10.3": - "integrity" "sha512-nZxaJhBXBQ8HVoIcGsf9qWep3Oh3jCENK54V4mRF7qaJabVsAYdbTtmSD8WmAp1R6ytPiu5apMwSXyxB1WlaBA==" - "resolved" "https://registry.npmjs.org/@babel/types/-/types-7.10.3.tgz" - "version" "7.10.3" - dependencies: - "@babel/helper-validator-identifier" "^7.10.3" - "lodash" "^4.17.13" - "to-fast-properties" "^2.0.0" + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.0.tgz#3143e5066796408ccc880a33ecd3184f3e75cd30" + integrity sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.17.0" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/parser" "^7.17.0" + "@babel/types" "^7.17.0" + debug "^4.1.0" + globals "^11.1.0" "@babel/types@7.15.0": - "integrity" "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==" - "resolved" "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz" - "version" "7.15.0" + version "7.15.0" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz" + integrity sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ== dependencies: "@babel/helper-validator-identifier" "^7.14.9" - "to-fast-properties" "^2.0.0" + to-fast-properties "^2.0.0" + +"@babel/types@^7.16.7", "@babel/types@^7.17.0": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b" + integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + to-fast-properties "^2.0.0" "@emotion/cache@^10.0.27", "@emotion/cache@^10.0.9": - "integrity" "sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ==" - "resolved" "https://registry.npmjs.org/@emotion/cache/-/cache-10.0.29.tgz" - "version" "10.0.29" + version "10.0.29" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-10.0.29.tgz#87e7e64f412c060102d589fe7c6dc042e6f9d1e0" + integrity sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ== dependencies: "@emotion/sheet" "0.9.4" "@emotion/stylis" "0.8.5" @@ -158,9 +187,9 @@ "@emotion/weak-memoize" "0.2.5" "@emotion/core@^10.0.9": - "integrity" "sha512-pH8UueKYO5jgg0Iq+AmCLxBsvuGtvlmiDCOuv8fGNYn3cowFpLN98L8zO56U0H1PjDIyAlXymgL3Wu7u7v6hbA==" - "resolved" "https://registry.npmjs.org/@emotion/core/-/core-10.0.28.tgz" - "version" "10.0.28" + version "10.3.1" + resolved "https://registry.yarnpkg.com/@emotion/core/-/core-10.3.1.tgz#4021b6d8b33b3304d48b0bb478485e7d7421c69d" + integrity sha512-447aUEjPIm0MnE6QYIaFz9VQOHSXf4Iu6EWOIqq11EAPqinkSZmfymPTmlOE3QjLv846lH4JVZBUOtwGbuQoww== dependencies: "@babel/runtime" "^7.5.5" "@emotion/cache" "^10.0.27" @@ -170,3771 +199,3738 @@ "@emotion/utils" "0.11.3" "@emotion/css@^10.0.27", "@emotion/css@^10.0.9": - "integrity" "sha512-6wZjsvYeBhyZQYNrGoR5yPMYbMBNEnanDrqmsqS1mzDm1cOTu12shvl2j4QHNS36UaTE0USIJawCH9C8oW34Zw==" - "resolved" "https://registry.npmjs.org/@emotion/css/-/css-10.0.27.tgz" - "version" "10.0.27" + version "10.0.27" + resolved "https://registry.yarnpkg.com/@emotion/css/-/css-10.0.27.tgz#3a7458198fbbebb53b01b2b87f64e5e21241e14c" + integrity sha512-6wZjsvYeBhyZQYNrGoR5yPMYbMBNEnanDrqmsqS1mzDm1cOTu12shvl2j4QHNS36UaTE0USIJawCH9C8oW34Zw== dependencies: "@emotion/serialize" "^0.11.15" "@emotion/utils" "0.11.3" - "babel-plugin-emotion" "^10.0.27" + babel-plugin-emotion "^10.0.27" "@emotion/hash@0.8.0": - "integrity" "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" - "resolved" "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz" - "version" "0.8.0" + version "0.8.0" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" + integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== "@emotion/is-prop-valid@^0.8.8": - "integrity" "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==" - "resolved" "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz" - "version" "0.8.8" + version "0.8.8" + resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz#db28b1c4368a259b60a97311d6a952d4fd01ac1a" + integrity sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA== dependencies: "@emotion/memoize" "0.7.4" "@emotion/memoize@0.7.4": - "integrity" "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==" - "resolved" "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz" - "version" "0.7.4" + version "0.7.4" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb" + integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw== "@emotion/serialize@^0.11.15", "@emotion/serialize@^0.11.16": - "integrity" "sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg==" - "resolved" "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.16.tgz" - "version" "0.11.16" + version "0.11.16" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-0.11.16.tgz#dee05f9e96ad2fb25a5206b6d759b2d1ed3379ad" + integrity sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg== dependencies: "@emotion/hash" "0.8.0" "@emotion/memoize" "0.7.4" "@emotion/unitless" "0.7.5" "@emotion/utils" "0.11.3" - "csstype" "^2.5.7" + csstype "^2.5.7" "@emotion/sheet@0.9.4": - "integrity" "sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA==" - "resolved" "https://registry.npmjs.org/@emotion/sheet/-/sheet-0.9.4.tgz" - "version" "0.9.4" + version "0.9.4" + resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-0.9.4.tgz#894374bea39ec30f489bbfc3438192b9774d32e5" + integrity sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA== -"@emotion/stylis@^0.8.4", "@emotion/stylis@0.8.5": - "integrity" "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==" - "resolved" "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz" - "version" "0.8.5" +"@emotion/stylis@0.8.5", "@emotion/stylis@^0.8.4": + version "0.8.5" + resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04" + integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ== -"@emotion/unitless@^0.7.4", "@emotion/unitless@0.7.5": - "integrity" "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" - "resolved" "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz" - "version" "0.7.5" +"@emotion/unitless@0.7.5", "@emotion/unitless@^0.7.4": + version "0.7.5" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" + integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== "@emotion/utils@0.11.3": - "integrity" "sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw==" - "resolved" "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.3.tgz" - "version" "0.11.3" + version "0.11.3" + resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-0.11.3.tgz#a759863867befa7e583400d322652a3f44820924" + integrity sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw== "@emotion/weak-memoize@0.2.5": - "integrity" "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==" - "resolved" "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz" - "version" "0.2.5" + version "0.2.5" + resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" + integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== "@hapi/accept@5.0.2": - "integrity" "sha512-CmzBx/bXUR8451fnZRuZAJRlzgm0Jgu5dltTX/bszmR2lheb9BpyN47Q1RbaGTsvFzn0PXAEs+lXDKfshccYZw==" - "resolved" "https://registry.npmjs.org/@hapi/accept/-/accept-5.0.2.tgz" - "version" "5.0.2" + version "5.0.2" + resolved "https://registry.yarnpkg.com/@hapi/accept/-/accept-5.0.2.tgz#ab7043b037e68b722f93f376afb05e85c0699523" + integrity sha512-CmzBx/bXUR8451fnZRuZAJRlzgm0Jgu5dltTX/bszmR2lheb9BpyN47Q1RbaGTsvFzn0PXAEs+lXDKfshccYZw== dependencies: "@hapi/boom" "9.x.x" "@hapi/hoek" "9.x.x" "@hapi/boom@9.x.x": - "integrity" "sha512-Ls1oH8jaN1vNsqcaHVYJrKmgMcKsC1wcp8bujvXrHaAqD2iDYq3HoOwsxwo09Cuda5R5nC0o0IxlrlTuvPuzSw==" - "resolved" "https://registry.npmjs.org/@hapi/boom/-/boom-9.1.4.tgz" - "version" "9.1.4" + version "9.1.4" + resolved "https://registry.npmjs.org/@hapi/boom/-/boom-9.1.4.tgz" + integrity sha512-Ls1oH8jaN1vNsqcaHVYJrKmgMcKsC1wcp8bujvXrHaAqD2iDYq3HoOwsxwo09Cuda5R5nC0o0IxlrlTuvPuzSw== dependencies: "@hapi/hoek" "9.x.x" "@hapi/hoek@9.x.x": - "integrity" "sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug==" - "resolved" "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.0.tgz" - "version" "9.2.0" + version "9.2.1" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.2.1.tgz#9551142a1980503752536b5050fd99f4a7f13b17" + integrity sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw== "@mapbox/point-geometry@^0.1.0": - "integrity" "sha1-ioP5M1x4YO/6Lu7KJUMyqgru2PI=" - "resolved" "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz" - "version" "0.1.0" + version "0.1.0" + resolved "https://registry.yarnpkg.com/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz#8a83f9335c7860effa2eeeca254332aa0aeed8f2" + integrity sha1-ioP5M1x4YO/6Lu7KJUMyqgru2PI= "@mrmlnc/readdir-enhanced@^2.2.1": - "integrity" "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==" - "resolved" "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz" - "version" "2.2.1" + version "2.2.1" + resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" + integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== dependencies: - "call-me-maybe" "^1.0.1" - "glob-to-regexp" "^0.3.0" + call-me-maybe "^1.0.1" + glob-to-regexp "^0.3.0" "@n8tb1t/use-scroll-position@^1.0.43": - "integrity" "sha512-9CFB+3/ZRP0BGHCS+01ulq3syHamhcQiu3iVBSPJZV+578ySSOt9tWIVDiSaIQfz3a1QdKUbhYR+4Uplda3cwA==" - "resolved" "https://registry.npmjs.org/@n8tb1t/use-scroll-position/-/use-scroll-position-1.0.43.tgz" - "version" "1.0.43" + version "1.0.47" + resolved "https://registry.yarnpkg.com/@n8tb1t/use-scroll-position/-/use-scroll-position-1.0.47.tgz#6b471ecb2fdc09179fd93791680ddd9714df1935" + integrity sha512-qilO+6vtiwP5L9Oqphee0XRXPOpOOQ9W/jNSZaf1Gx3v/EWrVOXxVRxEPv377BGw9Cf1/Rj13bBu+YVAjHk+gw== "@napi-rs/triples@^1.0.3": - "integrity" "sha512-jDJTpta+P4p1NZTFVLHJ/TLFVYVcOqv6l8xwOeBKNPMgY/zDYH/YH7SJbvrr/h1RcS9GzbPcLKGzpuK9cV56UA==" - "resolved" "https://registry.npmjs.org/@napi-rs/triples/-/triples-1.0.3.tgz" - "version" "1.0.3" + version "1.0.3" + resolved "https://registry.npmjs.org/@napi-rs/triples/-/triples-1.0.3.tgz" + integrity sha512-jDJTpta+P4p1NZTFVLHJ/TLFVYVcOqv6l8xwOeBKNPMgY/zDYH/YH7SJbvrr/h1RcS9GzbPcLKGzpuK9cV56UA== "@next/env@11.1.2": - "integrity" "sha512-+fteyVdQ7C/OoulfcF6vd1Yk0FEli4453gr8kSFbU8sKseNSizYq6df5MKz/AjwLptsxrUeIkgBdAzbziyJ3mA==" - "resolved" "https://registry.npmjs.org/@next/env/-/env-11.1.2.tgz" - "version" "11.1.2" + version "11.1.2" + resolved "https://registry.npmjs.org/@next/env/-/env-11.1.2.tgz" + integrity sha512-+fteyVdQ7C/OoulfcF6vd1Yk0FEli4453gr8kSFbU8sKseNSizYq6df5MKz/AjwLptsxrUeIkgBdAzbziyJ3mA== "@next/polyfill-module@11.1.2": - "integrity" "sha512-xZmixqADM3xxtqBV0TpAwSFzWJP0MOQzRfzItHXf1LdQHWb0yofHHC+7eOrPFic8+ZGz5y7BdPkkgR1S25OymA==" - "resolved" "https://registry.npmjs.org/@next/polyfill-module/-/polyfill-module-11.1.2.tgz" - "version" "11.1.2" + version "11.1.2" + resolved "https://registry.npmjs.org/@next/polyfill-module/-/polyfill-module-11.1.2.tgz" + integrity sha512-xZmixqADM3xxtqBV0TpAwSFzWJP0MOQzRfzItHXf1LdQHWb0yofHHC+7eOrPFic8+ZGz5y7BdPkkgR1S25OymA== "@next/react-dev-overlay@11.1.2": - "integrity" "sha512-rDF/mGY2NC69mMg2vDqzVpCOlWqnwPUXB2zkARhvknUHyS6QJphPYv9ozoPJuoT/QBs49JJd9KWaAzVBvq920A==" - "resolved" "https://registry.npmjs.org/@next/react-dev-overlay/-/react-dev-overlay-11.1.2.tgz" - "version" "11.1.2" + version "11.1.2" + resolved "https://registry.npmjs.org/@next/react-dev-overlay/-/react-dev-overlay-11.1.2.tgz" + integrity sha512-rDF/mGY2NC69mMg2vDqzVpCOlWqnwPUXB2zkARhvknUHyS6QJphPYv9ozoPJuoT/QBs49JJd9KWaAzVBvq920A== dependencies: "@babel/code-frame" "7.12.11" - "anser" "1.4.9" - "chalk" "4.0.0" - "classnames" "2.2.6" - "css.escape" "1.5.1" - "data-uri-to-buffer" "3.0.1" - "platform" "1.3.6" - "shell-quote" "1.7.2" - "source-map" "0.8.0-beta.0" - "stacktrace-parser" "0.1.10" - "strip-ansi" "6.0.0" + anser "1.4.9" + chalk "4.0.0" + classnames "2.2.6" + css.escape "1.5.1" + data-uri-to-buffer "3.0.1" + platform "1.3.6" + shell-quote "1.7.2" + source-map "0.8.0-beta.0" + stacktrace-parser "0.1.10" + strip-ansi "6.0.0" "@next/react-refresh-utils@11.1.2": - "integrity" "sha512-hsoJmPfhVqjZ8w4IFzoo8SyECVnN+8WMnImTbTKrRUHOVJcYMmKLL7xf7T0ft00tWwAl/3f3Q3poWIN2Ueql/Q==" - "resolved" "https://registry.npmjs.org/@next/react-refresh-utils/-/react-refresh-utils-11.1.2.tgz" - "version" "11.1.2" + version "11.1.2" + resolved "https://registry.npmjs.org/@next/react-refresh-utils/-/react-refresh-utils-11.1.2.tgz" + integrity sha512-hsoJmPfhVqjZ8w4IFzoo8SyECVnN+8WMnImTbTKrRUHOVJcYMmKLL7xf7T0ft00tWwAl/3f3Q3poWIN2Ueql/Q== + +"@next/swc-darwin-arm64@11.1.2": + version "11.1.2" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-11.1.2.tgz#93226c38db488c4b62b30a53b530e87c969b8251" + integrity sha512-hZuwOlGOwBZADA8EyDYyjx3+4JGIGjSHDHWrmpI7g5rFmQNltjlbaefAbiU5Kk7j3BUSDwt30quJRFv3nyJQ0w== "@next/swc-darwin-x64@11.1.2": - "integrity" "sha512-PGOp0E1GisU+EJJlsmJVGE+aPYD0Uh7zqgsrpD3F/Y3766Ptfbe1lEPPWnRDl+OzSSrSrX1lkyM/Jlmh5OwNvA==" - "resolved" "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-11.1.2.tgz" - "version" "11.1.2" + version "11.1.2" + resolved "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-11.1.2.tgz" + integrity sha512-PGOp0E1GisU+EJJlsmJVGE+aPYD0Uh7zqgsrpD3F/Y3766Ptfbe1lEPPWnRDl+OzSSrSrX1lkyM/Jlmh5OwNvA== + +"@next/swc-linux-x64-gnu@11.1.2": + version "11.1.2" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-11.1.2.tgz#8216b2ae1f21f0112958735c39dd861088108f37" + integrity sha512-YcDHTJjn/8RqvyJVB6pvEKXihDcdrOwga3GfMv/QtVeLphTouY4BIcEUfrG5+26Nf37MP1ywN3RRl1TxpurAsQ== + +"@next/swc-win32-x64-msvc@11.1.2": + version "11.1.2" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-11.1.2.tgz#e15824405df137129918205e43cb5e9339589745" + integrity sha512-e/pIKVdB+tGQYa1cW3sAeHm8gzEri/HYLZHT4WZojrUxgWXqx8pk7S7Xs47uBcFTqBDRvK3EcQpPLf3XdVsDdg== "@node-rs/helper@1.2.1": - "integrity" "sha512-R5wEmm8nbuQU0YGGmYVjEc0OHtYsuXdpRG+Ut/3wZ9XAvQWyThN08bTh2cBJgoZxHQUPtvRfeQuxcAgLuiBISg==" - "resolved" "https://registry.npmjs.org/@node-rs/helper/-/helper-1.2.1.tgz" - "version" "1.2.1" + version "1.2.1" + resolved "https://registry.npmjs.org/@node-rs/helper/-/helper-1.2.1.tgz" + integrity sha512-R5wEmm8nbuQU0YGGmYVjEc0OHtYsuXdpRG+Ut/3wZ9XAvQWyThN08bTh2cBJgoZxHQUPtvRfeQuxcAgLuiBISg== dependencies: "@napi-rs/triples" "^1.0.3" "@nodelib/fs.stat@^1.1.2": - "integrity" "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" - "resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz" - "version" "1.1.3" + version "1.1.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" + integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== "@popperjs/core@^2.0.0": - "integrity" "sha512-JlGTGRYHC2QK+DDbePyXdBdooxFq2+noLfWpRqJtkxcb/oYWzOF0kcbfvvbWrwevCC1l6hLUg1wHYT+ona5BWQ==" - "resolved" "https://registry.npmjs.org/@popperjs/core/-/core-2.4.2.tgz" - "version" "2.4.2" + version "2.4.2" + resolved "https://registry.npmjs.org/@popperjs/core/-/core-2.4.2.tgz" + integrity sha512-JlGTGRYHC2QK+DDbePyXdBdooxFq2+noLfWpRqJtkxcb/oYWzOF0kcbfvvbWrwevCC1l6hLUg1wHYT+ona5BWQ== "@restart/context@^2.1.4": - "integrity" "sha512-INJYZQJP7g+IoDUh/475NlGiTeMfwTXUEr3tmRneckHIxNolGOW9CTq83S8cxq0CgJwwcMzMJFchxvlwe7Rk8Q==" - "resolved" "https://registry.npmjs.org/@restart/context/-/context-2.1.4.tgz" - "version" "2.1.4" + version "2.1.4" + resolved "https://registry.yarnpkg.com/@restart/context/-/context-2.1.4.tgz#a99d87c299a34c28bd85bb489cb07bfd23149c02" + integrity sha512-INJYZQJP7g+IoDUh/475NlGiTeMfwTXUEr3tmRneckHIxNolGOW9CTq83S8cxq0CgJwwcMzMJFchxvlwe7Rk8Q== "@restart/hooks@^0.3.12", "@restart/hooks@^0.3.21": - "integrity" "sha512-m2v3N5pxTsIiSH74/sb1yW8D9RxkJidGW+5Mfwn/lHb2QzhZNlaU1su7abSyT9EGf0xS/0waLjrf7/XxQHUk7w==" - "resolved" "https://registry.npmjs.org/@restart/hooks/-/hooks-0.3.25.tgz" - "version" "0.3.25" + version "0.3.27" + resolved "https://registry.yarnpkg.com/@restart/hooks/-/hooks-0.3.27.tgz#91f356d66d4699a8cd8b3d008402708b6a9dc505" + integrity sha512-s984xV/EapUIfkjlf8wz9weP2O9TNKR96C68FfMEy2bE69+H4cNv3RD4Mf97lW7Htt7PjZrYTjSC8f3SB9VCXw== dependencies: - "lodash" "^4.17.15" - "lodash-es" "^4.17.15" + dequal "^2.0.2" "@rexxars/eventsource-polyfill@^1.0.0": - "integrity" "sha512-YnrybIoM9WFqmeK1D8p/gutqjJnmXCVFWAU3ucka9M7Dzpen3f2Dy4KsC6k1wDHrCtHQuUHHwZovh3i5UPDaZw==" - "resolved" "https://registry.npmjs.org/@rexxars/eventsource-polyfill/-/eventsource-polyfill-1.0.0.tgz" - "version" "1.0.0" + version "1.0.0" + resolved "https://registry.npmjs.org/@rexxars/eventsource-polyfill/-/eventsource-polyfill-1.0.0.tgz" + integrity sha512-YnrybIoM9WFqmeK1D8p/gutqjJnmXCVFWAU3ucka9M7Dzpen3f2Dy4KsC6k1wDHrCtHQuUHHwZovh3i5UPDaZw== "@sanity/block-content-to-hyperscript@^3.0.0": - "integrity" "sha512-uoXWLdFY5LqO8A9sFJqnZWWDCBC+0r3Egeh0bwKQ2EK2Vil5L40iJGNXMZhDB8BnvH+6B4155SU8Q3vY59T6pA==" - "resolved" "https://registry.npmjs.org/@sanity/block-content-to-hyperscript/-/block-content-to-hyperscript-3.0.0.tgz" - "version" "3.0.0" + version "3.0.0" + resolved "https://registry.npmjs.org/@sanity/block-content-to-hyperscript/-/block-content-to-hyperscript-3.0.0.tgz" + integrity sha512-uoXWLdFY5LqO8A9sFJqnZWWDCBC+0r3Egeh0bwKQ2EK2Vil5L40iJGNXMZhDB8BnvH+6B4155SU8Q3vY59T6pA== dependencies: "@sanity/generate-help-url" "^0.140.0" "@sanity/image-url" "^0.140.15" - "hyperscript" "^2.0.2" - "object-assign" "^4.1.1" + hyperscript "^2.0.2" + object-assign "^4.1.1" "@sanity/block-content-to-react@^3.0.0": - "integrity" "sha512-oHPLlIsulsnL3ITs93RIvUPBI6nAeoSFOUf16vX4T7z4wWywxP39N1DF9mAx2tV6Kjr1fJAx5GF7zfiMXYLaqA==" - "resolved" "https://registry.npmjs.org/@sanity/block-content-to-react/-/block-content-to-react-3.0.0.tgz" - "version" "3.0.0" + version "3.0.0" + resolved "https://registry.npmjs.org/@sanity/block-content-to-react/-/block-content-to-react-3.0.0.tgz" + integrity sha512-oHPLlIsulsnL3ITs93RIvUPBI6nAeoSFOUf16vX4T7z4wWywxP39N1DF9mAx2tV6Kjr1fJAx5GF7zfiMXYLaqA== dependencies: "@sanity/block-content-to-hyperscript" "^3.0.0" - "prop-types" "^15.6.2" + prop-types "^15.6.2" -"@sanity/client@^2.14.0", "@sanity/client@^2.19.0", "@sanity/client@2.19.0": - "integrity" "sha512-y3VCTXx0z9n9tIroJUBT70rfCZuyJCNmRVZcMjRSjaLCK7vFJHvACX61OkbfbFo9t8r098g8jXP2XttBUiglLQ==" - "resolved" "https://registry.npmjs.org/@sanity/client/-/client-2.19.0.tgz" - "version" "2.19.0" +"@sanity/client@2.19.0", "@sanity/client@^2.14.0", "@sanity/client@^2.19.0": + version "2.19.0" + resolved "https://registry.npmjs.org/@sanity/client/-/client-2.19.0.tgz" + integrity sha512-y3VCTXx0z9n9tIroJUBT70rfCZuyJCNmRVZcMjRSjaLCK7vFJHvACX61OkbfbFo9t8r098g8jXP2XttBUiglLQ== dependencies: "@sanity/eventsource" "2.14.0" "@sanity/generate-help-url" "2.18.0" "@sanity/observable" "2.0.9" - "deep-assign" "^2.0.0" - "get-it" "^5.0.3" - "make-error" "^1.3.0" - "object-assign" "^4.1.1" + deep-assign "^2.0.0" + get-it "^5.0.3" + make-error "^1.3.0" + object-assign "^4.1.1" "@sanity/color@^2.1.5": - "integrity" "sha512-miq04+tp9I0/k8TooM/iB1ifpjVaWke9Pg+GD4SbrZ+YQkqaMqQFvzu4JjPr55lMkBrzOjE4JHrwBO/bzgottw==" - "resolved" "https://registry.npmjs.org/@sanity/color/-/color-2.1.5.tgz" - "version" "2.1.5" + version "2.1.5" + resolved "https://registry.npmjs.org/@sanity/color/-/color-2.1.5.tgz" + integrity sha512-miq04+tp9I0/k8TooM/iB1ifpjVaWke9Pg+GD4SbrZ+YQkqaMqQFvzu4JjPr55lMkBrzOjE4JHrwBO/bzgottw== "@sanity/eventsource@2.14.0": - "integrity" "sha512-U1FgPUwB9//bGT5OO1VgtamSCM2Z3vpWP3mCgN8vPmEUJ0cofAWO+turDbOILahuicH8u7Xnmd+GSB33p4Mg9A==" - "resolved" "https://registry.npmjs.org/@sanity/eventsource/-/eventsource-2.14.0.tgz" - "version" "2.14.0" + version "2.14.0" + resolved "https://registry.npmjs.org/@sanity/eventsource/-/eventsource-2.14.0.tgz" + integrity sha512-U1FgPUwB9//bGT5OO1VgtamSCM2Z3vpWP3mCgN8vPmEUJ0cofAWO+turDbOILahuicH8u7Xnmd+GSB33p4Mg9A== dependencies: "@rexxars/eventsource-polyfill" "^1.0.0" - "eventsource" "^1.0.6" - -"@sanity/generate-help-url@^0.140.0": - "integrity" "sha512-H/G/WA9S22TXcXST52CIiTsHx3S2hH0gvK7LnI5w76vfKS0obnDPh8jrPg4xeNRYGPuV9MHYRlyERGpRGoo4Qw==" - "resolved" "https://registry.npmjs.org/@sanity/generate-help-url/-/generate-help-url-0.140.0.tgz" - "version" "0.140.0" + eventsource "^1.0.6" "@sanity/generate-help-url@2.18.0": - "integrity" "sha512-If8Qkw32LWPes16UzqwUsTLgfxF5d4ACdUvCLMl6grJc/5G8LKPAGCQUuA/d1F4W16yCJVV7Zv31HDRDXJSJkg==" - "resolved" "https://registry.npmjs.org/@sanity/generate-help-url/-/generate-help-url-2.18.0.tgz" - "version" "2.18.0" + version "2.18.0" + resolved "https://registry.npmjs.org/@sanity/generate-help-url/-/generate-help-url-2.18.0.tgz" + integrity sha512-If8Qkw32LWPes16UzqwUsTLgfxF5d4ACdUvCLMl6grJc/5G8LKPAGCQUuA/d1F4W16yCJVV7Zv31HDRDXJSJkg== + +"@sanity/generate-help-url@^0.140.0": + version "0.140.0" + resolved "https://registry.npmjs.org/@sanity/generate-help-url/-/generate-help-url-0.140.0.tgz" + integrity sha512-H/G/WA9S22TXcXST52CIiTsHx3S2hH0gvK7LnI5w76vfKS0obnDPh8jrPg4xeNRYGPuV9MHYRlyERGpRGoo4Qw== "@sanity/groq-store@^0.2.1": - "integrity" "sha512-BVWH5nV6O9VVWddbOD2FShLyehKhHMFO+93hS6ZFHew1Y1jfGaXkdBYINTVw7fy3Ac1tDszUww9eFfP1oMxybQ==" - "resolved" "https://registry.npmjs.org/@sanity/groq-store/-/groq-store-0.2.1.tgz" - "version" "0.2.1" + version "0.2.1" + resolved "https://registry.npmjs.org/@sanity/groq-store/-/groq-store-0.2.1.tgz" + integrity sha512-BVWH5nV6O9VVWddbOD2FShLyehKhHMFO+93hS6ZFHew1Y1jfGaXkdBYINTVw7fy3Ac1tDszUww9eFfP1oMxybQ== dependencies: "@sanity/types" "^2.0.1" - "eventsource" "^1.0.7" - "fast-deep-equal" "^3.1.3" - "groq" "^2.0.9" - "groq-js" "^0.3.0" - "mendoza" "^2.1.1" - "simple-get" "^4.0.0" - "split2" "^3.2.2" - "throttle-debounce" "^3.0.1" + eventsource "^1.0.7" + fast-deep-equal "^3.1.3" + groq "^2.0.9" + groq-js "^0.3.0" + mendoza "^2.1.1" + simple-get "^4.0.0" + split2 "^3.2.2" + throttle-debounce "^3.0.1" "@sanity/image-url@^0.140.15", "@sanity/image-url@^0.140.22": - "integrity" "sha512-CAmQZnj+KM7FSEYiWlIGDit072syicYuAw0w7R2ctMzHiZ4p9mE/g6dBnYqrqFUrw2J+GpJgPt+RVspKP8vdqA==" - "resolved" "https://registry.npmjs.org/@sanity/image-url/-/image-url-0.140.22.tgz" - "version" "0.140.22" + version "0.140.22" + resolved "https://registry.npmjs.org/@sanity/image-url/-/image-url-0.140.22.tgz" + integrity sha512-CAmQZnj+KM7FSEYiWlIGDit072syicYuAw0w7R2ctMzHiZ4p9mE/g6dBnYqrqFUrw2J+GpJgPt+RVspKP8vdqA== "@sanity/observable@2.0.9": - "integrity" "sha512-IUpzsEbhOhofTBUu2tiQ4Ymbkmhr6oe4UC4Ds1khZ9Td4t4mzzPGmGQIr5SBEDawz0UD7ZgZAb4LeEzV3hUrtA==" - "resolved" "https://registry.npmjs.org/@sanity/observable/-/observable-2.0.9.tgz" - "version" "2.0.9" + version "2.0.9" + resolved "https://registry.npmjs.org/@sanity/observable/-/observable-2.0.9.tgz" + integrity sha512-IUpzsEbhOhofTBUu2tiQ4Ymbkmhr6oe4UC4Ds1khZ9Td4t4mzzPGmGQIr5SBEDawz0UD7ZgZAb4LeEzV3hUrtA== dependencies: - "object-assign" "^4.1.1" - "rxjs" "^6.5.3" + object-assign "^4.1.1" + rxjs "^6.5.3" "@sanity/timed-out@^4.0.2": - "integrity" "sha512-NBDKGj14g9Z+bopIvZcQKWCzJq5JSrdmzRR1CS+iyA3Gm8SnIWBfZa7I3mTg2X6Nu8LQXG0EPKXdOGozLS4i3w==" - "resolved" "https://registry.npmjs.org/@sanity/timed-out/-/timed-out-4.0.2.tgz" - "version" "4.0.2" + version "4.0.2" + resolved "https://registry.npmjs.org/@sanity/timed-out/-/timed-out-4.0.2.tgz" + integrity sha512-NBDKGj14g9Z+bopIvZcQKWCzJq5JSrdmzRR1CS+iyA3Gm8SnIWBfZa7I3mTg2X6Nu8LQXG0EPKXdOGozLS4i3w== "@sanity/types@^2.0.1": - "integrity" "sha512-m88Rq0KBSrXnBksyDTpA++G4K59UQcqzW5bfuqPl8xzU2jkhxUAyboN0TPi7ezqc48OHLGT0PUsJN7YRyYQu3w==" - "resolved" "https://registry.npmjs.org/@sanity/types/-/types-2.19.0.tgz" - "version" "2.19.0" + version "2.19.0" + resolved "https://registry.npmjs.org/@sanity/types/-/types-2.19.0.tgz" + integrity sha512-m88Rq0KBSrXnBksyDTpA++G4K59UQcqzW5bfuqPl8xzU2jkhxUAyboN0TPi7ezqc48OHLGT0PUsJN7YRyYQu3w== dependencies: "@sanity/client" "2.19.0" "@sanity/color" "^2.1.5" "@types/react" "^17.0.0" - "react" "17.0.1" - "rxjs" "^6.5.3" + react "17.0.1" + rxjs "^6.5.3" "@sindresorhus/is@^0.7.0": - "integrity" "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==" - "resolved" "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz" - "version" "0.7.0" + version "0.7.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" + integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow== "@styled-system/background@^5.1.2": - "integrity" "sha512-jtwH2C/U6ssuGSvwTN3ri/IyjdHb8W9X/g8Y0JLcrH02G+BW3OS8kZdHphF1/YyRklnrKrBT2ngwGUK6aqqV3A==" - "resolved" "https://registry.npmjs.org/@styled-system/background/-/background-5.1.2.tgz" - "version" "5.1.2" + version "5.1.2" + resolved "https://registry.yarnpkg.com/@styled-system/background/-/background-5.1.2.tgz#75c63d06b497ab372b70186c0bf608d62847a2ba" + integrity sha512-jtwH2C/U6ssuGSvwTN3ri/IyjdHb8W9X/g8Y0JLcrH02G+BW3OS8kZdHphF1/YyRklnrKrBT2ngwGUK6aqqV3A== dependencies: "@styled-system/core" "^5.1.2" "@styled-system/border@^5.1.5": - "integrity" "sha512-JvddhNrnhGigtzWRCVuAHepniyVi6hBlimxWDVAdcTuk7aRn9BYJUwfHslURtwYFsF5FoEs8Zmr1oZq2M1AP0A==" - "resolved" "https://registry.npmjs.org/@styled-system/border/-/border-5.1.5.tgz" - "version" "5.1.5" + version "5.1.5" + resolved "https://registry.yarnpkg.com/@styled-system/border/-/border-5.1.5.tgz#0493d4332d2b59b74bb0d57d08c73eb555761ba6" + integrity sha512-JvddhNrnhGigtzWRCVuAHepniyVi6hBlimxWDVAdcTuk7aRn9BYJUwfHslURtwYFsF5FoEs8Zmr1oZq2M1AP0A== dependencies: "@styled-system/core" "^5.1.2" "@styled-system/color@^5.1.2": - "integrity" "sha512-1kCkeKDZkt4GYkuFNKc7vJQMcOmTl3bJY3YBUs7fCNM6mMYJeT1pViQ2LwBSBJytj3AB0o4IdLBoepgSgGl5MA==" - "resolved" "https://registry.npmjs.org/@styled-system/color/-/color-5.1.2.tgz" - "version" "5.1.2" + version "5.1.2" + resolved "https://registry.yarnpkg.com/@styled-system/color/-/color-5.1.2.tgz#b8d6b4af481faabe4abca1a60f8daa4ccc2d9f43" + integrity sha512-1kCkeKDZkt4GYkuFNKc7vJQMcOmTl3bJY3YBUs7fCNM6mMYJeT1pViQ2LwBSBJytj3AB0o4IdLBoepgSgGl5MA== dependencies: "@styled-system/core" "^5.1.2" "@styled-system/core@^5.1.2": - "integrity" "sha512-XclBDdNIy7OPOsN4HBsawG2eiWfCcuFt6gxKn1x4QfMIgeO6TOlA2pZZ5GWZtIhCUqEPTgIBta6JXsGyCkLBYw==" - "resolved" "https://registry.npmjs.org/@styled-system/core/-/core-5.1.2.tgz" - "version" "5.1.2" + version "5.1.2" + resolved "https://registry.yarnpkg.com/@styled-system/core/-/core-5.1.2.tgz#b8b7b86455d5a0514f071c4fa8e434b987f6a772" + integrity sha512-XclBDdNIy7OPOsN4HBsawG2eiWfCcuFt6gxKn1x4QfMIgeO6TOlA2pZZ5GWZtIhCUqEPTgIBta6JXsGyCkLBYw== dependencies: - "object-assign" "^4.1.1" + object-assign "^4.1.1" "@styled-system/css@^5.1.5": - "integrity" "sha512-XkORZdS5kypzcBotAMPBoeckDs9aSZVkvrAlq5K3xP8IMAUek+x2O4NtwoSgkYkWWzVBu6DGdFZLR790QWGG+A==" - "resolved" "https://registry.npmjs.org/@styled-system/css/-/css-5.1.5.tgz" - "version" "5.1.5" + version "5.1.5" + resolved "https://registry.yarnpkg.com/@styled-system/css/-/css-5.1.5.tgz#0460d5f3ff962fa649ea128ef58d9584f403bbbc" + integrity sha512-XkORZdS5kypzcBotAMPBoeckDs9aSZVkvrAlq5K3xP8IMAUek+x2O4NtwoSgkYkWWzVBu6DGdFZLR790QWGG+A== "@styled-system/flexbox@^5.1.2": - "integrity" "sha512-6hHV52+eUk654Y1J2v77B8iLeBNtc+SA3R4necsu2VVinSD7+XY5PCCEzBFaWs42dtOEDIa2lMrgL0YBC01mDQ==" - "resolved" "https://registry.npmjs.org/@styled-system/flexbox/-/flexbox-5.1.2.tgz" - "version" "5.1.2" + version "5.1.2" + resolved "https://registry.yarnpkg.com/@styled-system/flexbox/-/flexbox-5.1.2.tgz#077090f43f61c3852df63da24e4108087a8beecf" + integrity sha512-6hHV52+eUk654Y1J2v77B8iLeBNtc+SA3R4necsu2VVinSD7+XY5PCCEzBFaWs42dtOEDIa2lMrgL0YBC01mDQ== dependencies: "@styled-system/core" "^5.1.2" "@styled-system/grid@^5.1.2": - "integrity" "sha512-K3YiV1KyHHzgdNuNlaw8oW2ktMuGga99o1e/NAfTEi5Zsa7JXxzwEnVSDSBdJC+z6R8WYTCYRQC6bkVFcvdTeg==" - "resolved" "https://registry.npmjs.org/@styled-system/grid/-/grid-5.1.2.tgz" - "version" "5.1.2" + version "5.1.2" + resolved "https://registry.yarnpkg.com/@styled-system/grid/-/grid-5.1.2.tgz#7165049877732900b99cd00759679fbe45c6c573" + integrity sha512-K3YiV1KyHHzgdNuNlaw8oW2ktMuGga99o1e/NAfTEi5Zsa7JXxzwEnVSDSBdJC+z6R8WYTCYRQC6bkVFcvdTeg== dependencies: "@styled-system/core" "^5.1.2" "@styled-system/layout@^5.1.2": - "integrity" "sha512-wUhkMBqSeacPFhoE9S6UF3fsMEKFv91gF4AdDWp0Aym1yeMPpqz9l9qS/6vjSsDPF7zOb5cOKC3tcKKOMuDCPw==" - "resolved" "https://registry.npmjs.org/@styled-system/layout/-/layout-5.1.2.tgz" - "version" "5.1.2" + version "5.1.2" + resolved "https://registry.yarnpkg.com/@styled-system/layout/-/layout-5.1.2.tgz#12d73e79887e10062f4dbbbc2067462eace42339" + integrity sha512-wUhkMBqSeacPFhoE9S6UF3fsMEKFv91gF4AdDWp0Aym1yeMPpqz9l9qS/6vjSsDPF7zOb5cOKC3tcKKOMuDCPw== dependencies: "@styled-system/core" "^5.1.2" "@styled-system/position@^5.1.2": - "integrity" "sha512-60IZfMXEOOZe3l1mCu6sj/2NAyUmES2kR9Kzp7s2D3P4qKsZWxD1Se1+wJvevb+1TP+ZMkGPEYYXRyU8M1aF5A==" - "resolved" "https://registry.npmjs.org/@styled-system/position/-/position-5.1.2.tgz" - "version" "5.1.2" + version "5.1.2" + resolved "https://registry.yarnpkg.com/@styled-system/position/-/position-5.1.2.tgz#56961266566836f57a24d8e8e33ce0c1adb59dd3" + integrity sha512-60IZfMXEOOZe3l1mCu6sj/2NAyUmES2kR9Kzp7s2D3P4qKsZWxD1Se1+wJvevb+1TP+ZMkGPEYYXRyU8M1aF5A== dependencies: "@styled-system/core" "^5.1.2" "@styled-system/shadow@^5.1.2": - "integrity" "sha512-wqniqYb7XuZM7K7C0d1Euxc4eGtqEe/lvM0WjuAFsQVImiq6KGT7s7is+0bNI8O4Dwg27jyu4Lfqo/oIQXNzAg==" - "resolved" "https://registry.npmjs.org/@styled-system/shadow/-/shadow-5.1.2.tgz" - "version" "5.1.2" + version "5.1.2" + resolved "https://registry.yarnpkg.com/@styled-system/shadow/-/shadow-5.1.2.tgz#beddab28d7de03cd0177a87ac4ed3b3b6d9831fd" + integrity sha512-wqniqYb7XuZM7K7C0d1Euxc4eGtqEe/lvM0WjuAFsQVImiq6KGT7s7is+0bNI8O4Dwg27jyu4Lfqo/oIQXNzAg== dependencies: "@styled-system/core" "^5.1.2" "@styled-system/space@^5.1.2": - "integrity" "sha512-+zzYpR8uvfhcAbaPXhH8QgDAV//flxqxSjHiS9cDFQQUSznXMQmxJegbhcdEF7/eNnJgHeIXv1jmny78kipgBA==" - "resolved" "https://registry.npmjs.org/@styled-system/space/-/space-5.1.2.tgz" - "version" "5.1.2" + version "5.1.2" + resolved "https://registry.yarnpkg.com/@styled-system/space/-/space-5.1.2.tgz#38925d2fa29a41c0eb20e65b7c3efb6e8efce953" + integrity sha512-+zzYpR8uvfhcAbaPXhH8QgDAV//flxqxSjHiS9cDFQQUSznXMQmxJegbhcdEF7/eNnJgHeIXv1jmny78kipgBA== dependencies: "@styled-system/core" "^5.1.2" "@styled-system/typography@^5.1.2": - "integrity" "sha512-BxbVUnN8N7hJ4aaPOd7wEsudeT7CxarR+2hns8XCX1zp0DFfbWw4xYa/olA0oQaqx7F1hzDg+eRaGzAJbF+jOg==" - "resolved" "https://registry.npmjs.org/@styled-system/typography/-/typography-5.1.2.tgz" - "version" "5.1.2" + version "5.1.2" + resolved "https://registry.yarnpkg.com/@styled-system/typography/-/typography-5.1.2.tgz#65fb791c67d50cd2900d234583eaacdca8c134f7" + integrity sha512-BxbVUnN8N7hJ4aaPOd7wEsudeT7CxarR+2hns8XCX1zp0DFfbWw4xYa/olA0oQaqx7F1hzDg+eRaGzAJbF+jOg== dependencies: "@styled-system/core" "^5.1.2" "@styled-system/variant@^5.1.5": - "integrity" "sha512-Yn8hXAFoWIro8+Q5J8YJd/mP85Teiut3fsGVR9CAxwgNfIAiqlYxsk5iHU7VHJks/0KjL4ATSjmbtCDC/4l1qw==" - "resolved" "https://registry.npmjs.org/@styled-system/variant/-/variant-5.1.5.tgz" - "version" "5.1.5" + version "5.1.5" + resolved "https://registry.yarnpkg.com/@styled-system/variant/-/variant-5.1.5.tgz#8446d8aad06af3a4c723d717841df2dbe4ddeafd" + integrity sha512-Yn8hXAFoWIro8+Q5J8YJd/mP85Teiut3fsGVR9CAxwgNfIAiqlYxsk5iHU7VHJks/0KjL4ATSjmbtCDC/4l1qw== dependencies: "@styled-system/core" "^5.1.2" "@styled-system/css" "^5.1.5" "@trysound/sax@0.1.1": - "integrity" "sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow==" - "resolved" "https://registry.npmjs.org/@trysound/sax/-/sax-0.1.1.tgz" - "version" "0.1.1" + version "0.1.1" + resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.1.1.tgz#3348564048e7a2d7398c935d466c0414ebb6a669" + integrity sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow== "@types/json-schema@^7.0.6": - "integrity" "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==" - "resolved" "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz" - "version" "7.0.7" + version "7.0.9" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" + integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== "@types/mdast@^3.0.0": - "integrity" "sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==" - "resolved" "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz" - "version" "3.0.3" + version "3.0.10" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.10.tgz#4724244a82a4598884cbbe9bcfd73dff927ee8af" + integrity sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA== dependencies: "@types/unist" "*" "@types/node@*": - "integrity" "sha512-YHUZhBOMTM3mjFkXVcK+WwAcYmyhe1wL4lfqNtzI0b3qAy7yuSetnM7QJazgE5PFmgVTNGiLOgRFfJMqW7XpSQ==" - "resolved" "https://registry.npmjs.org/@types/node/-/node-16.9.6.tgz" - "version" "16.9.6" + version "16.9.6" + resolved "https://registry.npmjs.org/@types/node/-/node-16.9.6.tgz" + integrity sha512-YHUZhBOMTM3mjFkXVcK+WwAcYmyhe1wL4lfqNtzI0b3qAy7yuSetnM7QJazgE5PFmgVTNGiLOgRFfJMqW7XpSQ== "@types/parse-json@^4.0.0": - "integrity" "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - "resolved" "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz" - "version" "4.0.0" + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== "@types/prop-types@*": - "integrity" "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==" - "resolved" "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz" - "version" "15.7.3" + version "15.7.4" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11" + integrity sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ== + +"@types/react@>=16.9.11": + version "17.0.39" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.39.tgz#d0f4cde092502a6db00a1cded6e6bf2abb7633ce" + integrity sha512-UVavlfAxDd/AgAacMa60Azl7ygyQNRwC/DsHZmKgNvPmRR5p70AJ5Q9EAmL2NWOJmeV+vVUI4IAP7GZrN8h8Ug== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" -"@types/react@^16.9.11", "@types/react@^16.9.23": - "integrity" "sha512-6cFei7F7L4wwuM+IND/Q2cV1koQUvJ8iSV+Gwn0c3kvABZ691g7sp3hfEQHOUBJtccl1gPi+EyNjMIl9nGA0ug==" - "resolved" "https://registry.npmjs.org/@types/react/-/react-16.9.41.tgz" - "version" "16.9.41" +"@types/react@^16.9.23": + version "16.14.23" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.14.23.tgz#37201b9f2324c5ff8fa4600dbf19079dfdffc880" + integrity sha512-WngBZLuSkP4IAgPi0HOsGCHo6dn3CcuLQnCfC17VbA7YBgipZiZoTOhObwl/93DsFW0Y2a/ZXeonpW4DxirEJg== dependencies: "@types/prop-types" "*" - "csstype" "^2.2.0" + "@types/scheduler" "*" + csstype "^3.0.2" "@types/react@^17.0.0": - "integrity" "sha512-eIpyco99gTH+FTI3J7Oi/OH8MZoFMJuztNRimDOJwH4iGIsKV2qkGnk4M9VzlaVWeEEWLWSQRy0FEA0Kz218cg==" - "resolved" "https://registry.npmjs.org/@types/react/-/react-17.0.24.tgz" - "version" "17.0.24" + version "17.0.24" + resolved "https://registry.npmjs.org/@types/react/-/react-17.0.24.tgz" + integrity sha512-eIpyco99gTH+FTI3J7Oi/OH8MZoFMJuztNRimDOJwH4iGIsKV2qkGnk4M9VzlaVWeEEWLWSQRy0FEA0Kz218cg== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" - "csstype" "^3.0.2" + csstype "^3.0.2" "@types/scheduler@*": - "integrity" "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" - "resolved" "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz" - "version" "0.16.2" + version "0.16.2" + resolved "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz" + integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== "@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2": - "integrity" "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==" - "resolved" "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz" - "version" "2.0.3" + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" + integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== "@types/warning@^3.0.0": - "integrity" "sha1-DSUBJorY+ZYrdA04fEZU9fjiPlI=" - "resolved" "https://registry.npmjs.org/@types/warning/-/warning-3.0.0.tgz" - "version" "3.0.0" - -"ajv-errors@^1.0.0": - "integrity" "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" - "resolved" "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz" - "version" "1.0.1" - -"ajv-keywords@^3.1.0", "ajv-keywords@^3.5.2": - "integrity" "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" - "resolved" "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" - "version" "3.5.2" - -"ajv@^6.1.0", "ajv@^6.12.5": - "integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==" - "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" - "version" "6.12.6" - dependencies: - "fast-deep-equal" "^3.1.1" - "fast-json-stable-stringify" "^2.0.0" - "json-schema-traverse" "^0.4.1" - "uri-js" "^4.2.2" - -"anser@1.4.9": - "integrity" "sha512-AI+BjTeGt2+WFk4eWcqbQ7snZpDBt8SaLlj0RT2h5xfdWaiy51OjYvqwMrNzJLGy8iOAL6nKDITWO+rd4MkYEA==" - "resolved" "https://registry.npmjs.org/anser/-/anser-1.4.9.tgz" - "version" "1.4.9" - -"ansi-regex@^2.0.0": - "integrity" "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" - "version" "2.1.1" - -"ansi-regex@^5.0.0": - "integrity" "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" - "version" "5.0.1" - -"ansi-styles@^2.2.1": - "integrity" "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz" - "version" "2.2.1" - -"ansi-styles@^3.2.1": - "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==" - "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" - "version" "3.2.1" - dependencies: - "color-convert" "^1.9.0" - -"ansi-styles@^4.1.0": - "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" - "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - "version" "4.3.0" - dependencies: - "color-convert" "^2.0.1" - -"anymatch@~3.1.1": - "integrity" "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==" - "resolved" "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" - "version" "3.1.2" - dependencies: - "normalize-path" "^3.0.0" - "picomatch" "^2.0.4" - -"aos@^3.0.0-beta.6": - "integrity" "sha512-VLWrpq8bfAWcetynVHMMrqdC+89Qq/Ym6UBJbHB4crIwp3RR8uq1dNGgsFzoDl03S43rlVMK+na3r5+oUCZsYw==" - "resolved" "https://registry.npmjs.org/aos/-/aos-3.0.0-beta.6.tgz" - "version" "3.0.0-beta.6" - dependencies: - "classlist-polyfill" "^1.2.0" - "lodash.debounce" "^4.0.8" - "lodash.throttle" "^4.1.1" - -"arch@^2.1.0": - "integrity" "sha512-NTBIIbAfkJeIletyABbVtdPgeKfDafR+1mZV/AyyfC1UkVkp9iUjV+wwmqtUgphHYajbI86jejBJp5e+jkGTiQ==" - "resolved" "https://registry.npmjs.org/arch/-/arch-2.1.2.tgz" - "version" "2.1.2" - -"archive-type@^4.0.0": - "integrity" "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=" - "resolved" "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "file-type" "^4.2.0" - -"argparse@^1.0.7": - "integrity" "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==" - "resolved" "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" - "version" "1.0.10" - dependencies: - "sprintf-js" "~1.0.2" - -"arr-diff@^4.0.0": - "integrity" "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - "resolved" "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz" - "version" "4.0.0" - -"arr-flatten@^1.1.0": - "integrity" "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" - "resolved" "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz" - "version" "1.1.0" - -"arr-union@^3.1.0": - "integrity" "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" - "resolved" "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz" - "version" "3.1.0" - -"array-find-index@^1.0.1": - "integrity" "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" - "resolved" "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz" - "version" "1.0.2" - -"array-union@^1.0.1": - "integrity" "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=" - "resolved" "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "array-uniq" "^1.0.1" - -"array-uniq@^1.0.1": - "integrity" "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" - "resolved" "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" - "version" "1.0.3" - -"array-unique@^0.3.2": - "integrity" "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - "resolved" "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz" - "version" "0.3.2" - -"arrify@^1.0.1": - "integrity" "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" - "resolved" "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" - "version" "1.0.1" - -"asn1.js@^5.2.0": - "integrity" "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==" - "resolved" "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz" - "version" "5.4.1" - dependencies: - "bn.js" "^4.0.0" - "inherits" "^2.0.1" - "minimalistic-assert" "^1.0.0" - "safer-buffer" "^2.1.0" - -"assert@^1.1.1": - "integrity" "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==" - "resolved" "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz" - "version" "1.5.0" - dependencies: - "object-assign" "^4.1.1" - "util" "0.10.3" - -"assert@2.0.0": - "integrity" "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==" - "resolved" "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "es6-object-assign" "^1.1.0" - "is-nan" "^1.2.1" - "object-is" "^1.0.1" - "util" "^0.12.0" - -"assign-symbols@^1.0.0": - "integrity" "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" - "resolved" "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz" - "version" "1.0.0" - -"ast-types@0.13.2": - "integrity" "sha512-uWMHxJxtfj/1oZClOxDEV1sQ1HCDkA4MG8Gr69KKeBjEVH0R84WlejZ0y2DcwyBlpAEMltmVYkVgqfLFb2oyiA==" - "resolved" "https://registry.npmjs.org/ast-types/-/ast-types-0.13.2.tgz" - "version" "0.13.2" - -"atob@^2.1.2": - "integrity" "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" - "resolved" "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz" - "version" "2.1.2" - -"available-typed-arrays@^1.0.5": - "integrity" "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" - "resolved" "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" - "version" "1.0.5" - -"babel-plugin-emotion@^10.0.27": - "integrity" "sha512-bxZbTTGz0AJQDHm8k6Rf3RQJ8tX2scsfsRyKVgAbiUPUNIRtlK+7JxP+TAd1kRLABFxe0CFm2VdK4ePkoA9FxQ==" - "resolved" "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.0.33.tgz" - "version" "10.0.33" + version "3.0.0" + resolved "https://registry.npmjs.org/@types/warning/-/warning-3.0.0.tgz" + integrity sha1-DSUBJorY+ZYrdA04fEZU9fjiPlI= + +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== + +ajv-keywords@^3.1.0, ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@^6.1.0, ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +anser@1.4.9: + version "1.4.9" + resolved "https://registry.npmjs.org/anser/-/anser-1.4.9.tgz" + integrity sha512-AI+BjTeGt2+WFk4eWcqbQ7snZpDBt8SaLlj0RT2h5xfdWaiy51OjYvqwMrNzJLGy8iOAL6nKDITWO+rd4MkYEA== + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +anymatch@~3.1.1: + version "3.1.2" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +aos@^3.0.0-beta.6: + version "3.0.0-beta.6" + resolved "https://registry.npmjs.org/aos/-/aos-3.0.0-beta.6.tgz" + integrity sha512-VLWrpq8bfAWcetynVHMMrqdC+89Qq/Ym6UBJbHB4crIwp3RR8uq1dNGgsFzoDl03S43rlVMK+na3r5+oUCZsYw== + dependencies: + classlist-polyfill "^1.2.0" + lodash.debounce "^4.0.8" + lodash.throttle "^4.1.1" + +arch@^2.1.0: + version "2.1.2" + resolved "https://registry.npmjs.org/arch/-/arch-2.1.2.tgz" + integrity sha512-NTBIIbAfkJeIletyABbVtdPgeKfDafR+1mZV/AyyfC1UkVkp9iUjV+wwmqtUgphHYajbI86jejBJp5e+jkGTiQ== + +archive-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz" + integrity sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA= + dependencies: + file-type "^4.2.0" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz" + integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + +asn1.js@^5.2.0: + version "5.4.1" + resolved "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" + +assert@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz" + integrity sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A== + dependencies: + es6-object-assign "^1.1.0" + is-nan "^1.2.1" + object-is "^1.0.1" + util "^0.12.0" + +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + dependencies: + object-assign "^4.1.1" + util "0.10.3" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +ast-types@0.13.2: + version "0.13.2" + resolved "https://registry.npmjs.org/ast-types/-/ast-types-0.13.2.tgz" + integrity sha512-uWMHxJxtfj/1oZClOxDEV1sQ1HCDkA4MG8Gr69KKeBjEVH0R84WlejZ0y2DcwyBlpAEMltmVYkVgqfLFb2oyiA== + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + +babel-plugin-emotion@^10.0.27: + version "10.0.33" + resolved "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.0.33.tgz" + integrity sha512-bxZbTTGz0AJQDHm8k6Rf3RQJ8tX2scsfsRyKVgAbiUPUNIRtlK+7JxP+TAd1kRLABFxe0CFm2VdK4ePkoA9FxQ== dependencies: "@babel/helper-module-imports" "^7.0.0" "@emotion/hash" "0.8.0" "@emotion/memoize" "0.7.4" "@emotion/serialize" "^0.11.16" - "babel-plugin-macros" "^2.0.0" - "babel-plugin-syntax-jsx" "^6.18.0" - "convert-source-map" "^1.5.0" - "escape-string-regexp" "^1.0.5" - "find-root" "^1.1.0" - "source-map" "^0.5.7" - -"babel-plugin-macros@^2.0.0": - "integrity" "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==" - "resolved" "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz" - "version" "2.8.0" + babel-plugin-macros "^2.0.0" + babel-plugin-syntax-jsx "^6.18.0" + convert-source-map "^1.5.0" + escape-string-regexp "^1.0.5" + find-root "^1.1.0" + source-map "^0.5.7" + +babel-plugin-macros@^2.0.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138" + integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg== dependencies: "@babel/runtime" "^7.7.2" - "cosmiconfig" "^6.0.0" - "resolve" "^1.12.0" + cosmiconfig "^6.0.0" + resolve "^1.12.0" -"babel-plugin-styled-components@^1.10.7", "babel-plugin-styled-components@>= 1": - "integrity" "sha512-MBMHGcIA22996n9hZRf/UJLVVgkEOITuR2SvjHLb5dSTUyR4ZRGn+ngITapes36FI3WLxZHfRhkA1ffHxihOrg==" - "resolved" "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-1.10.7.tgz" - "version" "1.10.7" +"babel-plugin-styled-components@>= 1.12.0": + version "2.0.2" + resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.2.tgz#0fac11402dc9db73698b55847ab1dc73f5197c54" + integrity sha512-7eG5NE8rChnNTDxa6LQfynwgHTVOYYaHJbUYSlOhk8QBXIQiMBKq4gyfHBBKPrxUcVBXVJL61ihduCpCQbuNbw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.0" + "@babel/helper-module-imports" "^7.16.0" + babel-plugin-syntax-jsx "^6.18.0" + lodash "^4.17.11" + +babel-plugin-styled-components@^1.10.7: + version "1.10.7" + resolved "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-1.10.7.tgz" + integrity sha512-MBMHGcIA22996n9hZRf/UJLVVgkEOITuR2SvjHLb5dSTUyR4ZRGn+ngITapes36FI3WLxZHfRhkA1ffHxihOrg== dependencies: "@babel/helper-annotate-as-pure" "^7.0.0" "@babel/helper-module-imports" "^7.0.0" - "babel-plugin-syntax-jsx" "^6.18.0" - "lodash" "^4.17.11" - -"babel-plugin-syntax-jsx@^6.18.0": - "integrity" "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=" - "resolved" "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz" - "version" "6.18.0" - -"babel-plugin-transform-define@^2.0.0": - "integrity" "sha512-0dv5RNRUlUKxGYIIErl01lpvi8b7W2R04Qcl1mCj70ahwZcgiklfXnFlh4FGnRh6aayCfSZKdhiMryVzcq5Dmg==" - "resolved" "https://registry.npmjs.org/babel-plugin-transform-define/-/babel-plugin-transform-define-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "lodash" "^4.17.11" - "traverse" "0.6.6" - -"bail@^1.0.0": - "integrity" "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==" - "resolved" "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz" - "version" "1.0.5" - -"balanced-match@^1.0.0": - "integrity" "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" - "version" "1.0.0" - -"base@^0.11.1": - "integrity" "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==" - "resolved" "https://registry.npmjs.org/base/-/base-0.11.2.tgz" - "version" "0.11.2" - dependencies: - "cache-base" "^1.0.1" - "class-utils" "^0.3.5" - "component-emitter" "^1.2.1" - "define-property" "^1.0.0" - "isobject" "^3.0.1" - "mixin-deep" "^1.2.0" - "pascalcase" "^0.1.1" - -"base64-js@^1.0.2": - "integrity" "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" - "resolved" "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz" - "version" "1.3.1" - -"big.js@^5.2.2": - "integrity" "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" - "resolved" "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz" - "version" "5.2.2" - -"bin-build@^3.0.0": - "integrity" "sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA==" - "resolved" "https://registry.npmjs.org/bin-build/-/bin-build-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "decompress" "^4.0.0" - "download" "^6.2.2" - "execa" "^0.7.0" - "p-map-series" "^1.0.0" - "tempfile" "^2.0.0" - -"bin-check@^4.1.0": - "integrity" "sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==" - "resolved" "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "execa" "^0.7.0" - "executable" "^4.1.0" - -"bin-version-check@^4.0.0": - "integrity" "sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ==" - "resolved" "https://registry.npmjs.org/bin-version-check/-/bin-version-check-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "bin-version" "^3.0.0" - "semver" "^5.6.0" - "semver-truncate" "^1.1.2" - -"bin-version@^3.0.0": - "integrity" "sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==" - "resolved" "https://registry.npmjs.org/bin-version/-/bin-version-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "execa" "^1.0.0" - "find-versions" "^3.0.0" - -"bin-wrapper@^4.0.0": - "integrity" "sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==" - "resolved" "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "bin-check" "^4.1.0" - "bin-version-check" "^4.0.0" - "download" "^7.1.0" - "import-lazy" "^3.1.0" - "os-filter-obj" "^2.0.0" - "pify" "^4.0.1" - -"binary-extensions@^2.0.0": - "integrity" "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" - "resolved" "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" - "version" "2.2.0" - -"bl@^1.0.0": - "integrity" "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==" - "resolved" "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz" - "version" "1.2.2" - dependencies: - "readable-stream" "^2.3.5" - "safe-buffer" "^5.1.1" - -"bn.js@^4.0.0": - "integrity" "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" - "version" "4.12.0" - -"bn.js@^4.1.0": - "integrity" "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" - "version" "4.12.0" - -"bn.js@^4.11.9": - "integrity" "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" - "version" "4.12.0" - -"bn.js@^5.0.0", "bn.js@^5.1.1": - "integrity" "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" - "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz" - "version" "5.2.0" - -"boolbase@^1.0.0": - "integrity" "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" - "resolved" "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" - "version" "1.0.0" - -"bootstrap@^4.5.0": - "integrity" "sha512-Z93QoXvodoVslA+PWNdk23Hze4RBYIkpb5h8I2HY2Tu2h7A0LpAgLcyrhrSUyo2/Oxm2l1fRZPs1e5hnxnliXA==" - "resolved" "https://registry.npmjs.org/bootstrap/-/bootstrap-4.5.0.tgz" - "version" "4.5.0" - -"brace-expansion@^1.1.7": - "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" - "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - "version" "1.1.11" - dependencies: - "balanced-match" "^1.0.0" - "concat-map" "0.0.1" - -"braces@^2.3.1": - "integrity" "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==" - "resolved" "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz" - "version" "2.3.2" - dependencies: - "arr-flatten" "^1.1.0" - "array-unique" "^0.3.2" - "extend-shallow" "^2.0.1" - "fill-range" "^4.0.0" - "isobject" "^3.0.1" - "repeat-element" "^1.1.2" - "snapdragon" "^0.8.1" - "snapdragon-node" "^2.0.1" - "split-string" "^3.0.2" - "to-regex" "^3.0.1" - -"braces@~3.0.2": - "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==" - "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "fill-range" "^7.0.1" - -"brorand@^1.0.1", "brorand@^1.1.0": - "integrity" "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - "resolved" "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz" - "version" "1.1.0" - -"browser-split@0.0.0": - "integrity" "sha1-QUGcrvdpdVkp3VGJZ9PuwKYmJ3E=" - "resolved" "https://registry.npmjs.org/browser-split/-/browser-split-0.0.0.tgz" - "version" "0.0.0" - -"browserify-aes@^1.0.0", "browserify-aes@^1.0.4": - "integrity" "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==" - "resolved" "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "buffer-xor" "^1.0.3" - "cipher-base" "^1.0.0" - "create-hash" "^1.1.0" - "evp_bytestokey" "^1.0.3" - "inherits" "^2.0.1" - "safe-buffer" "^5.0.1" - -"browserify-cipher@^1.0.0": - "integrity" "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==" - "resolved" "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "browserify-aes" "^1.0.4" - "browserify-des" "^1.0.0" - "evp_bytestokey" "^1.0.0" - -"browserify-des@^1.0.0": - "integrity" "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==" - "resolved" "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "cipher-base" "^1.0.1" - "des.js" "^1.0.0" - "inherits" "^2.0.1" - "safe-buffer" "^5.1.2" - -"browserify-rsa@^4.0.0", "browserify-rsa@^4.0.1": - "integrity" "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==" - "resolved" "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "bn.js" "^5.0.0" - "randombytes" "^2.0.1" - -"browserify-sign@^4.0.0": - "integrity" "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==" - "resolved" "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz" - "version" "4.2.1" - dependencies: - "bn.js" "^5.1.1" - "browserify-rsa" "^4.0.1" - "create-hash" "^1.2.0" - "create-hmac" "^1.1.7" - "elliptic" "^6.5.3" - "inherits" "^2.0.4" - "parse-asn1" "^5.1.5" - "readable-stream" "^3.6.0" - "safe-buffer" "^5.2.0" - -"browserify-zlib@^0.2.0", "browserify-zlib@0.2.0": - "integrity" "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==" - "resolved" "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz" - "version" "0.2.0" - dependencies: - "pako" "~1.0.5" - -"browserslist@4.16.6": - "integrity" "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==" - "resolved" "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz" - "version" "4.16.6" - dependencies: - "caniuse-lite" "^1.0.30001219" - "colorette" "^1.2.2" - "electron-to-chromium" "^1.3.723" - "escalade" "^3.1.1" - "node-releases" "^1.1.71" - -"buffer-alloc-unsafe@^1.1.0": - "integrity" "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" - "resolved" "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz" - "version" "1.1.0" - -"buffer-alloc@^1.2.0": - "integrity" "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==" - "resolved" "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "buffer-alloc-unsafe" "^1.1.0" - "buffer-fill" "^1.0.0" - -"buffer-crc32@~0.2.3": - "integrity" "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" - "resolved" "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" - "version" "0.2.13" - -"buffer-fill@^1.0.0": - "integrity" "sha1-+PeLdniYiO858gXNY39o5wISKyw=" - "resolved" "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz" - "version" "1.0.0" - -"buffer-xor@^1.0.3": - "integrity" "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" - "resolved" "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz" - "version" "1.0.3" - -"buffer@^4.3.0": - "integrity" "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==" - "resolved" "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz" - "version" "4.9.2" - dependencies: - "base64-js" "^1.0.2" - "ieee754" "^1.1.4" - "isarray" "^1.0.0" - -"buffer@^5.2.1", "buffer@5.6.0": - "integrity" "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==" - "resolved" "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz" - "version" "5.6.0" - dependencies: - "base64-js" "^1.0.2" - "ieee754" "^1.1.4" - -"builtin-status-codes@^3.0.0": - "integrity" "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" - "resolved" "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz" - "version" "3.0.0" - -"bytes@3.1.0": - "integrity" "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - "resolved" "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz" - "version" "3.1.0" - -"cache-base@^1.0.1": - "integrity" "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==" - "resolved" "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "collection-visit" "^1.0.0" - "component-emitter" "^1.2.1" - "get-value" "^2.0.6" - "has-value" "^1.0.0" - "isobject" "^3.0.1" - "set-value" "^2.0.0" - "to-object-path" "^0.3.0" - "union-value" "^1.0.0" - "unset-value" "^1.0.0" - -"cacheable-request@^2.1.1": - "integrity" "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=" - "resolved" "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz" - "version" "2.1.4" - dependencies: - "clone-response" "1.0.2" - "get-stream" "3.0.0" - "http-cache-semantics" "3.8.1" - "keyv" "3.0.0" - "lowercase-keys" "1.0.0" - "normalize-url" "2.0.1" - "responselike" "1.0.2" - -"call-bind@^1.0.0", "call-bind@^1.0.2": - "integrity" "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==" - "resolved" "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "function-bind" "^1.1.1" - "get-intrinsic" "^1.0.2" - -"call-me-maybe@^1.0.1": - "integrity" "sha1-JtII6onje1y95gJQoV8DHBak1ms=" - "resolved" "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz" - "version" "1.0.1" - -"callsites@^3.0.0": - "integrity" "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - "resolved" "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" - "version" "3.1.0" - -"camelcase-keys@^2.0.0": - "integrity" "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=" - "resolved" "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "camelcase" "^2.0.0" - "map-obj" "^1.0.0" - -"camelcase@^2.0.0": - "integrity" "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" - "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz" - "version" "2.1.1" - -"camelcase@^5.0.0": - "integrity" "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" - "version" "5.3.1" - -"camelize@^1.0.0": - "integrity" "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" - "resolved" "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz" - "version" "1.0.0" - -"caniuse-lite@^1.0.30001202", "caniuse-lite@^1.0.30001219", "caniuse-lite@^1.0.30001228": - "integrity" "sha512-V7mQTFhjITxuk9zBpI6nYsiTXhcPe05l+364nZjK7MFK/E7ibvYBSAXr4YcA6oPR8j3ZLM/LN+lUqUVAQEUZFg==" - "resolved" "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001259.tgz" - "version" "1.0.30001259" - -"capture-stack-trace@^1.0.0": - "integrity" "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==" - "resolved" "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz" - "version" "1.0.1" - -"caw@^2.0.0", "caw@^2.0.1": - "integrity" "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==" - "resolved" "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "get-proxy" "^2.0.0" - "isurl" "^1.0.0-alpha5" - "tunnel-agent" "^0.6.0" - "url-to-options" "^1.0.1" - -"ccount@^1.0.0": - "integrity" "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==" - "resolved" "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz" - "version" "1.1.0" - -"chalk@^1.0.0": - "integrity" "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz" - "version" "1.1.3" - dependencies: - "ansi-styles" "^2.2.1" - "escape-string-regexp" "^1.0.2" - "has-ansi" "^2.0.0" - "strip-ansi" "^3.0.0" - "supports-color" "^2.0.0" - -"chalk@^2.0.0", "chalk@^2.4.2", "chalk@2.4.2": - "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - "version" "2.4.2" - dependencies: - "ansi-styles" "^3.2.1" - "escape-string-regexp" "^1.0.5" - "supports-color" "^5.3.0" - -"chalk@^4.1.0": - "integrity" "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz" - "version" "4.1.1" - dependencies: - "ansi-styles" "^4.1.0" - "supports-color" "^7.1.0" - -"chalk@4.0.0": - "integrity" "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "ansi-styles" "^4.1.0" - "supports-color" "^7.1.0" - -"character-entities-html4@^1.0.0": - "integrity" "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==" - "resolved" "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz" - "version" "1.1.4" - -"character-entities-legacy@^1.0.0": - "integrity" "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" - "resolved" "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz" - "version" "1.1.4" - -"character-entities@^1.0.0": - "integrity" "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" - "resolved" "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz" - "version" "1.2.4" - -"character-reference-invalid@^1.0.0": - "integrity" "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" - "resolved" "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz" - "version" "1.1.4" - -"charenc@0.0.2": - "integrity" "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" - "resolved" "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz" - "version" "0.0.2" - -"chokidar@>=2.0.0 <4.0.0", "chokidar@3.5.1": - "integrity" "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==" - "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz" - "version" "3.5.1" - dependencies: - "anymatch" "~3.1.1" - "braces" "~3.0.2" - "glob-parent" "~5.1.0" - "is-binary-path" "~2.1.0" - "is-glob" "~4.0.1" - "normalize-path" "~3.0.0" - "readdirp" "~3.5.0" + babel-plugin-syntax-jsx "^6.18.0" + lodash "^4.17.11" + +babel-plugin-syntax-jsx@^6.18.0: + version "6.18.0" + resolved "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz" + integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY= + +babel-plugin-transform-define@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/babel-plugin-transform-define/-/babel-plugin-transform-define-2.0.0.tgz" + integrity sha512-0dv5RNRUlUKxGYIIErl01lpvi8b7W2R04Qcl1mCj70ahwZcgiklfXnFlh4FGnRh6aayCfSZKdhiMryVzcq5Dmg== + dependencies: + lodash "^4.17.11" + traverse "0.6.6" + +bail@^1.0.0: + version "1.0.5" + resolved "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz" + integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base64-js@^1.0.2: + version "1.3.1" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz" + integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.npmjs.org/base/-/base-0.11.2.tgz" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +bin-build@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/bin-build/-/bin-build-3.0.0.tgz" + integrity sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA== + dependencies: + decompress "^4.0.0" + download "^6.2.2" + execa "^0.7.0" + p-map-series "^1.0.0" + tempfile "^2.0.0" + +bin-check@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz" + integrity sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA== + dependencies: + execa "^0.7.0" + executable "^4.1.0" + +bin-version-check@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/bin-version-check/-/bin-version-check-4.0.0.tgz" + integrity sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ== + dependencies: + bin-version "^3.0.0" + semver "^5.6.0" + semver-truncate "^1.1.2" + +bin-version@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/bin-version/-/bin-version-3.1.0.tgz" + integrity sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ== + dependencies: + execa "^1.0.0" + find-versions "^3.0.0" + +bin-wrapper@^4.0.0: + version "4.1.0" + resolved "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-4.1.0.tgz" + integrity sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q== + dependencies: + bin-check "^4.1.0" + bin-version-check "^4.0.0" + download "^7.1.0" + import-lazy "^3.1.0" + os-filter-obj "^2.0.0" + pify "^4.0.1" + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bl@^1.0.0: + version "1.2.2" + resolved "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz" + integrity sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA== + dependencies: + readable-stream "^2.3.5" + safe-buffer "^5.1.1" + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.0.0, bn.js@^5.1.1: + version "5.2.0" + resolved "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz" + integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== + +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + +bootstrap@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/bootstrap/-/bootstrap-4.5.0.tgz" + integrity sha512-Z93QoXvodoVslA+PWNdk23Hze4RBYIkpb5h8I2HY2Tu2h7A0LpAgLcyrhrSUyo2/Oxm2l1fRZPs1e5hnxnliXA== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1: + version "2.3.2" + resolved "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.0.1, brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browser-split@0.0.0: + version "0.0.0" + resolved "https://registry.npmjs.org/browser-split/-/browser-split-0.0.0.tgz" + integrity sha1-QUGcrvdpdVkp3VGJZ9PuwKYmJ3E= + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.1.0" + resolved "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz" + integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== + dependencies: + bn.js "^5.0.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.2.1" + resolved "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz" + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +browserify-zlib@0.2.0, browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +browserslist@4.16.6: + version "4.16.6" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz" + integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== + dependencies: + caniuse-lite "^1.0.30001219" + colorette "^1.2.2" + electron-to-chromium "^1.3.723" + escalade "^3.1.1" + node-releases "^1.1.71" + +buffer-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz" + integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== + +buffer-alloc@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz" + integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" + integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + +buffer-fill@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz" + integrity sha1-+PeLdniYiO858gXNY39o5wISKyw= + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@5.6.0, buffer@^5.2.1: + version "5.6.0" + resolved "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz" + integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + +buffer@^4.3.0: + version "4.9.2" + resolved "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +cacheable-request@^2.1.1: + version "2.1.4" + resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz" + integrity sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0= + dependencies: + clone-response "1.0.2" + get-stream "3.0.0" + http-cache-semantics "3.8.1" + keyv "3.0.0" + lowercase-keys "1.0.0" + normalize-url "2.0.1" + responselike "1.0.2" + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +call-me-maybe@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz" + integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz" + integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz" + integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= + +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelize@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz" + integrity sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs= + +caniuse-lite@^1.0.30001202, caniuse-lite@^1.0.30001219, caniuse-lite@^1.0.30001228: + version "1.0.30001259" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001259.tgz" + integrity sha512-V7mQTFhjITxuk9zBpI6nYsiTXhcPe05l+364nZjK7MFK/E7ibvYBSAXr4YcA6oPR8j3ZLM/LN+lUqUVAQEUZFg== + +capture-stack-trace@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz" + integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw== + +caw@^2.0.0, caw@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz" + integrity sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA== + dependencies: + get-proxy "^2.0.0" + isurl "^1.0.0-alpha5" + tunnel-agent "^0.6.0" + url-to-options "^1.0.1" + +ccount@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz" + integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg== + +chalk@2.4.2, chalk@^2.0.0, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz" + integrity sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^1.0.0: + version "1.1.3" + resolved "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^4.1.0: + version "4.1.1" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz" + integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +character-entities-html4@^1.0.0: + version "1.1.4" + resolved "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz" + integrity sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g== + +character-entities-legacy@^1.0.0: + version "1.1.4" + resolved "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz" + integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== + +character-entities@^1.0.0: + version "1.2.4" + resolved "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz" + integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== + +character-reference-invalid@^1.0.0: + version "1.1.4" + resolved "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz" + integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== + +charenc@0.0.2: + version "0.0.2" + resolved "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz" + integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= + +chokidar@3.5.1, "chokidar@>=2.0.0 <4.0.0": + version "3.5.1" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz" + integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" optionalDependencies: - "fsevents" "~2.3.1" - -"cipher-base@^1.0.0", "cipher-base@^1.0.1", "cipher-base@^1.0.3": - "integrity" "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==" - "resolved" "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "inherits" "^2.0.1" - "safe-buffer" "^5.0.1" - -"class-list@~0.1.0", "class-list@~0.1.1": - "integrity" "sha1-m5dFGSxBebXaCg12M2WOPHDXlss=" - "resolved" "https://registry.npmjs.org/class-list/-/class-list-0.1.1.tgz" - "version" "0.1.1" - dependencies: - "indexof" "0.0.1" - -"class-utils@^0.3.5": - "integrity" "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==" - "resolved" "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz" - "version" "0.3.6" - dependencies: - "arr-union" "^3.1.0" - "define-property" "^0.2.5" - "isobject" "^3.0.0" - "static-extend" "^0.1.1" - -"classlist-polyfill@^1.2.0": - "integrity" "sha1-k1vC39lFiodrJ5YXUUY4vKqWSi4=" - "resolved" "https://registry.npmjs.org/classlist-polyfill/-/classlist-polyfill-1.2.0.tgz" - "version" "1.2.0" - -"classnames@^2.2.5", "classnames@^2.2.6", "classnames@2.2.6": - "integrity" "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" - "resolved" "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz" - "version" "2.2.6" - -"clone-response@1.0.2": - "integrity" "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=" - "resolved" "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "mimic-response" "^1.0.0" - -"collection-visit@^1.0.0": - "integrity" "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=" - "resolved" "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "map-visit" "^1.0.0" - "object-visit" "^1.0.0" - -"color-convert@^1.9.0": - "integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==" - "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" - "version" "1.9.3" - dependencies: - "color-name" "1.1.3" - -"color-convert@^2.0.1": - "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==" - "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "color-name" "~1.1.4" - -"color-name@~1.1.4": - "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - "version" "1.1.4" - -"color-name@1.1.3": - "integrity" "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - "version" "1.1.3" - -"colorette@^1.2.2": - "integrity" "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==" - "resolved" "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz" - "version" "1.4.0" - -"comma-separated-tokens@^1.0.0": - "integrity" "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==" - "resolved" "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz" - "version" "1.0.8" - -"commander@^7.1.0": - "integrity" "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" - "resolved" "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz" - "version" "7.2.0" - -"commander@~2.8.1": - "integrity" "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=" - "resolved" "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz" - "version" "2.8.1" - dependencies: - "graceful-readlink" ">= 1.0.0" - -"commondir@^1.0.1": - "integrity" "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" - "resolved" "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" - "version" "1.0.1" - -"component-emitter@^1.2.1": - "integrity" "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - "resolved" "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz" - "version" "1.3.0" - -"concat-map@0.0.1": - "integrity" "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - "version" "0.0.1" - -"config-chain@^1.1.11": - "integrity" "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==" - "resolved" "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz" - "version" "1.1.12" - dependencies: - "ini" "^1.3.4" - "proto-list" "~1.2.1" - -"console-browserify@^1.1.0": - "integrity" "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" - "resolved" "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz" - "version" "1.2.0" - -"console-stream@^0.1.1": - "integrity" "sha1-oJX+B7IEZZVfL6/Si11yvM2UnUQ=" - "resolved" "https://registry.npmjs.org/console-stream/-/console-stream-0.1.1.tgz" - "version" "0.1.1" - -"constants-browserify@^1.0.0", "constants-browserify@1.0.0": - "integrity" "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" - "resolved" "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz" - "version" "1.0.0" - -"content-disposition@^0.5.2": - "integrity" "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==" - "resolved" "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz" - "version" "0.5.3" - dependencies: - "safe-buffer" "5.1.2" - -"convert-source-map@^1.5.0", "convert-source-map@1.7.0": - "integrity" "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==" - "resolved" "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz" - "version" "1.7.0" - dependencies: - "safe-buffer" "~5.1.1" - -"copy-descriptor@^0.1.0": - "integrity" "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" - "resolved" "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz" - "version" "0.1.1" - -"core-util-is@~1.0.0": - "integrity" "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" - "version" "1.0.2" - -"cosmiconfig@^6.0.0": - "integrity" "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==" - "resolved" "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz" - "version" "6.0.0" + fsevents "~2.3.1" + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +class-list@~0.1.0, class-list@~0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/class-list/-/class-list-0.1.1.tgz" + integrity sha1-m5dFGSxBebXaCg12M2WOPHDXlss= + dependencies: + indexof "0.0.1" + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +classlist-polyfill@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/classlist-polyfill/-/classlist-polyfill-1.2.0.tgz" + integrity sha1-k1vC39lFiodrJ5YXUUY4vKqWSi4= + +classnames@2.2.6, classnames@^2.2.5, classnames@^2.2.6: + version "2.2.6" + resolved "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz" + integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== + +clone-response@1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + dependencies: + mimic-response "^1.0.0" + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colorette@^1.2.2: + version "1.4.0" + resolved "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz" + integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== + +comma-separated-tokens@^1.0.0: + version "1.0.8" + resolved "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz" + integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== + +commander@^7.1.0: + version "7.2.0" + resolved "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +commander@~2.8.1: + version "2.8.1" + resolved "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz" + integrity sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ= + dependencies: + graceful-readlink ">= 1.0.0" + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +config-chain@^1.1.11: + version "1.1.12" + resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz" + integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + +console-stream@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/console-stream/-/console-stream-0.1.1.tgz" + integrity sha1-oJX+B7IEZZVfL6/Si11yvM2UnUQ= + +constants-browserify@1.0.0, constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + +content-disposition@^0.5.2: + version "0.5.3" + resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + +convert-source-map@1.7.0, convert-source-map@^1.5.0: + version "1.7.0" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cosmiconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz" + integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== dependencies: "@types/parse-json" "^4.0.0" - "import-fresh" "^3.1.0" - "parse-json" "^5.0.0" - "path-type" "^4.0.0" - "yaml" "^1.7.2" - -"create-ecdh@^4.0.0": - "integrity" "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==" - "resolved" "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz" - "version" "4.0.4" - dependencies: - "bn.js" "^4.1.0" - "elliptic" "^6.5.3" - -"create-error-class@^3.0.2": - "integrity" "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=" - "resolved" "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "capture-stack-trace" "^1.0.0" - -"create-hash@^1.1.0", "create-hash@^1.1.2", "create-hash@^1.2.0": - "integrity" "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==" - "resolved" "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "cipher-base" "^1.0.1" - "inherits" "^2.0.1" - "md5.js" "^1.3.4" - "ripemd160" "^2.0.1" - "sha.js" "^2.4.0" - -"create-hmac@^1.1.0", "create-hmac@^1.1.4", "create-hmac@^1.1.7": - "integrity" "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==" - "resolved" "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz" - "version" "1.1.7" - dependencies: - "cipher-base" "^1.0.3" - "create-hash" "^1.1.0" - "inherits" "^2.0.1" - "ripemd160" "^2.0.0" - "safe-buffer" "^5.0.1" - "sha.js" "^2.4.8" - -"cross-spawn@^5.0.1": - "integrity" "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=" - "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz" - "version" "5.1.0" - dependencies: - "lru-cache" "^4.0.1" - "shebang-command" "^1.2.0" - "which" "^1.2.9" - -"cross-spawn@^6.0.0": - "integrity" "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==" - "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz" - "version" "6.0.5" - dependencies: - "nice-try" "^1.0.4" - "path-key" "^2.0.1" - "semver" "^5.5.0" - "shebang-command" "^1.2.0" - "which" "^1.2.9" - -"cross-spawn@^7.0.0": - "integrity" "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==" - "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" - "version" "7.0.3" - dependencies: - "path-key" "^3.1.0" - "shebang-command" "^2.0.0" - "which" "^2.0.1" - -"crypt@0.0.2": - "integrity" "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" - "resolved" "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz" - "version" "0.0.2" - -"crypto-browserify@^3.11.0", "crypto-browserify@3.12.0": - "integrity" "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==" - "resolved" "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz" - "version" "3.12.0" - dependencies: - "browserify-cipher" "^1.0.0" - "browserify-sign" "^4.0.0" - "create-ecdh" "^4.0.0" - "create-hash" "^1.1.0" - "create-hmac" "^1.1.0" - "diffie-hellman" "^5.0.0" - "inherits" "^2.0.1" - "pbkdf2" "^3.0.3" - "public-encrypt" "^4.0.0" - "randombytes" "^2.0.0" - "randomfill" "^1.0.3" - -"css-color-keywords@^1.0.0": - "integrity" "sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU=" - "resolved" "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz" - "version" "1.0.0" - -"css-select@^3.1.2": - "integrity" "sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA==" - "resolved" "https://registry.npmjs.org/css-select/-/css-select-3.1.2.tgz" - "version" "3.1.2" - dependencies: - "boolbase" "^1.0.0" - "css-what" "^4.0.0" - "domhandler" "^4.0.0" - "domutils" "^2.4.3" - "nth-check" "^2.0.0" - -"css-to-react-native@^3.0.0": - "integrity" "sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ==" - "resolved" "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "camelize" "^1.0.0" - "css-color-keywords" "^1.0.0" - "postcss-value-parser" "^4.0.2" - -"css-tree@^1.1.2": - "integrity" "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==" - "resolved" "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz" - "version" "1.1.3" - dependencies: - "mdn-data" "2.0.14" - "source-map" "^0.6.1" - -"css-what@^4.0.0": - "integrity" "sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A==" - "resolved" "https://registry.npmjs.org/css-what/-/css-what-4.0.0.tgz" - "version" "4.0.0" - -"css.escape@1.5.1": - "integrity" "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=" - "resolved" "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz" - "version" "1.5.1" - -"cssnano-preset-simple@^3.0.0": - "integrity" "sha512-vxQPeoMRqUT3c/9f0vWeVa2nKQIHFpogtoBvFdW4GQ3IvEJ6uauCP6p3Y5zQDLFcI7/+40FTgX12o7XUL0Ko+w==" - "resolved" "https://registry.npmjs.org/cssnano-preset-simple/-/cssnano-preset-simple-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "caniuse-lite" "^1.0.30001202" - -"cssnano-simple@3.0.0": - "integrity" "sha512-oU3ueli5Dtwgh0DyeohcIEE00QVfbPR3HzyXdAl89SfnQG3y0/qcpfLVW+jPIh3/rgMZGwuW96rejZGaYE9eUg==" - "resolved" "https://registry.npmjs.org/cssnano-simple/-/cssnano-simple-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "cssnano-preset-simple" "^3.0.0" - -"csso@^4.2.0": - "integrity" "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==" - "resolved" "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz" - "version" "4.2.0" - dependencies: - "css-tree" "^1.1.2" - -"csstype@^2.2.0", "csstype@^2.5.7", "csstype@^2.6.7": - "integrity" "sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w==" - "resolved" "https://registry.npmjs.org/csstype/-/csstype-2.6.10.tgz" - "version" "2.6.10" - -"csstype@^3.0.2": - "integrity" "sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw==" - "resolved" "https://registry.npmjs.org/csstype/-/csstype-3.0.9.tgz" - "version" "3.0.9" - -"currently-unhandled@^0.4.1": - "integrity" "sha1-mI3zP+qxke95mmE2nddsF635V+o=" - "resolved" "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz" - "version" "0.4.1" - dependencies: - "array-find-index" "^1.0.1" - -"data-uri-to-buffer@3.0.1": - "integrity" "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==" - "resolved" "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz" - "version" "3.0.1" - -"debug@^2.2.0": - "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" - "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - "version" "2.6.9" - dependencies: - "ms" "2.0.0" - -"debug@^2.3.3": - "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" - "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - "version" "2.6.9" - dependencies: - "ms" "2.0.0" - -"debug@^2.6.8": - "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" - "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - "version" "2.6.9" - dependencies: - "ms" "2.0.0" - -"debug@^4.0.0", "debug@^4.1.0": - "integrity" "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==" - "resolved" "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz" - "version" "4.1.1" - dependencies: - "ms" "^2.1.1" - -"debug@2": - "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" - "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - "version" "2.6.9" - dependencies: - "ms" "2.0.0" - -"decamelize@^1.1.2": - "integrity" "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - "resolved" "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" - "version" "1.2.0" - -"decode-uri-component@^0.2.0": - "integrity" "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" - "resolved" "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz" - "version" "0.2.0" - -"decompress-response@^3.2.0", "decompress-response@^3.3.0": - "integrity" "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=" - "resolved" "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz" - "version" "3.3.0" - dependencies: - "mimic-response" "^1.0.0" - -"decompress-response@^6.0.0": - "integrity" "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==" - "resolved" "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "mimic-response" "^3.1.0" - -"decompress-tar@^4.0.0", "decompress-tar@^4.1.0", "decompress-tar@^4.1.1": - "integrity" "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==" - "resolved" "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz" - "version" "4.1.1" - dependencies: - "file-type" "^5.2.0" - "is-stream" "^1.1.0" - "tar-stream" "^1.5.2" - -"decompress-tarbz2@^4.0.0": - "integrity" "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==" - "resolved" "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz" - "version" "4.1.1" - dependencies: - "decompress-tar" "^4.1.0" - "file-type" "^6.1.0" - "is-stream" "^1.1.0" - "seek-bzip" "^1.0.5" - "unbzip2-stream" "^1.0.9" - -"decompress-targz@^4.0.0": - "integrity" "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==" - "resolved" "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz" - "version" "4.1.1" - dependencies: - "decompress-tar" "^4.1.1" - "file-type" "^5.2.0" - "is-stream" "^1.1.0" - -"decompress-unzip@^4.0.1": - "integrity" "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=" - "resolved" "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "file-type" "^3.8.0" - "get-stream" "^2.2.0" - "pify" "^2.3.0" - "yauzl" "^2.4.2" - -"decompress@^4.0.0", "decompress@^4.2.0": - "integrity" "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==" - "resolved" "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz" - "version" "4.2.1" - dependencies: - "decompress-tar" "^4.0.0" - "decompress-tarbz2" "^4.0.0" - "decompress-targz" "^4.0.0" - "decompress-unzip" "^4.0.1" - "graceful-fs" "^4.1.10" - "make-dir" "^1.0.0" - "pify" "^2.3.0" - "strip-dirs" "^2.0.0" - -"deep-assign@^2.0.0": - "integrity" "sha1-6+BrHwfwja5ZdiDj3RYi83GhxXI=" - "resolved" "https://registry.npmjs.org/deep-assign/-/deep-assign-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "is-obj" "^1.0.0" - -"deepmerge@^4.0.0": - "integrity" "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" - "resolved" "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz" - "version" "4.2.2" - -"define-properties@^1.1.3": - "integrity" "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==" - "resolved" "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz" - "version" "1.1.3" - dependencies: - "object-keys" "^1.0.12" - -"define-property@^0.2.5": - "integrity" "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=" - "resolved" "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz" - "version" "0.2.5" - dependencies: - "is-descriptor" "^0.1.0" - -"define-property@^1.0.0": - "integrity" "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=" - "resolved" "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "is-descriptor" "^1.0.0" - -"define-property@^2.0.2": - "integrity" "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==" - "resolved" "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "is-descriptor" "^1.0.2" - "isobject" "^3.0.1" - -"depd@~1.1.2": - "integrity" "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - "resolved" "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" - "version" "1.1.2" - -"dequal@^2.0.2": - "integrity" "sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug==" - "resolved" "https://registry.npmjs.org/dequal/-/dequal-2.0.2.tgz" - "version" "2.0.2" - -"des.js@^1.0.0": - "integrity" "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==" - "resolved" "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "inherits" "^2.0.1" - "minimalistic-assert" "^1.0.0" - -"diffie-hellman@^5.0.0": - "integrity" "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==" - "resolved" "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz" - "version" "5.0.3" - dependencies: - "bn.js" "^4.1.0" - "miller-rabin" "^4.0.0" - "randombytes" "^2.0.0" - -"dir-glob@2.0.0": - "integrity" "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==" - "resolved" "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "arrify" "^1.0.1" - "path-type" "^3.0.0" - -"dom-helpers@^5.0.1", "dom-helpers@^5.1.0", "dom-helpers@^5.1.2": - "integrity" "sha512-TjMyeVUvNEnOnhzs6uAn9Ya47GmMo3qq7m+Lr/3ON0Rs5kHvb8I+SQYjLUSYn7qhEm0QjW0yrBkvz9yOrwwz1A==" - "resolved" "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.1.4.tgz" - "version" "5.1.4" + import-fresh "^3.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.7.2" + +create-ecdh@^4.0.0: + version "4.0.4" + resolved "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== + dependencies: + bn.js "^4.1.0" + elliptic "^6.5.3" + +create-error-class@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz" + integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y= + dependencies: + capture-stack-trace "^1.0.0" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^7.0.0: + version "7.0.3" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypt@0.0.2: + version "0.0.2" + resolved "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz" + integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= + +crypto-browserify@3.12.0, crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +css-color-keywords@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz" + integrity sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU= + +css-select@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/css-select/-/css-select-3.1.2.tgz" + integrity sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA== + dependencies: + boolbase "^1.0.0" + css-what "^4.0.0" + domhandler "^4.0.0" + domutils "^2.4.3" + nth-check "^2.0.0" + +css-to-react-native@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.0.0.tgz" + integrity sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ== + dependencies: + camelize "^1.0.0" + css-color-keywords "^1.0.0" + postcss-value-parser "^4.0.2" + +css-tree@^1.1.2: + version "1.1.3" + resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz" + integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== + dependencies: + mdn-data "2.0.14" + source-map "^0.6.1" + +css-what@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/css-what/-/css-what-4.0.0.tgz" + integrity sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A== + +css.escape@1.5.1: + version "1.5.1" + resolved "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz" + integrity sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s= + +cssnano-preset-simple@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/cssnano-preset-simple/-/cssnano-preset-simple-3.0.0.tgz" + integrity sha512-vxQPeoMRqUT3c/9f0vWeVa2nKQIHFpogtoBvFdW4GQ3IvEJ6uauCP6p3Y5zQDLFcI7/+40FTgX12o7XUL0Ko+w== + dependencies: + caniuse-lite "^1.0.30001202" + +cssnano-simple@3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/cssnano-simple/-/cssnano-simple-3.0.0.tgz" + integrity sha512-oU3ueli5Dtwgh0DyeohcIEE00QVfbPR3HzyXdAl89SfnQG3y0/qcpfLVW+jPIh3/rgMZGwuW96rejZGaYE9eUg== + dependencies: + cssnano-preset-simple "^3.0.0" + +csso@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz" + integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== + dependencies: + css-tree "^1.1.2" + +csstype@^2.5.7, csstype@^2.6.7: + version "2.6.10" + resolved "https://registry.npmjs.org/csstype/-/csstype-2.6.10.tgz" + integrity sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w== + +csstype@^3.0.2: + version "3.0.9" + resolved "https://registry.npmjs.org/csstype/-/csstype-3.0.9.tgz" + integrity sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw== + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz" + integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= + dependencies: + array-find-index "^1.0.1" + +data-uri-to-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz" + integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og== + +debug@2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^4.0.0, debug@^4.1.0: + version "4.1.1" + resolved "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +decamelize@^1.1.2: + version "1.2.0" + resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +decompress-response@^3.2.0, decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + dependencies: + mimic-response "^1.0.0" + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz" + integrity sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ== + dependencies: + file-type "^5.2.0" + is-stream "^1.1.0" + tar-stream "^1.5.2" + +decompress-tarbz2@^4.0.0: + version "4.1.1" + resolved "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz" + integrity sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A== + dependencies: + decompress-tar "^4.1.0" + file-type "^6.1.0" + is-stream "^1.1.0" + seek-bzip "^1.0.5" + unbzip2-stream "^1.0.9" + +decompress-targz@^4.0.0: + version "4.1.1" + resolved "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz" + integrity sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w== + dependencies: + decompress-tar "^4.1.1" + file-type "^5.2.0" + is-stream "^1.1.0" + +decompress-unzip@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz" + integrity sha1-3qrM39FK6vhVePczroIQ+bSEj2k= + dependencies: + file-type "^3.8.0" + get-stream "^2.2.0" + pify "^2.3.0" + yauzl "^2.4.2" + +decompress@^4.0.0, decompress@^4.2.0: + version "4.2.1" + resolved "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz" + integrity sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ== + dependencies: + decompress-tar "^4.0.0" + decompress-tarbz2 "^4.0.0" + decompress-targz "^4.0.0" + decompress-unzip "^4.0.1" + graceful-fs "^4.1.10" + make-dir "^1.0.0" + pify "^2.3.0" + strip-dirs "^2.0.0" + +deep-assign@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/deep-assign/-/deep-assign-2.0.0.tgz" + integrity sha1-6+BrHwfwja5ZdiDj3RYi83GhxXI= + dependencies: + is-obj "^1.0.0" + +deepmerge@^4.0.0: + version "4.2.2" + resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +dequal@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/dequal/-/dequal-2.0.2.tgz" + integrity sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug== + +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dir-glob@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz" + integrity sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag== + dependencies: + arrify "^1.0.1" + path-type "^3.0.0" + +dom-helpers@^5.0.1, dom-helpers@^5.1.2: + version "5.1.4" + resolved "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.1.4.tgz" + integrity sha512-TjMyeVUvNEnOnhzs6uAn9Ya47GmMo3qq7m+Lr/3ON0Rs5kHvb8I+SQYjLUSYn7qhEm0QjW0yrBkvz9yOrwwz1A== + dependencies: + "@babel/runtime" "^7.8.7" + csstype "^2.6.7" + +dom-helpers@^5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" + integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== dependencies: "@babel/runtime" "^7.8.7" - "csstype" "^2.6.7" - -"dom-serializer@^1.0.1": - "integrity" "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==" - "resolved" "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz" - "version" "1.3.2" - dependencies: - "domelementtype" "^2.0.1" - "domhandler" "^4.2.0" - "entities" "^2.0.0" - -"domain-browser@^1.1.1": - "integrity" "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" - "resolved" "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz" - "version" "1.2.0" - -"domain-browser@4.19.0": - "integrity" "sha512-fRA+BaAWOR/yr/t7T9E9GJztHPeFjj8U35ajyAjCDtAAnTn1Rc1f6W6VGPJrO1tkQv9zWu+JRof7z6oQtiYVFQ==" - "resolved" "https://registry.npmjs.org/domain-browser/-/domain-browser-4.19.0.tgz" - "version" "4.19.0" - -"domelementtype@^2.0.1", "domelementtype@^2.2.0": - "integrity" "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" - "resolved" "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz" - "version" "2.2.0" - -"domhandler@^4.0.0", "domhandler@^4.2.0": - "integrity" "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==" - "resolved" "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz" - "version" "4.2.0" - dependencies: - "domelementtype" "^2.2.0" - -"domutils@^2.4.3": - "integrity" "sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA==" - "resolved" "https://registry.npmjs.org/domutils/-/domutils-2.6.0.tgz" - "version" "2.6.0" - dependencies: - "dom-serializer" "^1.0.1" - "domelementtype" "^2.2.0" - "domhandler" "^4.2.0" - -"download@^6.2.2": - "integrity" "sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==" - "resolved" "https://registry.npmjs.org/download/-/download-6.2.5.tgz" - "version" "6.2.5" - dependencies: - "caw" "^2.0.0" - "content-disposition" "^0.5.2" - "decompress" "^4.0.0" - "ext-name" "^5.0.0" - "file-type" "5.2.0" - "filenamify" "^2.0.0" - "get-stream" "^3.0.0" - "got" "^7.0.0" - "make-dir" "^1.0.0" - "p-event" "^1.0.0" - "pify" "^3.0.0" - -"download@^7.1.0": - "integrity" "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==" - "resolved" "https://registry.npmjs.org/download/-/download-7.1.0.tgz" - "version" "7.1.0" - dependencies: - "archive-type" "^4.0.0" - "caw" "^2.0.1" - "content-disposition" "^0.5.2" - "decompress" "^4.2.0" - "ext-name" "^5.0.0" - "file-type" "^8.1.0" - "filenamify" "^2.0.0" - "get-stream" "^3.0.0" - "got" "^8.3.1" - "make-dir" "^1.2.0" - "p-event" "^2.1.0" - "pify" "^3.0.0" - -"duplexer3@^0.1.4": - "integrity" "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" - "resolved" "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz" - "version" "0.1.4" - -"electron-to-chromium@^1.3.723": - "integrity" "sha512-2jtSwgyiRzybHRxrc2nKI+39wH3AwQgn+sogQ+q814gv8hIFwrcZbV07Ea9f8AmK0ufPVZUvvAG1uZJ+obV4Jw==" - "resolved" "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.846.tgz" - "version" "1.3.846" - -"elliptic@^6.5.3": - "integrity" "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==" - "resolved" "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz" - "version" "6.5.4" - dependencies: - "bn.js" "^4.11.9" - "brorand" "^1.1.0" - "hash.js" "^1.0.0" - "hmac-drbg" "^1.0.1" - "inherits" "^2.0.4" - "minimalistic-assert" "^1.0.1" - "minimalistic-crypto-utils" "^1.0.1" - -"emojis-list@^2.0.0": - "integrity" "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" - "resolved" "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz" - "version" "2.1.0" - -"emojis-list@^3.0.0": - "integrity" "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" - "resolved" "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz" - "version" "3.0.0" - -"encoding@0.1.13": - "integrity" "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==" - "resolved" "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" - "version" "0.1.13" - dependencies: - "iconv-lite" "^0.6.2" - -"end-of-stream@^1.0.0", "end-of-stream@^1.1.0": - "integrity" "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==" - "resolved" "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" - "version" "1.4.4" - dependencies: - "once" "^1.4.0" - -"enquire.js@^2.1.6": - "integrity" "sha1-PoeAybi4NQhMP2DhZtvDwqPImBQ=" - "resolved" "https://registry.npmjs.org/enquire.js/-/enquire.js-2.1.6.tgz" - "version" "2.1.6" - -"entities@^2.0.0": - "integrity" "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" - "resolved" "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" - "version" "2.2.0" - -"error-ex@^1.2.0", "error-ex@^1.3.1": - "integrity" "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==" - "resolved" "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" - "version" "1.3.2" - dependencies: - "is-arrayish" "^0.2.1" - -"es-abstract@^1.18.5": - "integrity" "sha512-kAeIT4cku5eNLNuUKhlmtuk1/TRZvQoYccn6TO0cSVdf1kzB0T7+dYuVK9MWM7l+/53W2Q8M7N2c6MQvhXFcUQ==" - "resolved" "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.6.tgz" - "version" "1.18.6" - dependencies: - "call-bind" "^1.0.2" - "es-to-primitive" "^1.2.1" - "function-bind" "^1.1.1" - "get-intrinsic" "^1.1.1" - "get-symbol-description" "^1.0.0" - "has" "^1.0.3" - "has-symbols" "^1.0.2" - "internal-slot" "^1.0.3" - "is-callable" "^1.2.4" - "is-negative-zero" "^2.0.1" - "is-regex" "^1.1.4" - "is-string" "^1.0.7" - "object-inspect" "^1.11.0" - "object-keys" "^1.1.1" - "object.assign" "^4.1.2" - "string.prototype.trimend" "^1.0.4" - "string.prototype.trimstart" "^1.0.4" - "unbox-primitive" "^1.0.1" - -"es-to-primitive@^1.2.1": - "integrity" "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==" - "resolved" "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" - "version" "1.2.1" - dependencies: - "is-callable" "^1.1.4" - "is-date-object" "^1.0.1" - "is-symbol" "^1.0.2" - -"es6-object-assign@^1.1.0": - "integrity" "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=" - "resolved" "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz" - "version" "1.1.0" - -"escalade@^3.1.1": - "integrity" "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - "resolved" "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" - "version" "3.1.1" - -"escape-string-regexp@^1.0.2", "escape-string-regexp@^1.0.5": - "integrity" "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - "version" "1.0.5" - -"esprima@^4.0.0": - "integrity" "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - "resolved" "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" - "version" "4.0.1" - -"etag@1.8.1": - "integrity" "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - "resolved" "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" - "version" "1.8.1" - -"eventemitter3@^1.1.0": - "integrity" "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=" - "resolved" "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz" - "version" "1.2.0" - -"events@^3.0.0": - "integrity" "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" - "resolved" "https://registry.npmjs.org/events/-/events-3.3.0.tgz" - "version" "3.3.0" - -"eventsource@^1.0.6", "eventsource@^1.0.7": - "integrity" "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==" - "resolved" "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "original" "^1.0.0" - -"evp_bytestokey@^1.0.0", "evp_bytestokey@^1.0.3": - "integrity" "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==" - "resolved" "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz" - "version" "1.0.3" - dependencies: - "md5.js" "^1.3.4" - "safe-buffer" "^5.1.1" - -"exec-buffer@^3.0.0": - "integrity" "sha512-wsiD+2Tp6BWHoVv3B+5Dcx6E7u5zky+hUwOHjuH2hKSLR3dvRmX8fk8UD8uqQixHs4Wk6eDmiegVrMPjKj7wpA==" - "resolved" "https://registry.npmjs.org/exec-buffer/-/exec-buffer-3.2.0.tgz" - "version" "3.2.0" - dependencies: - "execa" "^0.7.0" - "p-finally" "^1.0.0" - "pify" "^3.0.0" - "rimraf" "^2.5.4" - "tempfile" "^2.0.0" - -"execa@^0.7.0": - "integrity" "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=" - "resolved" "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz" - "version" "0.7.0" - dependencies: - "cross-spawn" "^5.0.1" - "get-stream" "^3.0.0" - "is-stream" "^1.1.0" - "npm-run-path" "^2.0.0" - "p-finally" "^1.0.0" - "signal-exit" "^3.0.0" - "strip-eof" "^1.0.0" - -"execa@^1.0.0": - "integrity" "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==" - "resolved" "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "cross-spawn" "^6.0.0" - "get-stream" "^4.0.0" - "is-stream" "^1.1.0" - "npm-run-path" "^2.0.0" - "p-finally" "^1.0.0" - "signal-exit" "^3.0.0" - "strip-eof" "^1.0.0" - -"execa@^4.0.0": - "integrity" "sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A==" - "resolved" "https://registry.npmjs.org/execa/-/execa-4.0.3.tgz" - "version" "4.0.3" - dependencies: - "cross-spawn" "^7.0.0" - "get-stream" "^5.0.0" - "human-signals" "^1.1.1" - "is-stream" "^2.0.0" - "merge-stream" "^2.0.0" - "npm-run-path" "^4.0.0" - "onetime" "^5.1.0" - "signal-exit" "^3.0.2" - "strip-final-newline" "^2.0.0" - -"executable@^4.1.0": - "integrity" "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==" - "resolved" "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz" - "version" "4.1.1" - dependencies: - "pify" "^2.2.0" - -"expand-brackets@^2.1.4": - "integrity" "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=" - "resolved" "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz" - "version" "2.1.4" - dependencies: - "debug" "^2.3.3" - "define-property" "^0.2.5" - "extend-shallow" "^2.0.1" - "posix-character-classes" "^0.1.0" - "regex-not" "^1.0.0" - "snapdragon" "^0.8.1" - "to-regex" "^3.0.1" - -"ext-list@^2.0.0": - "integrity" "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==" - "resolved" "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz" - "version" "2.2.2" - dependencies: - "mime-db" "^1.28.0" - -"ext-name@^5.0.0": - "integrity" "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==" - "resolved" "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "ext-list" "^2.0.0" - "sort-keys-length" "^1.0.0" - -"extend-shallow@^2.0.1": - "integrity" "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=" - "resolved" "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "is-extendable" "^0.1.0" - -"extend-shallow@^3.0.0": - "integrity" "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=" - "resolved" "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "assign-symbols" "^1.0.0" - "is-extendable" "^1.0.1" - -"extend-shallow@^3.0.2": - "integrity" "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=" - "resolved" "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "assign-symbols" "^1.0.0" - "is-extendable" "^1.0.1" - -"extend@^3.0.0": - "integrity" "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - "resolved" "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" - "version" "3.0.2" - -"extglob@^2.0.4": - "integrity" "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==" - "resolved" "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz" - "version" "2.0.4" - dependencies: - "array-unique" "^0.3.2" - "define-property" "^1.0.0" - "expand-brackets" "^2.1.4" - "extend-shallow" "^2.0.1" - "fragment-cache" "^0.2.1" - "regex-not" "^1.0.0" - "snapdragon" "^0.8.1" - "to-regex" "^3.0.1" - -"fast-deep-equal@^3.1.1", "fast-deep-equal@^3.1.3": - "integrity" "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" - "version" "3.1.3" - -"fast-glob@^2.0.2": - "integrity" "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==" - "resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz" - "version" "2.2.7" + csstype "^3.0.2" + +dom-serializer@^1.0.1: + version "1.3.2" + resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz" + integrity sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + +domain-browser@4.19.0: + version "4.19.0" + resolved "https://registry.npmjs.org/domain-browser/-/domain-browser-4.19.0.tgz" + integrity sha512-fRA+BaAWOR/yr/t7T9E9GJztHPeFjj8U35ajyAjCDtAAnTn1Rc1f6W6VGPJrO1tkQv9zWu+JRof7z6oQtiYVFQ== + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + +domelementtype@^2.0.1, domelementtype@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz" + integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== + +domhandler@^4.0.0, domhandler@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz" + integrity sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA== + dependencies: + domelementtype "^2.2.0" + +domutils@^2.4.3: + version "2.6.0" + resolved "https://registry.npmjs.org/domutils/-/domutils-2.6.0.tgz" + integrity sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +download@^6.2.2: + version "6.2.5" + resolved "https://registry.npmjs.org/download/-/download-6.2.5.tgz" + integrity sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA== + dependencies: + caw "^2.0.0" + content-disposition "^0.5.2" + decompress "^4.0.0" + ext-name "^5.0.0" + file-type "5.2.0" + filenamify "^2.0.0" + get-stream "^3.0.0" + got "^7.0.0" + make-dir "^1.0.0" + p-event "^1.0.0" + pify "^3.0.0" + +download@^7.1.0: + version "7.1.0" + resolved "https://registry.npmjs.org/download/-/download-7.1.0.tgz" + integrity sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ== + dependencies: + archive-type "^4.0.0" + caw "^2.0.1" + content-disposition "^0.5.2" + decompress "^4.2.0" + ext-name "^5.0.0" + file-type "^8.1.0" + filenamify "^2.0.0" + get-stream "^3.0.0" + got "^8.3.1" + make-dir "^1.2.0" + p-event "^2.1.0" + pify "^3.0.0" + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + +electron-to-chromium@^1.3.723: + version "1.3.846" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.846.tgz" + integrity sha512-2jtSwgyiRzybHRxrc2nKI+39wH3AwQgn+sogQ+q814gv8hIFwrcZbV07Ea9f8AmK0ufPVZUvvAG1uZJ+obV4Jw== + +elliptic@^6.5.3: + version "6.5.4" + resolved "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz" + integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +encoding@0.1.13: + version "0.1.13" + resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enquire.js@^2.1.6: + version "2.1.6" + resolved "https://registry.npmjs.org/enquire.js/-/enquire.js-2.1.6.tgz" + integrity sha1-PoeAybi4NQhMP2DhZtvDwqPImBQ= + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.18.5: + version "1.18.6" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.6.tgz" + integrity sha512-kAeIT4cku5eNLNuUKhlmtuk1/TRZvQoYccn6TO0cSVdf1kzB0T7+dYuVK9MWM7l+/53W2Q8M7N2c6MQvhXFcUQ== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + get-intrinsic "^1.1.1" + get-symbol-description "^1.0.0" + has "^1.0.3" + has-symbols "^1.0.2" + internal-slot "^1.0.3" + is-callable "^1.2.4" + is-negative-zero "^2.0.1" + is-regex "^1.1.4" + is-string "^1.0.7" + object-inspect "^1.11.0" + object-keys "^1.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.1" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es6-object-assign@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz" + integrity sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw= + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +etag@1.8.1: + version "1.8.1" + resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +eventemitter3@^1.1.0: + version "1.2.0" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz" + integrity sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg= + +events@^3.0.0: + version "3.3.0" + resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +eventsource@^1.0.6, eventsource@^1.0.7: + version "1.1.0" + resolved "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz" + integrity sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg== + dependencies: + original "^1.0.0" + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz" + integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^4.0.0: + version "4.0.3" + resolved "https://registry.npmjs.org/execa/-/execa-4.0.3.tgz" + integrity sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +executable@^4.1.0: + version "4.1.1" + resolved "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz" + integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg== + dependencies: + pify "^2.2.0" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +ext-list@^2.0.0: + version "2.2.2" + resolved "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz" + integrity sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA== + dependencies: + mime-db "^1.28.0" + +ext-name@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz" + integrity sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ== + dependencies: + ext-list "^2.0.0" + sort-keys-length "^1.0.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@^3.0.0: + version "3.0.2" + resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^2.0.2: + version "2.2.7" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz" + integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== dependencies: "@mrmlnc/readdir-enhanced" "^2.2.1" "@nodelib/fs.stat" "^1.1.2" - "glob-parent" "^3.1.0" - "is-glob" "^4.0.0" - "merge2" "^1.2.3" - "micromatch" "^3.1.10" - -"fast-json-stable-stringify@^2.0.0": - "integrity" "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - "resolved" "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" - "version" "2.1.0" - -"fast-xml-parser@^3.19.0": - "integrity" "sha512-4pXwmBplsCPv8FOY1WRakF970TjNGnGnfbOnLqjlYvMiF1SR3yOHyxMR/YCXpPTOspNF5gwudqktIP4VsWkvBg==" - "resolved" "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.19.0.tgz" - "version" "3.19.0" - -"fd-slicer@~1.1.0": - "integrity" "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=" - "resolved" "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "pend" "~1.2.0" - -"figures@^1.3.5": - "integrity" "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=" - "resolved" "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz" - "version" "1.7.0" - dependencies: - "escape-string-regexp" "^1.0.5" - "object-assign" "^4.1.0" - -"figures@^3.0.0": - "integrity" "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==" - "resolved" "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" - "version" "3.2.0" - dependencies: - "escape-string-regexp" "^1.0.5" - -"file-loader@^2.0.0": - "integrity" "sha512-YCsBfd1ZGCyonOKLxPiKPdu+8ld9HAaMEvJewzz+b2eTF7uL5Zm/HdBF6FjCrpCMRq25Mi0U1gl4pwn2TlH7hQ==" - "resolved" "https://registry.npmjs.org/file-loader/-/file-loader-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "loader-utils" "^1.0.2" - "schema-utils" "^1.0.0" - -"file-loader@^3.0.1": - "integrity" "sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw==" - "resolved" "https://registry.npmjs.org/file-loader/-/file-loader-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "loader-utils" "^1.0.2" - "schema-utils" "^1.0.0" - -"file-type@^10.7.0": - "integrity" "sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==" - "resolved" "https://registry.npmjs.org/file-type/-/file-type-10.11.0.tgz" - "version" "10.11.0" - -"file-type@^3.8.0": - "integrity" "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=" - "resolved" "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz" - "version" "3.9.0" - -"file-type@^4.2.0": - "integrity" "sha1-G2AOX8ofvcboDApwxxyNul95BsU=" - "resolved" "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz" - "version" "4.4.0" - -"file-type@^5.2.0", "file-type@5.2.0": - "integrity" "sha1-LdvqfHP/42No365J3DOMBYwritY=" - "resolved" "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz" - "version" "5.2.0" - -"file-type@^6.1.0": - "integrity" "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==" - "resolved" "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz" - "version" "6.2.0" - -"file-type@^8.1.0": - "integrity" "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==" - "resolved" "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz" - "version" "8.1.0" - -"filename-reserved-regex@^2.0.0": - "integrity" "sha1-q/c9+rc10EVECr/qLZHzieu/oik=" - "resolved" "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz" - "version" "2.0.0" - -"filenamify@^2.0.0": - "integrity" "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==" - "resolved" "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "filename-reserved-regex" "^2.0.0" - "strip-outer" "^1.0.0" - "trim-repeated" "^1.0.0" - -"fill-range@^4.0.0": - "integrity" "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=" - "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "extend-shallow" "^2.0.1" - "is-number" "^3.0.0" - "repeat-string" "^1.6.1" - "to-regex-range" "^2.1.0" - -"fill-range@^7.0.1": - "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==" - "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" - "version" "7.0.1" - dependencies: - "to-regex-range" "^5.0.1" - -"find-cache-dir@3.3.1": - "integrity" "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==" - "resolved" "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz" - "version" "3.3.1" - dependencies: - "commondir" "^1.0.1" - "make-dir" "^3.0.2" - "pkg-dir" "^4.1.0" - -"find-root@^1.1.0": - "integrity" "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" - "resolved" "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz" - "version" "1.1.0" - -"find-up@^1.0.0": - "integrity" "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=" - "resolved" "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz" - "version" "1.1.2" - dependencies: - "path-exists" "^2.0.0" - "pinkie-promise" "^2.0.0" - -"find-up@^4.0.0": - "integrity" "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==" - "resolved" "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "locate-path" "^5.0.0" - "path-exists" "^4.0.0" - -"find-versions@^3.0.0": - "integrity" "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==" - "resolved" "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz" - "version" "3.2.0" - dependencies: - "semver-regex" "^2.0.0" - -"follow-redirects@^1.2.4": - "integrity" "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==" - "resolved" "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz" - "version" "1.14.4" - -"for-in@^1.0.2": - "integrity" "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" - "resolved" "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz" - "version" "1.0.2" - -"foreach@^2.0.5": - "integrity" "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" - "resolved" "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz" - "version" "2.0.5" - -"form-urlencoded@^2.0.7": - "integrity" "sha512-fWUzNiOnYa126vFAT6TFXd1mhJrvD8IqmQ9ilZPjkLYQfaRreBr5fIUoOpPlWtqaAG64nzoE7u5zSetifab9IA==" - "resolved" "https://registry.npmjs.org/form-urlencoded/-/form-urlencoded-2.0.9.tgz" - "version" "2.0.9" - -"fragment-cache@^0.2.1": - "integrity" "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=" - "resolved" "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz" - "version" "0.2.1" - dependencies: - "map-cache" "^0.2.2" - -"from2@^2.1.1": - "integrity" "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=" - "resolved" "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz" - "version" "2.3.0" - dependencies: - "inherits" "^2.0.1" - "readable-stream" "^2.0.0" - -"fs-constants@^1.0.0": - "integrity" "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - "resolved" "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" - "version" "1.0.0" - -"fs.realpath@^1.0.0": - "integrity" "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - "version" "1.0.0" - -"fsevents@~2.3.1": - "integrity" "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==" - "resolved" "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" - "version" "2.3.2" - -"function-bind@^1.1.1": - "integrity" "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - "resolved" "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" - "version" "1.1.1" - -"get-intrinsic@^1.0.2", "get-intrinsic@^1.1.0", "get-intrinsic@^1.1.1": - "integrity" "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==" - "resolved" "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz" - "version" "1.1.1" - dependencies: - "function-bind" "^1.1.1" - "has" "^1.0.3" - "has-symbols" "^1.0.1" - -"get-it@^5.0.3": - "integrity" "sha512-P5McakQI/9611hP0cYqyF0VlhxQj49ok21TvCbNEqBfsVVC/ZnmYPP91bky4N4/Oy1HmXFZ/CMh6CCH8nAgLpQ==" - "resolved" "https://registry.npmjs.org/get-it/-/get-it-5.0.5.tgz" - "version" "5.0.5" + glob-parent "^3.1.0" + is-glob "^4.0.0" + merge2 "^1.2.3" + micromatch "^3.1.10" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-xml-parser@^3.19.0: + version "3.19.0" + resolved "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.19.0.tgz" + integrity sha512-4pXwmBplsCPv8FOY1WRakF970TjNGnGnfbOnLqjlYvMiF1SR3yOHyxMR/YCXpPTOspNF5gwudqktIP4VsWkvBg== + +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz" + integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= + dependencies: + pend "~1.2.0" + +figures@^1.3.5: + version "1.7.0" + resolved "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz" + integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= + dependencies: + escape-string-regexp "^1.0.5" + object-assign "^4.1.0" + +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +file-loader@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/file-loader/-/file-loader-2.0.0.tgz" + integrity sha512-YCsBfd1ZGCyonOKLxPiKPdu+8ld9HAaMEvJewzz+b2eTF7uL5Zm/HdBF6FjCrpCMRq25Mi0U1gl4pwn2TlH7hQ== + dependencies: + loader-utils "^1.0.2" + schema-utils "^1.0.0" + +file-loader@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/file-loader/-/file-loader-3.0.1.tgz" + integrity sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw== + dependencies: + loader-utils "^1.0.2" + schema-utils "^1.0.0" + +file-type@5.2.0, file-type@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz" + integrity sha1-LdvqfHP/42No365J3DOMBYwritY= + +file-type@^10.7.0: + version "10.11.0" + resolved "https://registry.npmjs.org/file-type/-/file-type-10.11.0.tgz" + integrity sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw== + +file-type@^3.8.0: + version "3.9.0" + resolved "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz" + integrity sha1-JXoHg4TR24CHvESdEH1SpSZyuek= + +file-type@^4.2.0: + version "4.4.0" + resolved "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz" + integrity sha1-G2AOX8ofvcboDApwxxyNul95BsU= + +file-type@^6.1.0: + version "6.2.0" + resolved "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz" + integrity sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg== + +file-type@^8.1.0: + version "8.1.0" + resolved "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz" + integrity sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ== + +filename-reserved-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz" + integrity sha1-q/c9+rc10EVECr/qLZHzieu/oik= + +filenamify@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz" + integrity sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA== + dependencies: + filename-reserved-regex "^2.0.0" + strip-outer "^1.0.0" + trim-repeated "^1.0.0" + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-cache-dir@3.3.1: + version "3.3.1" + resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz" + integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-root@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz" + integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-versions@^3.0.0: + version "3.2.0" + resolved "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz" + integrity sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww== + dependencies: + semver-regex "^2.0.0" + +follow-redirects@^1.2.4: + version "1.14.4" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz" + integrity sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g== + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz" + integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= + +form-urlencoded@^2.0.7: + version "2.0.9" + resolved "https://registry.npmjs.org/form-urlencoded/-/form-urlencoded-2.0.9.tgz" + integrity sha512-fWUzNiOnYa126vFAT6TFXd1mhJrvD8IqmQ9ilZPjkLYQfaRreBr5fIUoOpPlWtqaAG64nzoE7u5zSetifab9IA== + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +from2@^2.1.1: + version "2.3.0" + resolved "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@~2.3.1: + version "2.3.2" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + +get-it@^5.0.3: + version "5.0.5" + resolved "https://registry.npmjs.org/get-it/-/get-it-5.0.5.tgz" + integrity sha512-P5McakQI/9611hP0cYqyF0VlhxQj49ok21TvCbNEqBfsVVC/ZnmYPP91bky4N4/Oy1HmXFZ/CMh6CCH8nAgLpQ== dependencies: "@sanity/timed-out" "^4.0.2" - "create-error-class" "^3.0.2" - "debug" "^2.6.8" - "decompress-response" "^3.3.0" - "follow-redirects" "^1.2.4" - "form-urlencoded" "^2.0.7" - "in-publish" "^2.0.0" - "into-stream" "^3.1.0" - "is-plain-object" "^2.0.4" - "is-retry-allowed" "^1.1.0" - "is-stream" "^1.1.0" - "nano-pubsub" "^1.0.2" - "object-assign" "^4.1.1" - "parse-headers" "^2.0.1" - "progress-stream" "^2.0.0" - "same-origin" "^0.1.1" - "simple-concat" "^1.0.0" - "tunnel-agent" "^0.6.0" - "url-parse" "^1.1.9" - -"get-orientation@1.1.2": - "integrity" "sha512-/pViTfifW+gBbh/RnlFYHINvELT9Znt+SYyDKAUL6uV6By019AK/s+i9XP4jSwq7lwP38Fd8HVeTxym3+hkwmQ==" - "resolved" "https://registry.npmjs.org/get-orientation/-/get-orientation-1.1.2.tgz" - "version" "1.1.2" - dependencies: - "stream-parser" "^0.3.1" - -"get-proxy@^2.0.0": - "integrity" "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==" - "resolved" "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "npm-conf" "^1.1.0" - -"get-stdin@^4.0.1": - "integrity" "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" - "resolved" "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz" - "version" "4.0.1" - -"get-stream@^2.2.0": - "integrity" "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=" - "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz" - "version" "2.3.1" - dependencies: - "object-assign" "^4.0.1" - "pinkie-promise" "^2.0.0" - -"get-stream@^3.0.0": - "integrity" "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" - "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz" - "version" "3.0.0" - -"get-stream@^4.0.0": - "integrity" "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==" - "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "pump" "^3.0.0" - -"get-stream@^5.0.0": - "integrity" "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==" - "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz" - "version" "5.1.0" - dependencies: - "pump" "^3.0.0" - -"get-stream@3.0.0": - "integrity" "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" - "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz" - "version" "3.0.0" - -"get-symbol-description@^1.0.0": - "integrity" "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==" - "resolved" "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "call-bind" "^1.0.2" - "get-intrinsic" "^1.1.1" - -"get-value@^2.0.3", "get-value@^2.0.6": - "integrity" "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" - "resolved" "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz" - "version" "2.0.6" - -"glob-parent@^3.1.0": - "integrity" "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=" - "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "is-glob" "^3.1.0" - "path-dirname" "^1.0.0" - -"glob-parent@~5.1.0": - "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==" - "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - "version" "5.1.2" - dependencies: - "is-glob" "^4.0.1" - -"glob-to-regexp@^0.3.0": - "integrity" "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=" - "resolved" "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz" - "version" "0.3.0" - -"glob-to-regexp@^0.4.1": - "integrity" "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - "resolved" "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" - "version" "0.4.1" - -"glob@^7.1.2", "glob@^7.1.3": - "integrity" "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==" - "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" - "version" "7.1.6" - dependencies: - "fs.realpath" "^1.0.0" - "inflight" "^1.0.4" - "inherits" "2" - "minimatch" "^3.0.4" - "once" "^1.3.0" - "path-is-absolute" "^1.0.0" - -"globals@^11.1.0": - "integrity" "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - "resolved" "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" - "version" "11.12.0" - -"globby@^8.0.1": - "integrity" "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==" - "resolved" "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz" - "version" "8.0.2" - dependencies: - "array-union" "^1.0.1" - "dir-glob" "2.0.0" - "fast-glob" "^2.0.2" - "glob" "^7.1.2" - "ignore" "^3.3.5" - "pify" "^3.0.0" - "slash" "^1.0.0" - -"google-libphonenumber@^3.2.24": - "integrity" "sha512-5Z3dZTgwacTjALlkRK5hTIjGLwTCJGNZtmWgnhpb1Z6XEBYGsXbJGsr9+MheP/2mAk/ssOvpvMXKEZISWeytcA==" - "resolved" "https://registry.npmjs.org/google-libphonenumber/-/google-libphonenumber-3.2.24.tgz" - "version" "3.2.24" - -"google-map-react@^1.1.7": - "integrity" "sha512-OWwfvVlJG3aQbDZOezWPzT7b8uqk5iMya5yEfBcfGYBFONna5UYCWZl49/cS0j1DPigtwtN0YCzPKjXMQHOUeA==" - "resolved" "https://registry.npmjs.org/google-map-react/-/google-map-react-1.1.7.tgz" - "version" "1.1.7" + create-error-class "^3.0.2" + debug "^2.6.8" + decompress-response "^3.3.0" + follow-redirects "^1.2.4" + form-urlencoded "^2.0.7" + in-publish "^2.0.0" + into-stream "^3.1.0" + is-plain-object "^2.0.4" + is-retry-allowed "^1.1.0" + is-stream "^1.1.0" + nano-pubsub "^1.0.2" + object-assign "^4.1.1" + parse-headers "^2.0.1" + progress-stream "^2.0.0" + same-origin "^0.1.1" + simple-concat "^1.0.0" + tunnel-agent "^0.6.0" + url-parse "^1.1.9" + +get-orientation@1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/get-orientation/-/get-orientation-1.1.2.tgz" + integrity sha512-/pViTfifW+gBbh/RnlFYHINvELT9Znt+SYyDKAUL6uV6By019AK/s+i9XP4jSwq7lwP38Fd8HVeTxym3+hkwmQ== + dependencies: + stream-parser "^0.3.1" + +get-proxy@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz" + integrity sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw== + dependencies: + npm-conf "^1.1.0" + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz" + integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= + +get-stream@3.0.0, get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + +get-stream@^2.2.0: + version "2.3.1" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz" + integrity sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4= + dependencies: + object-assign "^4.0.1" + pinkie-promise "^2.0.0" + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.0.0: + version "5.1.0" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz" + integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== + dependencies: + pump "^3.0.0" + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-parent@~5.1.0: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-to-regexp@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz" + integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +glob@^7.1.2: + version "7.1.6" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globby@^8.0.1: + version "8.0.2" + resolved "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz" + integrity sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w== + dependencies: + array-union "^1.0.1" + dir-glob "2.0.0" + fast-glob "^2.0.2" + glob "^7.1.2" + ignore "^3.3.5" + pify "^3.0.0" + slash "^1.0.0" + +google-libphonenumber@^3.2.24: + version "3.2.24" + resolved "https://registry.npmjs.org/google-libphonenumber/-/google-libphonenumber-3.2.24.tgz" + integrity sha512-5Z3dZTgwacTjALlkRK5hTIjGLwTCJGNZtmWgnhpb1Z6XEBYGsXbJGsr9+MheP/2mAk/ssOvpvMXKEZISWeytcA== + +google-map-react@^1.1.7: + version "1.1.7" + resolved "https://registry.npmjs.org/google-map-react/-/google-map-react-1.1.7.tgz" + integrity sha512-OWwfvVlJG3aQbDZOezWPzT7b8uqk5iMya5yEfBcfGYBFONna5UYCWZl49/cS0j1DPigtwtN0YCzPKjXMQHOUeA== dependencies: "@mapbox/point-geometry" "^0.1.0" - "eventemitter3" "^1.1.0" - "prop-types" "^15.5.6" - "scriptjs" "^2.5.7" - -"got@^7.0.0": - "integrity" "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==" - "resolved" "https://registry.npmjs.org/got/-/got-7.1.0.tgz" - "version" "7.1.0" - dependencies: - "decompress-response" "^3.2.0" - "duplexer3" "^0.1.4" - "get-stream" "^3.0.0" - "is-plain-obj" "^1.1.0" - "is-retry-allowed" "^1.0.0" - "is-stream" "^1.0.0" - "isurl" "^1.0.0-alpha5" - "lowercase-keys" "^1.0.0" - "p-cancelable" "^0.3.0" - "p-timeout" "^1.1.1" - "safe-buffer" "^5.0.1" - "timed-out" "^4.0.0" - "url-parse-lax" "^1.0.0" - "url-to-options" "^1.0.1" - -"got@^8.3.1": - "integrity" "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==" - "resolved" "https://registry.npmjs.org/got/-/got-8.3.2.tgz" - "version" "8.3.2" + eventemitter3 "^1.1.0" + prop-types "^15.5.6" + scriptjs "^2.5.7" + +got@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a" + integrity sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw== + dependencies: + decompress-response "^3.2.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-plain-obj "^1.1.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + isurl "^1.0.0-alpha5" + lowercase-keys "^1.0.0" + p-cancelable "^0.3.0" + p-timeout "^1.1.1" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + url-parse-lax "^1.0.0" + url-to-options "^1.0.1" + +got@^8.3.1: + version "8.3.2" + resolved "https://registry.yarnpkg.com/got/-/got-8.3.2.tgz#1d23f64390e97f776cac52e5b936e5f514d2e937" + integrity sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw== dependencies: "@sindresorhus/is" "^0.7.0" - "cacheable-request" "^2.1.1" - "decompress-response" "^3.3.0" - "duplexer3" "^0.1.4" - "get-stream" "^3.0.0" - "into-stream" "^3.1.0" - "is-retry-allowed" "^1.1.0" - "isurl" "^1.0.0-alpha5" - "lowercase-keys" "^1.0.0" - "mimic-response" "^1.0.0" - "p-cancelable" "^0.4.0" - "p-timeout" "^2.0.1" - "pify" "^3.0.0" - "safe-buffer" "^5.1.1" - "timed-out" "^4.0.1" - "url-parse-lax" "^3.0.0" - "url-to-options" "^1.0.1" - -"graceful-fs@^4.1.10", "graceful-fs@^4.1.2": - "integrity" "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" - "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz" - "version" "4.2.4" + cacheable-request "^2.1.1" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + into-stream "^3.1.0" + is-retry-allowed "^1.1.0" + isurl "^1.0.0-alpha5" + lowercase-keys "^1.0.0" + mimic-response "^1.0.0" + p-cancelable "^0.4.0" + p-timeout "^2.0.1" + pify "^3.0.0" + safe-buffer "^5.1.1" + timed-out "^4.0.1" + url-parse-lax "^3.0.0" + url-to-options "^1.0.1" + +graceful-fs@^4.1.10, graceful-fs@^4.1.2: + version "4.2.4" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== "graceful-readlink@>= 1.0.0": - "integrity" "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" - "resolved" "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz" - "version" "1.0.1" - -"gray-matter@^4.0.3": - "integrity" "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==" - "resolved" "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz" - "version" "4.0.3" - dependencies: - "js-yaml" "^3.13.1" - "kind-of" "^6.0.2" - "section-matter" "^1.0.0" - "strip-bom-string" "^1.0.0" - -"groq-js@^0.3.0": - "integrity" "sha512-aMV+X2rWmrp7Zb63OcXr6X0ItfpAg/fiZbTeQeVLAyPwoGVnvQKNEi32rhziuLHJLIJeWjtJm7IKjwDwhyLhFA==" - "resolved" "https://registry.npmjs.org/groq-js/-/groq-js-0.3.0.tgz" - "version" "0.3.0" - -"groq@^2.0.9", "groq@^2.14.0": - "integrity" "sha512-V3VLBLftaEylbeXDwb2VoGa87SFLGLbU9h6Lz7vuZK+wcs4Kk92qG3A8nWtsdCp63hYKft0/AaXuanbkch0GeA==" - "resolved" "https://registry.npmjs.org/groq/-/groq-2.15.0.tgz" - "version" "2.15.0" - -"has-ansi@^2.0.0": - "integrity" "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=" - "resolved" "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "ansi-regex" "^2.0.0" - -"has-bigints@^1.0.1": - "integrity" "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==" - "resolved" "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz" - "version" "1.0.1" - -"has-flag@^3.0.0": - "integrity" "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" - "version" "3.0.0" - -"has-flag@^4.0.0": - "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" - "version" "4.0.0" - -"has-symbol-support-x@^1.4.1": - "integrity" "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==" - "resolved" "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz" - "version" "1.4.2" - -"has-symbols@^1.0.1", "has-symbols@^1.0.2": - "integrity" "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" - "resolved" "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz" - "version" "1.0.2" - -"has-to-string-tag-x@^1.2.0": - "integrity" "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==" - "resolved" "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz" - "version" "1.4.1" - dependencies: - "has-symbol-support-x" "^1.4.1" - -"has-tostringtag@^1.0.0": - "integrity" "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==" - "resolved" "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "has-symbols" "^1.0.2" - -"has-value@^0.3.1": - "integrity" "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=" - "resolved" "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz" - "version" "0.3.1" - dependencies: - "get-value" "^2.0.3" - "has-values" "^0.1.4" - "isobject" "^2.0.0" - -"has-value@^1.0.0": - "integrity" "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=" - "resolved" "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "get-value" "^2.0.6" - "has-values" "^1.0.0" - "isobject" "^3.0.0" - -"has-values@^0.1.4": - "integrity" "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" - "resolved" "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz" - "version" "0.1.4" - -"has-values@^1.0.0": - "integrity" "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=" - "resolved" "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "is-number" "^3.0.0" - "kind-of" "^4.0.0" - -"has@^1.0.3": - "integrity" "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==" - "resolved" "https://registry.npmjs.org/has/-/has-1.0.3.tgz" - "version" "1.0.3" - dependencies: - "function-bind" "^1.1.1" - -"hash-base@^3.0.0": - "integrity" "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==" - "resolved" "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "inherits" "^2.0.4" - "readable-stream" "^3.6.0" - "safe-buffer" "^5.2.0" - -"hash.js@^1.0.0", "hash.js@^1.0.3": - "integrity" "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==" - "resolved" "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz" - "version" "1.1.7" - dependencies: - "inherits" "^2.0.3" - "minimalistic-assert" "^1.0.1" - -"hast-util-is-element@^1.0.0": - "integrity" "sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ==" - "resolved" "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz" - "version" "1.1.0" - -"hast-util-sanitize@^3.0.0": - "integrity" "sha512-+2I0x2ZCAyiZOO/sb4yNLFmdwPBnyJ4PBkVTUMKMqBwYNA+lXSgOmoRXlJFazoyid9QPogRRKgKhVEodv181sA==" - "resolved" "https://registry.npmjs.org/hast-util-sanitize/-/hast-util-sanitize-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "xtend" "^4.0.0" - -"hast-util-to-html@^7.0.0": - "integrity" "sha512-yk2+1p3EJTEE9ZEUkgHsUSVhIpCsL/bvT8E5GzmWc+N1Po5gBw+0F8bo7dpxXR0nu0bQVxVZGX2lBGF21CmeDw==" - "resolved" "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-7.1.3.tgz" - "version" "7.1.3" - dependencies: - "ccount" "^1.0.0" - "comma-separated-tokens" "^1.0.0" - "hast-util-is-element" "^1.0.0" - "hast-util-whitespace" "^1.0.0" - "html-void-elements" "^1.0.0" - "property-information" "^5.0.0" - "space-separated-tokens" "^1.0.0" - "stringify-entities" "^3.0.1" - "unist-util-is" "^4.0.0" - "xtend" "^4.0.0" - -"hast-util-whitespace@^1.0.0": - "integrity" "sha512-I5GTdSfhYfAPNztx2xJRQpG8cuDSNt599/7YUn7Gx/WxNMsG+a835k97TDkFgk123cwjfwINaZknkKkphx/f2A==" - "resolved" "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-1.0.4.tgz" - "version" "1.0.4" - -"he@1.2.0": - "integrity" "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" - "resolved" "https://registry.npmjs.org/he/-/he-1.2.0.tgz" - "version" "1.2.0" - -"hmac-drbg@^1.0.1": - "integrity" "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=" - "resolved" "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "hash.js" "^1.0.3" - "minimalistic-assert" "^1.0.0" - "minimalistic-crypto-utils" "^1.0.1" - -"hoist-non-react-statics@^3.0.0": - "integrity" "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==" - "resolved" "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz" - "version" "3.3.2" - dependencies: - "react-is" "^16.7.0" - -"hosted-git-info@^2.1.4": - "integrity" "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==" - "resolved" "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz" - "version" "2.8.8" - -"html-element@^2.0.0": - "integrity" "sha512-xnFt2ZkbFcjc+JoAtg3Hl89VeEZDjododu4VCPkRvFmBTHHA9U1Nt6hLUWfW2O+6Sl/rT1hHK/PivleX3PdBJQ==" - "resolved" "https://registry.npmjs.org/html-element/-/html-element-2.3.1.tgz" - "version" "2.3.1" - dependencies: - "class-list" "~0.1.1" - -"html-void-elements@^1.0.0": - "integrity" "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==" - "resolved" "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz" - "version" "1.0.5" - -"http-cache-semantics@3.8.1": - "integrity" "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==" - "resolved" "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz" - "version" "3.8.1" - -"http-errors@1.7.3": - "integrity" "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==" - "resolved" "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz" - "version" "1.7.3" - dependencies: - "depd" "~1.1.2" - "inherits" "2.0.4" - "setprototypeof" "1.1.1" - "statuses" ">= 1.5.0 < 2" - "toidentifier" "1.0.0" - -"https-browserify@^1.0.0", "https-browserify@1.0.0": - "integrity" "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" - "resolved" "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz" - "version" "1.0.0" - -"human-signals@^1.1.1": - "integrity" "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" - "resolved" "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz" - "version" "1.1.1" - -"hyperscript@^2.0.2": - "integrity" "sha1-ODnLpFVUvf4nu4HCFC0WhPgTWvU=" - "resolved" "https://registry.npmjs.org/hyperscript/-/hyperscript-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "browser-split" "0.0.0" - "class-list" "~0.1.0" - "html-element" "^2.0.0" - -"iconv-lite@^0.6.2": - "integrity" "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==" - "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" - "version" "0.6.3" - dependencies: - "safer-buffer" ">= 2.1.2 < 3.0.0" - -"iconv-lite@0.4.24": - "integrity" "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==" - "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" - "version" "0.4.24" - dependencies: - "safer-buffer" ">= 2.1.2 < 3" - -"ieee754@^1.1.4": - "integrity" "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" - "resolved" "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz" - "version" "1.1.13" - -"ignore@^3.3.5": - "integrity" "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" - "resolved" "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz" - "version" "3.3.10" - -"image-size@1.0.0": - "integrity" "sha512-JLJ6OwBfO1KcA+TvJT+v8gbE6iWbj24LyDNFgFEN0lzegn6cC6a/p3NIDaepMsJjQjlUWqIC7wJv8lBFxPNjcw==" - "resolved" "https://registry.npmjs.org/image-size/-/image-size-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "queue" "6.0.2" - -"imagemin-mozjpeg@^9.0.0": - "integrity" "sha512-TwOjTzYqCFRgROTWpVSt5UTT0JeCuzF1jswPLKALDd89+PmrJ2PdMMYeDLYZ1fs9cTovI9GJd68mRSnuVt691w==" - "resolved" "https://registry.npmjs.org/imagemin-mozjpeg/-/imagemin-mozjpeg-9.0.0.tgz" - "version" "9.0.0" - dependencies: - "execa" "^4.0.0" - "is-jpg" "^2.0.0" - "mozjpeg" "^7.0.0" - -"imagemin-optipng@^8.0.0": - "integrity" "sha512-CUGfhfwqlPjAC0rm8Fy+R2DJDBGjzy2SkfyT09L8rasnF9jSoHFqJ1xxSZWK6HVPZBMhGPMxCTL70OgTHlLF5A==" - "resolved" "https://registry.npmjs.org/imagemin-optipng/-/imagemin-optipng-8.0.0.tgz" - "version" "8.0.0" - dependencies: - "exec-buffer" "^3.0.0" - "is-png" "^2.0.0" - "optipng-bin" "^7.0.0" - -"imagemin-svgo@^9.0.0": - "integrity" "sha512-uNgXpKHd99C0WODkrJ8OO/3zW3qjgS4pW7hcuII0RcHN3tnKxDjJWcitdVC/TZyfIqSricU8WfrHn26bdSW62g==" - "resolved" "https://registry.npmjs.org/imagemin-svgo/-/imagemin-svgo-9.0.0.tgz" - "version" "9.0.0" - dependencies: - "is-svg" "^4.2.1" - "svgo" "^2.1.0" - -"imagemin@^6.1.0": - "integrity" "sha512-8ryJBL1CN5uSHpiBMX0rJw79C9F9aJqMnjGnrd/1CafegpNuA81RBAAru/jQQEOWlOJJlpRnlcVFF6wq+Ist0A==" - "resolved" "https://registry.npmjs.org/imagemin/-/imagemin-6.1.0.tgz" - "version" "6.1.0" - dependencies: - "file-type" "^10.7.0" - "globby" "^8.0.1" - "make-dir" "^1.0.0" - "p-pipe" "^1.1.0" - "pify" "^4.0.1" - "replace-ext" "^1.0.0" - -"img-loader@^3.0.1": - "integrity" "sha512-0jDJqexgzOuq3zlXwFTBKJlMcaP1uXyl5t4Qu6b1IgXb3IwBDjPfVylBC8vHFIIESDw/S+5QkBbtBrt4T8wESA==" - "resolved" "https://registry.npmjs.org/img-loader/-/img-loader-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "loader-utils" "^1.1.0" - -"import-fresh@^3.1.0": - "integrity" "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==" - "resolved" "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz" - "version" "3.2.1" - dependencies: - "parent-module" "^1.0.0" - "resolve-from" "^4.0.0" - -"import-lazy@^3.1.0": - "integrity" "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==" - "resolved" "https://registry.npmjs.org/import-lazy/-/import-lazy-3.1.0.tgz" - "version" "3.1.0" - -"in-publish@^2.0.0": - "integrity" "sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ==" - "resolved" "https://registry.npmjs.org/in-publish/-/in-publish-2.0.1.tgz" - "version" "2.0.1" - -"indent-string@^2.1.0": - "integrity" "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=" - "resolved" "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "repeating" "^2.0.0" - -"indexof@0.0.1": - "integrity" "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" - "resolved" "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz" - "version" "0.0.1" - -"inflight@^1.0.4": - "integrity" "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=" - "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - "version" "1.0.6" - dependencies: - "once" "^1.3.0" - "wrappy" "1" - -"inherits@^2.0.1", "inherits@^2.0.3", "inherits@^2.0.4", "inherits@~2.0.3", "inherits@~2.0.4", "inherits@2", "inherits@2.0.4": - "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - "version" "2.0.4" - -"inherits@~2.0.1", "inherits@2.0.1": - "integrity" "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" - "version" "2.0.1" - -"inherits@2.0.3": - "integrity" "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" - "version" "2.0.3" - -"ini@^1.3.4": - "integrity" "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" - "resolved" "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz" - "version" "1.3.5" - -"internal-slot@^1.0.3": - "integrity" "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==" - "resolved" "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz" - "version" "1.0.3" - dependencies: - "get-intrinsic" "^1.1.0" - "has" "^1.0.3" - "side-channel" "^1.0.4" - -"into-stream@^3.1.0": - "integrity" "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=" - "resolved" "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "from2" "^2.1.1" - "p-is-promise" "^1.1.0" - -"invariant@^2.2.4": - "integrity" "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==" - "resolved" "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz" - "version" "2.2.4" - dependencies: - "loose-envify" "^1.0.0" - -"is-accessor-descriptor@^0.1.6": - "integrity" "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=" - "resolved" "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz" - "version" "0.1.6" - dependencies: - "kind-of" "^3.0.2" - -"is-accessor-descriptor@^1.0.0": - "integrity" "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==" - "resolved" "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "kind-of" "^6.0.0" - -"is-alphabetical@^1.0.0": - "integrity" "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" - "resolved" "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz" - "version" "1.0.4" - -"is-alphanumerical@^1.0.0": - "integrity" "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==" - "resolved" "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "is-alphabetical" "^1.0.0" - "is-decimal" "^1.0.0" - -"is-arguments@^1.0.4": - "integrity" "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==" - "resolved" "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" - "version" "1.1.1" - dependencies: - "call-bind" "^1.0.2" - "has-tostringtag" "^1.0.0" - -"is-arrayish@^0.2.1": - "integrity" "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - "resolved" "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" - "version" "0.2.1" - -"is-bigint@^1.0.1": - "integrity" "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==" - "resolved" "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "has-bigints" "^1.0.1" - -"is-binary-path@~2.1.0": - "integrity" "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==" - "resolved" "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "binary-extensions" "^2.0.0" - -"is-boolean-object@^1.1.0": - "integrity" "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==" - "resolved" "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" - "version" "1.1.2" - dependencies: - "call-bind" "^1.0.2" - "has-tostringtag" "^1.0.0" - -"is-buffer@^1.1.5", "is-buffer@~1.1.6": - "integrity" "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - "resolved" "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" - "version" "1.1.6" - -"is-buffer@^2.0.0": - "integrity" "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" - "resolved" "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz" - "version" "2.0.5" - -"is-callable@^1.1.4", "is-callable@^1.2.4": - "integrity" "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" - "resolved" "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz" - "version" "1.2.4" - -"is-data-descriptor@^0.1.4": - "integrity" "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=" - "resolved" "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz" - "version" "0.1.4" + version "1.0.1" + resolved "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz" + integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU= + +gray-matter@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz" + integrity sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q== + dependencies: + js-yaml "^3.13.1" + kind-of "^6.0.2" + section-matter "^1.0.0" + strip-bom-string "^1.0.0" + +groq-js@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/groq-js/-/groq-js-0.3.0.tgz" + integrity sha512-aMV+X2rWmrp7Zb63OcXr6X0ItfpAg/fiZbTeQeVLAyPwoGVnvQKNEi32rhziuLHJLIJeWjtJm7IKjwDwhyLhFA== + +groq@^2.0.9, groq@^2.14.0: + version "2.15.0" + resolved "https://registry.npmjs.org/groq/-/groq-2.15.0.tgz" + integrity sha512-V3VLBLftaEylbeXDwb2VoGa87SFLGLbU9h6Lz7vuZK+wcs4Kk92qG3A8nWtsdCp63hYKft0/AaXuanbkch0GeA== + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-bigints@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz" + integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbol-support-x@^1.4.1: + version "1.4.2" + resolved "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz" + integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== + +has-symbols@^1.0.1, has-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz" + integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== + +has-to-string-tag-x@^1.2.0: + version "1.4.1" + resolved "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz" + integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw== + dependencies: + has-symbol-support-x "^1.4.1" + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hast-util-is-element@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz" + integrity sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ== + +hast-util-sanitize@^3.0.0: + version "3.0.2" + resolved "https://registry.npmjs.org/hast-util-sanitize/-/hast-util-sanitize-3.0.2.tgz" + integrity sha512-+2I0x2ZCAyiZOO/sb4yNLFmdwPBnyJ4PBkVTUMKMqBwYNA+lXSgOmoRXlJFazoyid9QPogRRKgKhVEodv181sA== + dependencies: + xtend "^4.0.0" + +hast-util-to-html@^7.0.0: + version "7.1.3" + resolved "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-7.1.3.tgz" + integrity sha512-yk2+1p3EJTEE9ZEUkgHsUSVhIpCsL/bvT8E5GzmWc+N1Po5gBw+0F8bo7dpxXR0nu0bQVxVZGX2lBGF21CmeDw== + dependencies: + ccount "^1.0.0" + comma-separated-tokens "^1.0.0" + hast-util-is-element "^1.0.0" + hast-util-whitespace "^1.0.0" + html-void-elements "^1.0.0" + property-information "^5.0.0" + space-separated-tokens "^1.0.0" + stringify-entities "^3.0.1" + unist-util-is "^4.0.0" + xtend "^4.0.0" + +hast-util-whitespace@^1.0.0: + version "1.0.4" + resolved "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-1.0.4.tgz" + integrity sha512-I5GTdSfhYfAPNztx2xJRQpG8cuDSNt599/7YUn7Gx/WxNMsG+a835k97TDkFgk123cwjfwINaZknkKkphx/f2A== + +he@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hoist-non-react-statics@^3.0.0: + version "3.3.2" + resolved "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + +hosted-git-info@^2.1.4: + version "2.8.8" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + +html-element@^2.0.0: + version "2.3.1" + resolved "https://registry.npmjs.org/html-element/-/html-element-2.3.1.tgz" + integrity sha512-xnFt2ZkbFcjc+JoAtg3Hl89VeEZDjododu4VCPkRvFmBTHHA9U1Nt6hLUWfW2O+6Sl/rT1hHK/PivleX3PdBJQ== + dependencies: + class-list "~0.1.1" + +html-void-elements@^1.0.0: + version "1.0.5" + resolved "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz" + integrity sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w== + +http-cache-semantics@3.8.1: + version "3.8.1" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz" + integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== + +http-errors@1.7.3: + version "1.7.3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +https-browserify@1.0.0, https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +hyperscript@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/hyperscript/-/hyperscript-2.0.2.tgz" + integrity sha1-ODnLpFVUvf4nu4HCFC0WhPgTWvU= + dependencies: + browser-split "0.0.0" + class-list "~0.1.0" + html-element "^2.0.0" + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ieee754@^1.1.4: + version "1.1.13" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + +ignore@^3.3.5: + version "3.3.10" + resolved "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz" + integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== + +image-size@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/image-size/-/image-size-1.0.0.tgz" + integrity sha512-JLJ6OwBfO1KcA+TvJT+v8gbE6iWbj24LyDNFgFEN0lzegn6cC6a/p3NIDaepMsJjQjlUWqIC7wJv8lBFxPNjcw== + dependencies: + queue "6.0.2" + +imagemin-mozjpeg@^9.0.0: + version "9.0.0" + resolved "https://registry.npmjs.org/imagemin-mozjpeg/-/imagemin-mozjpeg-9.0.0.tgz" + integrity sha512-TwOjTzYqCFRgROTWpVSt5UTT0JeCuzF1jswPLKALDd89+PmrJ2PdMMYeDLYZ1fs9cTovI9GJd68mRSnuVt691w== + dependencies: + execa "^4.0.0" + is-jpg "^2.0.0" + mozjpeg "^7.0.0" + +imagemin-svgo@^9.0.0: + version "9.0.0" + resolved "https://registry.npmjs.org/imagemin-svgo/-/imagemin-svgo-9.0.0.tgz" + integrity sha512-uNgXpKHd99C0WODkrJ8OO/3zW3qjgS4pW7hcuII0RcHN3tnKxDjJWcitdVC/TZyfIqSricU8WfrHn26bdSW62g== + dependencies: + is-svg "^4.2.1" + svgo "^2.1.0" + +imagemin@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/imagemin/-/imagemin-6.1.0.tgz" + integrity sha512-8ryJBL1CN5uSHpiBMX0rJw79C9F9aJqMnjGnrd/1CafegpNuA81RBAAru/jQQEOWlOJJlpRnlcVFF6wq+Ist0A== + dependencies: + file-type "^10.7.0" + globby "^8.0.1" + make-dir "^1.0.0" + p-pipe "^1.1.0" + pify "^4.0.1" + replace-ext "^1.0.0" + +img-loader@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/img-loader/-/img-loader-3.0.1.tgz" + integrity sha512-0jDJqexgzOuq3zlXwFTBKJlMcaP1uXyl5t4Qu6b1IgXb3IwBDjPfVylBC8vHFIIESDw/S+5QkBbtBrt4T8wESA== + dependencies: + loader-utils "^1.1.0" + +import-fresh@^3.1.0: + version "3.2.1" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz" + integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-lazy@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/import-lazy/-/import-lazy-3.1.0.tgz" + integrity sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ== + +in-publish@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/in-publish/-/in-publish-2.0.1.tgz" + integrity sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ== + +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz" + integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= + dependencies: + repeating "^2.0.0" + +indexof@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz" + integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@~2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.1, inherits@~2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +ini@^1.3.4: + version "1.3.5" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" + +into-stream@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz" + integrity sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY= + dependencies: + from2 "^2.1.1" + p-is-promise "^1.1.0" + +invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-alphabetical@^1.0.0: + version "1.0.4" + resolved "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz" + integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== + +is-alphanumerical@^1.0.0: + version "1.0.4" + resolved "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz" + integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== + dependencies: + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + +is-arguments@^1.0.4: + version "1.1.1" + resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-buffer@^1.1.5, is-buffer@~1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-buffer@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + +is-callable@^1.1.4, is-callable@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" + integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= dependencies: - "kind-of" "^3.0.2" + kind-of "^3.0.2" -"is-data-descriptor@^1.0.0": - "integrity" "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==" - "resolved" "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz" - "version" "1.0.0" +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== dependencies: - "kind-of" "^6.0.0" - -"is-date-object@^1.0.1": - "integrity" "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==" - "resolved" "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" - "version" "1.0.5" - dependencies: - "has-tostringtag" "^1.0.0" + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" -"is-decimal@^1.0.0": - "integrity" "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" - "resolved" "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz" - "version" "1.0.4" - -"is-descriptor@^0.1.0": - "integrity" "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==" - "resolved" "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz" - "version" "0.1.6" - dependencies: - "is-accessor-descriptor" "^0.1.6" - "is-data-descriptor" "^0.1.4" - "kind-of" "^5.0.0" +is-decimal@^1.0.0: + version "1.0.4" + resolved "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz" + integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" -"is-descriptor@^1.0.0", "is-descriptor@^1.0.2": - "integrity" "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==" - "resolved" "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "is-accessor-descriptor" "^1.0.0" - "is-data-descriptor" "^1.0.0" - "kind-of" "^6.0.2" - -"is-extendable@^0.1.0", "is-extendable@^0.1.1": - "integrity" "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - "resolved" "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" - "version" "0.1.1" - -"is-extendable@^1.0.1": - "integrity" "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==" - "resolved" "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "is-plain-object" "^2.0.4" - -"is-extglob@^2.1.0", "is-extglob@^2.1.1": - "integrity" "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - "version" "2.1.1" - -"is-finite@^1.0.0": - "integrity" "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==" - "resolved" "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz" - "version" "1.1.0" - -"is-generator-function@^1.0.7": - "integrity" "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==" - "resolved" "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz" - "version" "1.0.10" - dependencies: - "has-tostringtag" "^1.0.0" - -"is-glob@^3.1.0": - "integrity" "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=" - "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "is-extglob" "^2.1.0" - -"is-glob@^4.0.0", "is-glob@^4.0.1", "is-glob@~4.0.1": - "integrity" "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==" - "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "is-extglob" "^2.1.1" - -"is-hexadecimal@^1.0.0": - "integrity" "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" - "resolved" "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz" - "version" "1.0.4" - -"is-jpg@^2.0.0": - "integrity" "sha1-LhmX+m6RZuqsAkLarkQ0A+TvHZc=" - "resolved" "https://registry.npmjs.org/is-jpg/-/is-jpg-2.0.0.tgz" - "version" "2.0.0" - -"is-nan@^1.2.1": - "integrity" "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==" - "resolved" "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz" - "version" "1.3.2" - dependencies: - "call-bind" "^1.0.0" - "define-properties" "^1.1.3" - -"is-natural-number@^4.0.1": - "integrity" "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=" - "resolved" "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz" - "version" "4.0.1" - -"is-negative-zero@^2.0.1": - "integrity" "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==" - "resolved" "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz" - "version" "2.0.1" - -"is-number-object@^1.0.4": - "integrity" "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==" - "resolved" "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz" - "version" "1.0.6" - dependencies: - "has-tostringtag" "^1.0.0" - -"is-number@^3.0.0": - "integrity" "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=" - "resolved" "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "kind-of" "^3.0.2" - -"is-number@^7.0.0": - "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - "resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" - "version" "7.0.0" - -"is-obj@^1.0.0": - "integrity" "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" - "resolved" "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz" - "version" "1.0.1" - -"is-object@^1.0.1": - "integrity" "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" - "resolved" "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz" - "version" "1.0.1" - -"is-plain-obj@^1.0.0", "is-plain-obj@^1.1.0": - "integrity" "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" - "resolved" "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" - "version" "1.1.0" - -"is-plain-obj@^2.0.0": - "integrity" "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" - "resolved" "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" - "version" "2.1.0" - -"is-plain-object@^2.0.3", "is-plain-object@^2.0.4": - "integrity" "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==" - "resolved" "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" - "version" "2.0.4" - dependencies: - "isobject" "^3.0.1" - -"is-png@^2.0.0": - "integrity" "sha512-4KPGizaVGj2LK7xwJIz8o5B2ubu1D/vcQsgOGFEDlpcvgZHto4gBnyd0ig7Ws+67ixmwKoNmu0hYnpo6AaKb5g==" - "resolved" "https://registry.npmjs.org/is-png/-/is-png-2.0.0.tgz" - "version" "2.0.0" - -"is-regex@^1.1.4": - "integrity" "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==" - "resolved" "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" - "version" "1.1.4" - dependencies: - "call-bind" "^1.0.2" - "has-tostringtag" "^1.0.0" - -"is-retina@^1.0.3": - "integrity" "sha1-10AbKGvqKuN/Ykd1iN5QTQuGR+M=" - "resolved" "https://registry.npmjs.org/is-retina/-/is-retina-1.0.3.tgz" - "version" "1.0.3" - -"is-retry-allowed@^1.0.0", "is-retry-allowed@^1.1.0": - "integrity" "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" - "resolved" "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz" - "version" "1.2.0" - -"is-stream@^1.0.0": - "integrity" "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" - "version" "1.1.0" - -"is-stream@^1.1.0": - "integrity" "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" - "version" "1.1.0" - -"is-stream@^2.0.0": - "integrity" "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" - "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz" - "version" "2.0.0" - -"is-string@^1.0.5", "is-string@^1.0.7": - "integrity" "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==" - "resolved" "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" - "version" "1.0.7" - dependencies: - "has-tostringtag" "^1.0.0" - -"is-svg@^4.2.1": - "integrity" "sha512-h2CGs+yPUyvkgTJQS9cJzo9lYK06WgRiXUqBBHtglSzVKAuH4/oWsqk7LGfbSa1hGk9QcZ0SyQtVggvBA8LZXA==" - "resolved" "https://registry.npmjs.org/is-svg/-/is-svg-4.3.1.tgz" - "version" "4.3.1" - dependencies: - "fast-xml-parser" "^3.19.0" - -"is-symbol@^1.0.2", "is-symbol@^1.0.3": - "integrity" "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==" - "resolved" "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "has-symbols" "^1.0.2" - -"is-typed-array@^1.1.3", "is-typed-array@^1.1.7": - "integrity" "sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA==" - "resolved" "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.8.tgz" - "version" "1.1.8" - dependencies: - "available-typed-arrays" "^1.0.5" - "call-bind" "^1.0.2" - "es-abstract" "^1.18.5" - "foreach" "^2.0.5" - "has-tostringtag" "^1.0.0" - -"is-utf8@^0.2.0": - "integrity" "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" - "resolved" "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz" - "version" "0.2.1" - -"is-windows@^1.0.2": - "integrity" "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" - "resolved" "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" - "version" "1.0.2" - -"isarray@^1.0.0", "isarray@~1.0.0", "isarray@1.0.0": - "integrity" "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - "resolved" "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" - "version" "1.0.0" - -"isexe@^2.0.0": - "integrity" "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - "resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - "version" "2.0.0" - -"isobject@^2.0.0": - "integrity" "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=" - "resolved" "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "isarray" "1.0.0" - -"isobject@^3.0.0", "isobject@^3.0.1": - "integrity" "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - "resolved" "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" - "version" "3.0.1" - -"isurl@^1.0.0-alpha5": - "integrity" "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==" - "resolved" "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "has-to-string-tag-x" "^1.2.0" - "is-object" "^1.0.1" - -"jest-worker@27.0.0-next.5": - "integrity" "sha512-mk0umAQ5lT+CaOJ+Qp01N6kz48sJG2kr2n1rX0koqKf6FIygQV0qLOdN9SCYID4IVeSigDOcPeGLozdMLYfb5g==" - "resolved" "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.0-next.5.tgz" - "version" "27.0.0-next.5" +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-finite@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz" + integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== + +is-generator-function@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-hexadecimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" + integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== + +is-jpg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-jpg/-/is-jpg-2.0.0.tgz#2e1997fa6e9166eaac0242daae443403e4ef1d97" + integrity sha1-LhmX+m6RZuqsAkLarkQ0A+TvHZc= + +is-nan@^1.2.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" + integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + +is-natural-number@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8" + integrity sha1-q5124dtM7VHjXeDHLr7PCfc0zeg= + +is-negative-zero@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0" + integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + +is-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.2.tgz#a56552e1c665c9e950b4a025461da87e72f86fcf" + integrity sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA== + +is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-plain-obj@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-retina@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-retina/-/is-retina-1.0.3.tgz#d7401b286bea2ae37f62477588de504d0b8647e3" + integrity sha1-10AbKGvqKuN/Ykd1iN5QTQuGR+M= + +is-retry-allowed@^1.0.0, is-retry-allowed@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== + +is-stream@^1.0.0, is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-svg@^4.2.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-4.3.2.tgz#a119e9932e1af53f6be1969d1790d6cc5fd947d3" + integrity sha512-mM90duy00JGMyjqIVHu9gNTjywdZV+8qNasX8cm/EEYZ53PHDgajvbBwNVvty5dwSAxLUD3p3bdo+7sR/UMrpw== + dependencies: + fast-xml-parser "^3.19.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.3, is-typed-array@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.8.tgz#cbaa6585dc7db43318bc5b89523ea384a6f65e79" + integrity sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-abstract "^1.18.5" + foreach "^2.0.5" + has-tostringtag "^1.0.0" + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isurl@^1.0.0-alpha5: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" + integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w== + dependencies: + has-to-string-tag-x "^1.2.0" + is-object "^1.0.1" + +jest-worker@27.0.0-next.5: + version "27.0.0-next.5" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.0.0-next.5.tgz#5985ee29b12a4e191f4aae4bb73b97971d86ec28" + integrity sha512-mk0umAQ5lT+CaOJ+Qp01N6kz48sJG2kr2n1rX0koqKf6FIygQV0qLOdN9SCYID4IVeSigDOcPeGLozdMLYfb5g== dependencies: "@types/node" "*" - "merge-stream" "^2.0.0" - "supports-color" "^8.0.0" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json2mq@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/json2mq/-/json2mq-0.2.0.tgz#b637bd3ba9eabe122c83e9720483aeb10d2c904a" + integrity sha1-tje9O6nqvhIsg+lyBIOusQ0skEo= + dependencies: + string-convert "^0.2.0" + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +json5@^2.1.2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== + dependencies: + minimist "^1.2.5" + +keyv@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.0.0.tgz#44923ba39e68b12a7cec7df6c3268c031f2ef373" + integrity sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA== + dependencies: + json-buffer "3.0.0" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +load-script@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/load-script/-/load-script-1.0.0.tgz#0491939e0bee5643ee494a7e3da3d2bac70c6ca4" + integrity sha1-BJGTngvuVkPuSUp+PaPSuscMbKQ= + +loader-utils@1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" + integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== + dependencies: + big.js "^5.2.2" + emojis-list "^2.0.0" + json5 "^1.0.1" + +loader-utils@^1.0.2, loader-utils@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +loader-utils@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.2.tgz#d6e3b4fb81870721ae4e0868ab11dd638368c129" + integrity sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= + +lodash.throttle@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" + integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ= + +lodash@^4.17.11, lodash@^4.17.15: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +logalot@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/logalot/-/logalot-2.1.0.tgz" + integrity sha1-X46MkNME7fElMJUaVVSruMXj9VI= + dependencies: + figures "^1.3.5" + squeak "^1.0.0" + +longest-streak@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4" + integrity sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg== + +longest@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz" + integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz" + integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +lowercase-keys@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" + integrity sha1-TjNms55/VFfjXxMkvfb4jQv8cwY= + +lowercase-keys@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lpad-align@^1.0.1: + version "1.1.2" + resolved "https://registry.npmjs.org/lpad-align/-/lpad-align-1.1.2.tgz" + integrity sha1-IfYArBwwlcPG5JfuZyce4ISB/p4= + dependencies: + get-stdin "^4.0.1" + indent-string "^2.1.0" + longest "^1.0.0" + meow "^3.3.0" + +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-dir@^1.0.0, make-dir@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== + dependencies: + pify "^3.0.0" + +make-dir@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-error@^1.3.0: + version "1.3.6" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" -"js-tokens@^3.0.0 || ^4.0.0", "js-tokens@^4.0.0": - "integrity" "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - "resolved" "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" - "version" "4.0.0" - -"js-yaml@^3.13.1": - "integrity" "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==" - "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz" - "version" "3.14.0" - dependencies: - "argparse" "^1.0.7" - "esprima" "^4.0.0" - -"jsesc@^2.5.1": - "integrity" "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - "resolved" "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" - "version" "2.5.2" - -"json-buffer@3.0.0": - "integrity" "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" - "resolved" "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz" - "version" "3.0.0" - -"json-parse-better-errors@^1.0.1": - "integrity" "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" - "resolved" "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" - "version" "1.0.2" - -"json-schema-traverse@^0.4.1": - "integrity" "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" - "version" "0.4.1" - -"json2mq@^0.2.0": - "integrity" "sha1-tje9O6nqvhIsg+lyBIOusQ0skEo=" - "resolved" "https://registry.npmjs.org/json2mq/-/json2mq-0.2.0.tgz" - "version" "0.2.0" - dependencies: - "string-convert" "^0.2.0" - -"json5@^1.0.1": - "integrity" "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==" - "resolved" "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "minimist" "^1.2.0" - -"json5@^2.1.2": - "integrity" "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==" - "resolved" "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz" - "version" "2.2.0" - dependencies: - "minimist" "^1.2.5" - -"keyv@3.0.0": - "integrity" "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==" - "resolved" "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "json-buffer" "3.0.0" - -"kind-of@^3.0.2", "kind-of@^3.0.3", "kind-of@^3.2.0": - "integrity" "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=" - "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" - "version" "3.2.2" - dependencies: - "is-buffer" "^1.1.5" - -"kind-of@^4.0.0": - "integrity" "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=" - "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "is-buffer" "^1.1.5" - -"kind-of@^5.0.0": - "integrity" "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz" - "version" "5.1.0" - -"kind-of@^6.0.0": - "integrity" "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" - "version" "6.0.3" - -"kind-of@^6.0.2": - "integrity" "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" - "version" "6.0.3" - -"lines-and-columns@^1.1.6": - "integrity" "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" - "resolved" "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz" - "version" "1.1.6" - -"load-json-file@^1.0.0": - "integrity" "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=" - "resolved" "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "graceful-fs" "^4.1.2" - "parse-json" "^2.2.0" - "pify" "^2.0.0" - "pinkie-promise" "^2.0.0" - "strip-bom" "^2.0.0" - -"load-script@^1.0.0": - "integrity" "sha1-BJGTngvuVkPuSUp+PaPSuscMbKQ=" - "resolved" "https://registry.npmjs.org/load-script/-/load-script-1.0.0.tgz" - "version" "1.0.0" - -"loader-utils@^1.0.2", "loader-utils@^1.1.0", "loader-utils@1.2.3": - "integrity" "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==" - "resolved" "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz" - "version" "1.2.3" - dependencies: - "big.js" "^5.2.2" - "emojis-list" "^2.0.0" - "json5" "^1.0.1" - -"loader-utils@^2.0.0": - "integrity" "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==" - "resolved" "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "big.js" "^5.2.2" - "emojis-list" "^3.0.0" - "json5" "^2.1.2" - -"locate-path@^5.0.0": - "integrity" "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==" - "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "p-locate" "^4.1.0" - -"lodash-es@^4.17.15": - "integrity" "sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ==" - "resolved" "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.15.tgz" - "version" "4.17.15" - -"lodash.debounce@^4.0.8": - "integrity" "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" - "resolved" "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" - "version" "4.0.8" - -"lodash.sortby@^4.7.0": - "integrity" "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" - "resolved" "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz" - "version" "4.7.0" - -"lodash.throttle@^4.1.1": - "integrity" "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=" - "resolved" "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz" - "version" "4.1.1" - -"lodash@^4.17.11", "lodash@^4.17.13", "lodash@^4.17.15": - "integrity" "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" - "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz" - "version" "4.17.15" - -"logalot@^2.0.0", "logalot@^2.1.0": - "integrity" "sha1-X46MkNME7fElMJUaVVSruMXj9VI=" - "resolved" "https://registry.npmjs.org/logalot/-/logalot-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "figures" "^1.3.5" - "squeak" "^1.0.0" - -"longest-streak@^2.0.0": - "integrity" "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==" - "resolved" "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz" - "version" "2.0.4" - -"longest@^1.0.0": - "integrity" "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" - "resolved" "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz" - "version" "1.0.1" - -"loose-envify@^1.0.0", "loose-envify@^1.1.0", "loose-envify@^1.4.0": - "integrity" "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==" - "resolved" "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" - "version" "1.4.0" - dependencies: - "js-tokens" "^3.0.0 || ^4.0.0" - -"loud-rejection@^1.0.0": - "integrity" "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=" - "resolved" "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz" - "version" "1.6.0" - dependencies: - "currently-unhandled" "^0.4.1" - "signal-exit" "^3.0.0" - -"lowercase-keys@^1.0.0": - "integrity" "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" - "resolved" "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz" - "version" "1.0.1" - -"lowercase-keys@1.0.0": - "integrity" "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=" - "resolved" "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz" - "version" "1.0.0" - -"lpad-align@^1.0.1": - "integrity" "sha1-IfYArBwwlcPG5JfuZyce4ISB/p4=" - "resolved" "https://registry.npmjs.org/lpad-align/-/lpad-align-1.1.2.tgz" - "version" "1.1.2" - dependencies: - "get-stdin" "^4.0.1" - "indent-string" "^2.1.0" - "longest" "^1.0.0" - "meow" "^3.3.0" - -"lru-cache@^4.0.1": - "integrity" "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==" - "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz" - "version" "4.1.5" - dependencies: - "pseudomap" "^1.0.2" - "yallist" "^2.1.2" - -"lru-cache@^6.0.0": - "integrity" "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==" - "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "yallist" "^4.0.0" - -"make-dir@^1.0.0", "make-dir@^1.2.0": - "integrity" "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==" - "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz" - "version" "1.3.0" - dependencies: - "pify" "^3.0.0" - -"make-dir@^3.0.2": - "integrity" "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==" - "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "semver" "^6.0.0" - -"make-error@^1.3.0": - "integrity" "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" - "resolved" "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" - "version" "1.3.6" - -"map-cache@^0.2.2": - "integrity" "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" - "resolved" "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz" - "version" "0.2.2" - -"map-obj@^1.0.0", "map-obj@^1.0.1": - "integrity" "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" - "resolved" "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" - "version" "1.0.1" - -"map-visit@^1.0.0": - "integrity" "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=" - "resolved" "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "object-visit" "^1.0.0" +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" -"md5.js@^1.3.4": - "integrity" "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==" - "resolved" "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz" - "version" "1.3.5" - dependencies: - "hash-base" "^3.0.0" - "inherits" "^2.0.1" - "safe-buffer" "^5.1.2" - -"md5@^2.1.0": - "integrity" "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==" - "resolved" "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz" - "version" "2.3.0" +md5@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" + integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== dependencies: - "charenc" "0.0.2" - "crypt" "0.0.2" - "is-buffer" "~1.1.6" + charenc "0.0.2" + crypt "0.0.2" + is-buffer "~1.1.6" -"mdast-util-definitions@^4.0.0": - "integrity" "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==" - "resolved" "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "unist-util-visit" "^2.0.0" +mdast-util-definitions@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz#c5c1a84db799173b4dcf7643cda999e440c24db2" + integrity sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ== + dependencies: + unist-util-visit "^2.0.0" -"mdast-util-from-markdown@^0.8.0": - "integrity" "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==" - "resolved" "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz" - "version" "0.8.5" +mdast-util-from-markdown@^0.8.0: + version "0.8.5" + resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz#d1ef2ca42bc377ecb0463a987910dae89bd9a28c" + integrity sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ== dependencies: "@types/mdast" "^3.0.0" - "mdast-util-to-string" "^2.0.0" - "micromark" "~2.11.0" - "parse-entities" "^2.0.0" - "unist-util-stringify-position" "^2.0.0" + mdast-util-to-string "^2.0.0" + micromark "~2.11.0" + parse-entities "^2.0.0" + unist-util-stringify-position "^2.0.0" -"mdast-util-to-hast@^10.0.0": - "integrity" "sha512-JoPBfJ3gBnHZ18icCwHR50orC9kNH81tiR1gs01D8Q5YpV6adHNO9nKNuFBCJQ941/32PT1a63UF/DitmS3amQ==" - "resolved" "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.2.0.tgz" - "version" "10.2.0" +mdast-util-to-hast@^10.0.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-10.2.0.tgz#61875526a017d8857b71abc9333942700b2d3604" + integrity sha512-JoPBfJ3gBnHZ18icCwHR50orC9kNH81tiR1gs01D8Q5YpV6adHNO9nKNuFBCJQ941/32PT1a63UF/DitmS3amQ== dependencies: "@types/mdast" "^3.0.0" "@types/unist" "^2.0.0" - "mdast-util-definitions" "^4.0.0" - "mdurl" "^1.0.0" - "unist-builder" "^2.0.0" - "unist-util-generated" "^1.0.0" - "unist-util-position" "^3.0.0" - "unist-util-visit" "^2.0.0" - -"mdast-util-to-markdown@^0.6.0": - "integrity" "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==" - "resolved" "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz" - "version" "0.6.5" + mdast-util-definitions "^4.0.0" + mdurl "^1.0.0" + unist-builder "^2.0.0" + unist-util-generated "^1.0.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + +mdast-util-to-markdown@^0.6.0: + version "0.6.5" + resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz#b33f67ca820d69e6cc527a93d4039249b504bebe" + integrity sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ== dependencies: "@types/unist" "^2.0.0" - "longest-streak" "^2.0.0" - "mdast-util-to-string" "^2.0.0" - "parse-entities" "^2.0.0" - "repeat-string" "^1.0.0" - "zwitch" "^1.0.0" - -"mdast-util-to-string@^2.0.0": - "integrity" "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==" - "resolved" "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz" - "version" "2.0.0" - -"mdn-data@2.0.14": - "integrity" "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - "resolved" "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz" - "version" "2.0.14" - -"mdurl@^1.0.0": - "integrity" "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" - "resolved" "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz" - "version" "1.0.1" - -"memoize-one@^5.0.0", "memoize-one@^5.1.1": - "integrity" "sha512-HKeeBpWvqiVJD57ZUAsJNm71eHTykffzcLZVYWiVfQeI1rJtuEaS7hQiEpWfVVk18donPwJEcFKIkCmPJNOhHA==" - "resolved" "https://registry.npmjs.org/memoize-one/-/memoize-one-5.1.1.tgz" - "version" "5.1.1" - -"mendoza@^2.1.1": - "integrity" "sha512-8f3Se8HDfobXCsdESXZBSSYcVzIRi+cMIEmz/SR4bjgFEjHJaXzrsBYr+vyrFGEtK5xTpCcU+DiwxWJV6hCuhQ==" - "resolved" "https://registry.npmjs.org/mendoza/-/mendoza-2.1.1.tgz" - "version" "2.1.1" - -"meow@^3.3.0": - "integrity" "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=" - "resolved" "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz" - "version" "3.7.0" - dependencies: - "camelcase-keys" "^2.0.0" - "decamelize" "^1.1.2" - "loud-rejection" "^1.0.0" - "map-obj" "^1.0.1" - "minimist" "^1.1.3" - "normalize-package-data" "^2.3.4" - "object-assign" "^4.0.1" - "read-pkg-up" "^1.0.1" - "redent" "^1.0.0" - "trim-newlines" "^1.0.0" - -"merge-stream@^2.0.0": - "integrity" "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - "resolved" "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" - "version" "2.0.0" - -"merge2@^1.2.3": - "integrity" "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" - "resolved" "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" - "version" "1.4.1" - -"micromark@~2.11.0": - "integrity" "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==" - "resolved" "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz" - "version" "2.11.4" - dependencies: - "debug" "^4.0.0" - "parse-entities" "^2.0.0" - -"micromatch@^3.1.10": - "integrity" "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==" - "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz" - "version" "3.1.10" - dependencies: - "arr-diff" "^4.0.0" - "array-unique" "^0.3.2" - "braces" "^2.3.1" - "define-property" "^2.0.2" - "extend-shallow" "^3.0.2" - "extglob" "^2.0.4" - "fragment-cache" "^0.2.1" - "kind-of" "^6.0.2" - "nanomatch" "^1.2.9" - "object.pick" "^1.3.0" - "regex-not" "^1.0.0" - "snapdragon" "^0.8.1" - "to-regex" "^3.0.2" - -"miller-rabin@^4.0.0": - "integrity" "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==" - "resolved" "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "bn.js" "^4.0.0" - "brorand" "^1.0.1" - -"mime-db@^1.28.0": - "integrity" "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" - "resolved" "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz" - "version" "1.44.0" - -"mime@^2.0.3": - "integrity" "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==" - "resolved" "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz" - "version" "2.4.6" - -"mimic-fn@^2.1.0": - "integrity" "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" - "version" "2.1.0" - -"mimic-response@^1.0.0": - "integrity" "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - "resolved" "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" - "version" "1.0.1" - -"mimic-response@^3.1.0": - "integrity" "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" - "resolved" "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" - "version" "3.1.0" - -"minimalistic-assert@^1.0.0", "minimalistic-assert@^1.0.1": - "integrity" "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - "resolved" "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" - "version" "1.0.1" - -"minimalistic-crypto-utils@^1.0.1": - "integrity" "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - "resolved" "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz" - "version" "1.0.1" - -"minimatch@^3.0.4": - "integrity" "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==" - "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "brace-expansion" "^1.1.7" - -"minimist@^1.1.3", "minimist@^1.2.0", "minimist@^1.2.5": - "integrity" "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz" - "version" "1.2.5" - -"mixin-deep@^1.2.0": - "integrity" "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==" - "resolved" "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz" - "version" "1.3.2" - dependencies: - "for-in" "^1.0.2" - "is-extendable" "^1.0.1" - -"mozjpeg@^7.0.0": - "integrity" "sha512-mH7atSbIusVTO3A4H43sEdmveN3aWn54k6V0edefzCEvOsTrbjg5murY2TsNznaztWnIgaRbWxeLVp4IgKdedQ==" - "resolved" "https://registry.npmjs.org/mozjpeg/-/mozjpeg-7.0.0.tgz" - "version" "7.0.0" - dependencies: - "bin-build" "^3.0.0" - "bin-wrapper" "^4.0.0" - "logalot" "^2.1.0" - -"ms@^2.1.1": - "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - "version" "2.1.2" - -"ms@2.0.0": - "integrity" "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - "resolved" "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" - "version" "2.0.0" - -"nano-pubsub@^1.0.2": - "integrity" "sha1-NM53b3r5WZFbj3rP6N1rnGbzvek=" - "resolved" "https://registry.npmjs.org/nano-pubsub/-/nano-pubsub-1.0.2.tgz" - "version" "1.0.2" - -"nanoid@^3.1.23": - "integrity" "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==" - "resolved" "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz" - "version" "3.1.25" - -"nanomatch@^1.2.9": - "integrity" "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==" - "resolved" "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz" - "version" "1.2.13" - dependencies: - "arr-diff" "^4.0.0" - "array-unique" "^0.3.2" - "define-property" "^2.0.2" - "extend-shallow" "^3.0.2" - "fragment-cache" "^0.2.1" - "is-windows" "^1.0.2" - "kind-of" "^6.0.2" - "object.pick" "^1.3.0" - "regex-not" "^1.0.0" - "snapdragon" "^0.8.1" - "to-regex" "^3.0.1" - -"native-url@0.3.4": - "integrity" "sha512-6iM8R99ze45ivyH8vybJ7X0yekIcPf5GgLV5K0ENCbmRcaRIDoj37BC8iLEmaaBfqqb8enuZ5p0uhY+lVAbAcA==" - "resolved" "https://registry.npmjs.org/native-url/-/native-url-0.3.4.tgz" - "version" "0.3.4" - dependencies: - "querystring" "^0.2.0" - -"next-fonts@^1.2.0": - "integrity" "sha512-k1rQmd1yyHrZVvqWeLD2xut+Krqr6BorZrF9ETbfhXb/GkTr8WLpg8rEE54ktjIs7yzqcgl3GkADonR9HGcglQ==" - "resolved" "https://registry.npmjs.org/next-fonts/-/next-fonts-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "file-loader" "^2.0.0" - "url-loader" "^1.1.1" - -"next-optimized-images@^2.6.1": - "integrity" "sha512-P+vDuXUv9yasf8vVXoJthmSRsV1jhTxZ5mlm9Ga+iVLuM7TwwwttIGbvFBYTm7H9AulukqyI5yuA9wOFytapgw==" - "resolved" "https://registry.npmjs.org/next-optimized-images/-/next-optimized-images-2.6.1.tgz" - "version" "2.6.1" - dependencies: - "chalk" "^2.4.2" - "figures" "^3.0.0" - "file-loader" "^3.0.1" - "imagemin" "^6.1.0" - "img-loader" "^3.0.1" - "raw-loader" "^2.0.0" - "url-loader" "^1.1.2" - -"next-sanity-image@^3.1.5": - "integrity" "sha512-+DWafmOyS/9EA1tpR/bh2wmz6vBWLm9x1z1i8VJbC54mkqsoODX9xwVX270FL5eazaqPYQjEpnnZkXuv6cwGXw==" - "resolved" "https://registry.npmjs.org/next-sanity-image/-/next-sanity-image-3.1.6.tgz" - "version" "3.1.6" + longest-streak "^2.0.0" + mdast-util-to-string "^2.0.0" + parse-entities "^2.0.0" + repeat-string "^1.0.0" + zwitch "^1.0.0" + +mdast-util-to-string@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz" + integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w== + +mdn-data@2.0.14: + version "2.0.14" + resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz" + integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== + +mdurl@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz" + integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= + +memoize-one@^5.0.0, memoize-one@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/memoize-one/-/memoize-one-5.1.1.tgz" + integrity sha512-HKeeBpWvqiVJD57ZUAsJNm71eHTykffzcLZVYWiVfQeI1rJtuEaS7hQiEpWfVVk18donPwJEcFKIkCmPJNOhHA== + +mendoza@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/mendoza/-/mendoza-2.1.1.tgz" + integrity sha512-8f3Se8HDfobXCsdESXZBSSYcVzIRi+cMIEmz/SR4bjgFEjHJaXzrsBYr+vyrFGEtK5xTpCcU+DiwxWJV6hCuhQ== + +meow@^3.3.0: + version "3.7.0" + resolved "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz" + integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.2.3: + version "1.4.1" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromark@~2.11.0: + version "2.11.4" + resolved "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz" + integrity sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA== + dependencies: + debug "^4.0.0" + parse-entities "^2.0.0" + +micromatch@^3.1.10: + version "3.1.10" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@^1.28.0: + version "1.44.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== + +mime@^2.0.3: + version "2.4.6" + resolved "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz" + integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mozjpeg@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/mozjpeg/-/mozjpeg-7.0.0.tgz" + integrity sha512-mH7atSbIusVTO3A4H43sEdmveN3aWn54k6V0edefzCEvOsTrbjg5murY2TsNznaztWnIgaRbWxeLVp4IgKdedQ== + dependencies: + bin-build "^3.0.0" + bin-wrapper "^4.0.0" + logalot "^2.1.0" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +nano-pubsub@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/nano-pubsub/-/nano-pubsub-1.0.2.tgz" + integrity sha1-NM53b3r5WZFbj3rP6N1rnGbzvek= + +nanoid@^3.1.23: + version "3.1.25" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz" + integrity sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +native-url@0.3.4: + version "0.3.4" + resolved "https://registry.npmjs.org/native-url/-/native-url-0.3.4.tgz" + integrity sha512-6iM8R99ze45ivyH8vybJ7X0yekIcPf5GgLV5K0ENCbmRcaRIDoj37BC8iLEmaaBfqqb8enuZ5p0uhY+lVAbAcA== + dependencies: + querystring "^0.2.0" + +next-fonts@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/next-fonts/-/next-fonts-1.2.0.tgz" + integrity sha512-k1rQmd1yyHrZVvqWeLD2xut+Krqr6BorZrF9ETbfhXb/GkTr8WLpg8rEE54ktjIs7yzqcgl3GkADonR9HGcglQ== + dependencies: + file-loader "^2.0.0" + url-loader "^1.1.1" + +next-optimized-images@^2.6.1: + version "2.6.1" + resolved "https://registry.npmjs.org/next-optimized-images/-/next-optimized-images-2.6.1.tgz" + integrity sha512-P+vDuXUv9yasf8vVXoJthmSRsV1jhTxZ5mlm9Ga+iVLuM7TwwwttIGbvFBYTm7H9AulukqyI5yuA9wOFytapgw== + dependencies: + chalk "^2.4.2" + figures "^3.0.0" + file-loader "^3.0.1" + imagemin "^6.1.0" + img-loader "^3.0.1" + raw-loader "^2.0.0" + url-loader "^1.1.2" + +next-sanity-image@^3.1.5: + version "3.1.6" + resolved "https://registry.npmjs.org/next-sanity-image/-/next-sanity-image-3.1.6.tgz" + integrity sha512-+DWafmOyS/9EA1tpR/bh2wmz6vBWLm9x1z1i8VJbC54mkqsoODX9xwVX270FL5eazaqPYQjEpnnZkXuv6cwGXw== dependencies: "@sanity/image-url" "^0.140.22" -"next-sanity@^0.4.0": - "integrity" "sha512-Z3OG0Z/ORrDPhR5zM8ySIF7z6LynfNqWBTEFksKMOg54RjKV0zfSMAK60Lfbm4U/3u4Nldu96dmVhUkHFkSerw==" - "resolved" "https://registry.npmjs.org/next-sanity/-/next-sanity-0.4.0.tgz" - "version" "0.4.0" +next-sanity@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/next-sanity/-/next-sanity-0.4.0.tgz" + integrity sha512-Z3OG0Z/ORrDPhR5zM8ySIF7z6LynfNqWBTEFksKMOg54RjKV0zfSMAK60Lfbm4U/3u4Nldu96dmVhUkHFkSerw== dependencies: "@sanity/block-content-to-react" "^3.0.0" "@sanity/client" "^2.14.0" "@sanity/groq-store" "^0.2.1" "@sanity/image-url" "^0.140.22" - "groq" "^2.14.0" - "use-deep-compare-effect" "^1.6.1" + groq "^2.14.0" + use-deep-compare-effect "^1.6.1" -"next-seo@^4.26.0": - "integrity" "sha512-5TqywQ3XAwqdmEU1AyNZjR7WdDKFTkDD8aBtgQelPvzBUEy8i0mTjtiw+09jhiHFNik6FqS8uPKCaYcY6jRgSQ==" - "resolved" "https://registry.npmjs.org/next-seo/-/next-seo-4.26.0.tgz" - "version" "4.26.0" +next-seo@^4.26.0: + version "4.26.0" + resolved "https://registry.npmjs.org/next-seo/-/next-seo-4.26.0.tgz" + integrity sha512-5TqywQ3XAwqdmEU1AyNZjR7WdDKFTkDD8aBtgQelPvzBUEy8i0mTjtiw+09jhiHFNik6FqS8uPKCaYcY6jRgSQ== -"next@^11.1.2": - "integrity" "sha512-azEYL0L+wFjv8lstLru3bgvrzPvK0P7/bz6B/4EJ9sYkXeW8r5Bjh78D/Ol7VOg0EIPz0CXoe72hzAlSAXo9hw==" - "resolved" "https://registry.npmjs.org/next/-/next-11.1.2.tgz" - "version" "11.1.2" +next@^11.1.2: + version "11.1.2" + resolved "https://registry.npmjs.org/next/-/next-11.1.2.tgz" + integrity sha512-azEYL0L+wFjv8lstLru3bgvrzPvK0P7/bz6B/4EJ9sYkXeW8r5Bjh78D/Ol7VOg0EIPz0CXoe72hzAlSAXo9hw== dependencies: "@babel/runtime" "7.15.3" "@hapi/accept" "5.0.2" @@ -3943,1726 +3939,1667 @@ "@next/react-dev-overlay" "11.1.2" "@next/react-refresh-utils" "11.1.2" "@node-rs/helper" "1.2.1" - "assert" "2.0.0" - "ast-types" "0.13.2" - "browserify-zlib" "0.2.0" - "browserslist" "4.16.6" - "buffer" "5.6.0" - "caniuse-lite" "^1.0.30001228" - "chalk" "2.4.2" - "chokidar" "3.5.1" - "constants-browserify" "1.0.0" - "crypto-browserify" "3.12.0" - "cssnano-simple" "3.0.0" - "domain-browser" "4.19.0" - "encoding" "0.1.13" - "etag" "1.8.1" - "find-cache-dir" "3.3.1" - "get-orientation" "1.1.2" - "https-browserify" "1.0.0" - "image-size" "1.0.0" - "jest-worker" "27.0.0-next.5" - "native-url" "0.3.4" - "node-fetch" "2.6.1" - "node-html-parser" "1.4.9" - "node-libs-browser" "^2.2.1" - "os-browserify" "0.3.0" - "p-limit" "3.1.0" - "path-browserify" "1.0.1" - "pnp-webpack-plugin" "1.6.4" - "postcss" "8.2.15" - "process" "0.11.10" - "querystring-es3" "0.2.1" - "raw-body" "2.4.1" - "react-is" "17.0.2" - "react-refresh" "0.8.3" - "stream-browserify" "3.0.0" - "stream-http" "3.1.1" - "string_decoder" "1.3.0" - "styled-jsx" "4.0.1" - "timers-browserify" "2.0.12" - "tty-browserify" "0.0.1" - "use-subscription" "1.5.1" - "util" "0.12.4" - "vm-browserify" "1.1.2" - "watchpack" "2.1.1" + assert "2.0.0" + ast-types "0.13.2" + browserify-zlib "0.2.0" + browserslist "4.16.6" + buffer "5.6.0" + caniuse-lite "^1.0.30001228" + chalk "2.4.2" + chokidar "3.5.1" + constants-browserify "1.0.0" + crypto-browserify "3.12.0" + cssnano-simple "3.0.0" + domain-browser "4.19.0" + encoding "0.1.13" + etag "1.8.1" + find-cache-dir "3.3.1" + get-orientation "1.1.2" + https-browserify "1.0.0" + image-size "1.0.0" + jest-worker "27.0.0-next.5" + native-url "0.3.4" + node-fetch "2.6.1" + node-html-parser "1.4.9" + node-libs-browser "^2.2.1" + os-browserify "0.3.0" + p-limit "3.1.0" + path-browserify "1.0.1" + pnp-webpack-plugin "1.6.4" + postcss "8.2.15" + process "0.11.10" + querystring-es3 "0.2.1" + raw-body "2.4.1" + react-is "17.0.2" + react-refresh "0.8.3" + stream-browserify "3.0.0" + stream-http "3.1.1" + string_decoder "1.3.0" + styled-jsx "4.0.1" + timers-browserify "2.0.12" + tty-browserify "0.0.1" + use-subscription "1.5.1" + util "0.12.4" + vm-browserify "1.1.2" + watchpack "2.1.1" optionalDependencies: "@next/swc-darwin-arm64" "11.1.2" "@next/swc-darwin-x64" "11.1.2" "@next/swc-linux-x64-gnu" "11.1.2" "@next/swc-win32-x64-msvc" "11.1.2" -"nice-try@^1.0.4": - "integrity" "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - "resolved" "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" - "version" "1.0.5" - -"node-fetch@2.6.1": - "integrity" "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" - "resolved" "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz" - "version" "2.6.1" - -"node-html-parser@1.4.9": - "integrity" "sha512-UVcirFD1Bn0O+TSmloHeHqZZCxHjvtIeGdVdGMhyZ8/PWlEiZaZ5iJzR189yKZr8p0FXN58BUeC7RHRkf/KYGw==" - "resolved" "https://registry.npmjs.org/node-html-parser/-/node-html-parser-1.4.9.tgz" - "version" "1.4.9" - dependencies: - "he" "1.2.0" - -"node-libs-browser@^2.2.1": - "integrity" "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==" - "resolved" "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz" - "version" "2.2.1" - dependencies: - "assert" "^1.1.1" - "browserify-zlib" "^0.2.0" - "buffer" "^4.3.0" - "console-browserify" "^1.1.0" - "constants-browserify" "^1.0.0" - "crypto-browserify" "^3.11.0" - "domain-browser" "^1.1.1" - "events" "^3.0.0" - "https-browserify" "^1.0.0" - "os-browserify" "^0.3.0" - "path-browserify" "0.0.1" - "process" "^0.11.10" - "punycode" "^1.2.4" - "querystring-es3" "^0.2.0" - "readable-stream" "^2.3.3" - "stream-browserify" "^2.0.1" - "stream-http" "^2.7.2" - "string_decoder" "^1.0.0" - "timers-browserify" "^2.0.4" - "tty-browserify" "0.0.0" - "url" "^0.11.0" - "util" "^0.11.0" - "vm-browserify" "^1.0.1" - -"node-releases@^1.1.71": - "integrity" "sha512-9/IECtNr8dXNmPWmFXepT0/7o5eolGesHUa3mtr0KlgnCvnZxwh2qensKL42JJY2vQKC3nIBXetFAqR+PW1CmA==" - "resolved" "https://registry.npmjs.org/node-releases/-/node-releases-1.1.76.tgz" - "version" "1.1.76" - -"normalize-package-data@^2.3.2", "normalize-package-data@^2.3.4": - "integrity" "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==" - "resolved" "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" - "version" "2.5.0" - dependencies: - "hosted-git-info" "^2.1.4" - "resolve" "^1.10.0" - "semver" "2 || 3 || 4 || 5" - "validate-npm-package-license" "^3.0.1" - -"normalize-path@^3.0.0", "normalize-path@~3.0.0": - "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" - "version" "3.0.0" - -"normalize-url@2.0.1": - "integrity" "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==" - "resolved" "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "prepend-http" "^2.0.0" - "query-string" "^5.0.1" - "sort-keys" "^2.0.0" - -"npm-conf@^1.1.0": - "integrity" "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==" - "resolved" "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz" - "version" "1.1.3" - dependencies: - "config-chain" "^1.1.11" - "pify" "^3.0.0" - -"npm-run-path@^2.0.0": - "integrity" "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=" - "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "path-key" "^2.0.0" - -"npm-run-path@^4.0.0": - "integrity" "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==" - "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "path-key" "^3.0.0" - -"nth-check@^2.0.0": - "integrity" "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==" - "resolved" "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "boolbase" "^1.0.0" - -"object-assign@^4.0.1", "object-assign@^4.1.0", "object-assign@^4.1.1": - "integrity" "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - "resolved" "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" - "version" "4.1.1" - -"object-copy@^0.1.0": - "integrity" "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=" - "resolved" "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz" - "version" "0.1.0" - dependencies: - "copy-descriptor" "^0.1.0" - "define-property" "^0.2.5" - "kind-of" "^3.0.3" - -"object-inspect@^1.11.0", "object-inspect@^1.9.0": - "integrity" "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==" - "resolved" "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz" - "version" "1.11.0" - -"object-is@^1.0.1": - "integrity" "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==" - "resolved" "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz" - "version" "1.1.5" - dependencies: - "call-bind" "^1.0.2" - "define-properties" "^1.1.3" - -"object-keys@^1.0.12", "object-keys@^1.1.1": - "integrity" "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - "resolved" "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" - "version" "1.1.1" - -"object-visit@^1.0.0": - "integrity" "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=" - "resolved" "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "isobject" "^3.0.0" - -"object.assign@^4.1.2": - "integrity" "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==" - "resolved" "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz" - "version" "4.1.2" - dependencies: - "call-bind" "^1.0.0" - "define-properties" "^1.1.3" - "has-symbols" "^1.0.1" - "object-keys" "^1.1.1" - -"object.pick@^1.3.0": - "integrity" "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=" - "resolved" "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz" - "version" "1.3.0" +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-fetch@2.6.1: + version "2.6.1" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz" + integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + +node-html-parser@1.4.9: + version "1.4.9" + resolved "https://registry.npmjs.org/node-html-parser/-/node-html-parser-1.4.9.tgz" + integrity sha512-UVcirFD1Bn0O+TSmloHeHqZZCxHjvtIeGdVdGMhyZ8/PWlEiZaZ5iJzR189yKZr8p0FXN58BUeC7RHRkf/KYGw== + dependencies: + he "1.2.0" + +node-libs-browser@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" + +node-releases@^1.1.71: + version "1.1.76" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-1.1.76.tgz" + integrity sha512-9/IECtNr8dXNmPWmFXepT0/7o5eolGesHUa3mtr0KlgnCvnZxwh2qensKL42JJY2vQKC3nIBXetFAqR+PW1CmA== + +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: + version "2.5.0" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-url@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz" + integrity sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw== + dependencies: + prepend-http "^2.0.0" + query-string "^5.0.1" + sort-keys "^2.0.0" + +npm-conf@^1.1.0: + version "1.1.3" + resolved "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz" + integrity sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw== + dependencies: + config-chain "^1.1.11" + pify "^3.0.0" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +nth-check@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz" + integrity sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q== + dependencies: + boolbase "^1.0.0" + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.11.0, object-inspect@^1.9.0: + version "1.11.0" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz" + integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== + +object-is@^1.0.1: + version "1.1.5" + resolved "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz" + integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== dependencies: - "isobject" "^3.0.1" + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" -"once@^1.3.0", "once@^1.3.1", "once@^1.4.0": - "integrity" "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=" - "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - "version" "1.4.0" +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= dependencies: - "wrappy" "1" + isobject "^3.0.1" -"onetime@^5.1.0": - "integrity" "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==" - "resolved" "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz" - "version" "5.1.0" +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: - "mimic-fn" "^2.1.0" + wrappy "1" -"optipng-bin@^7.0.0": - "integrity" "sha512-mesUAwfedu5p9gRQwlYgD6Svw5IH3VUIWDJj/9cNpP3yFNbbEVqkTMWYhrIEn/cxmbGA3LpZrdoV2Yl8OfmnIA==" - "resolved" "https://registry.npmjs.org/optipng-bin/-/optipng-bin-7.0.0.tgz" - "version" "7.0.0" +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: - "bin-build" "^3.0.0" - "bin-wrapper" "^4.0.0" - "logalot" "^2.0.0" + mimic-fn "^2.1.0" -"original@^1.0.0": - "integrity" "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==" - "resolved" "https://registry.npmjs.org/original/-/original-1.0.2.tgz" - "version" "1.0.2" +original@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/original/-/original-1.0.2.tgz" + integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== dependencies: - "url-parse" "^1.4.3" + url-parse "^1.4.3" -"os-browserify@^0.3.0", "os-browserify@0.3.0": - "integrity" "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" - "resolved" "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz" - "version" "0.3.0" +os-browserify@0.3.0, os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= -"os-filter-obj@^2.0.0": - "integrity" "sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==" - "resolved" "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz" - "version" "2.0.0" +os-filter-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/os-filter-obj/-/os-filter-obj-2.0.0.tgz#1c0b62d5f3a2442749a2d139e6dddee6e81d8d16" + integrity sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg== dependencies: - "arch" "^2.1.0" + arch "^2.1.0" -"p-cancelable@^0.3.0": - "integrity" "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==" - "resolved" "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz" - "version" "0.3.0" +p-cancelable@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" + integrity sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw== -"p-cancelable@^0.4.0": - "integrity" "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==" - "resolved" "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz" - "version" "0.4.1" +p-cancelable@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.4.1.tgz#35f363d67d52081c8d9585e37bcceb7e0bbcb2a0" + integrity sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ== -"p-event@^1.0.0": - "integrity" "sha1-jmtPT2XHK8W2/ii3XtqHT5akoIU=" - "resolved" "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz" - "version" "1.3.0" +p-event@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-event/-/p-event-1.3.0.tgz#8e6b4f4f65c72bc5b6fe28b75eda874f96a4a085" + integrity sha1-jmtPT2XHK8W2/ii3XtqHT5akoIU= dependencies: - "p-timeout" "^1.1.1" - -"p-event@^2.1.0": - "integrity" "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==" - "resolved" "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz" - "version" "2.3.1" - dependencies: - "p-timeout" "^2.0.1" - -"p-finally@^1.0.0": - "integrity" "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - "resolved" "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz" - "version" "1.0.0" - -"p-is-promise@^1.1.0": - "integrity" "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=" - "resolved" "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz" - "version" "1.1.0" - -"p-limit@^2.2.0": - "integrity" "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==" - "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" - "version" "2.3.0" + p-timeout "^1.1.1" + +p-event@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/p-event/-/p-event-2.3.1.tgz#596279ef169ab2c3e0cae88c1cfbb08079993ef6" + integrity sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA== + dependencies: + p-timeout "^2.0.1" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-is-promise@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" + integrity sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4= + +p-limit@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: - "p-try" "^2.0.0" - -"p-limit@3.1.0": - "integrity" "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==" - "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" - "version" "3.1.0" + p-try "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== dependencies: - "yocto-queue" "^0.1.0" - -"p-locate@^4.1.0": - "integrity" "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==" - "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" - "version" "4.1.0" + p-limit "^2.2.0" + +p-map-series@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-1.0.0.tgz#bf98fe575705658a9e1351befb85ae4c1f07bdca" + integrity sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco= dependencies: - "p-limit" "^2.2.0" + p-reduce "^1.0.0" -"p-map-series@^1.0.0": - "integrity" "sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco=" - "resolved" "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "p-reduce" "^1.0.0" +p-pipe@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-1.2.0.tgz#4b1a11399a11520a67790ee5a0c1d5881d6befe9" + integrity sha1-SxoROZoRUgpneQ7loMHViB1r7+k= -"p-pipe@^1.1.0": - "integrity" "sha1-SxoROZoRUgpneQ7loMHViB1r7+k=" - "resolved" "https://registry.npmjs.org/p-pipe/-/p-pipe-1.2.0.tgz" - "version" "1.2.0" - -"p-reduce@^1.0.0": - "integrity" "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=" - "resolved" "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz" - "version" "1.0.0" - -"p-timeout@^1.1.1": - "integrity" "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=" - "resolved" "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz" - "version" "1.2.1" +p-reduce@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" + integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= + +p-timeout@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386" + integrity sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y= dependencies: - "p-finally" "^1.0.0" - -"p-timeout@^2.0.1": - "integrity" "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==" - "resolved" "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "p-finally" "^1.0.0" + p-finally "^1.0.0" + +p-timeout@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-2.0.1.tgz#d8dd1979595d2dc0139e1fe46b8b646cb3cdf038" + integrity sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA== + dependencies: + p-finally "^1.0.0" -"p-try@^2.0.0": - "integrity" "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - "resolved" "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" - "version" "2.2.0" - -"pako@~1.0.5": - "integrity" "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - "resolved" "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz" - "version" "1.0.11" - -"parent-module@^1.0.0": - "integrity" "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==" - "resolved" "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "callsites" "^3.0.0" - -"parse-asn1@^5.0.0", "parse-asn1@^5.1.5": - "integrity" "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==" - "resolved" "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz" - "version" "5.1.6" - dependencies: - "asn1.js" "^5.2.0" - "browserify-aes" "^1.0.0" - "evp_bytestokey" "^1.0.0" - "pbkdf2" "^3.0.3" - "safe-buffer" "^5.1.1" +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +pako@~1.0.5: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.6" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" + integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== + dependencies: + asn1.js "^5.2.0" + browserify-aes "^1.0.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" -"parse-entities@^2.0.0": - "integrity" "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==" - "resolved" "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "character-entities" "^1.0.0" - "character-entities-legacy" "^1.0.0" - "character-reference-invalid" "^1.0.0" - "is-alphanumerical" "^1.0.0" - "is-decimal" "^1.0.0" - "is-hexadecimal" "^1.0.0" - -"parse-headers@^2.0.1": - "integrity" "sha512-psZ9iZoCNFLrgRjZ1d8mn0h9WRqJwFxM9q3x7iUjN/YT2OksthDJ5TiPCu2F38kS4zutqfW+YdVVkBZZx3/1aw==" - "resolved" "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.4.tgz" - "version" "2.0.4" - -"parse-json@^2.2.0": - "integrity" "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=" - "resolved" "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz" - "version" "2.2.0" - dependencies: - "error-ex" "^1.2.0" +parse-entities@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" + integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + +parse-headers@^2.0.1: + version "2.0.4" + resolved "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.4.tgz" + integrity sha512-psZ9iZoCNFLrgRjZ1d8mn0h9WRqJwFxM9q3x7iUjN/YT2OksthDJ5TiPCu2F38kS4zutqfW+YdVVkBZZx3/1aw== + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" -"parse-json@^5.0.0": - "integrity" "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==" - "resolved" "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz" - "version" "5.0.0" +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" - "error-ex" "^1.3.1" - "json-parse-better-errors" "^1.0.1" - "lines-and-columns" "^1.1.6" - -"pascalcase@^0.1.1": - "integrity" "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" - "resolved" "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz" - "version" "0.1.1" - -"path-browserify@0.0.1": - "integrity" "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" - "resolved" "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz" - "version" "0.0.1" - -"path-browserify@1.0.1": - "integrity" "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" - "resolved" "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz" - "version" "1.0.1" - -"path-dirname@^1.0.0": - "integrity" "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" - "resolved" "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz" - "version" "1.0.2" - -"path-exists@^2.0.0": - "integrity" "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=" - "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "pinkie-promise" "^2.0.0" - -"path-exists@^4.0.0": - "integrity" "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" - "version" "4.0.0" - -"path-is-absolute@^1.0.0": - "integrity" "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - "version" "1.0.1" - -"path-key@^2.0.0", "path-key@^2.0.1": - "integrity" "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - "resolved" "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" - "version" "2.0.1" - -"path-key@^3.0.0", "path-key@^3.1.0": - "integrity" "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - "resolved" "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" - "version" "3.1.1" - -"path-parse@^1.0.6": - "integrity" "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" - "resolved" "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz" - "version" "1.0.6" - -"path-type@^1.0.0": - "integrity" "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=" - "resolved" "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "graceful-fs" "^4.1.2" - "pify" "^2.0.0" - "pinkie-promise" "^2.0.0" - -"path-type@^3.0.0": - "integrity" "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==" - "resolved" "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "pify" "^3.0.0" - -"path-type@^4.0.0": - "integrity" "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - "resolved" "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" - "version" "4.0.0" - -"pbkdf2@^3.0.3": - "integrity" "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==" - "resolved" "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz" - "version" "3.1.2" - dependencies: - "create-hash" "^1.1.2" - "create-hmac" "^1.1.4" - "ripemd160" "^2.0.1" - "safe-buffer" "^5.0.1" - "sha.js" "^2.4.8" - -"pend@~1.2.0": - "integrity" "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" - "resolved" "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz" - "version" "1.2.0" - -"picomatch@^2.0.4", "picomatch@^2.2.1": - "integrity" "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" - "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz" - "version" "2.3.0" - -"pify@^2.0.0": - "integrity" "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - "resolved" "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" - "version" "2.3.0" - -"pify@^2.2.0": - "integrity" "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - "resolved" "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" - "version" "2.3.0" - -"pify@^2.3.0": - "integrity" "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - "resolved" "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" - "version" "2.3.0" - -"pify@^3.0.0": - "integrity" "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - "resolved" "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" - "version" "3.0.0" - -"pify@^4.0.1": - "integrity" "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" - "resolved" "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" - "version" "4.0.1" - -"pinkie-promise@^2.0.0": - "integrity" "sha1-ITXW36ejWMBprJsXh3YogihFD/o=" - "resolved" "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "pinkie" "^2.0.0" - -"pinkie@^2.0.0": - "integrity" "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" - "resolved" "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" - "version" "2.0.4" - -"pkg-dir@^4.1.0": - "integrity" "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==" - "resolved" "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" - "version" "4.2.0" - dependencies: - "find-up" "^4.0.0" - -"platform@1.3.6": - "integrity" "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==" - "resolved" "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz" - "version" "1.3.6" - -"pnp-webpack-plugin@1.6.4": - "integrity" "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==" - "resolved" "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz" - "version" "1.6.4" - dependencies: - "ts-pnp" "^1.1.6" - -"polished@^3.6.5": - "integrity" "sha512-VwhC9MlhW7O5dg/z7k32dabcAFW1VI2+7fSe8cE/kXcfL7mVdoa5UxciYGW2sJU78ldDLT6+ROEKIZKFNTnUXQ==" - "resolved" "https://registry.npmjs.org/polished/-/polished-3.6.5.tgz" - "version" "3.6.5" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + +path-browserify@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz" + integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pbkdf2@^3.0.3: + version "3.1.2" + resolved "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz" + integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.3.0" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz" + integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== + +pify@^2.0.0, pify@^2.2.0, pify@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +platform@1.3.6: + version "1.3.6" + resolved "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz" + integrity sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg== + +pnp-webpack-plugin@1.6.4: + version "1.6.4" + resolved "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz" + integrity sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg== + dependencies: + ts-pnp "^1.1.6" + +polished@^3.6.5: + version "3.6.5" + resolved "https://registry.npmjs.org/polished/-/polished-3.6.5.tgz" + integrity sha512-VwhC9MlhW7O5dg/z7k32dabcAFW1VI2+7fSe8cE/kXcfL7mVdoa5UxciYGW2sJU78ldDLT6+ROEKIZKFNTnUXQ== dependencies: "@babel/runtime" "^7.9.2" -"posix-character-classes@^0.1.0": - "integrity" "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" - "resolved" "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz" - "version" "0.1.1" - -"postcss-value-parser@^4.0.2": - "integrity" "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" - "resolved" "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz" - "version" "4.1.0" - -"postcss@8.2.15": - "integrity" "sha512-2zO3b26eJD/8rb106Qu2o7Qgg52ND5HPjcyQiK2B98O388h43A448LCslC0dI2P97wCAQRJsFvwTRcXxTKds+Q==" - "resolved" "https://registry.npmjs.org/postcss/-/postcss-8.2.15.tgz" - "version" "8.2.15" - dependencies: - "colorette" "^1.2.2" - "nanoid" "^3.1.23" - "source-map" "^0.6.1" - -"prepend-http@^1.0.1": - "integrity" "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" - "resolved" "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz" - "version" "1.0.4" - -"prepend-http@^2.0.0": - "integrity" "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" - "resolved" "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz" - "version" "2.0.0" - -"process-nextick-args@~2.0.0": - "integrity" "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - "resolved" "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" - "version" "2.0.1" - -"process@^0.11.10", "process@0.11.10": - "integrity" "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" - "resolved" "https://registry.npmjs.org/process/-/process-0.11.10.tgz" - "version" "0.11.10" - -"progress-stream@^2.0.0": - "integrity" "sha1-+sY6Cz0R3qy7CWmrzJOyFLzhntU=" - "resolved" "https://registry.npmjs.org/progress-stream/-/progress-stream-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "speedometer" "~1.0.0" - "through2" "~2.0.3" - -"prop-types-extra@^1.1.0": - "integrity" "sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew==" - "resolved" "https://registry.npmjs.org/prop-types-extra/-/prop-types-extra-1.1.1.tgz" - "version" "1.1.1" - dependencies: - "react-is" "^16.3.2" - "warning" "^4.0.0" - -"prop-types@^15.5.6", "prop-types@^15.5.8", "prop-types@^15.6.0", "prop-types@^15.6.2", "prop-types@^15.7.2": - "integrity" "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==" - "resolved" "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz" - "version" "15.7.2" - dependencies: - "loose-envify" "^1.4.0" - "object-assign" "^4.1.1" - "react-is" "^16.8.1" - -"property-information@^5.0.0": - "integrity" "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==" - "resolved" "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz" - "version" "5.6.0" - dependencies: - "xtend" "^4.0.0" - -"proto-list@~1.2.1": - "integrity" "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=" - "resolved" "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz" - "version" "1.2.4" - -"pseudomap@^1.0.2": - "integrity" "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - "resolved" "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz" - "version" "1.0.2" - -"public-encrypt@^4.0.0": - "integrity" "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==" - "resolved" "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz" - "version" "4.0.3" - dependencies: - "bn.js" "^4.1.0" - "browserify-rsa" "^4.0.0" - "create-hash" "^1.1.0" - "parse-asn1" "^5.0.0" - "randombytes" "^2.0.1" - "safe-buffer" "^5.1.2" - -"pump@^3.0.0": - "integrity" "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==" - "resolved" "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "end-of-stream" "^1.1.0" - "once" "^1.3.1" - -"punycode@^1.2.4": - "integrity" "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - "resolved" "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz" - "version" "1.4.1" - -"punycode@^2.1.0": - "integrity" "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" - "version" "2.1.1" - -"punycode@1.3.2": - "integrity" "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - "resolved" "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz" - "version" "1.3.2" - -"query-string@^4.2.2": - "integrity" "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=" - "resolved" "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz" - "version" "4.3.4" - dependencies: - "object-assign" "^4.1.0" - "strict-uri-encode" "^1.0.0" - -"query-string@^5.0.1": - "integrity" "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==" - "resolved" "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz" - "version" "5.1.1" - dependencies: - "decode-uri-component" "^0.2.0" - "object-assign" "^4.1.0" - "strict-uri-encode" "^1.0.0" - -"querystring-es3@^0.2.0", "querystring-es3@0.2.1": - "integrity" "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" - "resolved" "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz" - "version" "0.2.1" - -"querystring@^0.2.0": - "integrity" "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==" - "resolved" "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz" - "version" "0.2.1" - -"querystring@0.2.0": - "integrity" "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" - "resolved" "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz" - "version" "0.2.0" - -"querystringify@^2.1.1": - "integrity" "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - "resolved" "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz" - "version" "2.2.0" - -"queue@6.0.2": - "integrity" "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==" - "resolved" "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz" - "version" "6.0.2" - dependencies: - "inherits" "~2.0.3" - -"randombytes@^2.0.0", "randombytes@^2.0.1", "randombytes@^2.0.5": - "integrity" "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==" - "resolved" "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "safe-buffer" "^5.1.0" - -"randomfill@^1.0.3": - "integrity" "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==" - "resolved" "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "randombytes" "^2.0.5" - "safe-buffer" "^5.1.0" - -"raw-body@2.4.1": - "integrity" "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==" - "resolved" "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz" - "version" "2.4.1" - dependencies: - "bytes" "3.1.0" - "http-errors" "1.7.3" - "iconv-lite" "0.4.24" - "unpipe" "1.0.0" - -"raw-loader@^2.0.0": - "integrity" "sha512-kZnO5MoIyrojfrPWqrhFNLZemIAX8edMOCp++yC5RKxzFB3m92DqKNhKlU6+FvpOhWtvyh3jOaD7J6/9tpdIKg==" - "resolved" "https://registry.npmjs.org/raw-loader/-/raw-loader-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "loader-utils" "^1.1.0" - "schema-utils" "^1.0.0" - -"react-bootstrap@^1.0.1": - "integrity" "sha512-xMHwsvDN7sIv26P9wWiosWjITZije2dRCjEJHVfV2KFoSJY+8uv2zttEw0XMB7xviQcW3zuIGLJXuj8vf6lYEg==" - "resolved" "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-1.0.1.tgz" - "version" "1.0.1" +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +postcss-value-parser@^4.0.2: + version "4.1.0" + resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz" + integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== + +postcss@8.2.15: + version "8.2.15" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.2.15.tgz" + integrity sha512-2zO3b26eJD/8rb106Qu2o7Qgg52ND5HPjcyQiK2B98O388h43A448LCslC0dI2P97wCAQRJsFvwTRcXxTKds+Q== + dependencies: + colorette "^1.2.2" + nanoid "^3.1.23" + source-map "^0.6.1" + +prepend-http@^1.0.1: + version "1.0.4" + resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz" + integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@0.11.10, process@^0.11.10: + version "0.11.10" + resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +progress-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/progress-stream/-/progress-stream-2.0.0.tgz" + integrity sha1-+sY6Cz0R3qy7CWmrzJOyFLzhntU= + dependencies: + speedometer "~1.0.0" + through2 "~2.0.3" + +prop-types-extra@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/prop-types-extra/-/prop-types-extra-1.1.1.tgz" + integrity sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew== + dependencies: + react-is "^16.3.2" + warning "^4.0.0" + +prop-types@^15.5.6, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2: + version "15.7.2" + resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz" + integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.8.1" + +property-information@^5.0.0: + version "5.6.0" + resolved "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz" + integrity sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA== + dependencies: + xtend "^4.0.0" + +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz" + integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.2.4: + version "1.4.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +query-string@^4.2.2: + version "4.3.4" + resolved "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz" + integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= + dependencies: + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +query-string@^5.0.1: + version "5.1.1" + resolved "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz" + integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== + dependencies: + decode-uri-component "^0.2.0" + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +querystring-es3@0.2.1, querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +querystring@^0.2.0: + version "0.2.1" + resolved "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz" + integrity sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg== + +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + +queue@6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz" + integrity sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA== + dependencies: + inherits "~2.0.3" + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: + version "2.1.0" + resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +raw-body@2.4.1: + version "2.4.1" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz" + integrity sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA== + dependencies: + bytes "3.1.0" + http-errors "1.7.3" + iconv-lite "0.4.24" + unpipe "1.0.0" + +raw-loader@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/raw-loader/-/raw-loader-2.0.0.tgz" + integrity sha512-kZnO5MoIyrojfrPWqrhFNLZemIAX8edMOCp++yC5RKxzFB3m92DqKNhKlU6+FvpOhWtvyh3jOaD7J6/9tpdIKg== + dependencies: + loader-utils "^1.1.0" + schema-utils "^1.0.0" + +react-bootstrap@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-1.0.1.tgz" + integrity sha512-xMHwsvDN7sIv26P9wWiosWjITZije2dRCjEJHVfV2KFoSJY+8uv2zttEw0XMB7xviQcW3zuIGLJXuj8vf6lYEg== dependencies: "@babel/runtime" "^7.4.2" "@restart/context" "^2.1.4" "@restart/hooks" "^0.3.21" "@types/react" "^16.9.23" - "classnames" "^2.2.6" - "dom-helpers" "^5.1.2" - "invariant" "^2.2.4" - "prop-types" "^15.7.2" - "prop-types-extra" "^1.1.0" - "react-overlays" "^3.1.2" - "react-transition-group" "^4.0.0" - "uncontrollable" "^7.0.0" - "warning" "^4.0.3" - -"react-countdown@^2.2.1": - "integrity" "sha512-e8dUUhlysDqgci32VOOe0uDfeDMaiyyFNrWHdmMky5fithYDt4iOJa22EF96VbkU64R4D+Bww4AbLpqA/J4dww==" - "resolved" "https://registry.npmjs.org/react-countdown/-/react-countdown-2.2.1.tgz" - "version" "2.2.1" - dependencies: - "prop-types" "^15.7.2" - -"react-dom@^17.0.2": - "integrity" "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==" - "resolved" "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz" - "version" "17.0.2" - dependencies: - "loose-envify" "^1.1.0" - "object-assign" "^4.1.1" - "scheduler" "^0.20.2" - -"react-fast-compare@^3.0.1", "react-fast-compare@^3.1.1": - "integrity" "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" - "resolved" "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz" - "version" "3.2.0" - -"react-gravatar@^2.6.3": - "integrity" "sha1-VAfrash+gw4qNN63YNKkxATrHaw=" - "resolved" "https://registry.npmjs.org/react-gravatar/-/react-gravatar-2.6.3.tgz" - "version" "2.6.3" - dependencies: - "is-retina" "^1.0.3" - "md5" "^2.1.0" - "query-string" "^4.2.2" - -"react-gtm-module@^2.0.11": - "integrity" "sha512-8gyj4TTxeP7eEyc2QKawEuQoAZdjKvMY4pgWfycGmqGByhs17fR+zEBs0JUDq4US/l+vbTl+6zvUIx27iDo/Vw==" - "resolved" "https://registry.npmjs.org/react-gtm-module/-/react-gtm-module-2.0.11.tgz" - "version" "2.0.11" - -"react-helmet@^6.1.0": - "integrity" "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==" - "resolved" "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz" - "version" "6.1.0" - dependencies: - "object-assign" "^4.1.1" - "prop-types" "^15.7.2" - "react-fast-compare" "^3.1.1" - "react-side-effect" "^2.1.0" - -"react-icons@^3.10.0": - "integrity" "sha512-WsQ5n1JToG9VixWilSo1bHv842Cj5aZqTGiS3Ud47myF6aK7S/IUY2+dHcBdmkQcCFRuHsJ9OMUI0kTDfjyZXQ==" - "resolved" "https://registry.npmjs.org/react-icons/-/react-icons-3.10.0.tgz" - "version" "3.10.0" - dependencies: - "camelcase" "^5.0.0" - -"react-input-autosize@^2.2.2": - "integrity" "sha512-jQJgYCA3S0j+cuOwzuCd1OjmBmnZLdqQdiLKRYrsMMzbjUrVDS5RvJUDwJqA7sKuksDuzFtm6hZGKFu7Mjk5aw==" - "resolved" "https://registry.npmjs.org/react-input-autosize/-/react-input-autosize-2.2.2.tgz" - "version" "2.2.2" - dependencies: - "prop-types" "^15.5.8" - -"react-is@^16.3.2": - "integrity" "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - "resolved" "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" - "version" "16.13.1" - -"react-is@^16.7.0": - "integrity" "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - "resolved" "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" - "version" "16.13.1" - -"react-is@^16.8.1": - "integrity" "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - "resolved" "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" - "version" "16.13.1" - -"react-is@^17.0.2", "react-is@17.0.2": - "integrity" "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" - "resolved" "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz" - "version" "17.0.2" - -"react-lifecycles-compat@^3.0.4": - "integrity" "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - "resolved" "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz" - "version" "3.0.4" - -"react-overlays@^3.1.2": - "integrity" "sha512-YTgCmw6l4uBOYylSnc3V8WLX+A0EoGnzDrqkYz0K7MUKbMBZFpaxLXH4EF9eZbspd+syZHQ5XAABI7n/zak1EA==" - "resolved" "https://registry.npmjs.org/react-overlays/-/react-overlays-3.2.0.tgz" - "version" "3.2.0" + classnames "^2.2.6" + dom-helpers "^5.1.2" + invariant "^2.2.4" + prop-types "^15.7.2" + prop-types-extra "^1.1.0" + react-overlays "^3.1.2" + react-transition-group "^4.0.0" + uncontrollable "^7.0.0" + warning "^4.0.3" + +react-countdown@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/react-countdown/-/react-countdown-2.2.1.tgz" + integrity sha512-e8dUUhlysDqgci32VOOe0uDfeDMaiyyFNrWHdmMky5fithYDt4iOJa22EF96VbkU64R4D+Bww4AbLpqA/J4dww== + dependencies: + prop-types "^15.7.2" + +react-dom@^17.0.2: + version "17.0.2" + resolved "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz" + integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + scheduler "^0.20.2" + +react-fast-compare@^3.0.1, react-fast-compare@^3.1.1: + version "3.2.0" + resolved "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz" + integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA== + +react-gravatar@^2.6.3: + version "2.6.3" + resolved "https://registry.npmjs.org/react-gravatar/-/react-gravatar-2.6.3.tgz" + integrity sha1-VAfrash+gw4qNN63YNKkxATrHaw= + dependencies: + is-retina "^1.0.3" + md5 "^2.1.0" + query-string "^4.2.2" + +react-gtm-module@^2.0.11: + version "2.0.11" + resolved "https://registry.npmjs.org/react-gtm-module/-/react-gtm-module-2.0.11.tgz" + integrity sha512-8gyj4TTxeP7eEyc2QKawEuQoAZdjKvMY4pgWfycGmqGByhs17fR+zEBs0JUDq4US/l+vbTl+6zvUIx27iDo/Vw== + +react-helmet@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz" + integrity sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw== + dependencies: + object-assign "^4.1.1" + prop-types "^15.7.2" + react-fast-compare "^3.1.1" + react-side-effect "^2.1.0" + +react-icons@^3.10.0: + version "3.10.0" + resolved "https://registry.npmjs.org/react-icons/-/react-icons-3.10.0.tgz" + integrity sha512-WsQ5n1JToG9VixWilSo1bHv842Cj5aZqTGiS3Ud47myF6aK7S/IUY2+dHcBdmkQcCFRuHsJ9OMUI0kTDfjyZXQ== + dependencies: + camelcase "^5.0.0" + +react-input-autosize@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/react-input-autosize/-/react-input-autosize-3.0.0.tgz#6b5898c790d4478d69420b55441fcc31d5c50a85" + integrity sha512-nL9uS7jEs/zu8sqwFE5MAPx6pPkNAriACQ2rGLlqmKr2sPGtN7TXTyDdQt4lbNXVx7Uzadb40x8qotIuru6Rhg== + dependencies: + prop-types "^15.5.8" + +react-is@17.0.2, react-is@^17.0.2: + version "17.0.2" + resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz" + integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== + +react-is@^16.3.2, react-is@^16.7.0, react-is@^16.8.1: + version "16.13.1" + resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-lifecycles-compat@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz" + integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== + +react-overlays@^3.1.2: + version "3.2.0" + resolved "https://registry.npmjs.org/react-overlays/-/react-overlays-3.2.0.tgz" + integrity sha512-YTgCmw6l4uBOYylSnc3V8WLX+A0EoGnzDrqkYz0K7MUKbMBZFpaxLXH4EF9eZbspd+syZHQ5XAABI7n/zak1EA== dependencies: "@babel/runtime" "^7.4.5" "@popperjs/core" "^2.0.0" "@restart/hooks" "^0.3.12" "@types/warning" "^3.0.0" - "dom-helpers" "^5.1.0" - "prop-types" "^15.7.2" - "uncontrollable" "^7.0.0" - "warning" "^4.0.3" - -"react-player@^2.3.1": - "integrity" "sha512-KT5u7rZ5DB40wcs5kVl5pNzdow6eK+gSrwCM0HilgF8O85dYPFqw7nhtz3hUEyUr3VhEWbeTOrsyEf1YrNZdOA==" - "resolved" "https://registry.npmjs.org/react-player/-/react-player-2.3.1.tgz" - "version" "2.3.1" - dependencies: - "deepmerge" "^4.0.0" - "load-script" "^1.0.0" - "memoize-one" "^5.1.1" - "prop-types" "^15.7.2" - "react-fast-compare" "^3.0.1" - -"react-refresh@0.8.3": - "integrity" "sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg==" - "resolved" "https://registry.npmjs.org/react-refresh/-/react-refresh-0.8.3.tgz" - "version" "0.8.3" - -"react-select@^3.1.0": - "integrity" "sha512-wBFVblBH1iuCBprtpyGtd1dGMadsG36W5/t2Aj8OE6WbByDg5jIFyT7X5gT+l0qmT5TqWhxX+VsKJvCEl2uL9g==" - "resolved" "https://registry.npmjs.org/react-select/-/react-select-3.1.0.tgz" - "version" "3.1.0" + dom-helpers "^5.1.0" + prop-types "^15.7.2" + uncontrollable "^7.0.0" + warning "^4.0.3" + +react-player@^2.3.1: + version "2.9.0" + resolved "https://registry.yarnpkg.com/react-player/-/react-player-2.9.0.tgz#ef7fe7073434087565f00ff219824e1e02c4b046" + integrity sha512-jNUkTfMmUhwPPAktAdIqiBcVUKsFKrVGH6Ocutj6535CNfM91yrvWxHg6fvIX8Y/fjYUPoejddwh7qboNV9vGA== + dependencies: + deepmerge "^4.0.0" + load-script "^1.0.0" + memoize-one "^5.1.1" + prop-types "^15.7.2" + react-fast-compare "^3.0.1" + +react-refresh@0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.8.3.tgz#721d4657672d400c5e3c75d063c4a85fb2d5d68f" + integrity sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg== + +react-select@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/react-select/-/react-select-3.2.0.tgz#de9284700196f5f9b5277c5d850a9ce85f5c72fe" + integrity sha512-B/q3TnCZXEKItO0fFN/I0tWOX3WJvi/X2wtdffmwSQVRwg5BpValScTO1vdic9AxlUgmeSzib2hAZAwIUQUZGQ== dependencies: "@babel/runtime" "^7.4.4" "@emotion/cache" "^10.0.9" "@emotion/core" "^10.0.9" "@emotion/css" "^10.0.9" - "memoize-one" "^5.0.0" - "prop-types" "^15.6.0" - "react-input-autosize" "^2.2.2" - "react-transition-group" "^4.3.0" - -"react-side-effect@^2.1.0": - "integrity" "sha512-2FoTQzRNTncBVtnzxFOk2mCpcfxQpenBMbk5kSVBg5UcPqV9fRbgY2zhb7GTWWOlpFmAxhClBDlIq8Rsubz1yQ==" - "resolved" "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.1.tgz" - "version" "2.1.1" - -"react-slick@^0.26.1": - "integrity" "sha512-IQVRSkikG2w5bkz+m9Ing5zZIuM9cI+qJyXG2o6PXHKj8GFcsMCJoTBADwyLSsVT8dHcZ8MZ0dsxq0i0CKIq+Q==" - "resolved" "https://registry.npmjs.org/react-slick/-/react-slick-0.26.1.tgz" - "version" "0.26.1" - dependencies: - "classnames" "^2.2.5" - "enquire.js" "^2.1.6" - "json2mq" "^0.2.0" - "lodash.debounce" "^4.0.8" - "resize-observer-polyfill" "^1.5.0" - -"react-transition-group@^4.0.0", "react-transition-group@^4.3.0": - "integrity" "sha512-Djqr7OQ2aPUiYurhPalTrVy9ddmFCCzwhqQmtN+J3+3DzLO209Fdr70QrN8Z3DsglWql6iY1lDWAfpFiBtuKGw==" - "resolved" "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.1.tgz" - "version" "4.4.1" + memoize-one "^5.0.0" + prop-types "^15.6.0" + react-input-autosize "^3.0.0" + react-transition-group "^4.3.0" + +react-side-effect@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-2.1.1.tgz#66c5701c3e7560ab4822a4ee2742dee215d72eb3" + integrity sha512-2FoTQzRNTncBVtnzxFOk2mCpcfxQpenBMbk5kSVBg5UcPqV9fRbgY2zhb7GTWWOlpFmAxhClBDlIq8Rsubz1yQ== + +react-slick@^0.26.1: + version "0.26.1" + resolved "https://registry.yarnpkg.com/react-slick/-/react-slick-0.26.1.tgz#42d6b9bfdf3a16e4e4609a6c6536957f8acde7d9" + integrity sha512-IQVRSkikG2w5bkz+m9Ing5zZIuM9cI+qJyXG2o6PXHKj8GFcsMCJoTBADwyLSsVT8dHcZ8MZ0dsxq0i0CKIq+Q== + dependencies: + classnames "^2.2.5" + enquire.js "^2.1.6" + json2mq "^0.2.0" + lodash.debounce "^4.0.8" + resize-observer-polyfill "^1.5.0" + +react-transition-group@^4.0.0, react-transition-group@^4.3.0: + version "4.4.2" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.2.tgz#8b59a56f09ced7b55cbd53c36768b922890d5470" + integrity sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg== dependencies: "@babel/runtime" "^7.5.5" - "dom-helpers" "^5.0.1" - "loose-envify" "^1.4.0" - "prop-types" "^15.6.2" - -"react@^17.0.2": - "integrity" "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==" - "resolved" "https://registry.npmjs.org/react/-/react-17.0.2.tgz" - "version" "17.0.2" - dependencies: - "loose-envify" "^1.1.0" - "object-assign" "^4.1.1" - -"react@17.0.1": - "integrity" "sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w==" - "resolved" "https://registry.npmjs.org/react/-/react-17.0.1.tgz" - "version" "17.0.1" - dependencies: - "loose-envify" "^1.1.0" - "object-assign" "^4.1.1" - -"read-pkg-up@^1.0.1": - "integrity" "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=" - "resolved" "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "find-up" "^1.0.0" - "read-pkg" "^1.0.0" - -"read-pkg@^1.0.0": - "integrity" "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=" - "resolved" "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "load-json-file" "^1.0.0" - "normalize-package-data" "^2.3.2" - "path-type" "^1.0.0" - -"readable-stream@^2.0.0", "readable-stream@^2.0.2", "readable-stream@^2.3.0", "readable-stream@^2.3.3", "readable-stream@^2.3.5", "readable-stream@^2.3.6", "readable-stream@~2.3.6": - "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" - "version" "2.3.7" - dependencies: - "core-util-is" "~1.0.0" - "inherits" "~2.0.3" - "isarray" "~1.0.0" - "process-nextick-args" "~2.0.0" - "safe-buffer" "~5.1.1" - "string_decoder" "~1.1.1" - "util-deprecate" "~1.0.1" - -"readable-stream@^3.0.0": - "integrity" "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" - "version" "3.6.0" - dependencies: - "inherits" "^2.0.3" - "string_decoder" "^1.1.1" - "util-deprecate" "^1.0.1" - -"readable-stream@^3.5.0": - "integrity" "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" - "version" "3.6.0" - dependencies: - "inherits" "^2.0.3" - "string_decoder" "^1.1.1" - "util-deprecate" "^1.0.1" - -"readable-stream@^3.6.0": - "integrity" "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" - "version" "3.6.0" - dependencies: - "inherits" "^2.0.3" - "string_decoder" "^1.1.1" - "util-deprecate" "^1.0.1" - -"readdirp@~3.5.0": - "integrity" "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==" - "resolved" "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz" - "version" "3.5.0" - dependencies: - "picomatch" "^2.2.1" - -"redent@^1.0.0": - "integrity" "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=" - "resolved" "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "indent-string" "^2.1.0" - "strip-indent" "^1.0.1" - -"regenerator-runtime@^0.13.4": - "integrity" "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" - "resolved" "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz" - "version" "0.13.5" - -"regex-not@^1.0.0", "regex-not@^1.0.2": - "integrity" "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==" - "resolved" "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "extend-shallow" "^3.0.2" - "safe-regex" "^1.1.0" - -"remark-html@^13.0.1": - "integrity" "sha512-K5KQCXWVz+harnyC+UVM/J9eJWCgjYRqFeZoZf2NgP0iFbuuw/RgMZv3MA34b/OEpGnstl3oiOUtZzD3tJ+CBw==" - "resolved" "https://registry.npmjs.org/remark-html/-/remark-html-13.0.1.tgz" - "version" "13.0.1" - dependencies: - "hast-util-sanitize" "^3.0.0" - "hast-util-to-html" "^7.0.0" - "mdast-util-to-hast" "^10.0.0" - -"remark-parse@^9.0.0": - "integrity" "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==" - "resolved" "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz" - "version" "9.0.0" - dependencies: - "mdast-util-from-markdown" "^0.8.0" - -"remark-stringify@^9.0.0": - "integrity" "sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==" - "resolved" "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.1.tgz" - "version" "9.0.1" - dependencies: - "mdast-util-to-markdown" "^0.6.0" - -"remark@^13.0.0": - "integrity" "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==" - "resolved" "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz" - "version" "13.0.0" - dependencies: - "remark-parse" "^9.0.0" - "remark-stringify" "^9.0.0" - "unified" "^9.1.0" - -"repeat-element@^1.1.2": - "integrity" "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" - "resolved" "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz" - "version" "1.1.3" - -"repeat-string@^1.0.0", "repeat-string@^1.6.1": - "integrity" "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" - "resolved" "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" - "version" "1.6.1" - -"repeating@^2.0.0": - "integrity" "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=" - "resolved" "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "is-finite" "^1.0.0" - -"replace-ext@^1.0.0": - "integrity" "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==" - "resolved" "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz" - "version" "1.0.1" - -"requires-port@^1.0.0": - "integrity" "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" - "resolved" "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" - "version" "1.0.0" - -"resize-observer-polyfill@^1.5.0": - "integrity" "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" - "resolved" "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz" - "version" "1.5.1" - -"resolve-from@^4.0.0": - "integrity" "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" - "version" "4.0.0" - -"resolve-url@^0.2.1": - "integrity" "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" - "resolved" "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz" - "version" "0.2.1" - -"resolve@^1.10.0", "resolve@^1.12.0": - "integrity" "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==" - "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz" - "version" "1.17.0" - dependencies: - "path-parse" "^1.0.6" - -"responselike@1.0.2": - "integrity" "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=" - "resolved" "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "lowercase-keys" "^1.0.0" - -"responsive-loader@^2.3.0": - "integrity" "sha512-8GyyasTKdOfTMDvYy/mBpyV2EM7hz7zWoKdxpocA60eX1jM2udsb+ji03haZWeGnTkQvOplXVqHsev9952dWng==" - "resolved" "https://registry.npmjs.org/responsive-loader/-/responsive-loader-2.3.0.tgz" - "version" "2.3.0" - dependencies: - "loader-utils" "^2.0.0" - "schema-utils" "^3.0.0" - -"ret@~0.1.10": - "integrity" "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" - "resolved" "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz" - "version" "0.1.15" - -"rimraf@^2.5.4": - "integrity" "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==" - "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" - "version" "2.7.1" - dependencies: - "glob" "^7.1.3" - -"ripemd160@^2.0.0", "ripemd160@^2.0.1": - "integrity" "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==" - "resolved" "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "hash-base" "^3.0.0" - "inherits" "^2.0.1" - -"rxjs@^6.5.3": - "integrity" "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==" - "resolved" "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" - "version" "6.6.7" - dependencies: - "tslib" "^1.9.0" - -"safe-buffer@^5.0.1", "safe-buffer@^5.1.0", "safe-buffer@^5.1.1", "safe-buffer@^5.1.2", "safe-buffer@~5.1.0", "safe-buffer@~5.1.1", "safe-buffer@5.1.2": - "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - "version" "5.1.2" - -"safe-buffer@^5.2.0": - "integrity" "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - "version" "5.2.1" - -"safe-buffer@~5.2.0": - "integrity" "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - "version" "5.2.1" - -"safe-regex@^1.1.0": - "integrity" "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=" - "resolved" "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "ret" "~0.1.10" - -"safer-buffer@^2.1.0", "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": - "integrity" "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - "resolved" "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" - "version" "2.1.2" - -"same-origin@^0.1.1": - "integrity" "sha1-wih9MZJXffUXrLvW0UUanDw5FPU=" - "resolved" "https://registry.npmjs.org/same-origin/-/same-origin-0.1.1.tgz" - "version" "0.1.1" - -"sass@^1.26.9": - "integrity" "sha512-t8AkRVi+xvba4yZiLWkJdgJHBFCB3Dh4johniQkPy9ywkgFHNasXFEFP+RG/F6LhQ+aoE4aX+IorIWQjS0esVw==" - "resolved" "https://registry.npmjs.org/sass/-/sass-1.26.9.tgz" - "version" "1.26.9" - dependencies: - "chokidar" ">=2.0.0 <4.0.0" - -"scheduler@^0.20.2": - "integrity" "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==" - "resolved" "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz" - "version" "0.20.2" + dom-helpers "^5.0.1" + loose-envify "^1.4.0" + prop-types "^15.6.2" + +react@17.0.1: + version "17.0.1" + resolved "https://registry.npmjs.org/react/-/react-17.0.1.tgz" + integrity sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +react@^17.0.2: + version "17.0.2" + resolved "https://registry.npmjs.org/react/-/react-17.0.2.tgz" + integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz" + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.0, readable-stream@^3.5.0, readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + dependencies: + picomatch "^2.2.1" + +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz" + integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + +regenerator-runtime@^0.13.4: + version "0.13.5" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz" + integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +remark-html@^13.0.1: + version "13.0.1" + resolved "https://registry.npmjs.org/remark-html/-/remark-html-13.0.1.tgz" + integrity sha512-K5KQCXWVz+harnyC+UVM/J9eJWCgjYRqFeZoZf2NgP0iFbuuw/RgMZv3MA34b/OEpGnstl3oiOUtZzD3tJ+CBw== + dependencies: + hast-util-sanitize "^3.0.0" + hast-util-to-html "^7.0.0" + mdast-util-to-hast "^10.0.0" + +remark-parse@^9.0.0: + version "9.0.0" + resolved "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz" + integrity sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw== + dependencies: + mdast-util-from-markdown "^0.8.0" + +remark-stringify@^9.0.0: + version "9.0.1" + resolved "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.1.tgz" + integrity sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg== + dependencies: + mdast-util-to-markdown "^0.6.0" + +remark@^13.0.0: + version "13.0.0" + resolved "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz" + integrity sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA== + dependencies: + remark-parse "^9.0.0" + remark-stringify "^9.0.0" + unified "^9.1.0" + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + +repeat-string@^1.0.0, repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= + dependencies: + is-finite "^1.0.0" + +replace-ext@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz" + integrity sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +resize-observer-polyfill@^1.5.0: + version "1.5.1" + resolved "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz" + integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^1.10.0, resolve@^1.12.0: + version "1.17.0" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +responselike@1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz" + integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + dependencies: + lowercase-keys "^1.0.0" + +responsive-loader@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/responsive-loader/-/responsive-loader-2.3.0.tgz" + integrity sha512-8GyyasTKdOfTMDvYy/mBpyV2EM7hz7zWoKdxpocA60eX1jM2udsb+ji03haZWeGnTkQvOplXVqHsev9952dWng== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rxjs@^6.5.3: + version "6.6.7" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" + integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== dependencies: - "loose-envify" "^1.1.0" - "object-assign" "^4.1.1" + tslib "^1.9.0" + +safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.1.0: + version "2.1.2" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +same-origin@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/same-origin/-/same-origin-0.1.1.tgz" + integrity sha1-wih9MZJXffUXrLvW0UUanDw5FPU= + +sass@^1.26.9: + version "1.26.9" + resolved "https://registry.npmjs.org/sass/-/sass-1.26.9.tgz" + integrity sha512-t8AkRVi+xvba4yZiLWkJdgJHBFCB3Dh4johniQkPy9ywkgFHNasXFEFP+RG/F6LhQ+aoE4aX+IorIWQjS0esVw== + dependencies: + chokidar ">=2.0.0 <4.0.0" + +scheduler@^0.20.2: + version "0.20.2" + resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz" + integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" -"schema-utils@^1.0.0": - "integrity" "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==" - "resolved" "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz" - "version" "1.0.0" +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== dependencies: - "ajv" "^6.1.0" - "ajv-errors" "^1.0.0" - "ajv-keywords" "^3.1.0" + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" -"schema-utils@^3.0.0": - "integrity" "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==" - "resolved" "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz" - "version" "3.0.0" +schema-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz" + integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA== dependencies: "@types/json-schema" "^7.0.6" - "ajv" "^6.12.5" - "ajv-keywords" "^3.5.2" - -"scriptjs@^2.5.7": - "integrity" "sha512-qGVDoreyYiP1pkQnbnFAUIS5AjenNwwQBdl7zeos9etl+hYKWahjRTfzAZZYBv5xNHx7vNKCmaLDQZ6Fr2AEXg==" - "resolved" "https://registry.npmjs.org/scriptjs/-/scriptjs-2.5.9.tgz" - "version" "2.5.9" - -"section-matter@^1.0.0": - "integrity" "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==" - "resolved" "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "extend-shallow" "^2.0.1" - "kind-of" "^6.0.0" - -"seek-bzip@^1.0.5": - "integrity" "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=" - "resolved" "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz" - "version" "1.0.5" - dependencies: - "commander" "~2.8.1" - -"semver-regex@^2.0.0": - "integrity" "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==" - "resolved" "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz" - "version" "2.0.0" - -"semver-truncate@^1.1.2": - "integrity" "sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=" - "resolved" "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz" - "version" "1.1.2" - dependencies: - "semver" "^5.3.0" - -"semver@^5.3.0", "semver@^5.5.0", "semver@^5.6.0", "semver@2 || 3 || 4 || 5": - "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" - "version" "5.7.1" - -"semver@^6.0.0": - "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" - "version" "6.3.0" - -"set-value@^2.0.0", "set-value@^2.0.1": - "integrity" "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==" - "resolved" "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "extend-shallow" "^2.0.1" - "is-extendable" "^0.1.1" - "is-plain-object" "^2.0.3" - "split-string" "^3.0.1" - -"setimmediate@^1.0.4": - "integrity" "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - "resolved" "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" - "version" "1.0.5" - -"setprototypeof@1.1.1": - "integrity" "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - "resolved" "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz" - "version" "1.1.1" - -"sha.js@^2.4.0", "sha.js@^2.4.8": - "integrity" "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==" - "resolved" "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz" - "version" "2.4.11" - dependencies: - "inherits" "^2.0.1" - "safe-buffer" "^5.0.1" - -"shallowequal@^1.1.0": - "integrity" "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" - "resolved" "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz" - "version" "1.1.0" - -"shebang-command@^1.2.0": - "integrity" "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=" - "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "shebang-regex" "^1.0.0" - -"shebang-command@^2.0.0": - "integrity" "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==" - "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "shebang-regex" "^3.0.0" - -"shebang-regex@^1.0.0": - "integrity" "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" - "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" - "version" "1.0.0" - -"shebang-regex@^3.0.0": - "integrity" "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" - "version" "3.0.0" - -"shell-quote@1.7.2": - "integrity" "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" - "resolved" "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz" - "version" "1.7.2" - -"side-channel@^1.0.4": - "integrity" "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==" - "resolved" "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "call-bind" "^1.0.0" - "get-intrinsic" "^1.0.2" - "object-inspect" "^1.9.0" - -"signal-exit@^3.0.0", "signal-exit@^3.0.2": - "integrity" "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - "resolved" "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz" - "version" "3.0.3" - -"simple-concat@^1.0.0": - "integrity" "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" - "resolved" "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" - "version" "1.0.1" - -"simple-get@^4.0.0": - "integrity" "sha512-ZalZGexYr3TA0SwySsr5HlgOOinS4Jsa8YB2GJ6lUNAazyAu4KG/VmzMTwAt2YVXzzVj8QmefmAonZIK2BSGcQ==" - "resolved" "https://registry.npmjs.org/simple-get/-/simple-get-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "decompress-response" "^6.0.0" - "once" "^1.3.1" - "simple-concat" "^1.0.0" - -"slash@^1.0.0": - "integrity" "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" - "resolved" "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz" - "version" "1.0.0" - -"slick-carousel@^1.8.1": - "integrity" "sha512-XB9Ftrf2EEKfzoQXt3Nitrt/IPbT+f1fgqBdoxO3W/+JYvtEOW6EgxnWfr9GH6nmULv7Y2tPmEX3koxThVmebA==" - "resolved" "https://registry.npmjs.org/slick-carousel/-/slick-carousel-1.8.1.tgz" - "version" "1.8.1" - -"snapdragon-node@^2.0.1": - "integrity" "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==" - "resolved" "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz" - "version" "2.1.1" - dependencies: - "define-property" "^1.0.0" - "isobject" "^3.0.0" - "snapdragon-util" "^3.0.1" - -"snapdragon-util@^3.0.1": - "integrity" "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==" - "resolved" "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "kind-of" "^3.2.0" - -"snapdragon@^0.8.1": - "integrity" "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==" - "resolved" "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz" - "version" "0.8.2" - dependencies: - "base" "^0.11.1" - "debug" "^2.2.0" - "define-property" "^0.2.5" - "extend-shallow" "^2.0.1" - "map-cache" "^0.2.2" - "source-map" "^0.5.6" - "source-map-resolve" "^0.5.0" - "use" "^3.1.0" - -"sort-keys-length@^1.0.0": - "integrity" "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=" - "resolved" "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "sort-keys" "^1.0.0" - -"sort-keys@^1.0.0": - "integrity" "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=" - "resolved" "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz" - "version" "1.1.2" - dependencies: - "is-plain-obj" "^1.0.0" - -"sort-keys@^2.0.0": - "integrity" "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=" - "resolved" "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "is-plain-obj" "^1.0.0" - -"source-map-resolve@^0.5.0": - "integrity" "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==" - "resolved" "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz" - "version" "0.5.3" - dependencies: - "atob" "^2.1.2" - "decode-uri-component" "^0.2.0" - "resolve-url" "^0.2.1" - "source-map-url" "^0.4.0" - "urix" "^0.1.0" - -"source-map-url@^0.4.0": - "integrity" "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" - "resolved" "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz" - "version" "0.4.0" - -"source-map@^0.5.0", "source-map@^0.5.6", "source-map@^0.5.7": - "integrity" "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" - "version" "0.5.7" - -"source-map@^0.6.1": - "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - "version" "0.6.1" - -"source-map@0.7.3": - "integrity" "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" - "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz" - "version" "0.7.3" - -"source-map@0.8.0-beta.0": - "integrity" "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==" - "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz" - "version" "0.8.0-beta.0" - dependencies: - "whatwg-url" "^7.0.0" - -"space-separated-tokens@^1.0.0": - "integrity" "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==" - "resolved" "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz" - "version" "1.1.5" - -"spdx-correct@^3.0.0": - "integrity" "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==" - "resolved" "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz" - "version" "3.1.1" - dependencies: - "spdx-expression-parse" "^3.0.0" - "spdx-license-ids" "^3.0.0" - -"spdx-exceptions@^2.1.0": - "integrity" "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" - "resolved" "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" - "version" "2.3.0" - -"spdx-expression-parse@^3.0.0": - "integrity" "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==" - "resolved" "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "spdx-exceptions" "^2.1.0" - "spdx-license-ids" "^3.0.0" - -"spdx-license-ids@^3.0.0": - "integrity" "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==" - "resolved" "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz" - "version" "3.0.5" - -"speedometer@~1.0.0": - "integrity" "sha1-zWccsGdSwivKM3Di8zREC+T8YuI=" - "resolved" "https://registry.npmjs.org/speedometer/-/speedometer-1.0.0.tgz" - "version" "1.0.0" - -"split-string@^3.0.1", "split-string@^3.0.2": - "integrity" "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==" - "resolved" "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "extend-shallow" "^3.0.0" - -"split2@^3.2.2": - "integrity" "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==" - "resolved" "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz" - "version" "3.2.2" - dependencies: - "readable-stream" "^3.0.0" - -"sprintf-js@~1.0.2": - "integrity" "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - "resolved" "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" - "version" "1.0.3" - -"squeak@^1.0.0": - "integrity" "sha1-MwRQN7ZDiLVnZ0uEMiplIQc5FsM=" - "resolved" "https://registry.npmjs.org/squeak/-/squeak-1.3.0.tgz" - "version" "1.3.0" - dependencies: - "chalk" "^1.0.0" - "console-stream" "^0.1.1" - "lpad-align" "^1.0.1" - -"stable@^0.1.8": - "integrity" "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" - "resolved" "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz" - "version" "0.1.8" - -"stacktrace-parser@0.1.10": - "integrity" "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==" - "resolved" "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz" - "version" "0.1.10" - dependencies: - "type-fest" "^0.7.1" - -"static-extend@^0.1.1": - "integrity" "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=" - "resolved" "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz" - "version" "0.1.2" - dependencies: - "define-property" "^0.2.5" - "object-copy" "^0.1.0" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +scriptjs@^2.5.7: + version "2.5.9" + resolved "https://registry.npmjs.org/scriptjs/-/scriptjs-2.5.9.tgz" + integrity sha512-qGVDoreyYiP1pkQnbnFAUIS5AjenNwwQBdl7zeos9etl+hYKWahjRTfzAZZYBv5xNHx7vNKCmaLDQZ6Fr2AEXg== + +section-matter@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz" + integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== + dependencies: + extend-shallow "^2.0.1" + kind-of "^6.0.0" + +seek-bzip@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz" + integrity sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w= + dependencies: + commander "~2.8.1" + +semver-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz" + integrity sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw== + +semver-truncate@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz" + integrity sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g= + dependencies: + semver "^5.3.0" + +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.0.0: + version "6.3.0" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shallowequal@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz" + integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@1.7.2: + version "1.7.2" + resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz" + integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.3" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/simple-get/-/simple-get-4.0.0.tgz" + integrity sha512-ZalZGexYr3TA0SwySsr5HlgOOinS4Jsa8YB2GJ6lUNAazyAu4KG/VmzMTwAt2YVXzzVj8QmefmAonZIK2BSGcQ== + dependencies: + decompress-response "^6.0.0" + once "^1.3.1" + simple-concat "^1.0.0" + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz" + integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= + +slick-carousel@^1.8.1: + version "1.8.1" + resolved "https://registry.npmjs.org/slick-carousel/-/slick-carousel-1.8.1.tgz" + integrity sha512-XB9Ftrf2EEKfzoQXt3Nitrt/IPbT+f1fgqBdoxO3W/+JYvtEOW6EgxnWfr9GH6nmULv7Y2tPmEX3koxThVmebA== + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +sort-keys-length@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz" + integrity sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg= + dependencies: + sort-keys "^1.0.0" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz" + integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= + dependencies: + is-plain-obj "^1.0.0" + +sort-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz" + integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg= + dependencies: + is-plain-obj "^1.0.0" + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@0.7.3: + version "0.7.3" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + +source-map@0.8.0-beta.0: + version "0.8.0-beta.0" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz" + integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA== + dependencies: + whatwg-url "^7.0.0" + +source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7: + version "0.5.7" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +space-separated-tokens@^1.0.0: + version "1.1.5" + resolved "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz" + integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.5" + resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz" + integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + +speedometer@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/speedometer/-/speedometer-1.0.0.tgz" + integrity sha1-zWccsGdSwivKM3Di8zREC+T8YuI= + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +split2@^3.2.2: + version "3.2.2" + resolved "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz" + integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== + dependencies: + readable-stream "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +squeak@^1.0.0: + version "1.3.0" + resolved "https://registry.npmjs.org/squeak/-/squeak-1.3.0.tgz" + integrity sha1-MwRQN7ZDiLVnZ0uEMiplIQc5FsM= + dependencies: + chalk "^1.0.0" + console-stream "^0.1.1" + lpad-align "^1.0.1" + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + +stacktrace-parser@0.1.10: + version "0.1.10" + resolved "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz" + integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== + dependencies: + type-fest "^0.7.1" + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" "statuses@>= 1.5.0 < 2": - "integrity" "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - "resolved" "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" - "version" "1.5.0" - -"stream-browserify@^2.0.1": - "integrity" "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==" - "resolved" "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "inherits" "~2.0.1" - "readable-stream" "^2.0.2" - -"stream-browserify@3.0.0": - "integrity" "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==" - "resolved" "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "inherits" "~2.0.4" - "readable-stream" "^3.5.0" - -"stream-http@^2.7.2": - "integrity" "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==" - "resolved" "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz" - "version" "2.8.3" - dependencies: - "builtin-status-codes" "^3.0.0" - "inherits" "^2.0.1" - "readable-stream" "^2.3.6" - "to-arraybuffer" "^1.0.0" - "xtend" "^4.0.0" - -"stream-http@3.1.1": - "integrity" "sha512-S7OqaYu0EkFpgeGFb/NPOoPLxFko7TPqtEeFg5DXPB4v/KETHG0Ln6fRFrNezoelpaDKmycEmmZ81cC9DAwgYg==" - "resolved" "https://registry.npmjs.org/stream-http/-/stream-http-3.1.1.tgz" - "version" "3.1.1" - dependencies: - "builtin-status-codes" "^3.0.0" - "inherits" "^2.0.4" - "readable-stream" "^3.6.0" - "xtend" "^4.0.2" - -"stream-parser@^0.3.1": - "integrity" "sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=" - "resolved" "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz" - "version" "0.3.1" - dependencies: - "debug" "2" - -"strict-uri-encode@^1.0.0": - "integrity" "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" - "resolved" "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz" - "version" "1.1.0" - -"string_decoder@^1.0.0", "string_decoder@^1.1.1", "string_decoder@~1.1.1": - "integrity" "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==" - "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - "version" "1.1.1" - dependencies: - "safe-buffer" "~5.1.0" - -"string_decoder@1.3.0": - "integrity" "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==" - "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - "version" "1.3.0" - dependencies: - "safe-buffer" "~5.2.0" - -"string-convert@^0.2.0": - "integrity" "sha1-aYLMMEn7tM2F+LJFaLnZvznu/5c=" - "resolved" "https://registry.npmjs.org/string-convert/-/string-convert-0.2.1.tgz" - "version" "0.2.1" - -"string-hash@1.1.3": - "integrity" "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=" - "resolved" "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz" - "version" "1.1.3" - -"string.prototype.trimend@^1.0.4": - "integrity" "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==" - "resolved" "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "call-bind" "^1.0.2" - "define-properties" "^1.1.3" - -"string.prototype.trimstart@^1.0.4": - "integrity" "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==" - "resolved" "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "call-bind" "^1.0.2" - "define-properties" "^1.1.3" - -"stringify-entities@^3.0.1": - "integrity" "sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==" - "resolved" "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "character-entities-html4" "^1.0.0" - "character-entities-legacy" "^1.0.0" - "xtend" "^4.0.0" + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +stream-browserify@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-3.0.0.tgz#22b0a2850cdf6503e73085da1fc7b7d0c2122f2f" + integrity sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA== + dependencies: + inherits "~2.0.4" + readable-stream "^3.5.0" + +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-http@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-3.1.1.tgz#0370a8017cf8d050b9a8554afe608f043eaff564" + integrity sha512-S7OqaYu0EkFpgeGFb/NPOoPLxFko7TPqtEeFg5DXPB4v/KETHG0Ln6fRFrNezoelpaDKmycEmmZ81cC9DAwgYg== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.4" + readable-stream "^3.6.0" + xtend "^4.0.2" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-parser@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/stream-parser/-/stream-parser-0.3.1.tgz#1618548694420021a1182ff0af1911c129761773" + integrity sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M= + dependencies: + debug "2" + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= + +string-convert@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/string-convert/-/string-convert-0.2.1.tgz#6982cc3049fbb4cd85f8b24568b9d9bf39eeff97" + integrity sha1-aYLMMEn7tM2F+LJFaLnZvznu/5c= + +string-hash@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" + integrity sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs= + +string.prototype.trimend@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" + integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +string.prototype.trimstart@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" + integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +string_decoder@1.3.0, string_decoder@^1.0.0, string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +stringify-entities@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-3.1.0.tgz#b8d3feac256d9ffcc9fa1fefdcf3ca70576ee903" + integrity sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg== + dependencies: + character-entities-html4 "^1.0.0" + character-entities-legacy "^1.0.0" + xtend "^4.0.0" -"strip-ansi@^3.0.0": - "integrity" "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=" - "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" - "version" "3.0.1" +strip-ansi@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== dependencies: - "ansi-regex" "^2.0.0" + ansi-regex "^5.0.0" -"strip-ansi@6.0.0": - "integrity" "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==" - "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz" - "version" "6.0.0" +strip-ansi@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= dependencies: - "ansi-regex" "^5.0.0" + ansi-regex "^2.0.0" -"strip-bom-string@^1.0.0": - "integrity" "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=" - "resolved" "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz" - "version" "1.0.0" - -"strip-bom@^2.0.0": - "integrity" "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=" - "resolved" "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz" - "version" "2.0.0" +strip-bom-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" + integrity sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI= + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= dependencies: - "is-utf8" "^0.2.0" + is-utf8 "^0.2.0" -"strip-dirs@^2.0.0": - "integrity" "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==" - "resolved" "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz" - "version" "2.1.0" +strip-dirs@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/strip-dirs/-/strip-dirs-2.1.0.tgz#4987736264fc344cf20f6c34aca9d13d1d4ed6c5" + integrity sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g== dependencies: - "is-natural-number" "^4.0.1" + is-natural-number "^4.0.1" -"strip-eof@^1.0.0": - "integrity" "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" - "resolved" "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz" - "version" "1.0.0" +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= -"strip-final-newline@^2.0.0": - "integrity" "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" - "resolved" "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" - "version" "2.0.0" +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -"strip-indent@^1.0.1": - "integrity" "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=" - "resolved" "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz" - "version" "1.0.1" +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= dependencies: - "get-stdin" "^4.0.1" + get-stdin "^4.0.1" -"strip-outer@^1.0.0": - "integrity" "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==" - "resolved" "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz" - "version" "1.0.1" +strip-outer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" + integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg== dependencies: - "escape-string-regexp" "^1.0.2" + escape-string-regexp "^1.0.2" -"styled-components@^5.1.1": - "integrity" "sha512-1ps8ZAYu2Husx+Vz8D+MvXwEwvMwFv+hqqUwhNlDN5ybg6A+3xyW1ECrAgywhvXapNfXiz79jJyU0x22z0FFTg==" - "resolved" "https://registry.npmjs.org/styled-components/-/styled-components-5.1.1.tgz" - "version" "5.1.1" +styled-components@^5.1.1: + version "5.3.3" + resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-5.3.3.tgz#312a3d9a549f4708f0fb0edc829eb34bde032743" + integrity sha512-++4iHwBM7ZN+x6DtPPWkCI4vdtwumQ+inA/DdAsqYd4SVgUKJie5vXyzotA00ttcFdQkCng7zc6grwlfIfw+lw== dependencies: "@babel/helper-module-imports" "^7.0.0" "@babel/traverse" "^7.4.5" "@emotion/is-prop-valid" "^0.8.8" "@emotion/stylis" "^0.8.4" "@emotion/unitless" "^0.7.4" - "babel-plugin-styled-components" ">= 1" - "css-to-react-native" "^3.0.0" - "hoist-non-react-statics" "^3.0.0" - "shallowequal" "^1.1.0" - "supports-color" "^5.5.0" + babel-plugin-styled-components ">= 1.12.0" + css-to-react-native "^3.0.0" + hoist-non-react-statics "^3.0.0" + shallowequal "^1.1.0" + supports-color "^5.5.0" -"styled-jsx@4.0.1": - "integrity" "sha512-Gcb49/dRB1k8B4hdK8vhW27Rlb2zujCk1fISrizCcToIs+55B4vmUM0N9Gi4nnVfFZWe55jRdWpAqH1ldAKWvQ==" - "resolved" "https://registry.npmjs.org/styled-jsx/-/styled-jsx-4.0.1.tgz" - "version" "4.0.1" +styled-jsx@4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/styled-jsx/-/styled-jsx-4.0.1.tgz" + integrity sha512-Gcb49/dRB1k8B4hdK8vhW27Rlb2zujCk1fISrizCcToIs+55B4vmUM0N9Gi4nnVfFZWe55jRdWpAqH1ldAKWvQ== dependencies: "@babel/plugin-syntax-jsx" "7.14.5" "@babel/types" "7.15.0" - "convert-source-map" "1.7.0" - "loader-utils" "1.2.3" - "source-map" "0.7.3" - "string-hash" "1.1.3" - "stylis" "3.5.4" - "stylis-rule-sheet" "0.0.10" - -"styled-system@^5.1.5": - "integrity" "sha512-7VoD0o2R3RKzOzPK0jYrVnS8iJdfkKsQJNiLRDjikOpQVqQHns/DXWaPZOH4tIKkhAT7I6wIsy9FWTWh2X3q+A==" - "resolved" "https://registry.npmjs.org/styled-system/-/styled-system-5.1.5.tgz" - "version" "5.1.5" + convert-source-map "1.7.0" + loader-utils "1.2.3" + source-map "0.7.3" + string-hash "1.1.3" + stylis "3.5.4" + stylis-rule-sheet "0.0.10" + +styled-system@^5.1.5: + version "5.1.5" + resolved "https://registry.npmjs.org/styled-system/-/styled-system-5.1.5.tgz" + integrity sha512-7VoD0o2R3RKzOzPK0jYrVnS8iJdfkKsQJNiLRDjikOpQVqQHns/DXWaPZOH4tIKkhAT7I6wIsy9FWTWh2X3q+A== dependencies: "@styled-system/background" "^5.1.2" "@styled-system/border" "^5.1.5" @@ -5676,587 +5613,597 @@ "@styled-system/space" "^5.1.2" "@styled-system/typography" "^5.1.2" "@styled-system/variant" "^5.1.5" - "object-assign" "^4.1.1" + object-assign "^4.1.1" -"stylis-rule-sheet@0.0.10": - "integrity" "sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw==" - "resolved" "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz" - "version" "0.0.10" +stylis-rule-sheet@0.0.10: + version "0.0.10" + resolved "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz" + integrity sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw== -"stylis@3.5.4": - "integrity" "sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==" - "resolved" "https://registry.npmjs.org/stylis/-/stylis-3.5.4.tgz" - "version" "3.5.4" +stylis@3.5.4: + version "3.5.4" + resolved "https://registry.npmjs.org/stylis/-/stylis-3.5.4.tgz" + integrity sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q== -"supports-color@^2.0.0": - "integrity" "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" - "version" "2.0.0" +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= -"supports-color@^5.3.0", "supports-color@^5.5.0": - "integrity" "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" - "version" "5.5.0" +supports-color@^5.3.0, supports-color@^5.5.0: + version "5.5.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: - "has-flag" "^3.0.0" + has-flag "^3.0.0" -"supports-color@^7.1.0": - "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" - "version" "7.2.0" +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: - "has-flag" "^4.0.0" + has-flag "^4.0.0" -"supports-color@^8.0.0": - "integrity" "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" - "version" "8.1.1" +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: - "has-flag" "^4.0.0" + has-flag "^4.0.0" -"svgo@^2.1.0": - "integrity" "sha512-fz4IKjNO6HDPgIQxu4IxwtubtbSfGEAJUq/IXyTPIkGhWck/faiiwfkvsB8LnBkKLvSoyNNIY6d13lZprJMc9Q==" - "resolved" "https://registry.npmjs.org/svgo/-/svgo-2.3.0.tgz" - "version" "2.3.0" +svgo@^2.1.0: + version "2.3.0" + resolved "https://registry.npmjs.org/svgo/-/svgo-2.3.0.tgz" + integrity sha512-fz4IKjNO6HDPgIQxu4IxwtubtbSfGEAJUq/IXyTPIkGhWck/faiiwfkvsB8LnBkKLvSoyNNIY6d13lZprJMc9Q== dependencies: "@trysound/sax" "0.1.1" - "chalk" "^4.1.0" - "commander" "^7.1.0" - "css-select" "^3.1.2" - "css-tree" "^1.1.2" - "csso" "^4.2.0" - "stable" "^0.1.8" - -"tar-stream@^1.5.2": - "integrity" "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==" - "resolved" "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz" - "version" "1.6.2" - dependencies: - "bl" "^1.0.0" - "buffer-alloc" "^1.2.0" - "end-of-stream" "^1.0.0" - "fs-constants" "^1.0.0" - "readable-stream" "^2.3.0" - "to-buffer" "^1.1.1" - "xtend" "^4.0.0" - -"temp-dir@^1.0.0": - "integrity" "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=" - "resolved" "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz" - "version" "1.0.0" - -"tempfile@^2.0.0": - "integrity" "sha1-awRGhWqbERTRhW/8vlCczLCXcmU=" - "resolved" "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "temp-dir" "^1.0.0" - "uuid" "^3.0.1" - -"three@^0.84.0": - "integrity" "sha1-lb6FpVoPoAKqYl7VWRMJV9z/2Rg=" - "resolved" "https://registry.npmjs.org/three/-/three-0.84.0.tgz" - "version" "0.84.0" - -"throttle-debounce@^3.0.1": - "integrity" "sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==" - "resolved" "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-3.0.1.tgz" - "version" "3.0.1" - -"through@^2.3.8": - "integrity" "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - "resolved" "https://registry.npmjs.org/through/-/through-2.3.8.tgz" - "version" "2.3.8" - -"through2@~2.0.3": - "integrity" "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==" - "resolved" "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" - "version" "2.0.5" - dependencies: - "readable-stream" "~2.3.6" - "xtend" "~4.0.1" - -"timed-out@^4.0.0", "timed-out@^4.0.1": - "integrity" "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" - "resolved" "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz" - "version" "4.0.1" - -"timers-browserify@^2.0.4", "timers-browserify@2.0.12": - "integrity" "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==" - "resolved" "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz" - "version" "2.0.12" - dependencies: - "setimmediate" "^1.0.4" - -"to-arraybuffer@^1.0.0": - "integrity" "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" - "resolved" "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz" - "version" "1.0.1" - -"to-buffer@^1.1.1": - "integrity" "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" - "resolved" "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz" - "version" "1.1.1" - -"to-fast-properties@^2.0.0": - "integrity" "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" - "resolved" "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" - "version" "2.0.0" - -"to-object-path@^0.3.0": - "integrity" "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=" - "resolved" "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz" - "version" "0.3.0" - dependencies: - "kind-of" "^3.0.2" - -"to-regex-range@^2.1.0": - "integrity" "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=" - "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz" - "version" "2.1.1" - dependencies: - "is-number" "^3.0.0" - "repeat-string" "^1.6.1" - -"to-regex-range@^5.0.1": - "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==" - "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" - "version" "5.0.1" - dependencies: - "is-number" "^7.0.0" - -"to-regex@^3.0.1", "to-regex@^3.0.2": - "integrity" "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==" - "resolved" "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "define-property" "^2.0.2" - "extend-shallow" "^3.0.2" - "regex-not" "^1.0.2" - "safe-regex" "^1.1.0" - -"toidentifier@1.0.0": - "integrity" "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" - "resolved" "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz" - "version" "1.0.0" - -"tr46@^1.0.1": - "integrity" "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=" - "resolved" "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "punycode" "^2.1.0" - -"traverse@0.6.6": - "integrity" "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=" - "resolved" "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz" - "version" "0.6.6" - -"trim-newlines@^1.0.0": - "integrity" "sha1-WIeWa7WCpFA6QetST301ARgVphM=" - "resolved" "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz" - "version" "1.0.0" - -"trim-repeated@^1.0.0": - "integrity" "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=" - "resolved" "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "escape-string-regexp" "^1.0.2" - -"trough@^1.0.0": - "integrity" "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==" - "resolved" "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz" - "version" "1.0.5" - -"ts-pnp@^1.1.6": - "integrity" "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==" - "resolved" "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz" - "version" "1.2.0" - -"tslib@^1.9.0": - "integrity" "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - "resolved" "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - "version" "1.14.1" - -"tty-browserify@0.0.0": - "integrity" "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" - "resolved" "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz" - "version" "0.0.0" - -"tty-browserify@0.0.1": - "integrity" "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==" - "resolved" "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz" - "version" "0.0.1" - -"tunnel-agent@^0.6.0": - "integrity" "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=" - "resolved" "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" - "version" "0.6.0" - dependencies: - "safe-buffer" "^5.0.1" - -"type-fest@^0.7.1": - "integrity" "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==" - "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz" - "version" "0.7.1" - -"unbox-primitive@^1.0.1": - "integrity" "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==" - "resolved" "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "function-bind" "^1.1.1" - "has-bigints" "^1.0.1" - "has-symbols" "^1.0.2" - "which-boxed-primitive" "^1.0.2" - -"unbzip2-stream@^1.0.9": - "integrity" "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==" - "resolved" "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz" - "version" "1.4.3" - dependencies: - "buffer" "^5.2.1" - "through" "^2.3.8" - -"uncontrollable@^7.0.0": - "integrity" "sha512-EcPYhot3uWTS3w00R32R2+vS8Vr53tttrvMj/yA1uYRhf8hbTG2GyugGqWDY0qIskxn0uTTojVd6wPYW9ZEf8Q==" - "resolved" "https://registry.npmjs.org/uncontrollable/-/uncontrollable-7.1.1.tgz" - "version" "7.1.1" + chalk "^4.1.0" + commander "^7.1.0" + css-select "^3.1.2" + css-tree "^1.1.2" + csso "^4.2.0" + stable "^0.1.8" + +tar-stream@^1.5.2: + version "1.6.2" + resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz" + integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A== + dependencies: + bl "^1.0.0" + buffer-alloc "^1.2.0" + end-of-stream "^1.0.0" + fs-constants "^1.0.0" + readable-stream "^2.3.0" + to-buffer "^1.1.1" + xtend "^4.0.0" + +temp-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz" + integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= + +tempfile@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz" + integrity sha1-awRGhWqbERTRhW/8vlCczLCXcmU= + dependencies: + temp-dir "^1.0.0" + uuid "^3.0.1" + +three@^0.84.0: + version "0.84.0" + resolved "https://registry.npmjs.org/three/-/three-0.84.0.tgz" + integrity sha1-lb6FpVoPoAKqYl7VWRMJV9z/2Rg= + +throttle-debounce@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-3.0.1.tgz" + integrity sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg== + +through2@~2.0.3: + version "2.0.5" + resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through@^2.3.8: + version "2.3.8" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +timed-out@^4.0.0, timed-out@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz" + integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= + +timers-browserify@2.0.12, timers-browserify@^2.0.4: + version "2.0.12" + resolved "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz" + integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== + dependencies: + setimmediate "^1.0.4" + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + +to-buffer@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz" + integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz" + integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= + dependencies: + punycode "^2.1.0" + +traverse@0.6.6: + version "0.6.6" + resolved "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz" + integrity sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc= + +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz" + integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= + +trim-repeated@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz" + integrity sha1-42RqLqTokTEr9+rObPsFOAvAHCE= + dependencies: + escape-string-regexp "^1.0.2" + +trough@^1.0.0: + version "1.0.5" + resolved "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz" + integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== + +ts-pnp@^1.1.6: + version "1.2.0" + resolved "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz" + integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== + +tslib@^1.9.0: + version "1.14.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + +tty-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz" + integrity sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw== + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +type-fest@^0.7.1: + version "0.7.1" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz" + integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== + +unbox-primitive@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz" + integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== + dependencies: + function-bind "^1.1.1" + has-bigints "^1.0.1" + has-symbols "^1.0.2" + which-boxed-primitive "^1.0.2" + +unbzip2-stream@^1.0.9: + version "1.4.3" + resolved "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz" + integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg== + dependencies: + buffer "^5.2.1" + through "^2.3.8" + +uncontrollable@^7.0.0: + version "7.1.1" + resolved "https://registry.npmjs.org/uncontrollable/-/uncontrollable-7.1.1.tgz" + integrity sha512-EcPYhot3uWTS3w00R32R2+vS8Vr53tttrvMj/yA1uYRhf8hbTG2GyugGqWDY0qIskxn0uTTojVd6wPYW9ZEf8Q== dependencies: "@babel/runtime" "^7.6.3" "@types/react" "^16.9.11" - "invariant" "^2.2.4" - "react-lifecycles-compat" "^3.0.4" - -"unified@^9.1.0": - "integrity" "sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA==" - "resolved" "https://registry.npmjs.org/unified/-/unified-9.2.1.tgz" - "version" "9.2.1" - dependencies: - "bail" "^1.0.0" - "extend" "^3.0.0" - "is-buffer" "^2.0.0" - "is-plain-obj" "^2.0.0" - "trough" "^1.0.0" - "vfile" "^4.0.0" - -"union-value@^1.0.0": - "integrity" "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==" - "resolved" "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "arr-union" "^3.1.0" - "get-value" "^2.0.6" - "is-extendable" "^0.1.1" - "set-value" "^2.0.1" - -"unist-builder@^2.0.0": - "integrity" "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==" - "resolved" "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz" - "version" "2.0.3" - -"unist-util-generated@^1.0.0": - "integrity" "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==" - "resolved" "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz" - "version" "1.1.6" - -"unist-util-is@^4.0.0": - "integrity" "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==" - "resolved" "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz" - "version" "4.1.0" - -"unist-util-position@^3.0.0": - "integrity" "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==" - "resolved" "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz" - "version" "3.1.0" - -"unist-util-stringify-position@^2.0.0": - "integrity" "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==" - "resolved" "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz" - "version" "2.0.3" + invariant "^2.2.4" + react-lifecycles-compat "^3.0.4" + +uncontrollable@^7.2.1: + version "7.2.1" + resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-7.2.1.tgz#1fa70ba0c57a14d5f78905d533cf63916dc75738" + integrity sha512-svtcfoTADIB0nT9nltgjujTi7BzVmwjZClOmskKu/E8FW9BXzg9os8OLr4f8Dlnk0rYWJIWr4wv9eKUXiQvQwQ== + dependencies: + "@babel/runtime" "^7.6.3" + "@types/react" ">=16.9.11" + invariant "^2.2.4" + react-lifecycles-compat "^3.0.4" + +unified@^9.1.0: + version "9.2.2" + resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.2.tgz#67649a1abfc3ab85d2969502902775eb03146975" + integrity sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-buffer "^2.0.0" + is-plain-obj "^2.0.0" + trough "^1.0.0" + vfile "^4.0.0" + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +unist-builder@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-2.0.3.tgz#77648711b5d86af0942f334397a33c5e91516436" + integrity sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw== + +unist-util-generated@^1.0.0: + version "1.1.6" + resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.6.tgz#5ab51f689e2992a472beb1b35f2ce7ff2f324d4b" + integrity sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg== + +unist-util-is@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.1.0.tgz#976e5f462a7a5de73d94b706bac1b90671b57797" + integrity sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg== + +unist-util-position@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.1.0.tgz#1c42ee6301f8d52f47d14f62bbdb796571fa2d47" + integrity sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA== + +unist-util-stringify-position@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da" + integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g== dependencies: "@types/unist" "^2.0.2" -"unist-util-visit-parents@^3.0.0": - "integrity" "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==" - "resolved" "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz" - "version" "3.1.1" +unist-util-visit-parents@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz#65a6ce698f78a6b0f56aa0e88f13801886cdaef6" + integrity sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg== dependencies: "@types/unist" "^2.0.0" - "unist-util-is" "^4.0.0" + unist-util-is "^4.0.0" -"unist-util-visit@^2.0.0": - "integrity" "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==" - "resolved" "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz" - "version" "2.0.3" +unist-util-visit@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c" + integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q== dependencies: "@types/unist" "^2.0.0" - "unist-util-is" "^4.0.0" - "unist-util-visit-parents" "^3.0.0" + unist-util-is "^4.0.0" + unist-util-visit-parents "^3.0.0" -"unpipe@1.0.0": - "integrity" "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - "resolved" "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" - "version" "1.0.0" +unpipe@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= -"unset-value@^1.0.0": - "integrity" "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=" - "resolved" "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz" - "version" "1.0.0" +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= dependencies: - "has-value" "^0.3.1" - "isobject" "^3.0.0" + has-value "^0.3.1" + isobject "^3.0.0" -"uri-js@^4.2.2": - "integrity" "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==" - "resolved" "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz" - "version" "4.2.2" +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: - "punycode" "^2.1.0" + punycode "^2.1.0" -"urix@^0.1.0": - "integrity" "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" - "resolved" "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz" - "version" "0.1.0" +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= -"url-loader@^1.1.1", "url-loader@^1.1.2": - "integrity" "sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg==" - "resolved" "https://registry.npmjs.org/url-loader/-/url-loader-1.1.2.tgz" - "version" "1.1.2" +url-loader@^1.1.1, url-loader@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/url-loader/-/url-loader-1.1.2.tgz" + integrity sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg== dependencies: - "loader-utils" "^1.1.0" - "mime" "^2.0.3" - "schema-utils" "^1.0.0" + loader-utils "^1.1.0" + mime "^2.0.3" + schema-utils "^1.0.0" -"url-parse-lax@^1.0.0": - "integrity" "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=" - "resolved" "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz" - "version" "1.0.0" +url-parse-lax@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= dependencies: - "prepend-http" "^1.0.1" + prepend-http "^1.0.1" -"url-parse-lax@^3.0.0": - "integrity" "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=" - "resolved" "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz" - "version" "3.0.0" +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= dependencies: - "prepend-http" "^2.0.0" + prepend-http "^2.0.0" -"url-parse@^1.1.9", "url-parse@^1.4.3": - "integrity" "sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ==" - "resolved" "https://registry.npmjs.org/url-parse/-/url-parse-1.5.3.tgz" - "version" "1.5.3" +url-parse@^1.1.9, url-parse@^1.4.3: + version "1.5.3" + resolved "https://registry.npmjs.org/url-parse/-/url-parse-1.5.3.tgz" + integrity sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ== dependencies: - "querystringify" "^2.1.1" - "requires-port" "^1.0.0" + querystringify "^2.1.1" + requires-port "^1.0.0" -"url-to-options@^1.0.1": - "integrity" "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=" - "resolved" "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz" - "version" "1.0.1" +url-to-options@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" + integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k= -"url@^0.11.0": - "integrity" "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=" - "resolved" "https://registry.npmjs.org/url/-/url-0.11.0.tgz" - "version" "0.11.0" +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= dependencies: - "punycode" "1.3.2" - "querystring" "0.2.0" + punycode "1.3.2" + querystring "0.2.0" -"use-deep-compare-effect@^1.6.1": - "integrity" "sha512-bWLtV110l0uXhe6KHArzpBMzhe8g202gcPypP+qXr9js8tCjNkewnYXhpUAaqtLAJhWDwa5Z+OtfaTOsiKO8dQ==" - "resolved" "https://registry.npmjs.org/use-deep-compare-effect/-/use-deep-compare-effect-1.8.0.tgz" - "version" "1.8.0" +use-deep-compare-effect@^1.6.1: + version "1.8.0" + resolved "https://registry.npmjs.org/use-deep-compare-effect/-/use-deep-compare-effect-1.8.0.tgz" + integrity sha512-bWLtV110l0uXhe6KHArzpBMzhe8g202gcPypP+qXr9js8tCjNkewnYXhpUAaqtLAJhWDwa5Z+OtfaTOsiKO8dQ== dependencies: "@babel/runtime" "^7.12.5" "@types/react" "^17.0.0" - "dequal" "^2.0.2" + dequal "^2.0.2" -"use-subscription@1.5.1": - "integrity" "sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA==" - "resolved" "https://registry.npmjs.org/use-subscription/-/use-subscription-1.5.1.tgz" - "version" "1.5.1" +use-subscription@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/use-subscription/-/use-subscription-1.5.1.tgz#73501107f02fad84c6dd57965beb0b75c68c42d1" + integrity sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA== dependencies: - "object-assign" "^4.1.1" + object-assign "^4.1.1" -"use@^3.1.0": - "integrity" "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" - "resolved" "https://registry.npmjs.org/use/-/use-3.1.1.tgz" - "version" "3.1.1" +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -"util-deprecate@^1.0.1", "util-deprecate@~1.0.1": - "integrity" "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - "version" "1.0.2" +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -"util@^0.11.0": - "integrity" "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==" - "resolved" "https://registry.npmjs.org/util/-/util-0.11.1.tgz" - "version" "0.11.1" +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= dependencies: - "inherits" "2.0.3" + inherits "2.0.1" -"util@^0.12.0", "util@0.12.4": - "integrity" "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==" - "resolved" "https://registry.npmjs.org/util/-/util-0.12.4.tgz" - "version" "0.12.4" +util@0.12.4, util@^0.12.0: + version "0.12.4" + resolved "https://registry.npmjs.org/util/-/util-0.12.4.tgz" + integrity sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw== dependencies: - "inherits" "^2.0.3" - "is-arguments" "^1.0.4" - "is-generator-function" "^1.0.7" - "is-typed-array" "^1.1.3" - "safe-buffer" "^5.1.2" - "which-typed-array" "^1.1.2" + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + safe-buffer "^5.1.2" + which-typed-array "^1.1.2" -"util@0.10.3": - "integrity" "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=" - "resolved" "https://registry.npmjs.org/util/-/util-0.10.3.tgz" - "version" "0.10.3" +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== dependencies: - "inherits" "2.0.1" + inherits "2.0.3" -"uuid@^3.0.1": - "integrity" "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - "resolved" "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" - "version" "3.4.0" +uuid@^3.0.1: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -"validate-npm-package-license@^3.0.1": - "integrity" "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==" - "resolved" "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" - "version" "3.0.4" +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: - "spdx-correct" "^3.0.0" - "spdx-expression-parse" "^3.0.0" + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" -"vfile-message@^2.0.0": - "integrity" "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==" - "resolved" "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz" - "version" "2.0.4" +vfile-message@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a" + integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ== dependencies: "@types/unist" "^2.0.0" - "unist-util-stringify-position" "^2.0.0" + unist-util-stringify-position "^2.0.0" -"vfile@^4.0.0": - "integrity" "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==" - "resolved" "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz" - "version" "4.2.1" +vfile@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.2.1.tgz#03f1dce28fc625c625bc6514350fbdb00fa9e624" + integrity sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA== dependencies: "@types/unist" "^2.0.0" - "is-buffer" "^2.0.0" - "unist-util-stringify-position" "^2.0.0" - "vfile-message" "^2.0.0" - -"vm-browserify@^1.0.1", "vm-browserify@1.1.2": - "integrity" "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" - "resolved" "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz" - "version" "1.1.2" - -"warning@^4.0.0", "warning@^4.0.3": - "integrity" "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==" - "resolved" "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz" - "version" "4.0.3" - dependencies: - "loose-envify" "^1.0.0" - -"watchpack@2.1.1": - "integrity" "sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw==" - "resolved" "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz" - "version" "2.1.1" - dependencies: - "glob-to-regexp" "^0.4.1" - "graceful-fs" "^4.1.2" - -"webidl-conversions@^4.0.2": - "integrity" "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" - "resolved" "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz" - "version" "4.0.2" - -"whatwg-url@^7.0.0": - "integrity" "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==" - "resolved" "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz" - "version" "7.1.0" - dependencies: - "lodash.sortby" "^4.7.0" - "tr46" "^1.0.1" - "webidl-conversions" "^4.0.2" - -"which-boxed-primitive@^1.0.2": - "integrity" "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==" - "resolved" "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "is-bigint" "^1.0.1" - "is-boolean-object" "^1.1.0" - "is-number-object" "^1.0.4" - "is-string" "^1.0.5" - "is-symbol" "^1.0.3" - -"which-typed-array@^1.1.2": - "integrity" "sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw==" - "resolved" "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.7.tgz" - "version" "1.1.7" - dependencies: - "available-typed-arrays" "^1.0.5" - "call-bind" "^1.0.2" - "es-abstract" "^1.18.5" - "foreach" "^2.0.5" - "has-tostringtag" "^1.0.0" - "is-typed-array" "^1.1.7" - -"which@^1.2.9": - "integrity" "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==" - "resolved" "https://registry.npmjs.org/which/-/which-1.3.1.tgz" - "version" "1.3.1" - dependencies: - "isexe" "^2.0.0" - -"which@^2.0.1": - "integrity" "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==" - "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "isexe" "^2.0.0" - -"wrappy@1": - "integrity" "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - "version" "1.0.2" - -"xtend@^4.0.0", "xtend@^4.0.2", "xtend@~4.0.1": - "integrity" "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - "resolved" "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" - "version" "4.0.2" - -"yallist@^2.1.2": - "integrity" "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - "resolved" "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz" - "version" "2.1.2" - -"yallist@^4.0.0": - "integrity" "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - "resolved" "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" - "version" "4.0.0" - -"yaml@^1.7.2": - "integrity" "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==" - "resolved" "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz" - "version" "1.10.0" - -"yauzl@^2.4.2": - "integrity" "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=" - "resolved" "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz" - "version" "2.10.0" - dependencies: - "buffer-crc32" "~0.2.3" - "fd-slicer" "~1.1.0" - -"yocto-queue@^0.1.0": - "integrity" "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" - "resolved" "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" - "version" "0.1.0" - -"zwitch@^1.0.0": - "integrity" "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==" - "resolved" "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz" - "version" "1.0.5" + is-buffer "^2.0.0" + unist-util-stringify-position "^2.0.0" + vfile-message "^2.0.0" + +vm-browserify@1.1.2, vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== + +warning@^4.0.0, warning@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz" + integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== + dependencies: + loose-envify "^1.0.0" + +watchpack@2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz" + integrity sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== + +whatwg-url@^7.0.0: + version "7.1.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz" + integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-typed-array@^1.1.2: + version "1.1.7" + resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.7.tgz" + integrity sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-abstract "^1.18.5" + foreach "^2.0.5" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.7" + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +xtend@^4.0.0, xtend@^4.0.2, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^1.7.2: + version "1.10.0" + resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz" + integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== + +yauzl@^2.4.2: + version "2.10.0" + resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz" + integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zwitch@^1.0.0: + version "1.0.5" + resolved "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz" + integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw== diff --git a/deploy/kustomization.yaml b/deploy/kustomization.yaml new file mode 100644 index 00000000..7336e8bc --- /dev/null +++ b/deploy/kustomization.yaml @@ -0,0 +1,4 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - latest.yaml \ No newline at end of file diff --git a/deploy/latest.yaml b/deploy/latest.yaml new file mode 100644 index 00000000..e69de29b diff --git a/k8s/config.yaml b/k8s/config.yaml new file mode 100644 index 00000000..9e6e0b09 --- /dev/null +++ b/k8s/config.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +clusters: + - cluster: + certificate-authority-data: $KUBE_CLUSTER_CERTIFICATE + server: $KUBE_CLUSTER_SERVER + name: $KUBE_CLUSTER_NAME +contexts: + - context: + cluster: $KUBE_CLUSTER_NAME + user: $KUBE_USER_NAME + name: $KUBE_CLUSTER_NAME +kind: Config +preferences: {} +users: + - name: $KUBE_USER_NAME + user: + token: $KUBE_USER_TOKEN diff --git a/k8s/web.yaml b/k8s/web.yaml new file mode 100644 index 00000000..68a825af --- /dev/null +++ b/k8s/web.yaml @@ -0,0 +1,87 @@ +apiVersion: v1 +kind: Service +metadata: + name: iteam-pub + namespace: iteam-pub +spec: + ports: + - port: 3000 + type: LoadBalancer + selector: + app: iteam-pub +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: iteam-pub + namespace: iteam-pub +spec: + selector: + matchLabels: + app: iteam-pub + template: + metadata: + labels: + app: iteam-pub + spec: + containers: + - name: iteam-pub + resources: + limits: + cpu: 100m + memory: 100Mi + requests: + cpu: 100m + memory: 100Mi + image: iteam1337/iteam-next-site + env: + - name: SANITY_READ_DATA_TOKEN + valueFrom: + secretKeyRef: + name: sanity-secret + key: SANITY_READ_DATA_TOKEN + - name: SANITY_API_TOKEN + valueFrom: + secretKeyRef: + name: sanity-secret + key: SANITY_API_TOKEN + - name: SANITY_PREVIEW_SECRET + valueFrom: + secretKeyRef: + name: sanity-secret + key: SANITY_PREVIEW_SECRET + ports: + - containerPort: 3000 +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: iteam-pub + namespace: iteam-pub + annotations: + cert-manager.io/cluster-issuer: 'letsencrypt-prod' + nginx.ingress.kubernetes.io/from-to-www-redirect: 'true' + nginx.ingress.kubernetes.io/http2-push-preload: 'true' + nginx.ingress.kubernetes.io/proxy-body-size: '500m' + nginx.ingress.kubernetes.io/proxy-pass-headers: 'Location' + nginx.ingress.kubernetes.io/configuration-snippet: | + add_header X-Frame-Options "sameorigin"; + add_header X-Content-Type-Options nosniff; + add_header Referrer-Policy 'same-origin'; +spec: + ingressClassName: nginx + tls: + - hosts: + - iteam.pub + secretName: web-secret-tls + rules: + - host: iteam.pub + http: + paths: + - pathType: Prefix + path: '/' + backend: + service: + name: iteam-pub + port: + number: 3000 diff --git a/skaffold.yaml b/skaffold.yaml new file mode 100644 index 00000000..22332a9a --- /dev/null +++ b/skaffold.yaml @@ -0,0 +1,22 @@ +apiVersion: skaffold/v2beta27 +kind: Config +metadata: + name: iteam-next-site +build: + tagPolicy: + sha256: {} + artifacts: + - image: iteam1337/iteam-next-site + context: client + docker: + buildArgs: + SANITY_READ_DATA_TOKEN: "{{ .SANITY_READ_DATA_TOKEN }}" + SANITY_API_TOKEN: "{{ .SANITY_API_TOKEN }}" + SANITY_PREVIEW_SECRET: "{{ .SANITY_PREVIEW_SECRET }}" + # platforms: + # - linux/amd64 + +deploy: + kubectl: + manifests: + - k8s/web.yaml