C Frigaard

Hvad koster strømmen?

En spøjs detalje er, at ejere af både solceller og el-varme/el-biler så ikke kan få tilskud til hverken el-varme eller el-biler --- som jeg læser det.

En Skats-afgørelse gør, at de ikke kan find ud af at fratrække solcelle-bidraget fra tilskud til el-varme/el-bil.

Dvs. at det er helt OK ikke at få tilskud to gange, men grønne borgere med solceller fratages så mulighed for at få tilskud som andre, der ikke har solceller...

Jeg har ikke regnet på det endnu, men det er givet bedre at sløjfe solcelleordningen helt (som alligevel er barberet ned fra års-afregning til time-afregning) og så få el-tilskud i stedet?

15. marts kl. 11:15
En begmand til dogmet om multitasking: Studerende gør det bedre når pc'er og smartphones lægges væk

Eller i Firefox, f.eks. LeechBlock'e:

dr.dk
ing.dk version2.dk

på din arbejds komputer fra 9:00 til 15:00 ... dvs. her og nu kl 10:44, så jeg ikke sidder og læser Torben's kommentar...

Mobil-tlf eksperiment:

  1. send tre vigtige beskeder på din mobil

  2. sluk dit mobil og læg den på bordet

  3. prøv nu at lave noget svært .... f.eks. læring (der jo af natur er svær og kedelig)

Eksperimentet vil vise, at du kommer til at bruge kognitiv energi på at tænke på om der er kommet svar på dine beskeder.

Og effektivt set er dette eksperiment præcis, hvad der foregår i en undervisning, når man sender beskeder under forelæsningen....pånær at der også her kommer en besked når der kommer svar...

7. september 2020 kl. 10:50
En begmand til dogmet om multitasking: Studerende gør det bedre når pc'er og smartphones lægges væk

Hvis du tager noter, er du tilstede---og kan så smide noten væk, fordi du kan huske, hvad du har skrevet)...

Hvis du ser en lærings-video, gider du sikkert ikke tage noter, for du kan jo bare spole tilbage og se den ingen senere---og så mister du den læring, fordi læringsmetoden er flyttet fra fysisk form til en skærm.

Undersøgelsen af degradering af dit kognitive evner (når du lægger en mobiltelefon på dit arbejdsbord) går på vanedannende medier, hvor det ikke er indholdet af beskederne, der er vigtige, mere beskeden (med lyd og animation) i sig selv...

Ikke alle har oparbejdet et sådanne behov, og ikke alle er derfor afhængige...godt at høre at du (stadig) er modstandsdygtig!

Der er herudover diverse programmer til at låse internetadgang i arbejds- eller studietiden, så man ikke lave overspringshandlinger, og liiige skal checke noget ligegyldigt...

.c

6. september 2020 kl. 09:21
En begmand til dogmet om multitasking: Studerende gør det bedre når pc'er og smartphones lægges væk

Meget interessant med noget håndfast evidens for forbedring/forværring af læring mht. brug af skærm i undervisning.

Efter et par iterationer med INGEN-SKÆRM eksperimenter, beder jeg nu de (universitets-) studerende om IKKE at bruge mobil-telefon overhovedet i undervisningslokalet.

Afbrydelser via mobiltelefonen (vanedannende social beskeder i en lind strøm...) har intet med den læring, der bør foregå i lokalet. Derfor forbud mod at blive afbrudt i læringen...

Alternativet med at forbyde alle skærme (pc + mobil + min egen slides på tavlen) er lidt mere radikalt...og de studerende brokkede sig meget i sidste semester, hvor skærme var forbudt i tre test-lektioner ...

Dvs. de to flittige studerende, der ret faktisk brugte deres PC til noter, brokkede sig, mens de andre helst ville have en PC at gemme sig bag (min fortolkning).

Grundpensum til ingen-skærm-politikken er naturligvis "Skærmens Magi. At træne modstandskraften i en digital tid", af Bent Meier...

Herudover er der evidensen for, at din kognitive evne går ned, bare ved at du lægger din mobiltelefon på dit arbejdsbord----velbemærket uanset om den er tændt eller slukket (du tænker på om der er kommet en besked i stedet for at koncentrere dig om opgaven), samt paradokset at mere aktivitet på sociale media avler mere ensomhed...kilder at finde...på, øh, nettet ;-)

Når undervisningen forgår er der ingen, der: ryger, snakker (højlydt), står-op-på bordene, går-rundt, osv....dvs. alm. tavse-normer i undervisnings sammenhæng.

Snart vil 'samtale' via mobiltelefonen forhåbentlig også være nået til en social tavs-norm i undervisningssammenhæng: noget-du-bare-ikke gør i undervisningslokalet!

.c

4. september 2020 kl. 12:26
Tæt på hver anden husstand betaler for overflødig net-hastighed

Har kørt på en 10Mbit linie i et par år, hjemme. Ingen problemer andet end langsom download af store filer.

Et typisk online Zoom møde kører ca. mellem 1 og 4 Mbps (Mbit/sec), Discord ligger noget lavere, og kvaliteten er lyd er også meget mindre en f.eks. Zoom.

Husk også begrænsningen i WiFi, 54Mbps 802.11g nets (og måske kun det halve i praksis), og 802.11ac ca 1300 Mbps (måske 200 Mbps i praksis)...

.c

29. maj 2020 kl. 07:17
Microsoft bringer Linux GUI-apps til Windows

Som en sjov detalje kører jeg MS Office Word under Wine ("Wine Is Not an Emulator") på en Linux Box.

Dvs. et Windows-gui på Linux. Jeg bruger blot den danske ordbog på Word; den er jo noget bedre en den i LibreOffice, desværre.

Dog kræves der en lidt ældre Word udgave...

23. maj 2020 kl. 09:26
To måneders undervisning på afstand

Når vi nu er på V2, så er en mærkelig detalje ved fjernundervisning, hvor dårlig lyden typisk er...specielt i Discord, men også i andre 'møde' værktøjer!

Didaktisk bryder al undervisning sammen når samtalen hele tiden går på "sig-lige-det-der-igen-jeg-kunne-ikke-høre-dig".

Når lyden bliver dårlig, bruger jeg mere og mere energi på blot at forstå afsenderen. Når lyden går fra OK til marginal dårlig, begynder effekten af 'træthed' at sætte ind...men i mødet er vi typisk helt ubevidste om problemet.

Når lyden bliver helt dårlig vælger jeg gerne helt at afbryde undervisning eller mødet...det meste møde-energi går alligevel på blot at forstår de andre....og møde metaforen bryder helt sammen; eller sagt på en anden måde: ville du acceptere et fysisk møde, hvor du har stukket een finger i venstre øre, og holder dig for øjnene mens i snakker semesterplanlægning med otte andre 'aber'?

Kan være at referencen til 'Turkle' siger noget om træthed...IT-mæssigt syntes jeg det er mærkværdigt at accepterer Lakplade lyd til online-undervisning...jeg forlanger HiFi, så hvorfor en konstant 80Hz brum i min USB headset? Der er jo også masser af båndbredde at tage af, lyd ligger typisk på en 64Kbps i Discord (ja, jeg har også rodet med alle lyd-indstillingerne her..).

Så tilbage til det didaktiske: online undervisning lider under en ekstrem lille båndbredde mellem underviser og elev....hvis den nu blev bedre (teknisk) ville det så tilsvarende hæve undervisningskvaliteten??

.c

17. maj 2020 kl. 08:38
Microsoft opkøber GitHub for 7,5 mia. dollars

Kan i så huske MS Visual SourceSafe, der var plaget af alverdens problemer, f.eks. at den kunne selv-korrumpere sin database.

Godt at se, at Torvalds nu kan hjælpe MS den rette vej mod GIT...(den samme Torvalds som IKKE brugte versionskontrol til de første udgaver at Linux, han arbejde jo alligevel relativt alene og kunne backup'e på en floppydisk.).

6. juni 2018 kl. 19:27
Her er modellen bag Version2's emneords-gætteri

Jeg har gentaget forsøget i Python og SciKit. Der er lidt forskel i vores processering af tekst og min Naive Bayes er ikke helt så god som Java versionen.

Jeg får en confusion matrix som:

  1. [[285 0]
  2. [ 9 3]]
og diverse kvalitestsmål som
  1. precision=1.0, recall=0.25, accuracy=0.97, F1=0.4
Men, interessant for SciKit, er det nu også muligt at gennemsøge en hel række forskellige Machine Learning algoritmer. Med et par liner Python kode søges der nedenfor i ni forskellige ML-algoritmer:

  1. classifiers = [
  2. GaussianNB(),
  3. KNeighborsClassifier(3),
  4. SVC(kernel="linear", C=0.025),
  5. SVC(gamma=2, C=1),
  6. GaussianProcessClassifier(1.0 * RBF(1.0)),
  7. DecisionTreeClassifier(max_depth=5),
  8. RandomForestClassifier(max_depth=5),
  9. MLPClassifier(alpha=1),
  10. AdaBoostClassifier()]
  11.  
  12. for clf, name in zip(classifiers, names):
  13. print(f"Trying model '{name}'...")
  14. clf.fit(X_train_tfidf, y_train1)
  15.  
  16. ptrain = clf.predict(X_train_tfidf)
  17. ptest = clf.predict(X_test_tfidf)

...og jeg får at 'Nearest Neighbor' og 'AdaBoost' performer bedst mht. accuracy, selvom det er tæt løb blandt modellerne.

  1. Trying model 'Nearest Neighbor'...
  2. Results for test
  3. found categories=8, expected categories=12
  4. total=[289 8], precision=1.0, recall=0.667, accuracy=0.987, F1=0.8
  5. confusion matrix=
  6. [[285 0]
  7. [ 4 8]]
  8.  
  9. Trying model 'AdaBoost'...
  10. Results for test
  11. found categories=8, expected categories=12
  12. total=[289 8], precision=1.0, recall=0.667, accuracy=0.987, F1=0.8
  13. confusion matrix=
  14. [[285 0]
  15. [ 4 8]]

Bemærk at ingen hyperparametre i modellerne er blevet tunet, og at man via SciKit nemt kan sætte en global søgning op her. Herudover kan man nemt udvide Naive Bayes til at dække alle ord, ikke bare 'sundheds-it'. Der vil i begge dele være tale om at tweake et par parametre samt skrive et par one-liners python code.

Og koden? Well, i mangel på et GIT-repository kommer den her:

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3.  
  4. import os
  5. import codecs
  6. import re
  7.  
  8. def mk_dat(dir):
  9. files = os.listdir(dir)
  10. m = []
  11. alltxt = []
  12. for file in files:
  13. if file[-1]!='~':
  14. t=""
  15. filename=dir + "/" + file
  16. with codecs.open(filename,encoding='8859') as f:
  17. t = f.read()
  18. t = t.replace("\r","")
  19. s = t.split("\n")
  20.  
  21. assert(len(s)==3)
  22. assert(s[2]=="") # ends in a newline!
  23. assert(len(s[0])>1) # somewhat abitrary limit
  24. assert(len(s[1])>1) # somewhat abitrary limit
  25. assert(len(s[0])<80) # somewhat abitrary limit
  26.  
  27. k = s[0].strip()
  28. v = s[1]
  29. assert(' ' not in k)
  30. assert('\n' not in alltxt)
  31. assert('\r' not in alltxt)
  32.  
  33. m.append(k)
  34. alltxt.append(v)
  35. return m, alltxt
  36.  
  37. DBG=0
  38.  
  39. if DBG==1:
  40. root='Dummy/'
  41. else:
  42. root='Ing/'
  43.  
  44. traincats,traintxt = mk_dat(root + "traeningssaet")
  45. testcats,testtxt = mk_dat(root + "testsaet")
  46. print(f"train: len(traincats)={len(traincats)}, len(traintxt)={len(traintxt)}")
  47. print(f"test: len(testcats) ={len(testcats)}, len(testtxt) ={len(testtxt)}")
  48.  
  49. assert(len(traincats)==len(traintxt))
  50. assert(len(testcats)==len(testtxt))
  51. assert(len(traincats)==2673 or DBG)
  52. assert(len(testcats)==297 or DBG)
  53.  
  54. def mk_cats(cattxt,c,inv_c,n,dbg=False):
  55. y = []
  56. for k in cattxt:
  57. t = []
  58. #print(f"{k} -> {len(train[k])}")
  59. s = k.split(' ')
  60. for i in s:
  61. assert(' ' not in i)
  62. if not(i in c):
  63. if dbg:
  64. print(f"found cat='{i}' as index {n}")
  65. c[i]=n
  66. assert(not(n in inv_c))
  67. inv_c[n]=i
  68. n = n + 1
  69. t.append(c[i])
  70. y.append(t)
  71. return c,n,y,inv_c
  72.  
  73. c = {}
  74. inv_c = {}
  75. # test contains on extra 'certificering' category
  76. c['certificering']=0
  77. inv_c[0]='certificering'
  78. n=int(1)
  79.  
  80. c,n,y_train,inv_c = mk_cats(traincats,c,inv_c,n)
  81. c,m,y_test,inv_c = mk_cats(testcats,c,inv_c,n,True)
  82. assert(n==m)
  83.  
  84. print(f'categories={len(c)}')
  85. if DBG:
  86. print(f" DBG: {c}")
  87. print(f" DBG: {inv_c}")
  88.  
  89. assert(len(y_train)==len(traincats))
  90. assert(len(y_test)==len(testcats))
  91. assert(inv_c[0]=='certificering')
  92. assert(inv_c[1]=='cpu')
  93. assert(inv_c[2]=='sikkerhed')
  94. assert((len(inv_c)>=168 and inv_c[168]=='sla') or (DBG and inv_c[3]=='sla'))
  95. assert(c['certificering']==0)
  96. assert(c['cpu']==1);
  97. assert(c['sikkerhed']==2);
  98. assert(c['sla']==168 or (DBG and c['sla']==3));
  99. assert(len(c)==169 or (DBG and len(c)==4))
  100.  
  101. def mk_singlecat(y_train,cat):
  102. y = []
  103. n = c[cat];
  104.  
  105. for i in y_train:
  106. f=False
  107. for j in i:
  108. if j==n:
  109. f=True
  110. if f:
  111. y.append(1)
  112. else:
  113. y.append(0)
  114. return y
  115.  
  116. currcat='sundheds-it'
  117. print(f"current single category='{currcat}' maps to category index {c[currcat]}")
  118. y_train1 = mk_singlecat(y_train,currcat)
  119. y_test1 = mk_singlecat(y_test,currcat)
  120.  
  121. print(f" '{currcat}' has {sum(y_train1)} train- and {sum(y_test1)} test-entries")
  122.  
  123. assert(len(y_train1)==len(y_train))
  124. assert(len(y_test1)==len(y_test))
  125. assert(len(y_train1)==len(traincats))
  126. assert(len(y_test1)==len(testcats))
  127.  
  128. from sklearn.feature_extraction.text import CountVectorizer
  129. from sklearn.feature_extraction.text import TfidfTransformer
  130.  
  131. count_vect = CountVectorizer() #CountVectorizer(analyzer='word', binary=False, decode_error='strict',dtype='numpy.int64', encoding='utf-8', input='content', lowercase=True, max_df=1.0, max_features=None, min_df=1,ngram_range=(1, 1), preprocessor=None, stop_words=None, strip_accents=None, token_pattern='(?u)\b\w\w+\b', tokenizer=None, vocabulary=None)
  132.  
  133. X_train = count_vect.fit_transform(traintxt).todense()
  134. assert(len(y_train1)==X_train.shape[0])
  135.  
  136. X_test = count_vect.transform(testtxt).todense()
  137. assert(len(y_test1)==X_test.shape[0])
  138.  
  139. print(f"lookup a single word: 'ifølge' => {count_vect.vocabulary_['ifølge']}\n")
  140.  
  141. tfidf_transformer = TfidfTransformer()
  142. X_train_tfidf = tfidf_transformer.fit_transform(X_train).todense()
  143. X_test_tfidf = tfidf_transformer.transform(X_test).todense()
  144.  
  145. print(traintxt[0])
  146. print("\n")
  147.  
  148. inv_X = count_vect.inverse_transform(X_train)
  149. print(inv_X[0])
  150. print("\n")
  151.  
  152. print(X_train_tfidf.shape)
  153. print(X_test_tfidf.shape)
  154.  
  155. assert(X_train_tfidf.shape==X_train.shape)
  156. assert(X_test_tfidf.shape ==X_test.shape)
  157. assert(X_train_tfidf.shape[0]==len(traintxt))
  158. assert(X_test_tfidf.shape[0] ==len(testtxt))
  159.  
  160. from skmultilearn.problem_transform import BinaryRelevance # pip install scikit-multilearn
  161. from sklearn.naive_bayes import GaussianNB
  162. from sklearn.ensemble import RandomForestClassifier
  163. from sklearn.tree import DecisionTreeRegressor
  164. from sklearn.svm import SVC
  165. from sklearn.metrics import confusion_matrix
  166. from sklearn import metrics
  167.  
  168. #clf = BinaryRelevance(GaussianNB(),require_dense=[True,False])
  169. #clf = RandomForestClassifier()
  170. #clf = DecisionTreeRegressor()
  171. clf = GaussianNB()
  172.  
  173. clf.fit(X_train_tfidf, y_train1)
  174.  
  175. print("DONE")
  176.  
  177. from sklearn.metrics import accuracy_score, f1_score, precision_score, recall_score, classification_report, confusion_matrix
  178.  
  179. print("some dummy test data...")
  180. T = count_vect.transform(['hello world','cpu','sdf sdf hello','text','teraflops fremtiden at','at teraflops','ifølge']).todense()
  181. p = clf.predict(T)
  182. print(p)
  183. print(T)
  184. print("\n")
  185.  
  186. ptrain = clf.predict(X_train_tfidf)
  187. ptest = clf.predict(X_test_tfidf)
  188.  
  189. def ShowResult(y, p, label, plotcfm=False):
  190. print(f" Results for {label}")
  191. print(f" found categories={sum(p)}, expected categories={sum(y)}")
  192.  
  193. # Thus in binary classification, the count of true negatives is
  194. #:math:<code>C_{0,0}</code>, false negatives is :math:<code>C_{1,0}</code>, true positives is
  195. #:math:<code>C_{1,1}</code> and false positives is :math:<code>C_{0,1}</code>.
  196. # cfm = [[TN(0,0) FP(0,1)]
  197. # [FN(1,0) TP(1,1)]]
  198. cfm = metrics.confusion_matrix(y, p)
  199.  
  200. if plotcfm:
  201. imshow(cfm)
  202. f = figure()
  203.  
  204. to = sum(cfm)
  205. pr = metrics.precision_score(y, p) # tp / (tp + fp)
  206. rc = metrics.recall_score(y, p) # tp / (tp + fn)
  207. ac = np.trace(cfm) / cfm.sum() # (TP+TN)/(TP+TN+FP+FN)
  208. F1 = metrics.f1_score(y, p) # F1 = 2 * (precision * recall) / (precision + recall)
  209.  
  210. r=3
  211. print(f" total={to}, precision={round(pr,r)}, recall={round(rc,r)}, accuracy={round(ac,r)}, F1={round(F1,r)}")
  212. print(" confusion matrix=")
  213. print(" "+re.sub('\n', '\n ', np.array_str(cfm)))
  214.  
  215. return F1
  216.  
  217.  
  218. # In[11]:
  219.  
  220.  
  221. #from matplotlib.colors import ListedColormap
  222. #from sklearn.model_selection import train_test_split
  223. #from sklearn.preprocessing import StandardScaler
  224. #from sklearn.datasets import make_moons, make_circles, make_classification
  225. from sklearn.neural_network import MLPClassifier
  226. from sklearn.neighbors import KNeighborsClassifier
  227. from sklearn.svm import SVC
  228. from sklearn.gaussian_process import GaussianProcessClassifier
  229. from sklearn.gaussian_process.kernels import RBF
  230. from sklearn.tree import DecisionTreeClassifier
  231. from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier
  232. from sklearn.naive_bayes import GaussianNB
  233.  
  234. names = [
  235. "Naive Bayes",
  236. "Nearest Neighbors",
  237. "Linear SVM",
  238. "RBF SVM",
  239. "Gaussian Process",
  240. "Decision Tree",
  241. "Random Forest",
  242. "Neural Net",
  243. "AdaBoost"
  244. ]
  245.  
  246. classifiers = [
  247. GaussianNB(),
  248. KNeighborsClassi
  249. fier(3),
  250. SVC(kernel="linear", C=0.025),
  251. SVC(gamma=2, C=1),
  252. GaussianProcessClassifier(1.0 * RBF(1.0)),
  253. DecisionTreeClassifier(max_depth=5),
  254. RandomForestClassifier(max_depth=5, n_estimators=10, max_features=1),
  255. MLPClassifier(alpha=1),
  256. AdaBoostClassifier()]
  257.  
  258. for clf,name in zip(classifiers,names):
  259. print(f"Trying model '{name}'...")
  260. clf.fit(X_train_tfidf, y_train1)
  261.  
  262. ptrain = clf.predict(X_train_tfidf)
  263. ptest = clf.predict(X_test_tfidf)
  264.  
  265. ShowResult(y_train1,ptrain,"train")
  266. ShowResult(y_test1,ptest,"test")

26. marts 2018 kl. 16:20
BoostCon'07

Er der nogle af jer der har været på Boost konference i Apspen (som jo også er et fint skisted)?

mvh
.carsten

(BoostCon'07 May 14-18 2007 - Aspen, Colorado
http://www.boostcon.com/home)

27. september 2016 kl. 17:20
Introduktionsrunde :: Goddag i C++ (og Boost) gruppen

Goddag *,

For at komme i gang med en seriøs gruppe foreslår jeg en introduktionsrunde: fortæl kort om jer selv, hvorfor i har valgt denne gruppe og hvad i kunne tænke jer at bidrage med til gruppen.

Husk på at jo mere i bidrager og udveksler information, jo bedre bliver gruppen og dermed også DIT udbytte!

Forlag og ideer er velkomne, f.eks. kunne man holde et par "tema" dage om et eller andet programmerings emne. Nyheder i finder, kan man addere til Nyhedslinket.

Jeg vil starte introduktionen, der så køre videre i rækkefølgen af medlemmer der i vilkårlig rækkefølger kan tage Intro-depechen op...

Om Carsten Frigaard: Senior softwareudvikler, C++, STL og boost guru. Læser PT astronomi ved Århus Universitet. Jeg har arbejdet i en lang række IT virksomheder, der alle har haft en kedelig tendens til at gå konkurs. Ellers kan jeg lide at programmere hvad som helst, fra lommeregnere til Supercomputere, men har klart præference for C++ som et voksent, multiparadigme sprog, der lader mig gøre præcist hvad jeg vil (på godt og ondt). I øjeblikket arbejder jeg på Supercomputer software, der simulere universets struktur på stor skala – naturligvis skrevet i C++ og publiceret som opensource (frigaard.homelinux.org).

Ellers er der bare at sige Velkommen++; & videre med depechen....

Mvh og Godspeed,
.carsten

27. september 2016 kl. 17:20
Estimere? mig?

Det er symptomatisk for it-industrien at anvende en eller anden udvandet 'analogi-fortælling', her en vandre tur (med eller uden BS), i stedet for at diskutere de reelle faktorer. Det kan være fordi software er svært at lugte, røre og visualisere.

Det ville hjælpe konkretisere "rigtige teknikker" i stedet for at væve rundt i abstrakte gåture...også i forbindelse med estimering.

.carsten

9. september 2014 kl. 08:52
Sådan sikrer du dig mod kritisk Java-hul

Noget tyder på at Iced-tea java'en ikke er ramt af denne sårbarhed - se https://bugzilla.redhat.com/show_bug.cgi?id=852051

.carsten

11. januar 2013 kl. 13:37
13 Watt for en fin lille fit-PC3 #WIN

Det årlige elforbrug løber op i ca. 193 kr/året for 13.2 W ved en kWh pris på 1.67 kr/kWh - som jeg kan se du regner med ved, måske skulle du regne med 2 kr/kWh istedet?

Mvh Carsten

2. februar 2012 kl. 09:13
250 halve GFLOPS

GPU'er har været prøvet og det var ingen success.

På grund af...

  1. den tyndt populerede matrice give en irregulær algorithme, som er svære at bruge GPU'er på?

  2. GPU'erne har ikke båndbredde nok på PCI bussen?

  3. Double præcision kan bare ikke kører hurtigt nok på GPU'en, eller SFU har båndbredde problemer?

  4. Det crasher bare hele tiden på GPU'erne?

  5. Det er fuldstændingt umuligt at anvende GPU compiler toolchainen midt i vores kode?

  6. Noget helt andet?

Eller måske en kombination af 1-6...? Jeg vil gætte på 1 og 4.

5. december 2011 kl. 11:22
250 halve GFLOPS

Hvis du havde haft problemer med båndbredde (f.eks. ikke anvendt multicast) kunne en alternativ løsning være brug af en enkelt PC med en eller flere GPU'er.

Et sæt af grafikkort kan leverer i omegnen af de 250 GFlops, dog med alle mulige forbehold (problemer med dobbelt præcision floats, properitær library, kode virker kun på GPU'er, GPU kode der er svær at debugge og optimere, osv.).

Et interessant aspekt er dog effektiviteten af GPU'erne med hensyn på effektforbruget (GFLOPS/watt), hvor en enkelt maskine med et par GPU'er er mere effektiv en en lille hær af PC-noder.

5. december 2011 kl. 10:02
Bekæmp den musikalske fattigdom

Jeg benytter GNUpod til min iPod - har konverteret hele min CD samling til FLAC format og kan så konvertere 'on-the-fly' fra FLAC til et format iPod'en kan læse.

Det gør spørgsmålet om dårlig encodning eller for ringe MP3 kvalitet ligegyldigt.

GNUPod har jeg skrevet om, så den kan håndtere UTF-8, og automatisk går ud og henter cover billeder på diverse sites (!): det øger helt klart brugeroplevelsen af have noget så simpelt som en lille thumbnail af pladen på iPod'en, men det er naturligvis langt fra et syret LP-cover's tekst og billede univers. Men så kan man jo istedet checke kunstnere og diskografier ud på wikipedia eller lastFM...

Nu har jeg kun et problem på iPod'en: jeg kan aldrig finde den der plade, den med en forsanger med en udsædvanlig dårlig stemme...lad mig se...A?, B?, .. Cohen', måske, nej vent Waters?, næh, Young?

.c

1. marts 2011 kl. 14:52
SerieNr. 000001

Jeg fandt en delvis fungerende USB/HID implementering som Alexander Enzmann havde skrevet på basis af MicroChips kode, den har jeg hovedrenoveret, renset for woodoo og generaliseret.

Jeps, "Xander" USB versionen kan virke med PIC's, det er også den, jeg har fundet. Den er rodet, men kan virke. Jeg fik dog aldrig USB low-speed til at virke...

.c

26. februar 2010 kl. 12:56
SerieNr. 000001

Og hvad bruger du som USB driver på PIC'en? Vel ikke Microchips USB pakke?

Jeg fandt en opensource pakke for nogle måneder siden som jeg tilpassede en PIC14K50 under SDCC.

Vi en rettet og buxfixet version liggende til download på vores hjemmeside (dog er jeg ikke selv istand til at finde den, suk!)

.carsten

26. februar 2010 kl. 10:21
Nu er 64-bit Windows blevet standard

Mmmm, tilsyneladende har Windows også en grænse på swap-fil størrelsen på 4GByte...

.c

14. august 2009 kl. 09:21