samedi 31 octobre 2009

Mount & Blade - Rebelle

Cette enflure de King Harlaus ayant refusé de me donner un château que je venais de conquérir, je lui ai dit d'aller se mettre son royaume là où le soleil de brille pas, et je suis passé rebelle.

La déception, c'est que sans l'utilisation des mods, la partie devient assez injouable. En effet, il devient impossible d'aller un tout petit peu loin sans se retrouver avec la moitié du monde attaquant nos châteaux. L'on se retrouve donc principalement à crapahuter entre ses différents fiefs, à recruter dans les villages voisins, chasser les armées belliqueuses, et se battre contre les gardes pour entrer dans les villes et y vendre sa camelote.

Avec du temps, j'imagine qu'il est possible de correctement remplir ses châteaux, et donc espérer les voir résister à de plus grands assauts, mais il faut alors payer sa gigantesque armée, ce qui est loin d'être évident.

Peut-être vais-je essayer le mod de "gestion de royaume", alors.

samedi 24 octobre 2009

Cellules sélectionnées d'une wxGrid

J'ai bien cru péter un plomb! J'ai une wxGrid, et je veux savoir quelles sont les cellules sélectionnées. Quelque soit la méthode que j'utilise (GetSelectionBlockTopLeft / GetSelectionBlockBottomRight, GetSelectedCells, GetSelectedRows, GetSelectedCols), il m'en manquait toujours.

Tombant finalement sur le rapport de bug de chez wxWidgets, l'explication est arrivée: pour des raisons d'optimisation mémoire, différentes structures seront maintenues en fonction de la manière dont on sélectionne. Par exemple, lorsque l'on sélectionne une colonne entière, la grille gardera juste l'index de la colonne, lorsque l'on sélectionne un bloc, la grille sauvera le coin en haut à gauche et le coin en bas à droite, etc. Ce qui veux dire en fait qu'il faut utiliser les 4 méthodes pour trouver l'ensemble des sélections!

Cela donne quelque chose d'un peu comme ça:


std::set<std::pair<int, int> > getGridSelection(wxGrid & grid)
{
std::set<std::pair<int, int> > selection;

wxGridCellCoordsArray topLeft = grid.GetSelectionBlockTopLeft();
wxGridCellCoordsArray bottomRight = grid.GetSelectionBlockBottomRight();
for(size_t i = 0; i < std::min(topLeft.GetCount(), bottomRight.GetCount()); i++)
{
for(int row = topLeft.Item(i).GetRow(); row <= bottomRight.Item(i).GetRow(); row++)
{
for(int col = topLeft.Item(i).GetCol(); col <= bottomRight.Item(i).GetCol(); col++)
{
selection.insert(std::make_pair(row, col));
}
}
}

wxGridCellCoordsArray cellSelection = grid.GetSelectedCells();
for(size_t i = 0; i < cellSelection.GetCount(); i++)
{
selection.insert(std::make_pair(cellSelection.Item(i).GetRow(), cellSelection.Item(i).GetCol()));
}

wxArrayInt selectedRows = grid.GetSelectedRows();
for(size_t i = 0; i < selectedRows.GetCount(); i++)
{
for(int col = 0; col < grid.GetNumberCols(); col++)
{
selection.insert(std::make_pair(selectedRows.Item(i), col));
}
}

wxArrayInt selectedCols = grid.GetSelectedCols();
for(size_t i = 0; i < selectedCols.GetCount(); i++)
{
for(int row = 0; row < grid.GetNumberRows(); row++)
{
selection.insert(std::make_pair(row, selectedCols.Item(i)));
}
}

return selection;
}

mardi 20 octobre 2009

De retour sur le trading

Ma phase corporate étant passée, je laisse Médoc de côté (en tant que développeur, car en tant qu'utilisateur, je continue à faire chauffer le chameau!), et je retourne à mon module de trading. J'espère bientôt pouvoir sortir une démo, même si le problème de l'hébergement va se poser de plus en plus.

dimanche 11 octobre 2009

Médoc - Stable

Médoc est fini! Enfin, c'est un bien grand mot, mais disons qu'il est maintenant à un stade où il est utile pour moi, ce qui n'est déjà pas si mal. En dehors de fonctions de recherche plus avancées au niveau de l'interface web, qui seront aisées à ajouter, la partie la moins jolie est sans doute la petite application pour enregistrer le document dans la base. Puisque l'ensemble du projet est maintenant hébergé par OcamlCore, j'ai voulu écrire l'interface en utilisant Lablgtk, qui ne se prête pas vraiment à l'écriture d'une petite appli rapide, qui n'est qu'en fait qu'un front-end pour les programmes scanimage et convert, qui font le gros du boulot. Ce n'est donc ni très beau, ni très robuste.



L'interface web, elle, est utilisable, efficace (du moins pour un nombre réduit d'utilisateurs simultanés), et le système de tag fonctionne gentiment. J'ajoute presque chaque courrier administratif reçu au système, maintenant. On verra à l'usage!

jeudi 8 octobre 2009

Ping

Voulez vous tout savoir sur Ping?