Pytania i odpowiedzi

Archive

Postanowiłem zamieszczać tutaj rozwiązania problemów z którymi spotykam się na codzień z komputerami.

Spis treści

[edytuj] gcc: Błąd: "C++ compiler cannot create executables"

Jeżeli wyskoczył podczas konfiguracji jakiegoś programu (./configure) oznacza to prawdopodobnie, że nie mamy zainstalowanego g++ lub libc-dev, mamy jednak gcc. Wystarczy doinstalować g++ oraz libc-dev i powinno działać.

[edytuj] MySQL: Illegal mix of collation ...

Często pojawia się po odtworzeniu bazy danych z kopii zapasowej zwłaszcza na innym serwerze. Wtedy trzeba się upewnić że domyślne kodowanie bazy danych jest takie samo jak na poprzednim serwerze. Jeżeli nie można zmienić domyślnego kodowania, można zaraz po połączeniu z bazą wykonać polecenie:

SET NAMES odpowiednie_kodowanie

Ponadto może być problem z kodowaniem kolumn tabel. Je także należy zmienić na poprawne przykładowo za pomocą phpMyAdmin'a.

[edytuj] C++: Konwersja do string (int itd)

#include <sstream>
 
template <class T>
inline std::string to_string (const T& t) {
  std::stringstream ss;
  ss << t;
  return ss.str();
}

[edytuj] PHP i Javascript - urlencode i escape

Teoretycznie urlencode w PHP powinno robić to samo co escape w Javascript. Obie funkcje kodują ciąg znaków aby można było go użyć w adresach url, niestety robią to na różne sposoby. Podana poniżej funkcja w Javascript koduje tekst zgodnie z oczekiwaniami PHP:

function URLEncode (clearString) {
  var output = '';
  var x = 0;
  clearString = clearString.toString();
  var regex = /(^[a-zA-Z0-9_.]*)/;
  while (x < clearString.length) {
    var match = regex.exec(clearString.substr(x));
    if (match != null && match.length > 1 && match[1] != '') {
    	output += match[1];
      x += match[1].length;
    } else {
      if (clearString[x] == ' ')
        output += '+';
      else {
        var charCode = clearString.charCodeAt(x);
        var hexVal = charCode.toString(16);
        output += '%' + ( hexVal.length < 2 ? '0' : '' ) + hexVal.toUpperCase();
      }
      x++;
    }
  }
  return output;
}

A ta dekoduje:

function URLDecode (encodedString) {
  var output = encodedString;
  var binVal, thisString;
  var myregexp = /(%[^%]{2})/;
  while ((match = myregexp.exec(output)) != null
             && match.length > 1
             && match[1] != '') {
    binVal = parseInt(match[1].substr(1),16);
    thisString = String.fromCharCode(binVal);
    output = output.replace(match[1], thisString);
  }
  return output;
}

[edytuj] Logowanie na serwer ftp z niektórych maszyn trwa bardzo długo

Jeżeli logowanie na serwer proftpd działający na linuxie trwa bardzo długo mimo, że kopiowanie plików i inne działania wykonywane są szybko, problem może być w konfiguracji serwera. Dodanie linii:

IdentLookups off
UseReverseDNS off

Powinno rozwiązać problem.

[edytuj] Jak sprawdzić wynik działania preprocesora w C i C++

Wyświetlenie wyniku działania preprocesora umożliwia opcja -E np:

g++ -E prog.cpp

Wynik jest wyrzucany na standardowe wyjście. Dyrektywy #include także są interpretowane, zatem możemy dostać sporo danych.

[edytuj] Kompilacja jądra w Debianie i jego rozmiar

Okazuje się że po jądro skompilowane w dystrubucjach opartych na debianie za pomocą make-kpkg jest znacznie większe od gotowego mimo użycia tej samej konfiguracji. Spowodowane jest to opcją która dodaje informacje debagujące do jądra. Opcja znajduje się w menu Kernel Hacking i należy ją odznaczyć, a następnie ponownie skompilować i zainstalować jądro.

[edytuj] Kompilacja programów w Assemblerze pod linuxem

Jeżeli program znajduje sie w pliku out.as można go skompilować w następujący sposób:

as out.as --gstabs -o prog.o && ld -dynamic-linker /lib/ld-linux.so.2 -o prog prog.o -lc

Gotowy program będzie zapisany do pliku prog

[edytuj] TrueCrypt i Ext2 w windows

Wiele osób spotkało się z problemem instalacji partycji Ext2/3 oraz partycji Truecrypt pod Windows. Próba instalacji obu partycji kończyła się BSOD (niebieskim ekranem). Rozwiązaniem problemu jest zainstalowanie najnowszej wersji Truecrypt (>=6.1).

Strony pokrewne