Ein Tweet (Twitter-Eintrag) hat mich auf diese Idee gebracht. Da hat jemand seine alte Platte aus dem Keller geholt und mal drauf geschaut was da so alles drauf war. Ich habe heute mal eine alte Box mit CD’s aufgemacht aus vergangenen Tagen. Dabei ist mir eine Projekt CD ins Auge gesprungen die ich mir nochmal angeschaut habe.
Ich fand das so Interessant das ich einfach mal einen Aufruf starten möchte: Postet doch mal Euer Zeug was Ihr so vor 10 oder mehr Jahren gemacht habt, ein Stück Code oder einfach nur einen Screenshot.
Ich selbst habe mich für eine C++ Header Datei entschieden. Damals im Projekt haben wir oft VB6 Komponenten einbinden müssen und es gab meist einen generischen Parameter: SafeArrays. Jeder der schonmal mit C++ SafeArrays implementiert hat, weiß was das für ein Käse ist. Die entwickelte Hilfsklasse machte es einfacher mit den Dingern umzugehen. Hier ist der Code (nur der Header) aus dem Jahre 99:
////////////////////////////////////////////////////////////////////////////////// ComDefEx.h - Erweiterung zu ComDef.h und ComUtil.h#ifndef _COMDEFEX_H#define _COMDEFEX_H#ifndef _COMDEFEX_API#define _COMDEFEX_API#endif#include <ComDef.h>////////////////////////////////////////////////////////////////////////////////// Exception handling#define _COM_RAISE_ERROR( __hres ) \{ \ HRESULT hres = __hres; \ \ if( FAILED( hres ) ) \ { \ _com_raise_error( hres ); \ } \}#define _COM_RAISE_UNEXPECTED() _com_raise_error( E_UNEXPECTED )#define _COM_RAISE_OUTOFMEMORY() _com_raise_error( E_OUTOFMEMORY )#define _COM_RAISE_INVALIDARG() _com_raise_error( E_INVALIDARG )////////////////////////////////////////////////////////////////////////////////// _guid_t Declarationclass _COMDEFEX_API _guid_t : public GUID{ public: // Construction/Destruction _guid_t(); _guid_t( const GUID& guid ); _guid_t( LPCSTR pszGuid ); _guid_t( BSTR bstrGuid ); _guid_t( const _bstr_t& bstrGuid ); _guid_t( VARIANT vGuid ); _guid_t( const _variant_t& vGuid ); // Operators _guid_t& operator =( const GUID& guid ); _guid_t& operator =( LPCSTR pszGuid ); _guid_t& operator =( BSTR bstrGuid ); _guid_t& operator =( const _bstr_t& bstrGuid ); _guid_t& operator =( VARIANT vGuid ); _guid_t& operator =( const _variant_t& vGuid ); operator _bstr_t() const; // without braces operator _variant_t() const; // BSTR without braces // General Operations void GetAsString( _bstr_t& bstrGuid, bool bIncBraces = FALSE ) const; void GetAsString( _variant_t& vGuid, bool bIncBraces = FALSE ) const;};////////////////////////////////////////////////////////////////////////////////// _safearray_elm/_safearray_t Declarationtemplate< class T >class _safearray_t;template< class T >class _safearray_elm{ // Friends friend class _safearray_t< T >; // Construction/Destruction protected: _safearray_elm( SAFEARRAY* psa, int ix1 ); _safearray_elm( SAFEARRAY* psa, int ix1, int ix2 ); _safearray_elm( SAFEARRAY* psa, int ix1, int ix2, int ix3 ); _safearray_elm( SAFEARRAY* psa, int ix1, int ix2, int ix3, int ix4 ); // Operators public: _safearray_elm& operator =( const T& src ); operator T() const; // Attributes protected: SAFEARRAY* m_psa; long m_rgnIndexPath[ 4 ];};template< class T >class _safearray_t{ // Construction/Destruction public: _safearray_t(); _safearray_t( const _safearray_t& src ); _safearray_t( const SAFEARRAY* psa ); _safearray_t( SAFEARRAY* psa, bool bCopy ); _safearray_t( const VARIANT& src ); _safearray_t( VARIANT& src, bool bCopy ); ~_safearray_t(); // Operators public: _safearray_t& operator =( const _safearray_t& src ); _safearray_t& operator =( const SAFEARRAY* psa ); _safearray_t& operator =( const VARIANT& src ); const _safearray_elm< T > operator ()( int ) const; _safearray_elm< T > operator ()( int ); const _safearray_elm< T > operator ()( int, int ) const; _safearray_elm< T > operator ()( int, int ); const _safearray_elm< T > operator ()( int, int, int ) const; _safearray_elm< T > operator ()( int, int, int ); const _safearray_elm< T > operator ()( int, int, int, int ) const; _safearray_elm< T > operator ()( int, int, int, int ); operator const SAFEARRAY*() const; operator SAFEARRAY*(); operator VARIANT() const; // General Operations public: void Attach( SAFEARRAY* psa ); void Attach( VARIANT& src ); SAFEARRAY* Detach(); _variant_t DetachVariant(); void Create( UINT nSize1 ); void Create( UINT nSize1, UINT nSize2 ); void Create( UINT nSize1, UINT nSize2, UINT nSize3 ); void Create( UINT nSize1, UINT nSize2, UINT nSize3, UINT nSize4 ); SAFEARRAY* Copy() const; int GetLowerBound( UINT nDim = 1 ) const; int GetUpperBound( UINT nDim = 1 ) const; int GetSize( UINT nDim = 1 ) const; bool IsEmpty() const; // Attributes protected: SAFEARRAY* m_psa;};////////////////////////////////////////////////////////////////////////////////// Miscellaneousextern _variant_t vtEmpty;extern GUID guidEmpty;struct _SafeLPCSTR{ inline LPCSTR operator ,( LPCSTR psz ) { return psz ? psz : ""; }};#define SafeLPCSTR( p ) ( _SafeLPCSTR(), ( LPCSTR ) p )#include "ComDefEx.inl"#endif // !_COMDEFEX_H
Würde mich freuen wenn noch jemand diese Idee Lustig findet und einfach mal über sein Zeug bloggt was er damals so gemacht hat.
Tolle Idee! Hat Spaß gemacht... :)
http://t-roschinsky.spaces.live.com/blog/cns!8A6CC03A17F8ABCD!878.entry
Hatte Glück, die alten Disketten waren nur noch schwer lesbar ... und einen Rechner mit Disk-LW zu finden war auch eine Herausforderung :-)
Ein Stück Pascal Code aus dem Jahr 1996:
http://www.sw-consultant.de/post/2010/03/06/Was-hast-Du-vor-uber-zehn-Jahren-programmiert.aspx
Hi
ein schönes Thema.
Vor ungefähr 10 Jahren habe meine erste Applikationen in ASP mit Datenbank Access für Webanwendungen programmiert. Meine erste wirklich große Herausforderung war ein Funktion, wo ich mit Hilfe von Regulären Ausdrücken Textmuster finde und diese dann durch html-Code ersetzt habe. Ein Nachfolger dieser Funktion läuft heute immer noch. :)
Ja, ja ich weiß, das ist Kinderkram, aber vor 10 Jahren habe ich erst angefangen.
Hier ein Screenshot
http://www.pts.eu/fo/frueher.gif
Es tat mal wieder gut in Erinnerungen zu versinken. Hier sind meine: http://thomas.mentzel.name/2010/03/05/was-hast-du-vor-uber-
zehn-jahren-programmiert/
Gruß, Thomas
Nette Idee ...
...manche Mitarbeiter mussten zu Abrechnungszeiten Zig-Auswertungen durchführen was Tage gedauert hat und so manche Sachbearbeiterin dem Wahnsinn nahe gebracht hat: „I brauch die Rindvichauswertung bis aum Obend sunst wea i Waunsinnig!“. Damals trat Rinderwahnsinn und Beamtenwahnsinn Pärchenweise auf.
Um der Verbreitung des Beamtenwahnsinns Einhalt zu gebieten, habe ich den Batch-Auswertungs-Druck erfunden und so zu sagen als Steckenpferd nebenbei entwickelt...
http://qwhatelse.blogspot.com/2010/03/q150-was-hast-du-vor-10-jahren.html